Рендеринг текстурированных точечных спрайтов с использованием GLFW
В настоящее время я отрисовываю кучу точек, к которым я хотел бы применить текстуру, используя точечные спрайты. Для загрузки моей текстуры я использую GLFW. Я следовал инструкциям главы OpenGL Super Bible по этому вопросу, но когда я пытаюсь применить текстуру в своем фрагментном шейдере, это не работает.
Вот некоторые из моих фрагментов кода:
//Variables
GLuint starTBO;
GLuint location_texture = 0;
// Set location (in main function)
glUseProgram(shader_program2);
location_texture = glGetUniformLocation(shader_program2, "sprite_texture");
glUseProgram(0);
// Set Texture (in main function)
glGenTextures(1, &starTBO);
glBindTexture(GL_TEXTURE_2D, starTBO);
if(glfwLoadTexture2D("stone.tga", GLFW_BUILD_MIPMAPS_BIT))
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
glEnable(GL_TEXTURE_2D);
// in display method
glUseProgram(shader_program2);
glActiveTexture(GL_TEXTURE0 + 0);
glUniform1i(location_texture, 0);
...
// Fragment shader
const GLchar *fragment_shader2 =
"#version 330\n"
"out vec4 out_color;"
""
"uniform sampler2D sprite_texture;"
""
"void main()"
"{"
" out_color = texture(sprite_texture, gl_PointCoord) + vec4(1.0, 0.0, 0.0, 1.0);"
"}"
Режим Point Sprite включен в моем методе initGL. Что может быть причиной того, что текстура не применяется к точкам?
РЕДАКТИРОВАТЬ: я вставил оператор if, чтобы увидеть, работает ли вызов glfwLoadTexture2D правильно, и действительно это не так. Что может привести к сбою? Я попытался использовать относительный и реальный путь в качестве параметра, но все равно без изменений. Я также пытался использовать разные изображения.tga. Кто-нибудь, до сих пор не понял, почему это не сработает?
РЕДАКТИРОВАТЬ 2: Может быть, FreeGlut и GLFW не работают вместе?
1 ответ
Попробуйте бросить в glActiveTexture(GL_TEXTURE0 + 0)
до вашего glUniform1i()
вызов.