Рендеринг текстурированных точечных спрайтов с использованием 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() вызов.

Другие вопросы по тегам