如何将glClearTexImage用于压缩深度/模具纹理



是否可以使用glClearTexImage清除OpenGL中的压缩深度/模具纹理?如果是,怎么做?

我使用的是像素格式为GL_FLOAT-32_UNSIGNED_INT_24_8_REV的多样本纹理。尝试使用清除纹理

glClearTexImage(textureId, 0, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, GL_FLOAT, nullptr);

产生错误

GL_INVALID_OPERATION error generated. <format> must be GL_DEPTH_STENCIL for depth-stencil textures.

这个错误消息中考虑了深度/模具纹理,这让我相信这应该是可能的。

如果我将格式参数更改为GL_DEPTH_STENCIL,我会得到错误

GL_INVALID_OPERATION error generated. Texture type and format combination is not valid.

我是不是把参数搞混了?还是我错过了清理包装纹理不在规格范围内?使用简单的GL_DEPTH_COMPONENT32F而不是压缩格式可以完美地工作。我还尝试创建一个只包含深度分量的纹理视图,并将其id作为第一个参数提供给glClearTexImage,但这会产生同样的错误。

我正在Windows10中的Nvidia Titan RTX上的OpenGL 4.6环境中测试这一点。

我混淆了内部格式和数据类型,这就是我使用错误参数的原因。包装深度/模版纹理可通过清除

glClearTexImage(textureId, 0, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, nullptr);

最新更新