我正在创建一个 2D 纹理,并且对我的纹理实际存储的数据类型感到困惑。我的输入是一个 2D 32 位浮点数组,现在归一化为 0-1。我正在使用类似于以下的调用创建纹理:
glTexImage2D(self._target, 0, GL_LUMINANCE, GL_LUMINANCE, gl.GL_UNSIGNED_BYTE, (2048, 8192))
并用类似这样的东西推送数据:
glTexSubImage2D(self._target, 0, x, y, GL_LUMINANCE, GL_FLOAT, data)
我知道,由于我使用亮度,数据被限制为 0 到 1 作为浮点数(这就是我对其进行归一化的原因)并且在 GLSL 中作为 vec4(L、L、L、1)提供给我。但是实际使用什么数据类型来存储该浮点数?它是否存储为单个 32 位浮点数,然后使其看起来像 GLSL 中的 vec4?
我问是因为如果我要切换到 GL_R32F 或类似的东西,我的纹理会占用与亮度相同数量的视频内存吗?有没有办法不将亮度数据从 0 钳位到 1。除了添加 alpha 来执行“填充”值(指示不应渲染纹素的值,如 NaN 或 -9999.0 之类的东西)之外,还有其他常见的方法吗)?
谢谢你的帮助。我正在使用包装 pyopengl 的 vispy python 包。