gpt4 book ai didi

iphone - 为什么在 iPhone 应用程序中调用 glMatrixMode(GL_PROJECTION) 会给我 EXC_BAD_ACCESS ?

转载 作者:行者123 更新时间:2023-12-03 18:53:03 24 4
gpt4 key购买 nike

我有一个 iPhone 应用程序,我在 appDidFinishLaunching 中调用这三个函数:

glMatrixMode(GL_PROJECTION);
glOrthof(0, rect.size.width, 0, rect.size.height, -1, 1);
glMatrixMode(GL_MODELVIEW);

使用调试器单步调试时,执行第一行时出现 EXC BAD ACCESS。有什么想法为什么会发生这种情况吗?

顺便说一句,我有另一个应用程序,我在其中执行相同的操作并且工作正常。因此,我尝试复制该应用程序中的所有内容(#imports、添加 OpenGLES 框架等),但现在我陷入了困境。

最佳答案

如果两个线程试图同时绘制到 OpenGL 场景,我就会在 OpenGL 调用中遇到这个问题。但是,这听起来不像您正在做的事情。

在此调用之前您是否正确初始化了显示上下文和帧缓冲区?例如,在执行 OpenGL 绘图的 UIView 子类中,我在其 initWithCoder: 方法中调用以下内容:

context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];

if (!context || ![EAGLContext setCurrentContext:context] || ![self createFramebuffer])
{
[self release];
return nil;
}

createFramebuffer 方法如下所示:

- (BOOL)createFramebuffer 
{
glGenFramebuffersOES(1, &viewFramebuffer);
glGenRenderbuffersOES(1, &viewRenderbuffer);

glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer];
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer);

glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);

if (USE_DEPTH_BUFFER) {
glGenRenderbuffersOES(1, &depthRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer);
}

if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES)
{
return NO;
}

return YES;
}

这几乎是样板代码,由 XCode 中的 OpenGL ES 应用程序模板生成。也许在调用 glMatrixMode() 之前不进行初始化,您就会崩溃。

另外,为什么要在 applicationDidFinishLaunching: 中进行 OpenGL 绘图? View 或 View Controller 不是比 UIApplicationDelegate 更适合 OpenGL 调用吗?

关于iphone - 为什么在 iPhone 应用程序中调用 glMatrixMode(GL_PROJECTION) 会给我 EXC_BAD_ACCESS ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/260391/

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