From 1469f8ffd7d589a2da983bcefbab180dd36ad5dd Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Fri, 15 Apr 2005 11:03:04 +0000 Subject: [PATCH] add ClampOutputPercent for displays that can't display the full range of brightness --- stepmania/Themes/default/metrics.ini | 1 + stepmania/src/Background.cpp | 58 ++++++++++++++++++---------- stepmania/src/Background.h | 4 +- 3 files changed, 42 insertions(+), 21 deletions(-) diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index f311c85897..a5226935b4 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -2656,6 +2656,7 @@ BottomEdge=SCREEN_BOTTOM-20 BlinkDangerAll=1 DangerAllIsOpaque=1 BrightnessFadeCommand= +ClampOutputPercent=0 [Judgment] BooOddCommand= diff --git a/stepmania/src/Background.cpp b/stepmania/src/Background.cpp index 6429456148..552e34ce8b 100644 --- a/stepmania/src/Background.cpp +++ b/stepmania/src/Background.cpp @@ -31,10 +31,27 @@ ThemeMetric BOTTOM_EDGE ("Background","BottomEdge"); ThemeMetric BLINK_DANGER_ALL ("Background","BlinkDangerAll"); ThemeMetric DANGER_ALL_IS_OPAQUE ("Background","DangerAllIsOpaque"); ThemeMetric BRIGHTNESS_FADE_COMMAND ("Background","BrightnessFadeCommand"); +ThemeMetric CLAMP_OUTPUT_PERCENT ("Background","ClampOutputPercent"); static float g_fBackgroundCenterWidth = 40; const CString STATIC_BACKGROUND = "static background"; +static RageColor GetBrightnessColor( float fBrightnessPercent ) +{ + RageColor cBrightness = RageColor( 0,0,0,1-fBrightnessPercent ); + RageColor cClamp = RageColor( 0.5f,0.5f,0.5f,CLAMP_OUTPUT_PERCENT ); + + // blend the two colors above as if cBrightness is drawn, then cClamp drawn on top + cBrightness.a *= (1-cClamp.a); // premultiply alpha + + RageColor ret; + ret.a = cBrightness.a + cClamp.a; + ret.r = (cBrightness.r * cBrightness.a + cClamp.r * cClamp.a) / ret.a; + ret.g = (cBrightness.g * cBrightness.a + cClamp.g * cClamp.a) / ret.a; + ret.b = (cBrightness.b * cBrightness.a + cClamp.b * cClamp.a) / ret.a; + return ret; +} + Background::Background() { m_iCurBGChangeIndex = -1; @@ -59,11 +76,8 @@ void Background::Init() bool bOneOrMoreChars = false; bool bShowingBeginnerHelper = false; - FOREACH_PlayerNumber( p ) + FOREACH_HumanPlayer( p ) { - if( !GAMESTATE->IsHumanPlayer(p) ) - continue; - bOneOrMoreChars = true; // Disable dancing characters if BH will be showing. if( PREFSMAN->m_bShowBeginnerHelper && BeginnerHelper::CanUse() && @@ -74,19 +88,21 @@ void Background::Init() if( bOneOrMoreChars && !bShowingBeginnerHelper ) m_pDancingCharacters = new DancingCharacters; - m_quadBorder[0].StretchTo( RectF(SCREEN_LEFT,SCREEN_TOP,LEFT_EDGE,SCREEN_BOTTOM) ); - m_quadBorder[0].SetDiffuse( RageColor(0,0,0,1) ); - m_quadBorder[1].StretchTo( RectF(LEFT_EDGE,SCREEN_TOP,RIGHT_EDGE,TOP_EDGE) ); - m_quadBorder[1].SetDiffuse( RageColor(0,0,0,1) ); - m_quadBorder[2].StretchTo( RectF(RIGHT_EDGE,SCREEN_TOP,SCREEN_RIGHT,SCREEN_BOTTOM) ); - m_quadBorder[2].SetDiffuse( RageColor(0,0,0,1) ); - m_quadBorder[3].StretchTo( RectF(LEFT_EDGE,BOTTOM_EDGE,RIGHT_EDGE,SCREEN_BOTTOM) ); - m_quadBorder[3].SetDiffuse( RageColor(0,0,0,1) ); + RageColor c = GetBrightnessColor(0); - this->AddChild( &m_quadBorder[0] ); - this->AddChild( &m_quadBorder[1] ); - this->AddChild( &m_quadBorder[2] ); - this->AddChild( &m_quadBorder[3] ); + m_quadBorderLeft.StretchTo( RectF(SCREEN_LEFT,SCREEN_TOP,LEFT_EDGE,SCREEN_BOTTOM) ); + m_quadBorderLeft.SetDiffuse( c ); + m_quadBorderTop.StretchTo( RectF(LEFT_EDGE,SCREEN_TOP,RIGHT_EDGE,TOP_EDGE) ); + m_quadBorderTop.SetDiffuse( c ); + m_quadBorderRight.StretchTo( RectF(RIGHT_EDGE,SCREEN_TOP,SCREEN_RIGHT,SCREEN_BOTTOM) ); + m_quadBorderRight.SetDiffuse( c ); + m_quadBorderBottom.StretchTo( RectF(LEFT_EDGE,BOTTOM_EDGE,RIGHT_EDGE,SCREEN_BOTTOM) ); + m_quadBorderBottom.SetDiffuse( c ); + + this->AddChild( &m_quadBorderLeft ); + this->AddChild( &m_quadBorderTop ); + this->AddChild( &m_quadBorderRight ); + this->AddChild( &m_quadBorderBottom ); this->AddChild( &m_Brightness ); } @@ -735,8 +751,8 @@ void BrightnessOverlay::SetActualBrightness() if( !GAMESTATE->IsHumanPlayer(PLAYER_2) ) fRightBrightness = fLeftBrightness; - RageColor LeftColor( 0,0,0,1-fLeftBrightness ); - RageColor RightColor( 0,0,0,1-fRightBrightness ); + RageColor LeftColor = GetBrightnessColor(fLeftBrightness); + RageColor RightColor = GetBrightnessColor(fRightBrightness); m_quadBGBrightness[PLAYER_1].SetDiffuse( LeftColor ); m_quadBGBrightness[PLAYER_2].SetDiffuse( RightColor ); @@ -746,9 +762,11 @@ void BrightnessOverlay::SetActualBrightness() void BrightnessOverlay::Set( float fBrightness ) { + RageColor c = GetBrightnessColor(fBrightness); + FOREACH_PlayerNumber(pn) - m_quadBGBrightness[pn].SetDiffuse( RageColor(0,0,0,1-fBrightness) ); - m_quadBGBrightnessFade.SetDiffuse( RageColor(0,0,0,1-fBrightness) ); + m_quadBGBrightness[pn].SetDiffuse( c ); + m_quadBGBrightnessFade.SetDiffuse( c ); } void BrightnessOverlay::FadeToActualBrightness() diff --git a/stepmania/src/Background.h b/stepmania/src/Background.h index 226532d35e..0d0aedef58 100644 --- a/stepmania/src/Background.h +++ b/stepmania/src/Background.h @@ -73,7 +73,9 @@ protected: Actor *m_pFadingBGA; float m_fSecsLeftInFade; float m_fLastMusicSeconds; - Quad m_quadBorder[4]; // l, t, r, b - cover up the edge of animations that might hang outside of the background rectangle + + // cover up the edge of animations that might hang outside of the background rectangle + Quad m_quadBorderLeft, m_quadBorderTop, m_quadBorderRight, m_quadBorderBottom; BrightnessOverlay m_Brightness; };