ATI显卡上GLSL着色器的顶点均匀组件的实际数量是多少?

Ale*_*son 11 opengl shader glsl ati

我正在为带有AMD Radeon HD 6970M 2048 MB显卡的iMac编写GLSL顶点着色器:

GL_MAX_VERTEX_ATTRIBS: 16
GL_MAX_VERTEX_UNIFORM_COMPONENTS: 4096
GL_VERSION: 2.1 ATI-7.12.9
GL_SHADING_LANGUAGE_VERSION: 1.20
Run Code Online (Sandbox Code Playgroud)

在我的着色器中,我想要一大堆均匀的mat4s:

uniform mat4 T[65]
Run Code Online (Sandbox Code Playgroud)

但如果我尝试将65个这样的着色器(秘密地)切换到Apple Software Renderer模式.如果我改为使用64:

uniform mat4 T[64]
Run Code Online (Sandbox Code Playgroud)

一切都好.

似乎是超过最大制服数量的问题.但正如我上面写的那样,GL_MAX_VERTEX_UNIFORM_COMPONENTS为4096 /(4*4)= 256而不是64 ...

OpenGL.org维基

ATI/AMD注意:ATI最大组件值是错误的.它们是实际的组件数除以4.

但是读到这个我会认为如果我查询GL_MAX_VERTEX_UNIFORM_COMPONENTS并得到4096,那我实际上有16,384.似乎是这样的情况是GL_MAX_VERTEX_UNIFORM_COMPONENTS返回实际的组件数乘以 4.这将得到1024 /(4*4)= 64.

谁能证实这一点?

编辑: 我的着色器很简单:

#version 120

// 65 goes into software render mode
#define MAX_T 64
attribute vec4 indices;
uniform mat4 T[MAX_T];

void main()
{
  gl_Position =  T[int(indices[0])]*gl_Vertex;
}
Run Code Online (Sandbox Code Playgroud)

dat*_*olf 7

你是正确的,你需要将4096除以4而不是乘法.维基条目被严重的措辞.

  • 它没有措辞严厉; 再看一遍.并且不要查看该页面上的编辑历史记录; 我确信编写它的人在看到这个Q/A后肯定没有纠正它.不,这肯定不会在几分钟前发生.;) (5认同)