0

フラグメント シェーダー内から 3D テクスチャにデータを書き込んでいますが、そのデータをシステム メモリに非同期で読み戻す必要があります。バッファ オブジェクトへのパッキング操作を非同期的に開始する唯一の手段はglReadPixels()NULLポインタを使用して呼び出すことのようです。しかし、この関数は、読み返す領域を定義する四角形を渡す必要があります。PBO を使用するときにこれらのパラメーターが無視されるかどうかはわかりませんが、そうではないと思います。この場合、3D テクスチャ全体を取得するために、この関数に何を渡せばよいかわかりません。個々のスライスを読み戻さなければならない場合でも (これはばかげた IMO のようなものです)、どのスライスから読み取るかを OpenGL と通信する方法がわかりません。何か不足していますか?

ところで、すべてのスライスに個別の 2D テクスチャを使用することもできますが、間違っていなければ (3D-) ミップマッピングが台無しになります。結果の 3D テクスチャで関心のある領域を効率的に見つけるために、3D ミップマップを使用したいと考えました。

PS 最適化されていないタグで申し訳ありません。新しいタグを作成することは許可されていないため、以前は誰も 3D テクスチャについて質問していなかったようです...

4

1 に答える 1

2

glReadPixelsそれが画像データを読み取る唯一の方法だと誰が言いますか? おそらくOpenGL ESではそうですが、ESを使用している場合はそう言うべきです。この回答の残りの部分は、デスクトップ GL について話していることを前提としています。

テクスチャがあり、その内容を読みたい場合は、 を使用する必要がありますglGetTexImage。バッファ オブジェクトに読み込むかどうかを制御するスイッチはglReadPixels、バッファが にバインドされるかどうかを制御するスイッチと同じGL_PIXEL_PACK_BUFFERです。

テクスチャ全体glGetTexImageを取得することに注意してください(特定のミップマップ レベルに対して)。

于 2011-12-05T09:43:51.900 に答える