From 138b96a3b089944fa2a1853f5ef4752de009b6fa Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sat, 24 Feb 2007 23:20:25 +0000 Subject: [PATCH] Unpremultiply shader --- stepmania/src/RageDisplay_OGL.cpp | 4 ++++ stepmania/src/RageTypes.cpp | 2 ++ stepmania/src/RageTypes.h | 1 + 3 files changed, 7 insertions(+) diff --git a/stepmania/src/RageDisplay_OGL.cpp b/stepmania/src/RageDisplay_OGL.cpp index 79225c5e23..71d9ad0640 100644 --- a/stepmania/src/RageDisplay_OGL.cpp +++ b/stepmania/src/RageDisplay_OGL.cpp @@ -350,6 +350,7 @@ GLhandleARB LoadShader( GLenum ShaderType, RString sFile, vector asDefi static int g_iAttribTextureMatrixScale; +static GLhandleARB g_bUnpremultiplyShader = 0; static GLhandleARB g_bColorBurnShader = 0; static GLhandleARB g_bColorDodgeShader = 0; static GLhandleARB g_bVividLightShader = 0; @@ -359,6 +360,7 @@ void InitShaders() { vector asDefines; g_bTextureMatrixShader = LoadShader( GL_VERTEX_SHADER_ARB, "Data/Shaders/GLSL/Texture matrix scaling.vert", asDefines ); + g_bUnpremultiplyShader = LoadShader( GL_FRAGMENT_SHADER_ARB, "Data/Shaders/GLSL/Unpremultiply.frag", asDefines ); g_bColorBurnShader = LoadShader( GL_FRAGMENT_SHADER_ARB, "Data/Shaders/GLSL/Color burn.frag", asDefines ); g_bColorDodgeShader = LoadShader( GL_FRAGMENT_SHADER_ARB, "Data/Shaders/GLSL/Color dodge.frag", asDefines ); g_bVividLightShader = LoadShader( GL_FRAGMENT_SHADER_ARB, "Data/Shaders/GLSL/Vivid light.frag", asDefines ); @@ -1576,6 +1578,7 @@ void RageDisplay_OGL::SetEffectMode( EffectMode effect ) switch( effect ) { case EffectMode_Normal: hShader = 0; break; + case EffectMode_Unpremultiply: hShader = g_bUnpremultiplyShader; break; case EffectMode_ColorBurn: hShader = g_bColorBurnShader; break; case EffectMode_ColorDodge: hShader = g_bColorDodgeShader; break; case EffectMode_VividLight: hShader = g_bVividLightShader; break; @@ -1598,6 +1601,7 @@ bool RageDisplay_OGL::IsEffectModeSupported( EffectMode effect ) switch( effect ) { case EffectMode_Normal: return true; + case EffectMode_Unpremultiply: return g_bUnpremultiplyShader != 0; case EffectMode_ColorBurn: return g_bColorBurnShader != 0; case EffectMode_ColorDodge: return g_bColorDodgeShader != 0; case EffectMode_VividLight: return g_bVividLightShader != 0; diff --git a/stepmania/src/RageTypes.cpp b/stepmania/src/RageTypes.cpp index d81004d1e4..eeea3db397 100644 --- a/stepmania/src/RageTypes.cpp +++ b/stepmania/src/RageTypes.cpp @@ -96,6 +96,8 @@ static const char *EffectModeNames[] = /* Normal blending. All supported texture modes have their standard effects. */ "Normal", + "Unpremultiply", + /* Layered blending. */ "ColorBurn", "ColorDodge", diff --git a/stepmania/src/RageTypes.h b/stepmania/src/RageTypes.h index de212906aa..45c10ee15d 100644 --- a/stepmania/src/RageTypes.h +++ b/stepmania/src/RageTypes.h @@ -37,6 +37,7 @@ LuaDeclareType( TextureMode ); enum EffectMode { EffectMode_Normal, + EffectMode_Unpremultiply, EffectMode_ColorBurn, EffectMode_ColorDodge, EffectMode_VividLight,