2016-07-19 3 views
0

同じ「テクスチャメモリ」を異なる次元のテクスチャにバインドする方法を教えてください。同じ「テクスチャメモリ」を異なる次元のテクスチャにバインドする

たとえば、シェーダ内のsampler2DArrayと別のシェーダのsampler3Dを使用してグラフィックカードメモリにデータを2回ロードして保存することなく、2D画像の配列にアクセスする必要があります。

私はこのような何かしたいと思います:

glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D_ARRAY, tex); 
glTexImage3D(GL_TEXTURE_2D_ARRAY, ...); // allocate & store pixel data 

、その後:

glActiveTexture(GL_TEXTURE1); 
glBindTexture(GL_TEXTURE_3D, tex); // "reuse" the texture storage with a 
             // different dimensionality in another 
             // texture unit 

をしかし、最後の行は明らかに無効です。

これを行う方法はありますか?

答えて

0

OpenGL(4.3+)にはview texturesという概念があります。 immutable storageでテクスチャを作成すると、その不変のストレージを参照するテクスチャを作成できます。またはその不変のストレージの一部。画像フォーマット(互換性がある場合)やテクスチャターゲットのようなものを変更することができます。 2D配列の単一要素を抽出し、それを通常の2Dテクスチャとして使用することができます。または、2Dテクスチャを1つのレイヤーの2D配列に変換することもできます。

ただし、2D配列テクスチャのストレージを3Dテクスチャとして表示することはできません。またはその逆。彼らのミップマップは同じように動作しません。 3Dテクスチャーで、ミップマップは、2次元配列のテクスチャではX、Y及びZに減少し、彼らは唯一のXに小さく取得し、Y.

でもバルカンあなたは、3Dイメージ図であるVkImageViewを作成することはできません配列された2D画像として割り当てられたVkImageから(またはその逆)。

関連する問題