diff --git a/stepmania/src/RageDisplay_OGL.cpp b/stepmania/src/RageDisplay_OGL.cpp index 74b9b353c0..c75b8705b5 100644 --- a/stepmania/src/RageDisplay_OGL.cpp +++ b/stepmania/src/RageDisplay_OGL.cpp @@ -1596,6 +1596,7 @@ void RageDisplay_OGL::SetBlendMode( BlendMode mode ) } int iSourceRGB, iDestRGB; + int iSourceAlpha = GL_ONE, iDestAlpha = GL_ONE_MINUS_SRC_ALPHA; switch( mode ) { case BLEND_NORMAL: @@ -1615,11 +1616,15 @@ void RageDisplay_OGL::SetBlendMode( BlendMode mode ) break; case BLEND_NO_EFFECT: iSourceRGB = GL_ZERO; iDestRGB = GL_ONE; + iSourceAlpha = GL_ZERO; iSourceAlpha = GL_ONE; break; DEFAULT_FAIL( mode ); } - glBlendFunc( iSourceRGB, iDestRGB ); + if( GLExt.glBlendFuncSeparate != NULL ) + GLExt.glBlendFuncSeparate( iSourceRGB, iDestRGB, iSourceAlpha, iDestAlpha ); + else + glBlendFunc( iSourceRGB, iDestRGB ); } bool RageDisplay_OGL::IsZWriteEnabled() const diff --git a/stepmania/src/RageDisplay_OGL_Helpers.cpp b/stepmania/src/RageDisplay_OGL_Helpers.cpp index 0287d4a186..3aac564c70 100644 --- a/stepmania/src/RageDisplay_OGL_Helpers.cpp +++ b/stepmania/src/RageDisplay_OGL_Helpers.cpp @@ -129,6 +129,9 @@ void GLExt_t::Load( LowLevelWindow *pWind ) LoadAllOrNothing( funcs, pWind); } + if( HasExtension("GL_EXT_blend_func_separate") ) + glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC) pWind->GetProcAddress("glBlendFuncSeparate"); + if( HasExtension("GL_EXT_blend_subtract") ) glBlendEquation = (PFNGLBLENDEQUATIONPROC) pWind->GetProcAddress("glBlendEquation"); diff --git a/stepmania/src/RageDisplay_OGL_Helpers.h b/stepmania/src/RageDisplay_OGL_Helpers.h index 742ed5ade0..2deedc5c6d 100644 --- a/stepmania/src/RageDisplay_OGL_Helpers.h +++ b/stepmania/src/RageDisplay_OGL_Helpers.h @@ -69,6 +69,7 @@ struct GLExt_t PWSWAPINTERVALEXTPROC wglSwapIntervalEXT; PFNGLCOLORTABLEPROC glColorTableEXT; + PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate; PFNGLBLENDEQUATIONPROC glBlendEquation; PFNGLCOLORTABLEPARAMETERIVPROC glGetColorTableParameterivEXT; PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;