c++ - 恢复 OpenGL 状态

标签 c++ c opengl-es opengl-es-2.0

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

让我们说对于参数 stake 函数看起来像

void createSpecialTexture(GLuint textureID)
{
    MyOpenGLState state;
    saveOpenGLState(state);
    setStateToDefault();
    doMyDrawing();
    restoreOpenGLState(state);
}

MyOpenGLStatesaveOpenGLState(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/

相关文章:

c++ - 在两个单独的 cpp 文件中定义的内联函数是否可以在链接期间创建重复的符号?

c# - 在 C# 中调用 C DLL 的问题

android - 使用 openGL 在 Android 上动态更改颜色?

c++ - 使用 Qt 设置 Code::Blocks

c++ - 尝试在重载函数中获取字符和字符串的输入

c++ - 为什么while循环的执行时间显得如此奇怪?

c++ - 位字段结构分配意外行为

c - C 中 strtok 段错误后的 strcpy

opengl-es - 如何在左轴和右轴之间转换opengl投影矩阵?

android - 将二维数组传递到 GLES opengl 着色器