【发布时间】:2017-09-11 02:40:51
【问题描述】:
我真的对 OpenGL 中的所有类型格式感到困惑。我本质上想创建一个纹理,我可以写入整数,也可以从中读取整数。我尝试了以下方法:
glTexImage2D(GL_TEXTURE_2D, 0, GL_R32I, bufferRes.x, bufferRes.y, 0, GL_RED, GL_INT, NULL);
这给了我一个“无效操作”错误。如果我将 GL_R32I 更改为 GL_RED 我不会收到此错误。但是GL_R32I 不是正确的格式吗?如果不是,这是为了什么?
另外,如果我想在着色器中将此纹理读取为浮点数,我知道在另一种情况下我使用了 16 位整数:
glTexImage2D(GL_TEXTURE_2D, 0, GL_R16_SNORM, width, height, 0, GL_RED, GL_SHORT, NULL)
这是正确的做法。但是没有GL_R32_SNORM。我真的对所有这些感到困惑,因为我记得 GL_R16I 工作,但 GL_R32I 不是。
【问题讨论】:
-
@Rabbid 它确实支持它,结果我的第 7 个参数的格式错误,应该是 GL_RED_INTEGER 而不是 GL_RED。如果对任何人有帮助,我已经添加了答案。