FLOAT纹理作为COLOR附件分配给FBO?

为了离线渲染纹理,我附加了GL_COLOR_ATTACHMENT0附件定义的纹理

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

然后,我使用输出vec4的片段着色器呈现给FBO,所以通常情况下应该可以。 要检查我是否正确显示纹理,我使用该功能

glTexSubImage2D()

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

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

谢谢你提供的任何答案:)

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


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

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

这不会创建浮点纹理。 它创建一个包含标准化,无符号整数的纹理。

纹理的实际格式是第三个参数; 它定义了纹理实际包含的内容。 最后三个参数定义了你如何尝试将数据上传到纹理; 如果指针为NULL(并且没有绑定PBO),那么参数意味着什么。

链接地址: http://www.djcxy.com/p/38531.html

上一篇: FLOAT texture be assigned to a FBO as a COLOR attachment?

下一篇: CUDA Performance comparison for Computer Vision applications