Opengl 双混合-Radeon';问题

Opengl 双混合-Radeon';问题,opengl,framebuffer,fragment-shader,Opengl,Framebuffer,Fragment Shader,我正在尝试编写一个使用双源混合的着色器。在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 } 在这个阶段,我有一个固定基地组织与一种颜色的附件和

我正在尝试编写一个使用双源混合的着色器。在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
}
在这个阶段,我有一个固定基地组织与一种颜色的附件和呼吁 glDrawBuffers,输出数量为1,目标为GL_颜色_附件0

我正在使用以下混合函数:
src=GL\u ONE,dst=GL\u SRC1\u COLOR,src\u alpha=GL\u ONE,dst\u alpha=GL\u ONE

更重要的是,我应该使用
索引
关键字绑定输出:
布局(位置=0,索引=0)输出vec4 outputColor0;
布局(位置=0,索引=1)输出vec4 outputColor1

这没有帮助。 AMD的结果看起来像nVidia的,但有以下混合功能:
src=GL_ONE,dst=GL_ZERO,src_alpha=GL_ONE,dst_alpha=GL_ZERO

所以我假设第二个输出出现了问题

两张卡都支持扩展GL_ARB_blend_func_extended。 它们还返回
GL\u MAX\u DUAL\u SOURCE\u DRAW\u BUFFERS=1


我认为问题出在绑定输出的某个地方。调用glDrawBuffers(1,GL\u COLOR\u ATTACHMENT0)是否可能被解释为“忽略此:
(location=1)out vec3 O\u RT1
”,这会导致与src1==0混合?

为什么需要双重混合?您不能以其他方式实现相同的功能吗?性能更好。我知道这可以用另一种方式完成,但这是我最后要做的事情。如果这是你的瓶颈,如果你不能让它在AMD上工作,你有两个选择:你用另一种方式修复AMD,你最终会维护两个不同的源代码,或者你等待AMD的错误修复(除非AMD已经是正确的,只是nvidia在这里更为宽容)破坏您的30%的申请(或其他任何百分比)使用AMD硬件的人。尝试使用
glbindfragdatalocationdexed
?是的,我尝试了
glbindfragdatalocationdexed
。没有区别。我只是想确保我做的每件事都正确(绑定、设置混合函数等)。也许我的代码中有一个错误在nVidia上被忽略了,但它破坏了AMD。我担心它的AMD错误,取决于你是否只为AMD工作,或者只是改变AMD和nVidia的方法(你在Intel上试用过吗)?现在我无法在我的卡上使用它,但我的上限是GL 3.3