3

OpenGLのドキュメントによると、それは合法です:

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

「そして glScissor(0,0,0,0) は、ウィンドウ内のピクセルの変更を許可しません。」

...しかし、iOS 6 で実行すると、恐ろしい「PowerVR SGX chip crashed」がトリガーされます。

gpus_ReturnGuiltyForHardwareRestart ()

iOS 5.x では、クラッシュは発生しませんでした (更新: 5 から 6 に移行するときに、アニメーション カウンターを 1 ではなく 0 から開始するように変更したことを発見したので、iOS 5 でも同じクラッシュが発生した可能性が非常に高いです)。 -しかし、これが iOS 6 のバグなのか、iOS 6 がコードのタイミングを変更したためなのか、私にはわかりません。iOS 5 では、0,0,0,0 を送信したことがなく、代わりに 0,0,0,1 を最初の呼び出しとして送信した可能性があります (はさみはフレームごとにアニメーション化されています)。


更新: 高さはゼロにすることができます。PowerVR は幅が 0 の場合にのみクラッシュします。

x、y、(幅==0)? 1 : width, height -- x, y, width, (height==0 ? 1 : height -- width==0 の場合は必ずクラッシュします

注意: 幅と高さが決して 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 を画面にレンダリング)
4

1 に答える 1

0

試してみたところ、期待どおりに動作するようです。

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

... iPhone 5 の iOS 6.1.4 ではまったくレンダリングされません。ゼロ以外のサイズを使用しても、期待どおりにレンダリングされます。

クラッシュは、私のものとは異なるセットアップに関連している可能性があります。からレンダリングしていGLKViewます。さらに情報が必要な場合は、お知らせください。たとえば、iOS 7 デバイスで試すことができます。

于 2013-08-26T16:10:42.593 に答える