次のように、データを書き込み、フラグメント シェーダーでボクセルとして使用する 3D テクスチャがあります。
#extension GL_ARB_shader_image_size : enable
...
layout (binding = 0, rgba8) coherent uniform image3D volumeTexture;
...
void main(){
vec4 fragmentColor = ...
vec3 coords = ...
imageStore(volumeTexture, ivec3(coords), fragmentColor);
}
テクスチャはこのように定義されます
glGenTextures(1, &volumeTexture);
glBindTexture(GL_TEXTURE_3D, volumeTexture);
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA8, volumeDimensions, volumeDimensions, volumeDimensions, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
そして、これは私がそれを使わなければならないときに
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_3D, volumeTexture);
今私の問題は、非常に遅いことに気付いたので、opengl関数を使用せずに、これのmipmapバージョンが欲しいということです。したがって、すべてのレベルで 3D テクスチャを同時に書き込むことを考えていたので、たとえば、最大解像度は 512^3 で、その 3dtex に 1 つのボクセル VALUE を書き込むと、256^3 に対して 0.125*VALUE も書き込みます。 126 ^ 3などのボクセルと0.015625 * VALUE。原子性を使用するimageStoreを使用しているため、すべての値が書き込まれ、これらの重みを使用して自動的に平均値を取得します(補間とまったく同じではありませんが、満足のいく結果が得られる可能性がありますとりあえず)。だから私の質問は、複数の 3dtexture を持ち、同時にそれらすべてに書き込むための最良の方法は何ですか?