获得GLSL统一的数组长度

时间:2013-09-27 16:07:41

标签: c++ arrays opengl glsl

所以我有这个问题

glGetActiveUniformsiv​(<program>, <ucount>, <indicesptr>, GL_UNIFORM_SIZE, <retptr>)
glGetActiveUniform(<program>, ...)

即使我在着色器中声明了一个长度为8的数组,返回总是只有1作为统一的数组长度。此外,我还可以访问着色器中的数组内容,因为这些功能可以正常报告制服。

我认为我的驱动程序(我有ATI Radeon 5750 HD和最近的驱动程序)违反了GL 3.3规范:

"If pname is UNIFORM_SIZE, then an array identifying the size of the uniforms
specified by the corresponding array of uniformIndices is returned. The sizes
returned  are in units of the type returned by a query of UNIFORM_TYPE. For active
uniforms that are arrays, the size is the number of active elements in the array; for
all other uniforms, the size is one."

到目前为止我是对的还是你的驱动程序没有报告1作为数组长度?如果制服是否在阻挡并不重要。我仍然得到1.我唯一的选择是解析统一名称以获得最大数组索引。这将是复杂的,因为它必须支持GLSL中的所有阵列阶段。 我需要C ++程序端的数组大小来为着色器初始化足够的资源。

顺便说一下......我可以看到“所有(其他)制服,大小为一”的阶段可能会误导一些人......

0 个答案:

没有答案