diff --git a/stepmania/src/RageDisplay.h b/stepmania/src/RageDisplay.h index 9538705f27..2b14b53f7e 100644 --- a/stepmania/src/RageDisplay.h +++ b/stepmania/src/RageDisplay.h @@ -203,9 +203,10 @@ public: virtual void ClearAllTextures() = 0; virtual int GetNumTextureUnits() = 0; virtual void SetTexture( TextureUnit tu, unsigned iTexture ) = 0; - virtual void SetTextureModeModulate() = 0; - virtual void SetTextureModeGlow() = 0; - virtual void SetTextureModeAdd() = 0; + virtual void SetTextureMode( TextureMode tm ) = 0; + void SetTextureModeModulate() { SetTextureMode( TextureMode_Modulate ); } + void SetTextureModeGlow() { SetTextureMode( TextureMode_Glow ); } + void SetTextureModeAdd() { SetTextureMode( TextureMode_Add ); } virtual void SetTextureWrapping( bool b ) = 0; virtual int GetMaxTextureSize() const = 0; virtual void SetTextureFiltering( bool b ) = 0; diff --git a/stepmania/src/RageDisplay_D3D.cpp b/stepmania/src/RageDisplay_D3D.cpp index 4e5a700efa..5d540d2b98 100644 --- a/stepmania/src/RageDisplay_D3D.cpp +++ b/stepmania/src/RageDisplay_D3D.cpp @@ -1155,46 +1155,42 @@ void RageDisplay_D3D::SetTexture( TextureUnit tu, unsigned iTexture ) SetPalette( iTexture ); } } -void RageDisplay_D3D::SetTextureModeModulate() + +void RageDisplay_D3D::SetTextureMode( TextureMode tm ) { if( g_currentTextureUnit >= (int) g_DeviceCaps.MaxSimultaneousTextures ) // not supported return; - // Use D3DTA_CURRENT instead of diffuse so that multitexturing works - // properly. For stage 0, D3DTA_CURRENT is the diffuse color. + switch( tm ) + { + case TextureMode_Modulate: + // Use D3DTA_CURRENT instead of diffuse so that multitexturing works + // properly. For stage 0, D3DTA_CURRENT is the diffuse color. - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLORARG1, D3DTA_TEXTURE ); - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLORARG2, D3DTA_CURRENT ); - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLOROP, D3DTOP_MODULATE ); - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAARG1, D3DTA_TEXTURE ); - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAARG2, D3DTA_CURRENT ); - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); -} - -void RageDisplay_D3D::SetTextureModeGlow() -{ - if( g_currentTextureUnit >= (int) g_DeviceCaps.MaxSimultaneousTextures ) // not supported - return; - - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLORARG1, D3DTA_TEXTURE ); - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLORARG2, D3DTA_CURRENT ); - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLOROP, D3DTOP_SELECTARG2 ); - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAARG1, D3DTA_TEXTURE ); - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAARG2, D3DTA_CURRENT ); - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); -} - -void RageDisplay_D3D::SetTextureModeAdd() -{ - if( g_currentTextureUnit >= (int) g_DeviceCaps.MaxSimultaneousTextures ) // not supported - return; - - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLORARG1, D3DTA_TEXTURE ); - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLORARG2, D3DTA_CURRENT ); - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLOROP, D3DTOP_ADD ); - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAARG1, D3DTA_TEXTURE ); - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAARG2, D3DTA_CURRENT ); - g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLORARG1, D3DTA_TEXTURE ); + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLORARG2, D3DTA_CURRENT ); + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLOROP, D3DTOP_MODULATE ); + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAARG1, D3DTA_TEXTURE ); + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAARG2, D3DTA_CURRENT ); + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); + break; + case TextureMode_Add: + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLORARG1, D3DTA_TEXTURE ); + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLORARG2, D3DTA_CURRENT ); + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLOROP, D3DTOP_ADD ); + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAARG1, D3DTA_TEXTURE ); + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAARG2, D3DTA_CURRENT ); + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); + break; + case TextureMode_Glow: + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLORARG1, D3DTA_TEXTURE ); + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLORARG2, D3DTA_CURRENT ); + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_COLOROP, D3DTOP_SELECTARG2 ); + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAARG1, D3DTA_TEXTURE ); + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAARG2, D3DTA_CURRENT ); + g_pd3dDevice->SetTextureStageState( g_currentTextureUnit, D3DTSS_ALPHAOP, D3DTOP_MODULATE ); + break; + } } void RageDisplay_D3D::SetTextureFiltering( bool b ) diff --git a/stepmania/src/RageDisplay_D3D.h b/stepmania/src/RageDisplay_D3D.h index ef29d564ad..4808ee107c 100644 --- a/stepmania/src/RageDisplay_D3D.h +++ b/stepmania/src/RageDisplay_D3D.h @@ -36,9 +36,7 @@ public: void ClearAllTextures(); int GetNumTextureUnits(); void SetTexture( TextureUnit tu, unsigned iTexture ); - void SetTextureModeModulate(); - void SetTextureModeGlow(); - void SetTextureModeAdd(); + void SetTextureMode( TextureMode tm ); void SetTextureWrapping( bool b ); int GetMaxTextureSize() const; void SetTextureFiltering( bool b); diff --git a/stepmania/src/RageDisplay_Null.h b/stepmania/src/RageDisplay_Null.h index cbad9bb9cf..4b11c21770 100644 --- a/stepmania/src/RageDisplay_Null.h +++ b/stepmania/src/RageDisplay_Null.h @@ -33,9 +33,7 @@ public: void ClearAllTextures() { } int GetNumTextureUnits() { return 1; } void SetTexture( TextureUnit tu, unsigned iTexture ) { } - void SetTextureModeModulate() { } - void SetTextureModeGlow() { } - void SetTextureModeAdd() { } + void SetTextureMode( TextureMode tm ) { } void SetTextureWrapping( bool b ) { } int GetMaxTextureSize() const { return 2048; } void SetTextureFiltering( bool b) { } diff --git a/stepmania/src/RageDisplay_OGL.cpp b/stepmania/src/RageDisplay_OGL.cpp index 1ee16f80c1..fdfb89e06a 100644 --- a/stepmania/src/RageDisplay_OGL.cpp +++ b/stepmania/src/RageDisplay_OGL.cpp @@ -1411,37 +1411,38 @@ void RageDisplay_OGL::SetTexture( TextureUnit tu, unsigned iTexture ) } } -void RageDisplay_OGL::SetTextureModeModulate() +void RageDisplay_OGL::SetTextureMode( TextureMode tm ) { - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); -} - -void RageDisplay_OGL::SetTextureModeGlow() -{ - if( !GLExt.m_bARB_texture_env_combine && !GLExt.m_bEXT_texture_env_combine ) + switch( tm ) { - /* This is changing blend state, instead of texture state, which isn't - * great, but it's better than doing nothing. */ - glBlendFunc( GL_SRC_ALPHA, GL_ONE ); - return; + case TextureMode_Modulate: + glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); + break; + case TextureMode_Add: + glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD ); + break; + case TextureMode_Glow: + if( !GLExt.m_bARB_texture_env_combine && !GLExt.m_bEXT_texture_env_combine ) + { + /* This is changing blend state, instead of texture state, which isn't + * great, but it's better than doing nothing. */ + glBlendFunc( GL_SRC_ALPHA, GL_ONE ); + return; + } + + /* Source color is the diffuse color only: */ + glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT ); + glTexEnvi( GL_TEXTURE_ENV, GLenum(GL_COMBINE_RGB_EXT), GL_REPLACE ); + glTexEnvi( GL_TEXTURE_ENV, GLenum(GL_SOURCE0_RGB_EXT), GL_PRIMARY_COLOR_EXT ); + + /* Source alpha is texture alpha * diffuse alpha: */ + glTexEnvi( GL_TEXTURE_ENV, GLenum(GL_COMBINE_ALPHA_EXT), GL_MODULATE ); + glTexEnvi( GL_TEXTURE_ENV, GLenum(GL_OPERAND0_ALPHA_EXT), GL_SRC_ALPHA ); + glTexEnvi( GL_TEXTURE_ENV, GLenum(GL_SOURCE0_ALPHA_EXT), GL_PRIMARY_COLOR_EXT ); + glTexEnvi( GL_TEXTURE_ENV, GLenum(GL_OPERAND1_ALPHA_EXT), GL_SRC_ALPHA ); + glTexEnvi( GL_TEXTURE_ENV, GLenum(GL_SOURCE1_ALPHA_EXT), GL_TEXTURE ); + break; } - - /* Source color is the diffuse color only: */ - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT ); - glTexEnvi( GL_TEXTURE_ENV, GLenum(GL_COMBINE_RGB_EXT), GL_REPLACE ); - glTexEnvi( GL_TEXTURE_ENV, GLenum(GL_SOURCE0_RGB_EXT), GL_PRIMARY_COLOR_EXT ); - - /* Source alpha is texture alpha * diffuse alpha: */ - glTexEnvi( GL_TEXTURE_ENV, GLenum(GL_COMBINE_ALPHA_EXT), GL_MODULATE ); - glTexEnvi( GL_TEXTURE_ENV, GLenum(GL_OPERAND0_ALPHA_EXT), GL_SRC_ALPHA ); - glTexEnvi( GL_TEXTURE_ENV, GLenum(GL_SOURCE0_ALPHA_EXT), GL_PRIMARY_COLOR_EXT ); - glTexEnvi( GL_TEXTURE_ENV, GLenum(GL_OPERAND1_ALPHA_EXT), GL_SRC_ALPHA ); - glTexEnvi( GL_TEXTURE_ENV, GLenum(GL_SOURCE1_ALPHA_EXT), GL_TEXTURE ); -} - -void RageDisplay_OGL::SetTextureModeAdd() -{ - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD); } void RageDisplay_OGL::SetTextureFiltering( bool b ) diff --git a/stepmania/src/RageDisplay_OGL.h b/stepmania/src/RageDisplay_OGL.h index 16282c7f4e..9d17e9115f 100644 --- a/stepmania/src/RageDisplay_OGL.h +++ b/stepmania/src/RageDisplay_OGL.h @@ -43,9 +43,7 @@ public: void ClearAllTextures(); int GetNumTextureUnits(); void SetTexture( TextureUnit tu, unsigned iTexture ); - void SetTextureModeModulate(); - void SetTextureModeGlow(); - void SetTextureModeAdd(); + void SetTextureMode( TextureMode tm ); void SetTextureWrapping( bool b ); int GetMaxTextureSize() const; void SetTextureFiltering( bool b);