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 を使用しており、フレームごとに次のことを行います。
- glBindFramebuffer( GL_FRAMEBUFFER, framebuffer1.glName );
- (テクスチャ 1 にレンダリング)
- glBindFramebuffer( GL_FRAMEBUFFER, framebuffer2.glName );
- (テクスチャ 2 にレンダリング)
- glBindFramebuffer( GL_FRAMEBUFFER, framebuffer3.glName );
- (テクスチャ 2 から読み取り、テクスチャ 3 にレンダリング)
- [((GLKView*)self.view) bindDrawable];
- (テクスチャ 1 を画面にレンダリング)
- [((GLKView*)self.view) bindDrawable];
- glScissor( 0, 0, width, height ) // フレームごとに幅と高さが増加する
- (テクスチャ 3 を画面にレンダリング)