我正在构建一个应用程序,它需要显示到 opengl 视图,一个全屏,另一个更小作为覆盖。这两个视图代表 2 个完全不同的应用程序。
现在看来我不能同时显示两个 EAGLContext/Framebuffers;我总是以“无法制作完整的帧缓冲区对象 8cd6”错误消息告终。
我需要使用两种不同的实现来实现 2 gl 视图:
1- 在同一屏幕上同时使用 2 个 GLKViewControllers
嗨,我已经阅读了这个问题的一些解决方案,大多数人说你只需要使用视图控制器包含,但我没有运气。通过我的设置,每个 glview 都有一个 EAGLContext ...我还尝试为两者使用一个上下文。这是我对第一个 GLKViewController 的 viewDidLoad() 方法的设置:
- (void)viewDidLoad
{
[super viewDidLoad];
self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
if (!self.context) {
NSLog(@"Failed to create ES context");
}
GLKView *view = (GLKView *)self.view;
view.context = self.context;
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
[self setupGL];
// Add the sub glkviewcontroller
subViewController = [[SubGLControllerViewController alloc] init];
[self addChildViewController:subViewController];
[self.view addSubview:subViewController.view];
[subViewController didMoveToParentViewController:self];
}
我对 SubGLControllerViewController 有基本相同的代码,但没有添加子视图控制器......
2- 在我的第二个实现中,我需要手动创建帧缓冲区,而不使用这样的 glkviewcontroller:
// Create the MAIN FBO.
glGenFramebuffers(1, &mainFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, mainFramebuffer);
glGenRenderbuffers(1, &mainColorRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, mainColorRenderbuffer);
[mainContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer];
glFramebufferRenderbuffer(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER,
mainColorRenderbuffer);
// Create the secondary FBO
glGenFramebuffers(1, &secondaryFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, secondaryFramebuffer);
glGenRenderbuffers(1, &secondaryColorRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, secondaryColorRenderbuffer);
[secondaryContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer];
glFramebufferRenderbuffer(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER,
secondaryColorRenderbuffer);
// This status will fail at this point...if i remove either the main or secondary //framebuffer, the status is valid
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);