0

根据文档,我可以创建 HDR 压缩纹理,所以我这样做:

funcs->glGenTextures(1, &newCompressedTexture);
funcs->glActiveTexture(GL_TEXTURE0 + g_cTileTextureUnit);
funcs->glBindTexture(GL_TEXTURE_2D, newCompressedTexture);
funcs->glTexStorage2D(GL_TEXTURE_2D, 1, oglTileInfo.m_compressedInternalFormat, g_cTileWidthWithBorder, g_cTileWidthWithBorder);
funcs->glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, g_cTileWidthWithBorder, g_cTileWidthWithBorder, GL_RED, GL_FLOAT, getUncompressedData().rData()._m_data.data());

其中 oglTileInfo.m_compressedInternalFormat 是 GL_COMPRESSED_RED_RGTC1 或 GL_COMPRESSED_RGBA_ASTC_4x4_KHR。没有任何 gl 错误,着色器正常工作,但我通过纹理()获得的值被限制在 [0,1] 及其深度仅为 8 位之间。如果我使用 GL_R32F 作为纹理内部格式,一切正常,但我需要压缩。谢谢。

4

1 回答 1

1

如果您的 OpenGL 实现支持 ASTC 纹理,您可以将预压缩的 ASTC 数据上传到纹理。但是,ASTC 支持不需要为您压缩纹理数据的实现,因此根本不允许上传未压缩的数据。在上传之前,您必须在其他地方压缩您的数据。

此外,良好的 ASTC 压缩并不是特别快,因此如果您在应用程序中生成此浮点数据,那将是有问题的。

至于GL_COMPRESSED_RED_RGTC1,那是一种规范化的格式。因此,虽然需要实现来为您压缩数据,但它仍会将数据钳制为 [0, 1]。

BPTC要求实现能够内联压缩此类纹理。因此,使用其中一种浮点格式可能会起作用。但是,这样的压缩不会特别快,也不会特别

于 2019-01-14T14:38:53.870 回答