我刚刚将我的渲染代码移动到我的笔记本电脑上,并且遇到了 opengl 和 glsl 的问题。
我有一个这样的顶点着色器(简化):
uniform float tile_size;
void main(void) {
gl_PointSize = tile_size;
// gl_PointSize = 12;
}
和一个片段着色器,它使用 gl_Pointcoord 读取纹理并设置片段颜色。在我的 c++ 程序中,我尝试按如下方式绑定 tile_size:
glEnable(GL_TEXTURE_2D);
glEnable(GL_POINT_SPRITE);
glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
GLint unif_tilesize = glGetUniformLocation(*shader program*, "tile_size");
glUniform1f(unif_tilesize, 12);
(只是为了澄清我已经设置了一个使用 glUseProgram 的程序,显示的只是关于这个特殊制服的片段)
现在像这样设置我得到一个像素点并且发现opengl无法绑定unif_tilesize(它被设置为-1)。
如果我在我的顶点着色器中交换评论,我会得到 12px 点的精灵。
特别是在我的另一台计算机上完全相同的代码工作得很好。我笔记本电脑上的 opengl 版本是 2.1.8304,它运行的是 ATI radeon x1200(参见我桌面上的 nvidia 8800gt)(如果这是相关的......)。
编辑我更改了问题标题以更好地反映问题。