使用GLFW渲染纹理点精灵

时间:2013-01-30 14:06:29

标签: opengl shader point-sprites

我正在渲染一堆我想使用点精灵来应用纹理的点。要加载我的纹理,我正在使用GLFW。我按照OpenGL超级圣经章节中的说明进行操作,但是当我尝试在片段着色器中应用纹理时,它不起作用。

以下是我的一些代码片段:

//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);"
"}"

在我的initGL方法中启用了Point Sprite模式。纹理没有应用于这些点的原因是什么?

编辑:我插入了一个if语句来查看对glfwLoadTexture2D的调用是否正常工作,实际上并非如此。什么可能导致失败?我尝试使用相对和真实路径作为参数,但仍然没有变化。我也尝试使用不同的.tga图像。任何人,仍然没有弄清楚为什么它不起作用?

编辑2:freeglut和glfw不能一起工作吗?

1 个答案:

答案 0 :(得分:1)

glActiveTexture(GL_TEXTURE0 + 0)来电之前尝试投掷glUniform1i()