1

私のiOSアプリケーションは、Core Graphicsを使用してビットマップ(私のビューと同じサイズ)に描画します。ビットマップの更新された領域を画面にプッシュしたい。(私は標準のUIView drawRectメソッドを使用しましたが、OpenGLに切り替える理由がいくつかあります)。

UIView / CALayer drawRectと同じ動作を、OpenGLビューで複製したいだけです。基本的に、OpenGLビューのダーティな長方形を更新したいと思います。これ以上何もない。

これまでのところ、OpenGL ES 1.1ビューを作成し、ビットマップの更新ごとに1つのクワッド(頂点配列上のテクスチャ)を使用して、ビットマップ全体を画面にプッシュすることができました。もちろん、ビュー全体ではなく、汚れた長方形を更新するだけでよいので、これはかなり非効率的です。

OpenGL ESでそれを行うための最も効率的な方法は何でしょうか?クワッドのラティスを使用して、ダーティな長方形と交差するクワッドのテクスチャを更新する必要がありますか?(その方法を使用する場合、VBOを使用する必要がありますか?)それを行うためのより良い方法はありますか?

参考までに(念のため)、ローテーションは必要ありませんが、OpenGLビュー全体を拡大縮小する必要があります。

更新:この方法は確かに機能します。ただし、網膜ディスプレイデバイスのiOS5.xには、単一のバッファリングを使用するとアーティファクトが発生するバグがあります。この問題はiOS6で修正されています。まだ回避策はありません。

4

1 に答える 1

1

TexSubImageを使用してテクスチャの一部を更新し、標準のフルスクリーンクワッドを再描画するだけですが、はさみの正しいビーイングセット(glScissor)を「ダーティ」部分に設定します。その場合、GLはこのrectの外側にフラグメントを描画しません。

これが機能するためには、もちろん単一のバッファリングを使用する必要があります。

于 2012-10-07T21:45:25.800 に答える