【发布时间】:2013-10-23 08:52:11
【问题描述】:
代码:
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
我不知道哪里错了。为什么不能简单的操作?
【问题讨论】:
-
您甚至不应该再使用
glMatrixMode()和glLoadIdentity(),它们已被弃用。 -
@Vallentin 我知道,但我必须考虑旧版本的兼容性。
-
您仍然可以在旧版本的 OpenGL 中创建和使用自己的矩阵堆栈。
标签: c opengl 3d glsl opengl-compat