1

私は描画アプリケーションを作成しており、描画キャンバスは OpenGL テクスチャです。キャンバスに描画すると、キャンバス テクスチャのどの領域が変更されたかが判断され、変更を適用する前にそのピクセル データが (glReadPixels を使用して) コピーされます。

元に戻すには、コピーしたピクセル データを使用して以前のテクスチャの状態に戻したいだけです。ただし、OpenGL ES は glDrawPixels コマンドを提供しません。それを行う最良の方法は何ですか?

2 つのオプションを検討しましたが、どちらが優れているかはわかりません。

  1. コピーしたピクセルを使用して一時的なテクスチャを作成し、それを描画します (ただし、コピーされた領域は 2 のべき乗ではありません!)。

  2. 大きなキャンバス テクスチャを完全にバインド解除し、テクスチャのバイトを手動で変更してから、OpenGL に戻します。私はいかなる種類の圧縮も使用していないので、これはそれほど悪くないかもしれません. しかし、それはハックのようですか?

誰にもアイデアはありますか?本当に感謝します!

4

1 に答える 1

1

同様のことをしようとしているときに誰かがこれに出くわした場合に備えて、うまくいくと思われる解決策を考え出しました.

  1. 現在のテクスチャのイメージをフレーム バッファにバインドして取得し、フレーム バッファを CGImageRef に書き込みます。
  2. 新しい CGContext を作成し、既存のテクスチャ CGImageRef を描画します。次に、ユーザーが変更した部分に古いテクスチャ データを描画し、画像の変更を効果的に「元に戻します」。
  3. 古い OpenGL テクスチャを破棄し、CGContext からテクスチャを作成します。

これはかなり遅い方法だと思いますが、大きなパフォーマンスは必要ありません。私の本当の懸念は、「古い」テクスチャを表すために保持されるデータの量を制限することでした。

これに関するヘルプが必要な場合 (かなりの量のコードがあります)、お気軽にメールでお問い合わせください。

于 2009-05-22T02:33:33.170 に答える