首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 5短信通知导致glreadpixels崩溃

iOS 5短信通知导致glreadpixels崩溃
EN

Stack Overflow用户
提问于 2011-11-29 05:15:10
回答 1查看 371关注 0票数 2

我们的应用程序使用glreadpixels来捕捉每一帧的屏幕。在iOS 5设备上,当你收到一条短信(我假设是任何其他通知)时,应用程序会在glreadpixels调用时崩溃。

崩溃只会发生在采用新通知风格的iOS 5上(从顶部滑下并很快消失的通知)。在iOS 4上,旧的UIAlertView风格的通知工作得很好。

具体地说,对glReadPixels()的调用会抛出一个EXEC_BAD_ACCESS错误。

具体的调用是

代码语言:javascript
复制
glReadPixels(0,0,tx,ty,GL_BGRA_EXT,GL_UNSIGNED_BYTE, buffer);

哪里

代码语言:javascript
复制
int tx = 482
int ty = 320

(应用程序仅处于横向模式)

代码语言:javascript
复制
GLubyte *buffer = malloc(sizeof(GLubyte)* 4 * tx * ty );

我们还尝试在发出读命令之前检查帧缓冲器的状态,glCheckFramebufferStatus(GL_FRAMEBUFFER)总是返回GL_FRAMEBUFFER_COMPLETE

这是新的通知弹出窗口实现方式上的错误吗?我们该如何解决这个问题呢?如果我们可以检测到通知即将出现,并暂停对glreadpixels的调用直到通知消失,这也是可以接受的。

谢谢,

时间

EN

回答 1

Stack Overflow用户

发布于 2013-09-01 22:51:53

在一些罕见的情况下:短信通知,有时当应用程序从后台移动到前台时,glReadPixels()会失败,并显示一个漂亮的GL_FRAMEBUFFER_COMPLETE

在渲染之前,问题会随着一个很好的旧glBindFramebuffer消失。从理论上讲,OpenGL永远不应该“忘记”有界的帧缓冲区。真奇怪。

我不确定这是来自苹果的bug还是来自我的代码。但请记住,您的应用程序与ios共享opengl上下文。让我们务实一点吧。我只是添加了神奇的glBindFramebuffer。

代码语言:javascript
复制
void render() {
    // !! bind Framebuffer, always, even if already bound. Apple bug ?
    glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer);

    // rendering...

    //end rendering
    //     - glBindRenderbuffer(m_color_renderbuffer); // if required
    //     - glDiscardFramebufferEXT(...)

    // read pixels
    glPixelStorei(GL_PACK_ALIGNMENT, 4);
    glReadPixels(...)
}

        glBindRenderbuffer(GL_RENDERBUFFER, m_color_renderbuffer); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8302401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档