Почему я получаю ошибку 1282 после вызова glLoadIdentity()?
КОД:
int err = glGetError(); // err = 0
glMatrixMode(GL_TEXTURE);
err = glGetError(); // err = 0
glLoadIdentity();
err = glGetError(); // err = 1282
GL_INVALID_OPERATION
Указанная операция не разрешена в текущем состоянии. Оскорбительная команда игнорируется и не имеет другого побочного эффекта, кроме как установить флаг ошибки.
Я использую gDEBugger для проверки состояния openGL при получении ошибки.
GL_CURRENT_RASTER_POSITION_VALID=TRUE
GL_CURRENT_RASTER_TEXTURE_COORDS=N/A
GL_CURRENT_TEXTURE_COORDS=N/A
GL_PROJECTION_STACK_DEPTH=1
GL_TEXTURE_1D=FALSE
GL_TEXTURE_2D=FALSE
GL_TEXTURE_GEN_Q=N/A
GL_TEXTURE_GEN_R=N/A
GL_TEXTURE_GEN_S=N/A
GL_TEXTURE_GEN_T=N/A
GL_TEXTURE_MATRIX=N/A
GL_TEXTURE_STACK_DEPTH=N/A
GL_TEXTURE_BINDING_1D=0
GL_TEXTURE_BINDING_2D=0
GL_TEXTURE_BINDING_3D=0
GL_TEXTURE_ENV_MODE=GL_MODULATE
GL_TEXTURE_ENV_COLOR={0, 0, 0, 0}
GL_ACTIVE_TEXTURE=GL_TEXTURE11
GL_CLIENT_ACTIVE_TEXTURE=GL_TEXTURE0
GL_MAX_TEXTURE_UNITS=4
GL_ACTIVE_TEXTURE_ARB=GL_TEXTURE11
GL_CLIENT_ACTIVE_TEXTURE_ARB=GL_TEXTURE0
GL_MAX_TEXTURE_UNITS_ARB=4
Я не могу понять, где это не так. Почему нельзя просто разрешить операцию?
1 ответ
Из документации:
GL_INVALID_OPERATION генерируется, если glLoadIdentity выполняется между выполнением glBegin и соответствующим выполнением glEnd.
Я предполагаю, что это почему.
Немедленный режим, наряду с обработкой матриц на стороне OpenGL, устарел. Вы должны получить ту же ошибку, даже если используете glMatrixMode. Переход на OpenGL версии 2.1 с помощью wglCreateContextAttribsARB у меня сработал, хотя я читал комментарии, в которых говорилось, что нет гарантий, что он будет работать в будущем. Вы должны с самого начала провести собственное матричное исчисление и VBO.