如何获取统一变量的数据类型

Fra*_*ger 6 opengl glsl

我试图获取片段着色器中定义的统一变量的类型:

 uniform vec3 color;
 uniform float zoom;
 uniform int max;
 void main() {
    ...
 }
Run Code Online (Sandbox Code Playgroud)

glGetActiveUniformARB(program,index,maxLength,*length,*size,*type,*name)似乎是正确的API函数,但我不知道如何从变量名中确定索引.glGetUniformLocationARB返回统一变量的位置,该变量似乎与索引不同.

Bah*_*bar 4

好吧,API 假设如果您知道制服的名称,那么您也知道类型(这两件事在代码中彼此相邻编写),因此它不允许通过名称简单地访问类型。

也就是说,您可以使用 glGetActiveUniformARB 迭代所有活动制服,以找到您感兴趣的制服。另请注意,只有当制服实际上处于活动状态时,这才会返回有效数据(即 GLSL 编译器认为它对最终计算有用)。

(通常,预期的用法是迭代所有制服,提取名称和类型,然后从名称获取它们的位置,以了解如何在运行时更新它们。而不是相反)。