2011-12-05 8 views
0

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

私は間違っていない場合は、すべてのスライスに個別の2Dテクスチャを使用できますが、それは(3D-)ミップマップをねじることになります。 3次元ミップマップを使用して、得られた3Dテクスチャの関心領域を効率的に見つけたいと思っていました。

P.S.次善のタグを申し訳ありませんが、これまで誰も以前に3Dテクスチャについて尋ねたことはありません。新しいタグを作成することはできません。

答えて

2

画像データを読み取る唯一の方法はglReadPixelsです。おそらくOpenGL ESであるかもしれませんが、ESを使用している場合はそうだと言えます。この回答の残りの部分は、あなたがデスクトップGLについて話していると仮定しています。

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

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

+0

これは、PBOの仕様とさまざまな例を勉強したときの印象でした。私はESを使用していないので、 'glGetTexImage'が私の仕事をします。私は何かが足りなかったことを知っていた...ありがとう! – Awaki

関連する問題