Когда я пытаюсь скомпилировать этот код GLSL в OpenGL 4.0, я получаю ошибку 1282
Вершинный шейдер:
#version 330 core
layout(location = 0) in vec2 aPos;
uniform mat4 model[100];
uniform mat4 projection;
out int instanceID;
void main()
{
instanceID = gl_InstanceID;
gl_Position = projection * model[gl_InstanceID] * vec4(aPos.x, aPos.y, 0.0, 1.0);
}
Фрагментный шейдер:
#version 330 core
in int instanceID;
out vec4 FragColor;
uniform vec4 color[100];
void main()
{
FragColor = color[instanceID];
}
Кодявляется обычным созданием ShaderProgram, потому что я получаю ошибку перед рисованием или чем-то подобным, но на всякий случай вот код:
unsigned int vertex, fragment;
vertex = glCreateShader(GL_VERTEX_SHADER);
std::string vShaderCode = ReadEntireTextFile(vertPath);
const char* c_vShaderCode = vShaderCode.c_str();
glShaderSource(vertex, 1, &c_vShaderCode, NULL);
glCompileShader(vertex);
std::string fShaderCode = ReadEntireTextFile(fragPath);
fragment = glCreateShader(GL_FRAGMENT_SHADER);
const char* c_fShaderCode = fShaderCode.c_str();
glShaderSource(fragment, 1, &c_fShaderCode, NULL);
glCompileShader(fragment);
// shader Program
m_RendererID = glCreateProgram();
glAttachShader(m_RendererID, vertex);
glAttachShader(m_RendererID, fragment);
glLinkProgram(m_RendererID);
// delete the shaders as they're linked into our program now and no longer necessery
glDeleteShader(vertex);
glDeleteShader(fragment);
glUseProgram(m_RendererID);
Я точно знаю, что ошибка из-за instanceID, потому что она работала, когда шейдерне было этогоно я попытался выяснить, где именно проблема, но безуспешно.
ОБНОВЛЕНИЕ:
Убедитесь, что шейдеры были успешно скомпилированы.и оказывается, что они успешно скомпилированы.
Мне удалось точно определить, где произошла ошибка, и это была функция glUseProgram.
Я думаю, что ошибка из-за instanceID, потому что, когда я изменяю:
FragColor = color[instanceID];
до
FragColor = color[0];
программа работает.
ОБНОВЛЕНИЕ (2):
Я решил проблему.Оказывается, у меня было 2 проблемы, одна из которых заключалась в том, что у меня было слишком много компонентов, и я исправил это благодаря одному из ответов, предупреждающих меня.
Другая проблема заключалась в том, что я не могу поместить форму непосредственно в фрагментный шейдер, который яЯ думал, что вы можете сделать. Так что я поместил цвета в вершинный шейдер и передал один цвет, который мне нужен для фрагментного шейдера.
Спасибо за помощь!