我想编写一个通用的实用程序函数,该函数将使用OpenGL帧缓冲对象创建纹理,该纹理可被某些OpenGL程序用于第三方程序员想要的任何目的。

可以说,对于参数放样,函数看起来像

void createSpecialTexture(GLuint textureID)
{
    MyOpenGLState state;
    saveOpenGLState(state);
    setStateToDefault();
    doMyDrawing();
    restoreOpenGLState(state);
}
MyOpenGLStatesaveOpenGLState(state)setStateToDefault()restoreOpenGLState(state)应该看起来像什么,以确保doMyDrawing能够正确运行,并且我在doMyDrawing中所做的任何事情都不会影响第三方开发人员可能正在做的其他事情?

困扰我的问题是OpenGL有很多隐式状态,我不确定我是否能捕获所有这些。

更新:我主要关心的是OpenGL ES 2.0,但我想我会更普遍地问这个问题

最佳答案

不要使用framebuffer对象来渲染纹理。而是创建一个新的EGLContext和EGLSurface。然后,您可以使用eglBindTexImage将EGLSurface转换为纹理。这样,您可以确保doMyDrawing中的状态不会污染主gl Context,反之亦然。

08-26 00:15