我想编写一个通用的实用函数,它将使用 OpenGL 帧缓冲区对象来创建一个纹理,该纹理可以由某些 OpenGL 程序用于第三方程序员想要的任何目的。
让我们说对于参数 stake 函数看起来像
void createSpecialTexture(GLuint textureID)
{
MyOpenGLState state;
saveOpenGLState(state);
setStateToDefault();
doMyDrawing();
restoreOpenGLState(state);
}
MyOpenGLState
、saveOpenGLState(state)
、setStateToDefault()
和 restoreOpenGLState(state)
应该是什么样子确保 doMyDrawing
的行为正确并且我在 doMyDrawing
中所做的任何事情都不会影响第三方开发人员可能正在做的任何其他事情?
一直困扰我的问题是 OpenGL 有很多隐式状态,我不确定我是否捕捉到了所有这些状态。
更新:我主要关心的是 OpenGL ES 2.0,但我想我会问得更笼统一些
最佳答案
不要使用帧缓冲对象来渲染你的纹理。而是创建一个新的 EGLContext 和 EGLSurface。然后,您可以使用 eglBindTexImage
将 EGLSurface 转换为纹理。这样你就可以保证来自 doMyDrawing
的状态不会污染主 gl 上下文,反之亦然。
关于c++ - 恢复 OpenGL 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12476913/