dor*_*ron 5 c c++ opengl-es opengl-es-2.0
我想编写一个通用实用程序函数,它将使用OpenGL Framebuffer对象创建一个纹理,某些OpenGL程序可以将其用于第三方程序员想要的任何目的.
让我们说参数赌注的功能看起来像
void createSpecialTexture(GLuint textureID)
{
MyOpenGLState state;
saveOpenGLState(state);
setStateToDefault();
doMyDrawing();
restoreOpenGLState(state);
}
Run Code Online (Sandbox Code Playgroud)
什么应该MyOpenGLState, saveOpenGLState(state),setStateToDefault()和restoreOpenGLState(state)模样,以确保doMyDrawing将正确的行为,并没有什么,我做doMyDrawing会影响其他任何第三方开发者可能会在做什么?
一直困扰我的问题是OpenGL有很多隐式状态,我不确定我是否正在捕获它.
更新:我主要关注的是OpenGL ES 2.0,但我想我会更普遍地提出这个问题
不要使用帧缓冲区对象来渲染纹理。而是创建一个新的 EGLContext 和 EGLSurface。然后您可以使用eglBindTexImage将 EGLSurface 转换为纹理。这样你就可以保证状态 fromdoMyDrawing不会污染主要的 gl 上下文,反之亦然。