所以我有这个问题
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 ++程序端的数组大小来为着色器初始化足够的资源。
顺便说一下......我可以看到“所有(其他)制服,大小为一”的阶段可能会误导一些人......