GLSL Instancing - максимальное количество входов для данных вершин?

Я пытаюсь реализовать инстансинг в моей программе OpenGL. Я заставил его работать, а затем решил сделать мой код GLSL более эффективным, отправив матрицу умножения Model-View-Projection в качестве входных данных для программы GLSL, чтобы процессор вычислял ее для каждого экземпляра, в отличие от GPU. Вот мой код вершинного шейдера (большая часть не имеет отношения к моему вопросу):

#version 330 core

// Input vertex data, different for all executions of this shader.
layout(location = 0) in vec3 vertexPosition_modelspace;
layout(location = 2) in vec3 vertexColor;
layout(location = 3) in vec3 vertexNormal_modelspace;
layout(location = 6) in mat4 models;
layout(location = 10) in mat4 modelsV;
layout(location = 14) in mat4 modelsVP;

// Output data ; will be interpolated for each fragment.
out vec3 newColor;

out vec3 Position_worldspace;

out vec3 Normal_cameraspace;
out vec3 EyeDirection_cameraspace;

// Values that stay constant for the whole mesh.
uniform mat4 MVP;
uniform mat4 MV;
uniform mat4 P;
uniform mat4 V;
uniform mat4 M;
uniform int num_lights;
uniform vec3 Lights[256];

void main(){

// Output position of the vertex, in clip space : MVP * position
gl_Position =  P * modelsV * vec4(vertexPosition_modelspace,1);

// Position of the vertex, in worldspace : M * position
Position_worldspace = (models * vec4(vertexPosition_modelspace,1)).xyz;

// Vector that goes from the vertex to the camera, in camera space.
// In camera space, the camera is at the origin (0,0,0).
vec3 vertexPosition_cameraspace = ( modelsV * vec4(vertexPosition_modelspace,1)).xyz;
EyeDirection_cameraspace = vec3(0,0,0) - vertexPosition_cameraspace;    

// Normal of the the vertex, in camera space
Normal_cameraspace = ( modelsV * vec4(vertexNormal_modelspace,0)).xyz;

// UV of the vertex. No special space for this one.
newColor = vertexColor;

}

Приведенный выше код работает, но только потому, что яЯ не использую последние входные модели VP для вычисления gl_position. Если я использую его (вместо того, чтобы вычислять P * modelsV), экземпляры выиграюттянет, и я получаю эту ошибку:

Linking program
Compiling shader : GLSL/meshColor.vertexshader
Compiling shader : GLSL/meshColor.fragmentshader
Linking program
Vertex info
0(10) : error C5102: input semantic attribute "ATTR" has too big of a numeric index (16)
0(10) : error C5102: input semantic attribute "ATTR" has too big of a numeric index (16)
0(10) : error C5041: cannot locate suitable resource to bind variable "modelsVP". Possibly large array.

я уверен, что яЯ правильно связал его в своем коде OpenGL, потому что, если я поменяю местами входное местоположение модели VP на модели V так, чтобы оно равнялось 10 вместо 14, я смогу использовать его, но не модели V. Есть ли максимальное количество входов, которые вы можете иметь для своего вершинного шейдера? Я действительно могуЯ не думаю о какой-либо другой идее, почему бы еще получить эту ошибку ... Я

Я включу больше моего кода OpenGL, который уместен здесь, но яЯ уверен, что этоправильно (этоне все в одном классе или методе):

// Buffer data for VBO. The numbers must match the layout in the GLSL code.
#define position 0 
#define uv 1
#define color 2
#define normal 3 
#define tangent 4
#define bitangent 5
#define model 6      // 4x4 matrices take 4 positions
#define modelV 10
#define modelVP 14
#define num_buffers 18

GLuint VBO[num_buffers];
glGenBuffers(num_buffers, VBO);

for( int i=0; i

Ответы на вопрос(2)

Ваш ответ на вопрос