我刚将我的渲染代码移到我的笔记本电脑上,并遇到与opengl和glsl有关的问题。ATI 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)(如果这是相关的......)。
编辑我已经改变了问题的标题,以更好地反映问题。
我认为可能有关的第二个问题是,当我有12px点精灵渲染(在vert着色器中使用gl_pointsize = 12)时,gl_PointCoord似乎没有在每个精灵中变化... – user1483596
您是否检查过如果程序成功编译并通过glValidateProgram和glGetProgramiv链接?你总是得到-1的单一位置?编译器优化代码并排除未使用的制服是正常的,例如,当您注释行“gl_PointSize = tile_size;'时。您是否尝试在GLSL文件的开头设置版本?另外,检查你的其他机器(驱动程序)是否支持GL_PROGRAM_POINT_SIZE。我有一次和你一样的问题。原来,我只需要将_EXT附加到GL_PROGRAM_POINT_SIZE :)另外,“_VERTEX_”真的是该定义的(需要)部分吗? –
感谢您的建议,程序正在编译和链接正常。我总是得到-1的tile_size统一的位置。其他制服(浮动和sampler2D)和属性绑定罚款。我没有版本号,但没有添加任何更改。我已经尝试glEnable GL_PROGRAM_POINT_SIZE,GL_PR ..._ SIZE_EXT,GL_VERTEX_PROGRAM_POINT_SIZE及其组合,但似乎没有任何工作。 – user1483596