From df0a74e1b5d9560db5170bb75907121f8a145c15 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sun, 4 May 2003 22:35:42 +0000 Subject: [PATCH] add glow modes --- stepmania/src/Actor.cpp | 8 ++++++++ stepmania/src/Actor.h | 3 +++ stepmania/src/BitmapText.cpp | 2 +- stepmania/src/RageDisplay.cpp | 35 +++++++++++++++++++++-------------- stepmania/src/RageDisplay.h | 2 +- stepmania/src/Sprite.cpp | 2 +- 6 files changed, 35 insertions(+), 17 deletions(-) diff --git a/stepmania/src/Actor.cpp b/stepmania/src/Actor.cpp index bae5579290..d26803732d 100644 --- a/stepmania/src/Actor.cpp +++ b/stepmania/src/Actor.cpp @@ -690,6 +690,13 @@ void Actor::Command( CString sCommandString ) /* Add left/right/top/bottom for alpha if needed. */ else if( sName=="diffusealpha" ) { for(int i = 0; i < 4; ++i) { RageColor c = GetDiffuses( i ); c.a = fParam(1); SetDiffuses( i, c ); } } else if( sName=="glow" ) SetGlow( RageColor(fParam(1),fParam(2),fParam(3),fParam(4)) ); + else if( sName=="glowmode" ) { + if(!sParam(1).CompareNoCase("whiten")) + SetGlowMode( GLOW_WHITEN ); + else if(!sParam(1).CompareNoCase("brighten")) + SetGlowMode( GLOW_BRIGHTEN ); + else ASSERT(0); + } else if( sName=="rotationx" ) SetRotationX( fParam(1) ); else if( sName=="rotationy" ) SetRotationY( fParam(1) ); else if( sName=="rotationz" ) SetRotationZ( fParam(1) ); @@ -770,6 +777,7 @@ void Actor::TweenState::Init() for(int i=0; i<4; i++) diffuse[i] = RageColor( 1, 1, 1, 1 ); glow = RageColor( 1, 1, 1, 0 ); + glowmode = GLOW_WHITEN; } void Actor::TweenState::MakeWeightedAverage( TweenState& average_out, const TweenState& ts1, const TweenState& ts2, float fPercentBetween ) diff --git a/stepmania/src/Actor.h b/stepmania/src/Actor.h index 82509137a2..361d946b84 100644 --- a/stepmania/src/Actor.h +++ b/stepmania/src/Actor.h @@ -46,6 +46,7 @@ public: RageVector3 scale; RageColor diffuse[4]; RageColor glow; + GlowMode glowmode; void Init(); static void MakeWeightedAverage( TweenState& average_out, const TweenState& ts1, const TweenState& ts2, float fPercentBetween ); @@ -132,6 +133,8 @@ public: virtual RageColor GetDiffuses( int i ) { return DestTweenState().diffuse[i]; }; virtual void SetGlow( RageColor c ) { DestTweenState().glow = c; }; virtual RageColor GetGlow() { return DestTweenState().glow; }; + virtual void SetGlowMode( GlowMode m ) { DestTweenState().glowmode = m; }; + virtual GlowMode GetGlowMode() { return DestTweenState().glowmode; }; virtual void BeginTweening( float time, TweenType tt = TWEEN_LINEAR ); diff --git a/stepmania/src/BitmapText.cpp b/stepmania/src/BitmapText.cpp index e320e34e00..cd2b3dc664 100644 --- a/stepmania/src/BitmapText.cpp +++ b/stepmania/src/BitmapText.cpp @@ -338,7 +338,7 @@ void BitmapText::DrawPrimitives() /* render the glow pass */ if( m_temp.glow.a > 0.0001f ) { - DISPLAY->SetTextureModeGlow(); + DISPLAY->SetTextureModeGlow(m_temp.glowmode); for( unsigned i=0; iEXT_texture_env_combine) { + if(m == GLOW_WHITEN && !m_oglspecs->EXT_texture_env_combine) + m = GLOW_BRIGHTEN; /* we can't do GLOW_WHITEN */ + + switch(m) + { + case GLOW_BRIGHTEN: SetBlendMode( GL_SRC_ALPHA, GL_ONE ); return; + + case GLOW_WHITEN: + /* 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); + 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); } void RageDisplay::SetBlendModeNormal() diff --git a/stepmania/src/RageDisplay.h b/stepmania/src/RageDisplay.h index d791a290f6..014550f148 100644 --- a/stepmania/src/RageDisplay.h +++ b/stepmania/src/RageDisplay.h @@ -61,7 +61,7 @@ public: void SetTexture( RageTexture* pTexture ); void SetTextureModeModulate(); - void SetTextureModeGlow(); + void SetTextureModeGlow(GlowMode m = GLOW_WHITEN ); void SetBlendModeNormal(); void SetBlendModeAdd(); bool ZBufferEnabled() const; diff --git a/stepmania/src/Sprite.cpp b/stepmania/src/Sprite.cpp index 952c2ef655..297a90a988 100644 --- a/stepmania/src/Sprite.cpp +++ b/stepmania/src/Sprite.cpp @@ -321,7 +321,7 @@ void Sprite::DrawPrimitives() ////////////////////// if( m_temp.glow.a > 0.0001f ) { - DISPLAY->SetTextureModeGlow(); + DISPLAY->SetTextureModeGlow(m_temp.glowmode); v[0].c = v[1].c = v[2].c = v[3].c = m_temp.glow; DISPLAY->DrawQuad( v ); }