Files
itgmania212121/stepmania/src/ScreenGraphicOptions.cpp
T
Glenn Maynard 5ab889f509 Deal with systems that have different refresh rates available at 16bpp
and 32bpp.

(There are still systems that report refresh rates they can't really use ...
need to probe, I think.)
2002-08-29 20:59:47 +00:00

230 lines
7.6 KiB
C++

#include "stdafx.h"
/*
-----------------------------------------------------------------------------
Class: ScreenGraphicOptions
Desc: See header.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford
-----------------------------------------------------------------------------
*/
#include "ScreenGraphicOptions.h"
#include "RageTextureManager.h"
#include "RageUtil.h"
#include "RageMusic.h"
#include "ScreenManager.h"
#include "PrefsManager.h"
#include "GameConstantsAndTypes.h"
#include "StepMania.h"
#include "PrefsManager.h"
#include "RageLog.h"
enum {
GO_WINDOWED = 0,
GO_DISPLAY_RESOLUTION,
GO_TEXTURE_RESOLUTION,
GO_REFRESH_RATE,
GO_SHOWSTATS,
GO_BGMODE,
GO_BGBRIGHTNESS,
GO_MOVIEDECODEMS,
GO_BGIFNOBANNER,
NUM_GRAPHIC_OPTIONS_LINES
};
OptionLineData g_GraphicOptionsLines[NUM_GRAPHIC_OPTIONS_LINES] = {
{ "Display", 2, {"FULLSCREEN", "WINDOWED"} },
{ "Display Res", 7, {"320","400","512","640","800","1024","1280"} },
{ "Texture Res", 3, {"256","512","1024"} },
{ "Refresh Rate", 11, {"MAX","DEFAULT","60","70","72","75","80","85","90","100","120"} },
{ "Show Stats", 2, {"OFF","ON"} },
{ "BG Mode", 4, {"OFF","ANIMATIONS","VISUALIZATIONS","RANDOM MOVIES"} },
{ "BG Brightness", 11, {"0%","10%","20%","30%","40%","50%","60%","70%","80%","90%","100%"} },
{ "Movie Decode", 4, {"1ms","2ms","3ms","4ms"} },
{ "BG For Banner", 2, {"NO", "YES (slow)"} },
};
static const int HorizRes[] = {
320, 400, 512, 640, 800, 1024, 1280
};
static const int VertRes[] = {
240, 300, 384, 480, 600, 768, 1024
};
ScreenGraphicOptions::ScreenGraphicOptions() :
ScreenOptions(
THEME->GetPathTo("Graphics","graphic options background"),
THEME->GetPathTo("Graphics","graphic options page"),
THEME->GetPathTo("Graphics","graphic options top edge")
)
{
LOG->Trace( "ScreenGraphicOptions::ScreenGraphicOptions()" );
Init(
INPUTMODE_BOTH,
g_GraphicOptionsLines,
NUM_GRAPHIC_OPTIONS_LINES
);
UpdateRefreshRates();
m_Menu.StopTimer();
MUSIC->LoadAndPlayIfNotAlready( THEME->GetPathTo("Sounds","graphic options music") );
}
void ScreenGraphicOptions::UpdateRefreshRates()
{
CArray<int,int> hz;
/* XXX: We're hardcoded to 16bpp in StepMania.cpp; if we add a bpp option
* this needs to be changed. */
DISPLAY->GetHzAtResolution(HorizRes[m_iSelectedOption[0][GO_DISPLAY_RESOLUTION]],
VertRes[m_iSelectedOption[0][GO_DISPLAY_RESOLUTION]], 16 /* XXX */, hz);
/* Disable all refresh rates (except DEFAULT/MAX). */
int i;
for(i = 0; i < g_GraphicOptionsLines[GO_REFRESH_RATE].iNumOptions; ++i)
DimOption(GO_REFRESH_RATE, i, true);
/* If we're windowed, leave all refresh rates dimmed, but don't
* change the actual selection. */
if(m_iSelectedOption[0][GO_WINDOWED])
return;
/* Enable MAX and DEFAULT. */
DimOption(GO_REFRESH_RATE, 0, false);
DimOption(GO_REFRESH_RATE, 1, false);
/* Enable refresh rates. As we go, remember the highest
* refresh found. */
for(i = 0; i < hz.GetSize(); ++i)
{
for(int j = 1; j < g_GraphicOptionsLines[GO_REFRESH_RATE].iNumOptions; ++j)
{
if(atoi(g_GraphicOptionsLines[GO_REFRESH_RATE].szOptionsText[j]) != hz[i])
continue;
/* This refresh is available. */
DimOption(GO_REFRESH_RATE, j, false);
break;
}
}
/* If current refresh is no longer valid, set it to max. */
int CurSel = m_iSelectedOption[0][GO_REFRESH_RATE];
if(m_OptionDim[GO_REFRESH_RATE][CurSel])
m_iSelectedOption[0][GO_REFRESH_RATE] =
m_iSelectedOption[1][GO_REFRESH_RATE] = RageDisplay::REFRESH_MAX;
// PositionUnderlines();
}
void ScreenGraphicOptions::OnChange()
{
ScreenOptions::OnChange();
UpdateRefreshRates();
}
void ScreenGraphicOptions::ImportOptions()
{
m_iSelectedOption[0][GO_WINDOWED] = PREFSMAN->m_bWindowed ? 1:0;
switch( PREFSMAN->m_iDisplayResolution )
{
case 320: m_iSelectedOption[0][GO_DISPLAY_RESOLUTION] = 0; break;
case 400: m_iSelectedOption[0][GO_DISPLAY_RESOLUTION] = 1; break;
case 512: m_iSelectedOption[0][GO_DISPLAY_RESOLUTION] = 2; break;
case 640: m_iSelectedOption[0][GO_DISPLAY_RESOLUTION] = 3; break;
case 800: m_iSelectedOption[0][GO_DISPLAY_RESOLUTION] = 4; break;
case 1024: m_iSelectedOption[0][GO_DISPLAY_RESOLUTION] = 5; break;
case 1280: m_iSelectedOption[0][GO_DISPLAY_RESOLUTION] = 6; break;
default: m_iSelectedOption[0][GO_DISPLAY_RESOLUTION] = 3; break;
}
switch( PREFSMAN->m_iTextureResolution )
{
case 256: m_iSelectedOption[0][GO_TEXTURE_RESOLUTION] = 0; break;
case 512: m_iSelectedOption[0][GO_TEXTURE_RESOLUTION] = 1; break;
case 1024: m_iSelectedOption[0][GO_TEXTURE_RESOLUTION] = 2; break;
default: m_iSelectedOption[0][GO_TEXTURE_RESOLUTION] = 1; break;
}
switch( PREFSMAN->m_iRefreshRate )
{
case RageDisplay::REFRESH_MAX: m_iSelectedOption[0][GO_REFRESH_RATE] = 0; break;
case RageDisplay::REFRESH_DEFAULT: m_iSelectedOption[0][GO_REFRESH_RATE] = 1; break;
case 60: m_iSelectedOption[0][GO_REFRESH_RATE] = 2; break;
case 70: m_iSelectedOption[0][GO_REFRESH_RATE] = 3; break;
case 72: m_iSelectedOption[0][GO_REFRESH_RATE] = 4; break;
case 75: m_iSelectedOption[0][GO_REFRESH_RATE] = 5; break;
case 80: m_iSelectedOption[0][GO_REFRESH_RATE] = 6; break;
case 85: m_iSelectedOption[0][GO_REFRESH_RATE] = 7; break;
case 90: m_iSelectedOption[0][GO_REFRESH_RATE] = 8; break;
case 100: m_iSelectedOption[0][GO_REFRESH_RATE] = 9; break;
case 120: m_iSelectedOption[0][GO_REFRESH_RATE] = 10; break;
default: m_iSelectedOption[0][GO_REFRESH_RATE] = 1; break;
}
m_iSelectedOption[0][GO_SHOWSTATS] = PREFSMAN->m_bShowStats ? 1:0;
m_iSelectedOption[0][GO_BGMODE] = PREFSMAN->m_BackgroundMode;
m_iSelectedOption[0][GO_BGBRIGHTNESS] = roundf( PREFSMAN->m_fBGBrightness*10 );
m_iSelectedOption[0][GO_MOVIEDECODEMS] = PREFSMAN->m_iMovieDecodeMS-1;
m_iSelectedOption[0][GO_BGIFNOBANNER] = PREFSMAN->m_bUseBGIfNoBanner ? 1:0;
}
void ScreenGraphicOptions::ExportOptions()
{
PREFSMAN->m_bWindowed = m_iSelectedOption[0][GO_WINDOWED] == 1;
if(m_iSelectedOption[0][GO_DISPLAY_RESOLUTION] > 6)
{
ASSERT(0);
m_iSelectedOption[0][GO_DISPLAY_RESOLUTION] = 3;
}
PREFSMAN->m_iDisplayResolution =
HorizRes[m_iSelectedOption[0][GO_DISPLAY_RESOLUTION]];
switch( m_iSelectedOption[0][GO_TEXTURE_RESOLUTION] )
{
case 0: PREFSMAN->m_iTextureResolution = 256; break;
case 1: PREFSMAN->m_iTextureResolution = 512; break;
case 2: PREFSMAN->m_iTextureResolution = 1024; break;
default: ASSERT(0); PREFSMAN->m_iTextureResolution = 512; break;
}
switch( m_iSelectedOption[0][GO_REFRESH_RATE] )
{
case 0: PREFSMAN->m_iRefreshRate = RageDisplay::REFRESH_MAX; break;
case 1: PREFSMAN->m_iRefreshRate = RageDisplay::REFRESH_DEFAULT;break;
case 2: PREFSMAN->m_iRefreshRate = 60; break;
case 3: PREFSMAN->m_iRefreshRate = 70; break;
case 4: PREFSMAN->m_iRefreshRate = 72; break;
case 5: PREFSMAN->m_iRefreshRate = 75; break;
case 6: PREFSMAN->m_iRefreshRate = 80; break;
case 7: PREFSMAN->m_iRefreshRate = 85; break;
case 8: PREFSMAN->m_iRefreshRate = 90; break;
case 9: PREFSMAN->m_iRefreshRate = 100; break;
case 10:PREFSMAN->m_iRefreshRate = 120; break;
default: ASSERT(0); PREFSMAN->m_iRefreshRate = 0; break;
}
PREFSMAN->m_bShowStats = m_iSelectedOption[0][GO_SHOWSTATS] == 1;
PREFSMAN->m_BackgroundMode = PrefsManager::BackgroundMode( m_iSelectedOption[0][GO_BGMODE] );
PREFSMAN->m_fBGBrightness = m_iSelectedOption[0][GO_BGBRIGHTNESS] / 10.0f;
PREFSMAN->m_iMovieDecodeMS = m_iSelectedOption[0][GO_MOVIEDECODEMS]+1;
PREFSMAN->m_bUseBGIfNoBanner = m_iSelectedOption[0][GO_BGIFNOBANNER] == 1;
}
void ScreenGraphicOptions::GoToPrevState()
{
SCREENMAN->SetNewScreen( "ScreenTitleMenu" );
PREFSMAN->SaveGlobalPrefsToDisk();
ApplyGraphicOptions();
}
void ScreenGraphicOptions::GoToNextState()
{
GoToPrevState();
}