gpt4 book ai didi

c++ - 如何在 GLSL 中使用 RGBA16?

转载 作者:行者123 更新时间:2023-11-27 23:19:34 25 4
gpt4 key购买 nike

我正在尝试在 GLSL 中绘制一些深度图之王,为此我至少需要一个 10 位 channel 。我决定使用 GL_R16 或 GL_RGBA12 - 它们是最接近的,并且 GL_R16 将花费更少的 gpu 内存(因为它会……对吗?)。

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA12, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);

问题来了:如何让GLSL正常使用呢? Sampler2D 将其转换为经典的 8 位 RGBA...那夹紧呢?在 GLSL 中,每个分量颜色都归一化为 [0,1] - 16 位是否相同?我只想知道如何使用它。

最佳答案

Sampler2D converts it to classic 8-bit RGBA...

不,它没有。 sampler2d 不知道或不关心格式(除非它是整数格式,在这种情况下你会得到未定义的行为)。它将它转换成一个 float ;仅此而已。

What about the clamping?

夹紧无关紧要,因为 GL_RGBA16 是一种无符号规范化格式。 [0, 65535] 范围内的整数值被转换为 [0, 1],就像 GL_RGBA8 将 [0, 255] 转换为 [0, 1] 一样。这不是“夹紧”;这就是您的格式要求 OpenGL 执行的操作。更高的精度格式只会提供更好的精度;他们不提供更大的数字。

如果您想要实际获取 16 位整数作为整数,那么您需要使用一种实际存储整数 的格式。 GL_RGBA16UI 存储 16 位无符号整数。当然,这需要 OpneGL 3.x+ 硬件。并且您必须使用 usampler2d

关于c++ - 如何在 GLSL 中使用 RGBA16?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14262643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com