gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:38 24 4
gpt4 key购买 nike

根据 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/

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