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

时间:2011-01-18 12:50:59

标签: opengl glsl

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

 uniform vec3 color;
 uniform float zoom;
 uniform int max;
 void main() {
    ...
 }

glGetActiveUniformARB(程序,索引,maxLength,* length,* size,* type,* name)似乎是正确的API函数,但我不知道如何确定 index 来自变量名称。 glGetUniformLocationARB返回统一变量的 location ,它似乎与 index 不一样。

2 个答案:

答案 0 :(得分:3)

嗯,API类型假设如果您知道制服的名称,您也知道类型(这两个东西在代码中彼此相邻写入)所以它不允许简单访问按名称输入。

也就是说,您可以使用glGetActiveUniformARB迭代所有活动的制服,以找到您感兴趣的制服。另请注意,如果统一实际上是活动的(即GLSL编译器认为它对最终计算有用),这将仅返回有效数据。

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

答案 1 :(得分:2)

来自glGetActiveUniform man page

The number of active uniform variables can be obtained by calling glGetProgram
with the value GL_ACTIVE_UNIFORMS. A value of 0 for index selects the first
active uniform variable. Permissible values for index range from 0 to the
number of active uniform variables minus 1.