OpenGL 纹理格式 GL_R11F_G11F_B10F - 选择数据类型

Posted

技术标签:

【中文标题】OpenGL 纹理格式 GL_R11F_G11F_B10F - 选择数据类型【英文标题】:OpenGL texture format GL_R11F_G11F_B10F - choosing data type 【发布时间】:2022-01-17 19:23:08 【问题描述】:

我想使用内部格式为 GL_R11F_G11F_B10F 的纹理作为帧缓冲附件(后处理效果、HDR 渲染)。我不确定我应该选择哪种数据类型 - glTexImage2D 第 8 个参数。以下是可能的选项:

GL_HALF_FLOAT GL_FLOAT GL_UNSIGNED_INT_10F_11F_11F_REV

您能否解释一下我应该根据哪些标准选择该类型?

【问题讨论】:

您根据数据的格式选择。glTexImage2D 的数据来自哪里? 这是一个帧缓冲附件,所以最初 nullptr 作为数据参数传递给 glTexImage2D。然后片段着色器渲染到该纹理。 【参考方案1】:

glTexImage2Dformattype 指示 OpenGL 如何解释您通过 data 参数传递给该函数的图像。由于您只是分配纹理而不指定任何图像(即设置data = NULL),因此formattype 的确切值无关紧要。对它们的唯一要求是与internalformat 兼容,否则glTexImage2D 将在验证参数时生成GL_INVALID_OPERATION

但是,由于您没有指定图像,因此最好在此处使用glTexStorage2D。这个函数语义更简单,你根本不需要指定formattypedata

【讨论】:

以上是关于OpenGL 纹理格式 GL_R11F_G11F_B10F - 选择数据类型的主要内容,如果未能解决你的问题,请参考以下文章

将整数纹理附加到帧缓冲区

使用单通道纹理(OpenGL 2)?

绘制带纹理的四边形 OpenGL

用于 OpenGL 纹理映射的 Java 图像作为 ByteBuffer

GL_R32I TexImage2D 没有正确上传

Opengl:地球纹理