我正在尝试编写一个使用双源混合的着色器。 nVidia的一切都运行良好,但在Radeon 7800上失败了(最新的驱动程序--14.12)。 我的GLSL着色器:
layout ( location = 0 ) out vec3 O_RT0 ;
layout ( location = 1 ) out vec3 O_RT1 ;
void main()
{
//filling O_RT0 and O_RT1 with some data
}
在这个阶段,我有一个带有一个颜色附件的FBO并打电话给我 glDrawBuffers,输出数为1,GL_COLOR_ATTACHMENT0为目标。
我正在使用以下混合功能:src = GL_ONE, dst = GL_SRC1_COLOR, src_alpha = GL_ONE, dst_alpha = GL_ONE
还有https://www.opengl.org/wiki/Blending#Dual_Source_Blending说我应该使用index
关键字绑定输出:
layout(location = 0, index = 0) out vec4 outputColor0;
layout(location = 0, index = 1) out vec4 outputColor1;
没有用。
AMD的搜索结果与nVidia相似,但有以下blendfunc:src = GL_ONE, dst = GL_ZERO, src_alpha = GL_ONE, dst_alpha = GL_ZERO
所以我认为第二次输出会发生错误。
两张卡都支持扩展GL_ARB_blend_func_extended。
他们还会返回GL_MAX_DUAL_SOURCE_DRAW_BUFFERS = 1
我认为这个问题是绑定输出的地方。调用glDrawBuffers(1,GL_COLOR_ATTACHMENT0)是否可能被解释为"忽略它:( location = 1 ) out vec3 O_RT1
"导致与src1 ==零混合?