OpengGL帧缓冲中颜色附件纹理无法输出数据

在研究延迟渲染时发现G缓冲输出的纹理图像没有任何数据,显示为全黑。
经过漫长的摸索终于找到原因,居然是因为开启了混合,解决办法也很简单,在渲染G缓冲之前调用一下glDisable(GL_BLEND)就可以了。
如果必须要启用混合也是可以的,只需要注意创建纹理的时候采用RGBA格式,而非RGB:
错误:glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, width, height, 0, GL_RGB, GL_FLOAT, NULL);
正确:glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, width, height, 0, GL_RGBA, GL_FLOAT, NULL);
此外还需要在shader中指定为vec4而非vec3:
错误:layout (location = 0) out vec3 gPosition;
正确:layout (location = 0) out vec4 gPosition;
并且如果w分量为0也不会输出任何数据。

此外还需值得注意的是,绑定的位置不能与其它纹理缓冲冲突,否则会产生奇怪的效果。
例如G缓冲纹理已经占用0、1、2:

layout (location = 0) out vec4 gPosition;
layout (location = 1) out vec3 gNormal;
layout (location = 2) out vec4 gAlbedoSpec;

此时又将另一个纹理缓冲绑定到同一个shader中的0位置将发生冲突:

glBindImageTexture(0, mImageTexture, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA32F);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值