2002-08-13 23:26:46 +00:00
|
|
|
#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"
|
2003-01-02 07:54:28 +00:00
|
|
|
#include "RageSoundManager.h"
|
2002-08-13 23:26:46 +00:00
|
|
|
#include "ScreenManager.h"
|
|
|
|
|
#include "PrefsManager.h"
|
|
|
|
|
#include "GameConstantsAndTypes.h"
|
|
|
|
|
#include "StepMania.h"
|
|
|
|
|
#include "RageLog.h"
|
2002-11-11 04:53:31 +00:00
|
|
|
#include "ThemeManager.h"
|
2002-12-30 00:13:47 +00:00
|
|
|
#include "RageDisplay.h"
|
2002-08-13 23:26:46 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
enum {
|
|
|
|
|
GO_WINDOWED = 0,
|
|
|
|
|
GO_DISPLAY_RESOLUTION,
|
2002-11-11 04:53:31 +00:00
|
|
|
GO_DISPLAY_COLOR_DEPTH,
|
2003-01-11 20:15:00 +00:00
|
|
|
GO_MAX_TEXTURE_RESOLUTION,
|
2002-11-11 04:53:31 +00:00
|
|
|
GO_TEXTURE_COLOR_DEPTH,
|
2003-01-19 04:44:22 +00:00
|
|
|
GO_KEEP_TEXTURES_IN_MEM,
|
2002-11-12 09:24:36 +00:00
|
|
|
GO_REFRESH_RATE,
|
2002-08-18 16:19:26 +00:00
|
|
|
GO_MOVIEDECODEMS,
|
2002-09-03 00:22:19 +00:00
|
|
|
GO_VSYNC,
|
2002-08-13 23:26:46 +00:00
|
|
|
NUM_GRAPHIC_OPTIONS_LINES
|
|
|
|
|
};
|
2002-09-04 03:49:08 +00:00
|
|
|
OptionRowData g_GraphicOptionsLines[NUM_GRAPHIC_OPTIONS_LINES] = {
|
2002-09-10 21:16:34 +00:00
|
|
|
{ "Display\nMode", 2, {"FULLSCREEN", "WINDOWED"} },
|
|
|
|
|
{ "Display\nResolution", 7, {"320","400","512","640","800","1024","1280"} },
|
2002-11-11 04:53:31 +00:00
|
|
|
{ "Display\nColor", 2, {"16BIT","32BIT"} },
|
2003-01-11 20:15:00 +00:00
|
|
|
{ "Max Texture\nResolution",4, {"256","512","1024","2048"} },
|
2002-11-11 04:53:31 +00:00
|
|
|
{ "Texture\nColor", 2, {"16BIT","32BIT"} },
|
2003-01-19 04:44:22 +00:00
|
|
|
{ "Keep Textures\nIn Memory",2, {"NO","YES"} },
|
2002-11-12 09:24:36 +00:00
|
|
|
{ "Refresh\nRate", 11, {"DEFAULT","60","70","72","75","80","85","90","100","120","150"} },
|
2002-09-10 21:16:34 +00:00
|
|
|
{ "Movie\nDecode", 4, {"1ms","2ms","3ms","4ms"} },
|
|
|
|
|
{ "Wait For\nVsync", 2, {"NO", "YES"} },
|
2002-08-13 23:26:46 +00:00
|
|
|
};
|
|
|
|
|
|
2002-08-22 08:49:41 +00:00
|
|
|
static const int HorizRes[] = {
|
|
|
|
|
320, 400, 512, 640, 800, 1024, 1280
|
|
|
|
|
};
|
|
|
|
|
static const int VertRes[] = {
|
|
|
|
|
240, 300, 384, 480, 600, 768, 1024
|
|
|
|
|
};
|
2003-01-11 20:15:00 +00:00
|
|
|
static const int TextureRes[] = {
|
|
|
|
|
256, 512, 1024, 2048
|
|
|
|
|
};
|
2002-08-22 08:49:41 +00:00
|
|
|
|
2002-08-13 23:26:46 +00:00
|
|
|
ScreenGraphicOptions::ScreenGraphicOptions() :
|
|
|
|
|
ScreenOptions(
|
2002-09-24 02:55:32 +00:00
|
|
|
THEME->GetPathTo("BGAnimations","graphic options"),
|
2002-08-13 23:26:46 +00:00
|
|
|
THEME->GetPathTo("Graphics","graphic options page"),
|
|
|
|
|
THEME->GetPathTo("Graphics","graphic options top edge")
|
|
|
|
|
)
|
|
|
|
|
{
|
|
|
|
|
LOG->Trace( "ScreenGraphicOptions::ScreenGraphicOptions()" );
|
|
|
|
|
|
2002-09-10 21:16:34 +00:00
|
|
|
// fill g_InputOptionsLines with explanation text
|
|
|
|
|
for( int i=0; i<NUM_GRAPHIC_OPTIONS_LINES; i++ )
|
|
|
|
|
{
|
|
|
|
|
CString sLineName = g_GraphicOptionsLines[i].szTitle;
|
|
|
|
|
sLineName.Replace("\n","");
|
|
|
|
|
sLineName.Replace(" ","");
|
|
|
|
|
strcpy( g_GraphicOptionsLines[i].szExplanation, THEME->GetMetric("ScreenGraphicOptions",sLineName) );
|
|
|
|
|
}
|
|
|
|
|
|
2002-09-03 22:31:06 +00:00
|
|
|
Init(
|
2002-08-13 23:26:46 +00:00
|
|
|
INPUTMODE_BOTH,
|
|
|
|
|
g_GraphicOptionsLines,
|
2002-09-03 22:31:06 +00:00
|
|
|
NUM_GRAPHIC_OPTIONS_LINES,
|
|
|
|
|
false );
|
2002-08-13 23:26:46 +00:00
|
|
|
m_Menu.StopTimer();
|
2002-08-27 16:53:25 +00:00
|
|
|
|
2003-01-02 07:39:58 +00:00
|
|
|
SOUNDMAN->PlayMusic( THEME->GetPathTo("Sounds","graphic options music") );
|
2002-08-13 23:26:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ScreenGraphicOptions::ImportOptions()
|
|
|
|
|
{
|
|
|
|
|
m_iSelectedOption[0][GO_WINDOWED] = PREFSMAN->m_bWindowed ? 1:0;
|
|
|
|
|
|
2002-11-11 04:53:31 +00:00
|
|
|
switch( PREFSMAN->m_iDisplayWidth )
|
2002-08-13 23:26:46 +00:00
|
|
|
{
|
|
|
|
|
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;
|
|
|
|
|
}
|
2002-11-11 04:53:31 +00:00
|
|
|
|
|
|
|
|
switch( PREFSMAN->m_iDisplayColorDepth )
|
2002-08-13 23:26:46 +00:00
|
|
|
{
|
2002-11-11 04:53:31 +00:00
|
|
|
case 16: m_iSelectedOption[0][GO_DISPLAY_COLOR_DEPTH] = 0; break;
|
|
|
|
|
case 32: m_iSelectedOption[0][GO_DISPLAY_COLOR_DEPTH] = 1; break;
|
2002-08-13 23:26:46 +00:00
|
|
|
}
|
2002-11-11 04:53:31 +00:00
|
|
|
|
2003-01-11 20:15:00 +00:00
|
|
|
switch( PREFSMAN->m_iMaxTextureResolution )
|
|
|
|
|
{
|
|
|
|
|
case 256: m_iSelectedOption[0][GO_MAX_TEXTURE_RESOLUTION] = 0; break;
|
|
|
|
|
case 512: m_iSelectedOption[0][GO_MAX_TEXTURE_RESOLUTION] = 1; break;
|
|
|
|
|
case 1024: m_iSelectedOption[0][GO_MAX_TEXTURE_RESOLUTION] = 2; break;
|
|
|
|
|
case 2048: m_iSelectedOption[0][GO_MAX_TEXTURE_RESOLUTION] = 3; break;
|
|
|
|
|
default: m_iSelectedOption[0][GO_MAX_TEXTURE_RESOLUTION] = 3; break;
|
|
|
|
|
}
|
|
|
|
|
|
2002-11-11 04:53:31 +00:00
|
|
|
switch( PREFSMAN->m_iTextureColorDepth )
|
2002-08-13 23:26:46 +00:00
|
|
|
{
|
2002-11-11 04:53:31 +00:00
|
|
|
case 16: m_iSelectedOption[0][GO_TEXTURE_COLOR_DEPTH] = 0; break;
|
|
|
|
|
case 32: m_iSelectedOption[0][GO_TEXTURE_COLOR_DEPTH] = 1; break;
|
2002-08-13 23:26:46 +00:00
|
|
|
}
|
|
|
|
|
|
2003-01-19 04:44:22 +00:00
|
|
|
m_iSelectedOption[0][GO_KEEP_TEXTURES_IN_MEM] = PREFSMAN->m_iUnloadTextureDelaySeconds>0 ? 1:0;
|
|
|
|
|
|
2002-11-12 09:24:36 +00:00
|
|
|
switch(PREFSMAN->m_iRefreshRate)
|
|
|
|
|
{
|
|
|
|
|
case REFRESH_DEFAULT: m_iSelectedOption[0][GO_REFRESH_RATE] = 0; break;
|
|
|
|
|
default:
|
|
|
|
|
for(unsigned i = 2; i < g_GraphicOptionsLines[GO_REFRESH_RATE].iNumOptions; ++i) {
|
|
|
|
|
if(atoi(g_GraphicOptionsLines[GO_REFRESH_RATE].szOptionsText[i]) <= PREFSMAN->m_iRefreshRate)
|
|
|
|
|
m_iSelectedOption[0][GO_REFRESH_RATE] = i;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2002-08-18 16:19:26 +00:00
|
|
|
m_iSelectedOption[0][GO_MOVIEDECODEMS] = PREFSMAN->m_iMovieDecodeMS-1;
|
2002-09-18 20:42:33 +00:00
|
|
|
m_iSelectedOption[0][GO_VSYNC] = PREFSMAN->m_bVsync ? 1:0;
|
2002-08-13 23:26:46 +00:00
|
|
|
}
|
2002-09-18 20:42:33 +00:00
|
|
|
|
2002-08-13 23:26:46 +00:00
|
|
|
void ScreenGraphicOptions::ExportOptions()
|
|
|
|
|
{
|
|
|
|
|
PREFSMAN->m_bWindowed = m_iSelectedOption[0][GO_WINDOWED] == 1;
|
|
|
|
|
|
2002-08-22 08:49:41 +00:00
|
|
|
if(m_iSelectedOption[0][GO_DISPLAY_RESOLUTION] > 6)
|
2002-08-13 23:26:46 +00:00
|
|
|
{
|
2002-08-22 08:49:41 +00:00
|
|
|
ASSERT(0);
|
|
|
|
|
m_iSelectedOption[0][GO_DISPLAY_RESOLUTION] = 3;
|
2002-08-13 23:26:46 +00:00
|
|
|
}
|
2002-11-11 04:53:31 +00:00
|
|
|
PREFSMAN->m_iDisplayWidth = HorizRes[m_iSelectedOption[0][GO_DISPLAY_RESOLUTION]];
|
|
|
|
|
PREFSMAN->m_iDisplayHeight = VertRes[m_iSelectedOption[0][GO_DISPLAY_RESOLUTION]];
|
|
|
|
|
|
|
|
|
|
switch( m_iSelectedOption[0][GO_DISPLAY_COLOR_DEPTH] )
|
|
|
|
|
{
|
|
|
|
|
case 0: PREFSMAN->m_iDisplayColorDepth = 16; break;
|
|
|
|
|
case 1: PREFSMAN->m_iDisplayColorDepth = 32; break;
|
|
|
|
|
default: ASSERT(0); PREFSMAN->m_iDisplayColorDepth = 16; break;
|
|
|
|
|
}
|
2002-08-13 23:26:46 +00:00
|
|
|
|
2003-01-11 20:15:00 +00:00
|
|
|
PREFSMAN->m_iMaxTextureResolution = TextureRes[m_iSelectedOption[0][GO_MAX_TEXTURE_RESOLUTION]];
|
|
|
|
|
|
2002-11-11 04:53:31 +00:00
|
|
|
switch( m_iSelectedOption[0][GO_TEXTURE_COLOR_DEPTH] )
|
2002-08-13 23:26:46 +00:00
|
|
|
{
|
2002-11-11 04:53:31 +00:00
|
|
|
case 0: PREFSMAN->m_iTextureColorDepth = 16; break;
|
|
|
|
|
case 1: PREFSMAN->m_iTextureColorDepth = 32; break;
|
|
|
|
|
default: ASSERT(0); PREFSMAN->m_iTextureColorDepth = 16; break;
|
2002-08-13 23:26:46 +00:00
|
|
|
}
|
2002-10-03 03:24:34 +00:00
|
|
|
|
2003-01-19 04:44:22 +00:00
|
|
|
PREFSMAN->m_iUnloadTextureDelaySeconds = (m_iSelectedOption[0][GO_KEEP_TEXTURES_IN_MEM] == 1) ? 1200 : 0; // 20 mins
|
|
|
|
|
|
2002-11-12 09:24:36 +00:00
|
|
|
if(m_iSelectedOption[0][GO_REFRESH_RATE] == 0)
|
|
|
|
|
PREFSMAN->m_iRefreshRate = REFRESH_DEFAULT;
|
2003-01-19 04:44:22 +00:00
|
|
|
else
|
|
|
|
|
{
|
2002-11-12 09:24:36 +00:00
|
|
|
int n = m_iSelectedOption[0][GO_REFRESH_RATE];
|
|
|
|
|
PREFSMAN->m_iRefreshRate = atoi(g_GraphicOptionsLines[GO_REFRESH_RATE].szOptionsText[n]);
|
|
|
|
|
}
|
|
|
|
|
|
2002-08-18 16:19:26 +00:00
|
|
|
PREFSMAN->m_iMovieDecodeMS = m_iSelectedOption[0][GO_MOVIEDECODEMS]+1;
|
2002-09-03 00:22:19 +00:00
|
|
|
PREFSMAN->m_bVsync = m_iSelectedOption[0][GO_VSYNC] == 1;
|
2002-08-13 23:26:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ScreenGraphicOptions::GoToPrevState()
|
|
|
|
|
{
|
2003-01-31 23:31:35 +00:00
|
|
|
SCREENMAN->SetNewScreen( "ScreenOptionsMenu" );
|
2002-08-13 23:26:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ScreenGraphicOptions::GoToNextState()
|
|
|
|
|
{
|
2003-01-31 23:31:35 +00:00
|
|
|
PREFSMAN->SaveGlobalPrefsToDisk();
|
|
|
|
|
ApplyGraphicOptions();
|
2002-08-13 23:26:46 +00:00
|
|
|
GoToPrevState();
|
|
|
|
|
}
|
|
|
|
|
|