From 088fb0c2e1f31de8e83a7d281755e94620e0ffdc Mon Sep 17 00:00:00 2001 From: Ian Brown Date: Fri, 6 Nov 2020 16:30:58 +0000 Subject: [PATCH 1/2] Implement 2000 blend mode. Used by BGDA --- Source/gs/GSH_OpenGL/GSH_OpenGL.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/gs/GSH_OpenGL/GSH_OpenGL.cpp b/Source/gs/GSH_OpenGL/GSH_OpenGL.cpp index 131a8c18f0..331a20d727 100644 --- a/Source/gs/GSH_OpenGL/GSH_OpenGL.cpp +++ b/Source/gs/GSH_OpenGL/GSH_OpenGL.cpp @@ -844,6 +844,11 @@ void CGSH_OpenGL::SetupBlendingFunction(uint64 alphaReg) //2101 -> Cd * (1 - As) glBlendFuncSeparate(GL_ZERO, BLEND_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); } + else if((alpha.nA == ALPHABLEND_ABD_ZERO) && (alpha.nB == ALPHABLEND_ABD_CS) && (alpha.nC == ALPHABLEND_C_AS) && (alpha.nD == ALPHABLEND_ABD_CS)) + { + //2000 -> Cs * (1 - As) + glBlendFuncSeparate(BLEND_ONE_MINUS_SRC_ALPHA, GL_ZERO, GL_ONE, GL_ZERO); + } else { assert(0); From e1b6c1b7bff0540732fa12fd7a4e9fd12fcf8164 Mon Sep 17 00:00:00 2001 From: Ian Brown Date: Sat, 7 Nov 2020 23:46:25 +0000 Subject: [PATCH 2/2] review fix - move code to better respect ordering --- Source/gs/GSH_OpenGL/GSH_OpenGL.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/gs/GSH_OpenGL/GSH_OpenGL.cpp b/Source/gs/GSH_OpenGL/GSH_OpenGL.cpp index 331a20d727..431805d878 100644 --- a/Source/gs/GSH_OpenGL/GSH_OpenGL.cpp +++ b/Source/gs/GSH_OpenGL/GSH_OpenGL.cpp @@ -820,6 +820,11 @@ void CGSH_OpenGL::SetupBlendingFunction(uint64 alphaReg) glBlendColor(0, 0, 0, static_cast(alpha.nFix) / 128.0f); glBlendFuncSeparate(GL_ZERO, GL_CONSTANT_ALPHA, GL_ONE, GL_ZERO); } + else if((alpha.nA == ALPHABLEND_ABD_ZERO) && (alpha.nB == ALPHABLEND_ABD_CS) && (alpha.nC == ALPHABLEND_C_AS) && (alpha.nD == ALPHABLEND_ABD_CS)) + { + //2000 -> Cs * (1 - As) + glBlendFuncSeparate(BLEND_ONE_MINUS_SRC_ALPHA, GL_ZERO, GL_ONE, GL_ZERO); + } else if((alpha.nA == ALPHABLEND_ABD_ZERO) && (alpha.nB == ALPHABLEND_ABD_CS) && (alpha.nC == ALPHABLEND_C_AS) && (alpha.nD == ALPHABLEND_ABD_CD)) { //2001 -> Cd - Cs * As @@ -844,11 +849,6 @@ void CGSH_OpenGL::SetupBlendingFunction(uint64 alphaReg) //2101 -> Cd * (1 - As) glBlendFuncSeparate(GL_ZERO, BLEND_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); } - else if((alpha.nA == ALPHABLEND_ABD_ZERO) && (alpha.nB == ALPHABLEND_ABD_CS) && (alpha.nC == ALPHABLEND_C_AS) && (alpha.nD == ALPHABLEND_ABD_CS)) - { - //2000 -> Cs * (1 - As) - glBlendFuncSeparate(BLEND_ONE_MINUS_SRC_ALPHA, GL_ZERO, GL_ONE, GL_ZERO); - } else { assert(0);