Подтвердить что ты не робот

Каково фактическое количество единичных компонентов вершин для шейдера GLSL на графической карте ATI?

Я пишу вершинный шейдер GLSL для iMac с графической картой AMD Radeon HD 6970M 2048 МБ:

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

В моем шейдере я хотел бы иметь большой массив однородных mat4s:

uniform mat4 T[65]

но если я попытаюсь использовать 65 таких шейдеров (тайно), переключится в режим Apple Software Renderer. Если вместо этого я использую 64:

uniform mat4 T[64]

все в порядке.

Кажется, это проблема с превышением максимального числа униформ. Но, как я писал выше, я получаю 4096 для GL_MAX_VERTEX_UNIFORM_COMPONENTS, поэтому 4096/(4 * 4) = 256 не 64...

OpenGL.org wiki говорит

Примечание ATI/AMD. Значения компонентов ATI max неверны. Это фактическое количество компонентов, разделенных на 4.

Но, читая это, я подумал бы, что если я запрошу GL_MAX_VERTEX_UNIFORM_COMPONENTS и получаю 4096, то на самом деле у меня есть 16 384. Кажется, что GL_MAX_VERTEX_UNIFORM_COMPONENTS возвращает фактическое число компонентов, умноженное на 4. Тогда это даст 1024/(4 * 4) = 64.

Может ли кто-нибудь подтвердить это?

Edit: Мой шейдер просто:

#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;
}
4b9b3361

Ответ 1

Вы правы изофаром, что вам нужно разделить 4096 на 4, а не размножаться. Запись wiki написана плохо.