OpenGL立方体贴图只能写入一张脸[关闭]

问题描述 投票:0回答:1

我有一个像这样的立方体贴图纹理:

uint32_t skyboxTextureUnfiltered = -1;
glGenTextures(1, &skyboxTextureUnfiltered);
glBindTexture(GL_TEXTURE_CUBE_MAP, skyboxTextureUnfiltered);
glTexStorage2D(GL_TEXTURE_CUBE_MAP, 6, GL_RGBA32F, m_SkyboxSize, m_SkyboxSize);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

我在上面运行一个计算着色器:

glBindImageTexture(0, skyboxTextureUnfiltered, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA32F);
glUseProgram(m_EquirectToCubeID);
glDispatchCompute(m_SkyboxSize, m_SkyboxSize, 6);

我的计算着色器看起来像:

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
layout(binding = 0, rgba32f) uniform imageCube outputTexture;

void main(void)
{
    imageStore(outputTexture, ivec3(gl_GlobalInvocationID), vec4(1.0f));
}

毕竟,当我尝试在 RenderDoc 中查看其内容时,我只看到 +X 面是白色的,其余都是黑色的。

为什么会这样?

c++ opengl glsl textures
1个回答
2
投票
glBindImageTexture(0, skyboxTextureUnfiltered, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA32F);

在这里,您将

GL_FALSE
传递给
layered
参数。这意味着只有一个层(这里是第 0 层)将被绑定。对于立方贴图纹理,每个面都是一个图层。

你应该通过

GL_TRUE
代替:

glBindImageTexture(0, skyboxTextureUnfiltered, 0, GL_TRUE, 0, GL_READ_WRITE, GL_RGBA32F);
© www.soinside.com 2019 - 2024. All rights reserved.