2009-06-09 15 views
0

私はEAGLViewに重い図面をオフロードするアプリケーションを作成しています。UIKitの上に軽量のものがいくつかあります。オリエンテーションの変更中にGLレンダリングがどこかにキャッシュされているように見えます。アクセス方法を理解できません。具体的に:姿勢変更後EAGLViewオリエンテーションの変更と奇妙なバッファリング

  • 、呼び出しにglClear(GL_COLOR_BUFFER_BIT)私は、このキャッシュをクリアするにはどうすればよいGL表示(描画どこかにキャッシュされている?)をクリアするのに十分ではないでしょうか?
  • 方向変更後、glReadPixel()は方向変更の前に描画されたピクセルにアクセスできなくなりました。これはどこに保存されているのですか?

答えて

0

私は専門家ではないが、私はOptimizing OpenGL ES for iPhone OSを読んでいたし、それは次のように述べた。あなたはそれをチェックアウトするようなことがあり

をレンダリングネイティブプラットフォームでのOpenGL ESをミキシング

回避をそれが役立つかどうかを見てください。

0

オリエンテーションを変更した後、glClear(GL_COLOR_BUFFER_BIT)を呼び出すだけではGL表示をクリアできません(図面はどこかにキャッシュされますか?)このキャッシュをクリアするにはどうすればよいですか?

オフスクリーンの画像があまりにも多く描画されています。この画像は、-presentRenderbufferに電話すると、CoreAnimationの合成でのみ使用可能になります。

方向変更後、glReadPixel()は方向変更の前に描画されたピクセルにアクセスできなくなりました。これはどこに保存されているのですか?

私はあなたがRetainedBackingオプションを使用していると仮定します。このオプションがなければ、回転の外でも前のフレームの内容を読み取ることはできません。 -presentRenderbufferに電話すると、オフスクリーンイメージの内容は合成のためにCAに送られ、新しいイメージが代わりに使用されます。新しいイメージの内容は未定義です。

EAGLViewサンプルコードから派生したものを使用していて、RetainedBackingを使用していると仮定すると、ローテーションが発生すると、フレームバッファの割り当てが解除され、再割り当てされてサイズが変更されます。これが発生すると、既存のコンテンツはすべて失われます。

次のいずれかを実行できます
1)transformプロパティを使用してのUIView(またはCALayerのを)回転させる代わりに、フレームバッファを再割り当てすることはありません)ReadPixels
2を呼び出すことによって、自分自身の移行全体の内容を保存し、。そうすることで、合成中にかなりのパフォーマンスが出る可能性がありますが、フレームバッファのサイズを変更することなく、探している回転を得ることができます。

関連する問題