У меня проблемы с вершинным шейдером скелетной анимации.При анимации около 32 моделей одновременно я могу получить только 60 кадров в секунду, а на младших компьютерах - даже меньше.Вершинный шейдер ниже:
uniform mat4 boneMatrixes[128];
void main(){
vec4 a = gl_Vertex;
// Apply bone transformation
a = boneMatrixes[int(gl_Normal.x)] * gl_Vertex;
gl_Position = gl_ModelViewProjectionMatrix * a;
gl_TexCoord[0] = gl_MultiTexCoord0;
}
Параметры связаны следующим образом (обратите внимание, что это Java, я использую привязку LWJGL OpenGL:)
int boneMatrixesName = ARBShaderObjects.glGetUniformLocationARB(mProgramShader, "boneMatrixes");
// matrixFloatBuffer is a FloatBuffer of size 128 * 16
ARBShaderObjects.glUniformMatrix4ARB(boneMatrixesName, false, matrixFloatBuffer);
Закомментируем a = boneMatrixes[int(gl_Normal.x)] * gl_Vertex;
Линия увеличивает производительность примерно на 500%.Как повысить производительность этого вершинного шейдера?Это выглядит максимально просто и быстро.