You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:08:06