OpenGL中glGetUniformLocation获取a_Color始终返回-1的原因咨询
为什么glGetUniformLocation获取a_Color返回-1?
兄弟,你这是把GLSL里的变量类型搞混啦!看你的着色器代码,a_Color是attribute属性变量,但你却用了专门获取uniform变量位置的glGetUniformLocation函数,这肯定会返回-1的,这俩根本不是一个路子的东西。
我给你掰扯清楚:
attribute变量是用来给顶点着色器传递逐顶点数据的(比如每个顶点的位置、颜色),它属于顶点属性范畴,得用glGetAttribLocation来获取位置。uniform变量是传递全局统一数据的(比如整个绘制都不变的颜色、变换矩阵),这类才用glGetUniformLocation。
所以你要改的很简单,把获取位置的函数换成对应的就行:
private val A_COLOR = "a_Color"; // 用glGetAttribLocation替代glGetUniformLocation int aColorLocation = glGetAttribLocation(program, A_COLOR);
另外再给你提两个额外的检查点,以防还有其他潜在问题:
- 确认你的着色器已经成功编译并且链接到program(program=3)里了。如果链接失败,变量可能无法被正确识别,你可以用
glGetProgramiv检查链接状态,用glGetProgramInfoLog查看具体的错误日志。 - 确保
A_COLOR的字符串和着色器里的变量名完全一致——GLSL的变量名是区分大小写的,多一个少一个下划线都不行。
内容的提问来源于stack exchange,提问作者Ara Hakobyan
相关产品推荐
相关产品推荐

