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 ...
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)
你是正确的,你需要将4096除以4而不是乘法.维基条目是被严重的措辞.