gpt4 book ai didi

ios - GLKViewController 和 GLKView - 第二次创建时不呈现任何内容

转载 作者:行者123 更新时间:2023-11-29 12:36:43 26 4
gpt4 key购买 nike

我有一个 MainMenuViewController 和一个 GameViewController,它是一个 GLKViewConrtroller。

我第一次从主菜单转到 GameViewController 时一切都很好。如果我返回主菜单,GameViewController 及其 View 将被释放(我记录了它)。

当现在回到游戏时,我看到一个空白屏幕,没有任何 OpenGL 渲染。带有 UIKit 的叠加测试菜单仍然存在。

这就是我在 GameViewController 的 dealloc 方法中拆除 OpenGL 的方式,添加最后五行是为了使其正常工作,因此不管有没有它们都不起作用。

- (void)tearDownGL {

[EAGLContext setCurrentContext:self.context];

glDeleteBuffers(1, &_vertexBuffer);
glDeleteVertexArraysOES(1, &_vertexArray);

self.effect = nil;

_program = nil;

glBindVertexArrayOES(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindTexture(GL_TEXTURE_2D, 0);

[EAGLContext setCurrentContext: nil];
}

最佳答案

我认为问题在于您没有使用共享组 - OpenGL 可以在上下文之间共享纹理和着色器的地方?

这里的代码将创建一个包含所有 GLKViewController 子类的共享组。如果你有多个子类,你将不得不做一些事情来使 shareGroup 成为全局的(如果合适的话)。

- (void)viewDidLoad
{
[super viewDidLoad];

// Create an OpenGL ES context and assign it to the view loaded from storyboard
GLKView *view = (GLKView *)self.view;

// GLES 3 is not supported on iPhone 4s, 5. It may 'just work' to try 3, but stick with 2, as we don't use the new features, me thinks.
//view.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
//if (view.context == nil)
static EAGLSharegroup* shareGroup = nil;
view.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2 sharegroup:shareGroup];
if (shareGroup == nil)
shareGroup = view.context.sharegroup;
...

关于ios - GLKViewController 和 GLKView - 第二次创建时不呈现任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26117789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com