iOS重新生成上下文

iOS重新生成上下文,ios,cocoa-touch,opengl-es,Ios,Cocoa Touch,Opengl Es,为了测试我的应用程序是否兼容GLES2/3,我正在尝试在运行时删除并重建GLES上下文。但无论我做什么,我总是在glClear得到一个空白屏幕和一个无效的GLU帧缓冲区操作 要在GLKview drawInRect中使用此代码删除/重建上下文Im: // Destroy the context [EAGLContext setCurrentContext:self.context]; if ([EAGLContext currentContext] == self.context) [E

为了测试我的应用程序是否兼容GLES2/3,我正在尝试在运行时删除并重建GLES上下文。但无论我做什么,我总是在glClear得到一个空白屏幕和一个无效的GLU帧缓冲区操作

要在GLKview drawInRect中使用此代码删除/重建上下文Im:

// Destroy the context
[EAGLContext setCurrentContext:self.context];
if ([EAGLContext currentContext] == self.context)
    [EAGLContext setCurrentContext:nil];
self.context = nil;


// Rebuild the context
switch( profile )
{
    case 20:
    {
        self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
        break;
    }

    case 30:
    {
        self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
        break;
    }
}

[EAGLContext setCurrentContext:self.context];

在这段代码之后,我马上调用glClear,得到上面描述的错误,屏幕保持黑色。。。没有生成其他错误。。。这里有我遗漏的东西吗

帧缓冲区?您不能简单地创建一个新的上下文,然后继续绘制,显示缓冲区。上下文是包含与openGL关联的所有数据的对象。您可以尝试使用第一个共享组创建第二个上下文,然后删除第一个上下文。如果我错了,请纠正我,但我非常确定您不能共享OpenGLES2和OpenGL3上下文的数据,对吗,如果你确信这一点,那么我认为除了在切换上下文后在GPU上重新创建所有资源之外,没有其他方法。默认情况下,资源不会在两个上下文之间共享。有一种创建共享上下文的方法,只用于在不同的线程上加载资源,但我不认为可以有两个同时呈现和共享资源的上下文。不过我不确定。您可以判断何时创建纹理资源,两个不同的纹理可能在不同的上下文中使用相同的ID。