了解依赖于实现的限制

时间:2013-03-04 12:02:08

标签: glsl vertex-shader

我的问题接近What is the actual number of vertex uniform components for GLSL shader on ATI graphics card?

在他的情况下,

  • 他的GL_MAX_VERTEX_UNIFORM_COMPONENTS为4096
  • 他正在使用mat4 []数组
  • 低于64 mat4,着色器很好,上面,它不是

在amd卡上写on the wiki,为了获得正确的值,它应该除以4,它给了他4096/4 = 1024个浮点数。

由于mat4是16个浮点数,然后他将它除以16,这给了他1024/16 = 64 mat4。

所以限制与他的使用是一致的。


但这不是我的,这就是我所拥有的:

  • GL_MAX_VERTEX_UNIFORM_COMPONENTS:16384
  • vec3数组

我正在使用向量来转换多维数据集的实例,因此向量的数量等于传递给glDrawArraysInstanced()的实例数。 代码实际上只是gl_Position = vp * translateVec[gl_InstaceID] * pos(vp是一个独特的ViewProjection矩阵)。 如果少于256个向量,则正确翻译多维数据集。 在256个向量之上,前256个立方体是可以的,但所有其他不是,它们位于(0,0,0)点,看起来像向量是(0,0,0)。

我有6490米amd,所以喜欢他,我应该按照4步进行划分 16384/4 = 4096浮标

维基说,由于矢量架构,“你应该假设每个单独的制服占用4个组件”。这意味着vec3将使用4个组件而不是3个。

所以4096/4 = 1024 vec3

如你所见,这与我的观察并不一致。

我缺少什么? 还有GL_MAX_UNIFORM_VECTORS(4096对我来说)呢?

备注:我使用glUniform3fv()上传了vec3数组,并使用uniform vec3[255]核心配置文件4.2,win7,13.1催化剂声明了数组。

0 个答案:

没有答案