1

代码:

 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

我不知道哪里错了。为什么不允许简单的操作?

4

2 回答 2

2

从文档中:

如果在 glBegin 的执行和 glEnd 的相应执行之间执行了 glLoadIdentity,则生成 GL_INVALID_OPERATION。

我想这就是为什么。

于 2013-10-23T09:07:37.600 回答
-1

不推荐使用立即模式以及 OpenGL 端的矩阵处理。即使您使用 glMatrixMode,您也应该得到相同的错误。使用 wglCreateContextAttribsARB 切换到 OpenGL 2.1 版对我有用,尽管我读过评论说它不能保证它在将来会起作用。你必须从一开始就做自己的矩阵微积分和 VBO。

于 2019-10-19T13:24:38.090 回答