我不知道它是否是一個驅動程序錯誤,但以下情況發生:OpenGL的混合顏色GL_TEXTURE_3D在計算着色器
計算-shader.glsl:
#version 320 es
precision mediump float;
layout(local_size_x = 16, local_size_y = 8, local_size_z = 1) in;
layout(rgba8ui, binding = 0) writeonly uniform mediump uimage2D image;
layout(binding = 1) uniform mediump usampler3D grid;
void main() {
uint i = gl_GlobalInvocationID.y;
uint j = gl_GlobalInvocationID.x;
uvec4 val = texture(grid, vec3(float(i)/480.0,float(j)/640.0,0.5));
imageStore(image, ivec2(j,i), val);
}
的val
顏色通道完全加擾:
- 阿爾法 = 藍色
- 紅色=紅色
- 綠色 = 阿爾法
- 藍色 = 綠色
main.cpp中:
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_3D);
glBindTexture(GL_TEXTURE_3D, grid_tex_id);
glTexStorage3D(GL_TEXTURE_3D, 1, GL_RGBA8, 256, 256, 256);
glTexSubImage3D(GL_TEXTURE_3D, 0, 0, 0, 0, 256, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, grid.data);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
對此有任何合理的解釋嗎?注意:我不想使用破解val.ragb
(如果存在的話)。
你有任何證據表明'grid.data'是RGBA順序嗎? –
是的,我做了,我用'''uimage3D'''做了同樣的例子,而不是''usampler3D''',它工作得很好。 –