是否可以确定 OpenGL 当前使用的矩阵模式?
例如,我目前有以下内容(由窗口调整大小触发):
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-width, width, -height, height, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
但是,最好返回到以前使用的矩阵模式,而不是假设GL_MODElVIEW
。有没有可以预先调用的函数来存储以前的状态?
最佳答案
使用 glGetIntegerv(GL_MATRIX_MODE, ...)
获取当前值是显而易见的答案。
但是,有一种更优雅且最有可能更有效的方法。旧版 OpenGL 有一个属性堆栈,允许您在不使用任何 glGet*()
调用的情况下保存/恢复属性值。在此示例中,您将使用:
glPushAttrib(GL_TRANSFORM_BIT);
// Code that modifies transform mode.
glPopAttrib();
您可以查看传递给 glPushAttrib()
的位在 man page 上的表中保存了什么状态.
您通常应该尽可能避免 glGet*()
调用,因为它们可能对性能有害。在仅在调整窗口大小时执行代码的特定示例中,这显然不是问题。但在频繁执行的代码中,这变得更加重要。
属性堆栈已弃用,并且在 OpenGL 核心配置文件中不可用。但由于您使用的是矩阵堆栈(也已弃用),我认为您很乐意在代码中使用遗留功能。
关于opengl - 当前的 OpenGL 矩阵模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34538819/