Я создаю простую программу opengl.После компиляции и компоновки моей шейдерной программы я пытаюсь получить входной атрибут с помощью glGetAttribLocation()
, но он возвращает -1.
Я компилирую и связываю свою программу следующим образом:
GLuint vsID = glCreateShader(GL_VERTEX_SHADER);
GLuint fsID = glCreateShader(GL_FRAGMENT_SHADER);
char vsSource[] = "#version 330 core\n\
in vec4 position;\
void main(void)\
{\
gl_Position = position;\
}";
char fsSource[] = "#version 330\n\
out vec4 color;\
void main(void)\
{\
color = vec4(1.0, 0.0, 0.0, 1.0);\
}";
const char *p_vsSrc = &vsSource[0];
const char *p_fsSrc = &fsSource[0];
glShaderSource(vsID, 1, &p_vsSrc, nullptr);
glShaderSource(fsID, 1, &p_fsSrc, nullptr);
glCompileShader(vsID);
glCompileShader(fsID);
//Check shader for errors
GLint vsCompiled = GL_FALSE;
GLint fsCompiled = GL_FALSE;
glGetShaderiv(vsID, GL_COMPILE_STATUS, &vsCompiled);
glGetShaderiv(fsID, GL_COMPILE_STATUS, &fsCompiled);
if (vsCompiled != GL_TRUE)
{
//Error...
}
if (fsCompiled != GL_TRUE)
{
//Error...
}
GLuint shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vsID);
glAttachShader(shaderProgram, fsID);
glLinkProgram(shaderProgram);
Это компилирует и ссылки прекрасно.Также любые вызовы glGetError()
, которые я помещаю в коде, возвращают 0.
Однако я не могу получить местоположение position
:
GLuint vPosition = glGetAttribLocation(shaderProgram, "position");
//position == -1
Почему это?