Dim unavailable refresh rates. Add "MAX" refresh. Dim refresh rates when set to windowed.
This commit is contained in:
@@ -96,6 +96,41 @@ RageDisplay::RageDisplay( HWND hWnd )
|
|||||||
m_pd3d->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &m_DesktopMode );
|
m_pd3d->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &m_DesktopMode );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int RageDisplay::MaxRefresh(int iWidth, int iHeight) const
|
||||||
|
{
|
||||||
|
int mx = D3DPRESENT_RATE_DEFAULT;
|
||||||
|
for( UINT u=0; u<m_pd3d->GetAdapterModeCount(D3DADAPTER_DEFAULT); u++ )
|
||||||
|
{
|
||||||
|
D3DDISPLAYMODE mode;
|
||||||
|
if( !SUCCEEDED( m_pd3d->EnumAdapterModes( D3DADAPTER_DEFAULT, u, &mode ) ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if(mode.Width != iWidth) continue;
|
||||||
|
if(mode.Height != iHeight) continue;
|
||||||
|
/* also test mode.Format? */
|
||||||
|
|
||||||
|
if(mx == D3DPRESENT_RATE_DEFAULT || mode.RefreshRate > mx)
|
||||||
|
mx = mode.RefreshRate;
|
||||||
|
}
|
||||||
|
return mx;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RageDisplay::GetHzAtResolution(int width, int height, CArray<int,int> &add) const
|
||||||
|
{
|
||||||
|
for( UINT u=0; u<m_pd3d->GetAdapterModeCount(D3DADAPTER_DEFAULT); u++ )
|
||||||
|
{
|
||||||
|
D3DDISPLAYMODE mode;
|
||||||
|
if( !SUCCEEDED( m_pd3d->EnumAdapterModes( D3DADAPTER_DEFAULT, u, &mode ) ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if(mode.Width != width) continue;
|
||||||
|
if(mode.Height != height) continue;
|
||||||
|
/* also test mode.Format? */
|
||||||
|
|
||||||
|
add.Add(mode.RefreshRate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
RageDisplay::~RageDisplay()
|
RageDisplay::~RageDisplay()
|
||||||
{
|
{
|
||||||
ReleaseVertexBuffer();
|
ReleaseVertexBuffer();
|
||||||
@@ -215,7 +250,10 @@ bool RageDisplay::SwitchDisplayMode(
|
|||||||
m_d3dpp.EnableAutoDepthStencil = TRUE;
|
m_d3dpp.EnableAutoDepthStencil = TRUE;
|
||||||
m_d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
|
m_d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
|
||||||
m_d3dpp.Flags = 0;
|
m_d3dpp.Flags = 0;
|
||||||
m_d3dpp.FullScreen_RefreshRateInHz = bWindowed ? D3DPRESENT_RATE_DEFAULT : iFullScreenHz;
|
m_d3dpp.FullScreen_RefreshRateInHz = bWindowed? D3DPRESENT_RATE_DEFAULT :
|
||||||
|
iFullScreenHz == 0? MaxRefresh(iWidth, iHeight):
|
||||||
|
iFullScreenHz == 1? D3DPRESENT_RATE_DEFAULT:
|
||||||
|
iFullScreenHz;
|
||||||
m_d3dpp.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
|
m_d3dpp.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
|
||||||
|
|
||||||
LOG->Trace( "Present Parameters: %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d",
|
LOG->Trace( "Present Parameters: %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d",
|
||||||
|
|||||||
@@ -108,6 +108,9 @@ public:
|
|||||||
int GetTPF() { return m_iTPF; };
|
int GetTPF() { return m_iTPF; };
|
||||||
int GetDPF() { return m_iDPF; };
|
int GetDPF() { return m_iDPF; };
|
||||||
|
|
||||||
|
int MaxRefresh(int iWidth, int iHeight) const;
|
||||||
|
void GetHzAtResolution(int width, int height, CArray<int,int> &add) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
D3DXMATRIX& GetTopMatrix() { return m_MatrixStack.ElementAt( m_MatrixStack.GetSize()-1 ); };
|
D3DXMATRIX& GetTopMatrix() { return m_MatrixStack.ElementAt( m_MatrixStack.GetSize()-1 ); };
|
||||||
|
|
||||||
|
|||||||
@@ -42,14 +42,21 @@ OptionLineData g_GraphicOptionsLines[NUM_GRAPHIC_OPTIONS_LINES] = {
|
|||||||
{ "Display", 2, {"FULLSCREEN", "WINDOWED"} },
|
{ "Display", 2, {"FULLSCREEN", "WINDOWED"} },
|
||||||
{ "Display Res", 7, {"320","400","512","640","800","1024","1280"} },
|
{ "Display Res", 7, {"320","400","512","640","800","1024","1280"} },
|
||||||
{ "Texture Res", 3, {"256","512","1024"} },
|
{ "Texture Res", 3, {"256","512","1024"} },
|
||||||
{ "Refresh Rate", 10, {"DEFAULT","60","70","72","75","80","85","90","100","120"} },
|
{ "Refresh Rate", 11, {"MAX","DEFAULT","60","70","72","75","80","85","90","100","120"} },
|
||||||
{ "Show Stats", 2, {"OFF","ON"} },
|
{ "Show Stats", 2, {"OFF","ON"} },
|
||||||
{ "BG Mode", 4, {"OFF","ANIMATIONS","VISUALIZATIONS","RANDOM MOVIES"} },
|
{ "BG Mode", 6, {"OFF","ANIMATIONS","VISUALIZATIONS","RANDOM MOVIES","fsdflksjfdlksjdflksfdj","fsdflksjfdlksjdflksfdj"} },
|
||||||
{ "BG Brightness", 5, {"20%","40%","60%","80%","100%"} },
|
{ "BG Brightness", 5, {"20%","40%","60%","80%","100%"} },
|
||||||
{ "Movie Decode", 4, {"1ms","2ms","3ms","4ms"} },
|
{ "Movie Decode", 4, {"1ms","2ms","3ms","4ms"} },
|
||||||
{ "BG For Banner", 2, {"NO", "YES (slow)"} },
|
{ "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() :
|
ScreenGraphicOptions::ScreenGraphicOptions() :
|
||||||
ScreenOptions(
|
ScreenOptions(
|
||||||
THEME->GetPathTo("Graphics","graphic options background"),
|
THEME->GetPathTo("Graphics","graphic options background"),
|
||||||
@@ -64,9 +71,60 @@ ScreenGraphicOptions::ScreenGraphicOptions() :
|
|||||||
g_GraphicOptionsLines,
|
g_GraphicOptionsLines,
|
||||||
NUM_GRAPHIC_OPTIONS_LINES
|
NUM_GRAPHIC_OPTIONS_LINES
|
||||||
);
|
);
|
||||||
|
UpdateRefreshRates();
|
||||||
m_Menu.StopTimer();
|
m_Menu.StopTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScreenGraphicOptions::UpdateRefreshRates()
|
||||||
|
{
|
||||||
|
CArray<int,int> hz;
|
||||||
|
|
||||||
|
DISPLAY->GetHzAtResolution(HorizRes[m_iSelectedOption[0][GO_DISPLAY_RESOLUTION]],
|
||||||
|
VertRes[m_iSelectedOption[0][GO_DISPLAY_RESOLUTION]], 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] = 0;
|
||||||
|
// PositionUnderlines();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenGraphicOptions::OnChange()
|
||||||
|
{
|
||||||
|
ScreenOptions::OnChange();
|
||||||
|
UpdateRefreshRates();
|
||||||
|
}
|
||||||
|
|
||||||
void ScreenGraphicOptions::ImportOptions()
|
void ScreenGraphicOptions::ImportOptions()
|
||||||
{
|
{
|
||||||
m_iSelectedOption[0][GO_WINDOWED] = PREFSMAN->m_bWindowed ? 1:0;
|
m_iSelectedOption[0][GO_WINDOWED] = PREFSMAN->m_bWindowed ? 1:0;
|
||||||
@@ -94,16 +152,17 @@ void ScreenGraphicOptions::ImportOptions()
|
|||||||
switch( PREFSMAN->m_iRefreshRate )
|
switch( PREFSMAN->m_iRefreshRate )
|
||||||
{
|
{
|
||||||
case 0: m_iSelectedOption[0][GO_REFRESH_RATE] = 0; break;
|
case 0: m_iSelectedOption[0][GO_REFRESH_RATE] = 0; break;
|
||||||
case 60: m_iSelectedOption[0][GO_REFRESH_RATE] = 1; break;
|
case 1: m_iSelectedOption[0][GO_REFRESH_RATE] = 1; break;
|
||||||
case 70: m_iSelectedOption[0][GO_REFRESH_RATE] = 2; break;
|
case 60: m_iSelectedOption[0][GO_REFRESH_RATE] = 2; break;
|
||||||
case 72: m_iSelectedOption[0][GO_REFRESH_RATE] = 3; break;
|
case 70: m_iSelectedOption[0][GO_REFRESH_RATE] = 3; break;
|
||||||
case 75: m_iSelectedOption[0][GO_REFRESH_RATE] = 4; break;
|
case 72: m_iSelectedOption[0][GO_REFRESH_RATE] = 4; break;
|
||||||
case 80: m_iSelectedOption[0][GO_REFRESH_RATE] = 5; break;
|
case 75: m_iSelectedOption[0][GO_REFRESH_RATE] = 5; break;
|
||||||
case 85: m_iSelectedOption[0][GO_REFRESH_RATE] = 6; break;
|
case 80: m_iSelectedOption[0][GO_REFRESH_RATE] = 6; break;
|
||||||
case 90: m_iSelectedOption[0][GO_REFRESH_RATE] = 7; break;
|
case 85: m_iSelectedOption[0][GO_REFRESH_RATE] = 7; break;
|
||||||
case 100: m_iSelectedOption[0][GO_REFRESH_RATE] = 8; break;
|
case 90: m_iSelectedOption[0][GO_REFRESH_RATE] = 8; break;
|
||||||
case 120: m_iSelectedOption[0][GO_REFRESH_RATE] = 9; break;
|
case 100: m_iSelectedOption[0][GO_REFRESH_RATE] = 9; break;
|
||||||
default: m_iSelectedOption[0][GO_REFRESH_RATE] = 0; 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_SHOWSTATS] = PREFSMAN->m_bShowStats ? 1:0;
|
||||||
@@ -119,22 +178,17 @@ void ScreenGraphicOptions::ImportOptions()
|
|||||||
m_iSelectedOption[0][GO_MOVIEDECODEMS] = PREFSMAN->m_iMovieDecodeMS-1;
|
m_iSelectedOption[0][GO_MOVIEDECODEMS] = PREFSMAN->m_iMovieDecodeMS-1;
|
||||||
m_iSelectedOption[0][GO_BGIFNOBANNER] = PREFSMAN->m_bUseBGIfNoBanner ? 1:0;
|
m_iSelectedOption[0][GO_BGIFNOBANNER] = PREFSMAN->m_bUseBGIfNoBanner ? 1:0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenGraphicOptions::ExportOptions()
|
void ScreenGraphicOptions::ExportOptions()
|
||||||
{
|
{
|
||||||
PREFSMAN->m_bWindowed = m_iSelectedOption[0][GO_WINDOWED] == 1;
|
PREFSMAN->m_bWindowed = m_iSelectedOption[0][GO_WINDOWED] == 1;
|
||||||
|
|
||||||
switch( m_iSelectedOption[0][GO_DISPLAY_RESOLUTION] )
|
if(m_iSelectedOption[0][GO_DISPLAY_RESOLUTION] > 6)
|
||||||
{
|
{
|
||||||
case 0: PREFSMAN->m_iDisplayResolution = 320; break;
|
ASSERT(0);
|
||||||
case 1: PREFSMAN->m_iDisplayResolution = 400; break;
|
m_iSelectedOption[0][GO_DISPLAY_RESOLUTION] = 3;
|
||||||
case 2: PREFSMAN->m_iDisplayResolution = 512; break;
|
|
||||||
case 3: PREFSMAN->m_iDisplayResolution = 640; break;
|
|
||||||
case 4: PREFSMAN->m_iDisplayResolution = 800; break;
|
|
||||||
case 5: PREFSMAN->m_iDisplayResolution = 1024; break;
|
|
||||||
case 6: PREFSMAN->m_iDisplayResolution = 1280; break;
|
|
||||||
default: ASSERT(0); PREFSMAN->m_iDisplayResolution = 640; break;
|
|
||||||
}
|
}
|
||||||
|
PREFSMAN->m_iDisplayResolution =
|
||||||
|
HorizRes[m_iSelectedOption[0][GO_DISPLAY_RESOLUTION]];
|
||||||
|
|
||||||
switch( m_iSelectedOption[0][GO_TEXTURE_RESOLUTION] )
|
switch( m_iSelectedOption[0][GO_TEXTURE_RESOLUTION] )
|
||||||
{
|
{
|
||||||
@@ -147,15 +201,16 @@ void ScreenGraphicOptions::ExportOptions()
|
|||||||
switch( m_iSelectedOption[0][GO_REFRESH_RATE] )
|
switch( m_iSelectedOption[0][GO_REFRESH_RATE] )
|
||||||
{
|
{
|
||||||
case 0: PREFSMAN->m_iRefreshRate = 0; break;
|
case 0: PREFSMAN->m_iRefreshRate = 0; break;
|
||||||
case 1: PREFSMAN->m_iRefreshRate = 60; break;
|
case 1: PREFSMAN->m_iRefreshRate = 1; break;
|
||||||
case 2: PREFSMAN->m_iRefreshRate = 70; break;
|
case 2: PREFSMAN->m_iRefreshRate = 60; break;
|
||||||
case 3: PREFSMAN->m_iRefreshRate = 72; break;
|
case 3: PREFSMAN->m_iRefreshRate = 70; break;
|
||||||
case 4: PREFSMAN->m_iRefreshRate = 75; break;
|
case 4: PREFSMAN->m_iRefreshRate = 72; break;
|
||||||
case 5: PREFSMAN->m_iRefreshRate = 80; break;
|
case 5: PREFSMAN->m_iRefreshRate = 75; break;
|
||||||
case 6: PREFSMAN->m_iRefreshRate = 85; break;
|
case 6: PREFSMAN->m_iRefreshRate = 80; break;
|
||||||
case 7: PREFSMAN->m_iRefreshRate = 90; break;
|
case 7: PREFSMAN->m_iRefreshRate = 85; break;
|
||||||
case 8: PREFSMAN->m_iRefreshRate = 100; break;
|
case 8: PREFSMAN->m_iRefreshRate = 90; break;
|
||||||
case 9: PREFSMAN->m_iRefreshRate = 120; break;
|
case 9: PREFSMAN->m_iRefreshRate = 100; break;
|
||||||
|
case 10:PREFSMAN->m_iRefreshRate = 120; break;
|
||||||
default: ASSERT(0); PREFSMAN->m_iRefreshRate = 0; break;
|
default: ASSERT(0); PREFSMAN->m_iRefreshRate = 0; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,9 @@ public:
|
|||||||
ScreenGraphicOptions();
|
ScreenGraphicOptions();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void UpdateRefreshRates();
|
||||||
|
|
||||||
|
void OnChange();
|
||||||
void ImportOptions();
|
void ImportOptions();
|
||||||
void ExportOptions();
|
void ExportOptions();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user