Я пытаюсь сделать текст используя opengl.У меня правильно загружены шрифты в текстуру, и у меня правильные координаты UV для каждой буквы.Когда я пытаюсь обновить уже существующий VBO, чтобы он соответствовал тексту, который я хочу нарисовать, ничего не происходит.Я могу нарисовать всю текстуру или один символ, используя другой объект Image, который я создал заранее, поэтому я знаю, что UV и Texture верны.
Я попытался реорганизовать мои вызовы opengl, используя другую систему ввода для моих шейдеров, и в основном скопировал мой рабочий код изображения, но ничего не получалось.Единственное, что у меня есть, это то, что я использую glBufferSubData для обновления VBO с правильными координатами, чтобы нарисовать каждую букву.Я думаю, что это моя проблема, так как я не слишком опытен с этим методом рендеринга opengl.
Init
for (int i = 0; i < LINE_LENGTH; i++) {
addPoint(x, y, 0.0, 1.0);//x0
addPoint(x, y, 0.0, 0.0);//x0
addPoint(x, y, 1.0, 0.0);//x1
addPoint(x, y, 0.0, 1.0);//x0
addPoint(x, y, 1.0, 0.0);//x1
addPoint(x, y, 1.0, 1.0);//x1
}
glGenVertexArrays(1,&vao);
glBindVertexArray(vao);
glGenBuffers(1,&vbo);
glBindBuffer(GL_ARRAY_BUFFER,vbo);
glBufferData(GL_ARRAY_BUFFER,sizeof(float)*LINE_LENGTH*24,&vert[0],GL_DYNAMIC_DRAW);
glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,sizeof(float)*4,(void*)0);
glVertexAttribPointer(1,2,GL_FLOAT,GL_FALSE,sizeof(float)*4,(void*)(sizeof(float)*2));
//Unbind
glBindBuffer(GL_ARRAY_BUFFER,0);
glBindVertexArray(0);
Render
//*LOOP TO UPDATE VALUES NOT SHOWN, TESTED AND IS CORRECT*//
glBindVertexArray(vao);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
Shader* s = Shader::useShader(CompiledWebWindow::TEXT_SHADER);
glm::vec3 color(1,0,0);
s->setVec3("textColor",color);
s->setMat4("projection",*(GLWin::getProjection()));
s->setInt("ourTexture",0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D,textureId);
//Update data
glBindBuffer(GL_ARRAY_BUFFER,vbo);
glBufferSubData(GL_ARRAY_BUFFER,0,sizeof(float)*end*24,&vert[0]);
glDrawArrays(GL_TRIANGLES,0,end*6);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER,0);
glBindVertexArray(0);
Vertex Shader
#version 330 core
layout (location = 0) in vec3 aPos; // <vec2 pos, vec2 tex>
layout (location = 1) in vec2 UV; // <vec2 pos, vec2 tex>
out vec2 TexCoord;
uniform mat4 projection;
void main()
{
gl_Position = projection * vec4(aPos, 1.0);
TexCoord = UV;
}
Фрагментный шейдер
#version 330 core
out vec4 FragColor;
in vec2 TexCoord;
uniform sampler2D ourTexture;
uniform vec3 textColor;
void main()
{
vec4 sampled = vec4(1.0, 1.0, 1.0, texture(ourTexture, TexCoord).r);
FragColor = vec4(textColor, 1.0) * sampled;
}
Я ожидаю, что какой-то текст будет нарисован, но у меня остался пустой экран.