iphone - glScissor(0,0,0,0) 硬崩溃 Apple iOS 设备

标签 iphone ios opengl-es-2.0

根据 OpenGL 文档,这是合法的:

http://www.opengl.org/sdk/docs/man/xhtml/glScissor.xml

"and glScissor(0,0,0,0) doesn't allow modification of any pixels in the window."

...但是当我在 iOS 6 上执行此操作时,它会触发可怕的“PowerVR SGX 芯片崩溃”:

gpus_ReturnGuiltyForHardwareRestart ()

在 iOS 5.x 上,我没有崩溃(更新:我刚刚发现,当从 5 移动到 6 时,我也将我的动画计数器从零开始而不是从一开始,所以我很可能在iOS 5) - 但这是因为这是 iOS 6 的错误,还是因为 iOS 6 更改了代码的时间,我无法判断。很可能在 iOS 5 中我从未提交过 0,0,0,0,而是在第一次调用时提交了 0,0,0,1(剪刀是逐帧动画的)。


更新:高度可以为零,PowerVR 只有在宽度为 0 时才会崩溃。

x, y, (width==0)? 1 : width, height——永远不会崩溃 x, y, width, (height==0 ? 1 : height -- 当 width==0 时崩溃

注意:我已经检查、断言并使用日志记录来证明宽度和高度永远不会小于零(这是我的第一个想法!)


更多信息,可能相关(显然会导致以前的 Apple OpenGL 驱动程序出现问题):

我正在使用多个 FBO,并且我对每一帧都这样做:

  1. glBindFramebuffer( GL_FRAMEBUFFER, framebuffer1.glName );
    1. (渲染到纹理 1)
  2. glBindFramebuffer( GL_FRAMEBUFFER, framebuffer2.glName );
    1. (渲染到纹理 2)
  3. glBindFramebuffer( GL_FRAMEBUFFER, framebuffer3.glName );
    1. (从纹理 2 读取,渲染到纹理 3)
  4. [((GLKView*)self.view) bindDrawable];
    1. (将纹理 1 渲染到屏幕)
  5. [((GLKView*)self.view) bindDrawable];
    1. glScissor( 0, 0, width, height )//每帧宽度和高度增加
    2. (将纹理 3 渲染到屏幕)

最佳答案

我刚刚尝试过,它似乎按我预期的方式工作。

glEnable(GL_SCISSOR_TEST);
glScissor(0, 0, 0, 0);

...导致在 iPhone 5 上的 iOS 6.1.4 上根本没有渲染。使用非零尺寸渲染也符合预期。

崩溃可能与某些与我不同的设置有关。我正在从 GLKView 进行渲染。如果您需要更多信息,请告诉我。例如,我可以在 iOS 7 设备上试用。

关于iphone - glScissor(0,0,0,0) 硬崩溃 Apple iOS 设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18447891/

相关文章:

ios - 从 URL 读取字节,并将二进制转换为普通十进制。对象C

ios - 不断使用 React Native 获取未定义的字体系列 - 链接矢量图标 - 构建告诉我取消链接

ios - 了解 UIBezierPath 的 moveToPoint 和 addLineToPoint 方法吗?

linux - SDL2 + openGL ES 2.0 帧速率性能提升,CPU 负载更少

ios - 使用 glDrawElements 的 OpenGL ES 2.0 渲染仅显示单个 VBO

android - Android NDK 暂停/恢复中的 hello-gl2 示例是否正确?

iphone - 我可以对在 iOS 上生成的 pdf 文件中的图像使用 JPEG 压缩吗?

iphone - 如果有nib文件会调用loadView吗?

ios - 在IOS7中打开应用程序时出现白屏

iphone - 如何在应用程序运行之间本地检测用户的 iPhone 时钟进度?