可以将GL_FLOAT纹理作为COLOR附件分配给FBO吗?

时间:2011-07-27 17:56:34

标签: c++ opengl fbo

对于纹理的屏幕外渲染,我在附件GL_COLOR_ATTACHMENT0附加了由

定义的纹理
  

glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,宽度,高度,0,GL_RGBA,GL_FLOAT,NULL);

然后我使用片段着色器渲染到FBO,输出vec4,所以通常情况下应该没问题。要检查我是否正确显示纹理,我使用函数

  

glTexSubImage2D()

在纹理中间添加一些灰色像素。正确显示纹理(我可以在正确的位置完美地看到这些像素),但纹理的其余部分只是嘈杂的伪像(当它不是黑色时)。

这是否来自我使用GL_FLOAT作为GL_RGBA纹理的事实?如果是的话,我怎样才能在GLSL中将uvec4转换为vec4?我的主着色器的输出是vec4,我不知道如何将usampler2D纹理的uvec4输出转换为我的最终vec4。

感谢您提供的任何答案:)

编辑:我找到了解决方案:我没有清除我的2个渲染之间的GL_COLOR_BUFFER_BIT。

1 个答案:

答案 0 :(得分:3)

我知道这个问题是自我回答的,但需要就此进行讨论:

glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,width,height,0,GL_RGBA,GL_FLOAT,NULL);

创建浮点纹理。它创建一个包含规范化无符号整数的纹理。

actual format of a texture是第三个参数;它定义了纹理实际包含的内容。最后三个参数定义了您尝试upload data to the texture的方式;如果指针为NULL(并且没有绑定PBO),那么参数意味着 nothing