2009-07-28 21:32:10 +00:00
|
|
|
// Copyright (C) 2003 Dolphin Project.
|
2008-12-08 05:25:12 +00:00
|
|
|
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
|
|
// it under the terms of the GNU General Public License as published by
|
|
|
|
// the Free Software Foundation, version 2.0.
|
|
|
|
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
// GNU General Public License 2.0 for more details.
|
|
|
|
|
|
|
|
// A copy of the GPL 2.0 should have been included with the program.
|
|
|
|
// If not, see http://www.gnu.org/licenses/
|
|
|
|
|
|
|
|
// Official SVN repository and contact information can be found at
|
|
|
|
// http://code.google.com/p/dolphin-emu/
|
|
|
|
|
|
|
|
#include <windowsx.h>
|
|
|
|
|
|
|
|
#include "resource.h"
|
|
|
|
#include "W32Util/PropertySheet.h"
|
|
|
|
#include "W32Util/ShellUtil.h"
|
|
|
|
|
|
|
|
#include "D3DBase.h"
|
|
|
|
|
2009-09-13 09:23:30 +00:00
|
|
|
#include "VideoConfig.h"
|
2008-12-08 05:25:12 +00:00
|
|
|
|
|
|
|
#include "TextureCache.h"
|
2009-09-15 08:13:45 +00:00
|
|
|
// TODO: remove if/when ini files use unicode
|
|
|
|
#define ComboBox_GetTextA(hwndCtl, lpch, cchMax) GetWindowTextA((hwndCtl), (lpch), (cchMax))
|
2008-12-08 05:25:12 +00:00
|
|
|
|
|
|
|
struct TabDirect3D : public W32Util::Tab
|
|
|
|
{
|
|
|
|
void Init(HWND hDlg)
|
|
|
|
{
|
2009-09-02 06:33:41 +00:00
|
|
|
WCHAR tempwstr[2000];
|
|
|
|
|
2009-09-13 08:21:35 +00:00
|
|
|
for (int i = 0; i < D3D::GetNumAdapters(); i++)
|
2008-12-08 05:25:12 +00:00
|
|
|
{
|
|
|
|
const D3D::Adapter &adapter = D3D::GetAdapter(i);
|
2009-09-02 06:33:41 +00:00
|
|
|
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, adapter.ident.Description, -1, tempwstr, 2000);
|
|
|
|
ComboBox_AddString(GetDlgItem(hDlg,IDC_ADAPTER),tempwstr);
|
2008-12-08 05:25:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
const D3D::Adapter &adapter = D3D::GetAdapter(g_Config.iAdapter);
|
2009-09-13 08:21:35 +00:00
|
|
|
ComboBox_SetCurSel(GetDlgItem(hDlg, IDC_ADAPTER), g_Config.iAdapter);
|
2008-12-08 05:25:12 +00:00
|
|
|
|
|
|
|
for (int i = 0; i < (int)adapter.aa_levels.size(); i++)
|
|
|
|
{
|
2009-09-02 06:33:41 +00:00
|
|
|
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, adapter.aa_levels[i].name, -1, tempwstr, 2000);
|
|
|
|
ComboBox_AddString(GetDlgItem(hDlg, IDC_ANTIALIASMODE), tempwstr);
|
2008-12-08 05:25:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
ComboBox_SetCurSel(GetDlgItem(hDlg, IDC_ANTIALIASMODE), g_Config.iMultisampleMode);
|
|
|
|
if (adapter.aa_levels.size() == 1)
|
|
|
|
{
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_ANTIALIASMODE), FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int i = 0; i < (int)adapter.resolutions.size(); i++)
|
|
|
|
{
|
|
|
|
const D3D::Resolution &r = adapter.resolutions[i];
|
2009-09-02 06:33:41 +00:00
|
|
|
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, r.name, -1, tempwstr, 2000);
|
|
|
|
ComboBox_AddString(GetDlgItem(hDlg,IDC_RESOLUTION), tempwstr);
|
2009-10-19 12:13:35 +00:00
|
|
|
ComboBox_AddString(GetDlgItem(hDlg,IDC_RESOLUTIONWINDOWED),tempwstr);
|
2008-12-08 05:25:12 +00:00
|
|
|
}
|
2009-09-15 08:13:45 +00:00
|
|
|
|
|
|
|
for (int i = 0; i <16; i++) tempwstr[i] = g_Config.cFSResolution[i];
|
|
|
|
ComboBox_SelectString(GetDlgItem(hDlg,IDC_RESOLUTION), -1, tempwstr);
|
2009-10-19 12:13:35 +00:00
|
|
|
|
2009-09-15 08:13:45 +00:00
|
|
|
for (int i = 0; i < 16; i++) tempwstr[i] = g_Config.cInternalRes[i];
|
|
|
|
ComboBox_SelectString(GetDlgItem(hDlg,IDC_RESOLUTIONWINDOWED), -1, tempwstr);
|
2008-12-08 05:25:12 +00:00
|
|
|
|
|
|
|
CheckDlgButton(hDlg, IDC_FULLSCREENENABLE, g_Config.bFullscreen ? TRUE : FALSE);
|
2009-09-15 08:13:45 +00:00
|
|
|
CheckDlgButton(hDlg, IDC_VSYNC, g_Config.bVSync ? TRUE : FALSE);
|
2009-09-13 08:21:35 +00:00
|
|
|
CheckDlgButton(hDlg, IDC_RENDER_TO_MAINWINDOW, g_Config.RenderToMainframe ? TRUE : FALSE);
|
2009-09-13 17:46:33 +00:00
|
|
|
CheckDlgButton(hDlg, IDC_ASPECT_16_9, g_Config.bKeepAR169 ? TRUE : FALSE);
|
|
|
|
CheckDlgButton(hDlg, IDC_ASPECT_4_3, g_Config.bKeepAR43 ? TRUE : FALSE);
|
|
|
|
CheckDlgButton(hDlg, IDC_WIDESCREEN_HACK, g_Config.bWidescreenHack ? TRUE : FALSE);
|
2009-09-19 13:14:55 +00:00
|
|
|
CheckDlgButton(hDlg, IDC_SAFE_TEXTURE_CACHE, g_Config.bSafeTextureCache ? TRUE : FALSE);
|
2009-10-07 19:54:56 +00:00
|
|
|
CheckDlgButton(hDlg, IDC_EFB_ACCESS_ENABLE, g_Config.bEFBAccessEnable ? TRUE : FALSE);
|
2008-12-08 05:25:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void Command(HWND hDlg,WPARAM wParam)
|
|
|
|
{
|
|
|
|
switch (LOWORD(wParam))
|
|
|
|
{
|
2009-09-13 17:46:33 +00:00
|
|
|
case IDC_ASPECT_4_3:
|
|
|
|
Button_SetCheck(GetDlgItem(hDlg, IDC_ASPECT_16_9), FALSE);
|
|
|
|
g_Config.bKeepAR43 = Button_GetCheck(GetDlgItem(hDlg, IDC_ASPECT_4_3)) ? true : false;
|
|
|
|
g_Config.bKeepAR169 = false;
|
|
|
|
break;
|
|
|
|
case IDC_ASPECT_16_9:
|
|
|
|
Button_SetCheck(GetDlgItem(hDlg, IDC_ASPECT_4_3), FALSE);
|
|
|
|
g_Config.bKeepAR169 = Button_GetCheck(GetDlgItem(hDlg, IDC_ASPECT_16_9)) ? true : false;
|
|
|
|
g_Config.bKeepAR43 = false;
|
|
|
|
break;
|
|
|
|
case IDC_WIDESCREEN_HACK:
|
|
|
|
g_Config.bWidescreenHack = Button_GetCheck(GetDlgItem(hDlg, IDC_WIDESCREEN_HACK)) ? true : false;
|
|
|
|
break;
|
|
|
|
case IDC_WIREFRAME:
|
|
|
|
g_Config.bWireFrame = Button_GetCheck(GetDlgItem(hDlg,IDC_WIREFRAME)) ? true : false;
|
|
|
|
break;
|
2009-09-19 13:14:55 +00:00
|
|
|
case IDC_SAFE_TEXTURE_CACHE:
|
2009-09-29 22:32:53 +00:00
|
|
|
g_Config.bSafeTextureCache = Button_GetCheck(GetDlgItem(hDlg, IDC_SAFE_TEXTURE_CACHE)) == 0 ? false : true;
|
2009-09-19 13:14:55 +00:00
|
|
|
break;
|
2009-10-07 19:54:56 +00:00
|
|
|
case IDC_EFB_ACCESS_ENABLE:
|
|
|
|
g_Config.bEFBAccessEnable = Button_GetCheck(GetDlgItem(hDlg, IDC_EFB_ACCESS_ENABLE)) == 0 ? false : true;
|
|
|
|
break;
|
2009-10-22 19:13:22 +00:00
|
|
|
case IDC_RENDER_TO_MAINWINDOW:
|
|
|
|
Button_Enable(GetDlgItem(hDlg, IDC_FULLSCREENENABLE), !Button_GetCheck(GetDlgItem(hDlg, IDC_RENDER_TO_MAINWINDOW)));
|
|
|
|
if (Button_GetCheck(GetDlgItem(hDlg, IDC_RENDER_TO_MAINWINDOW)))
|
|
|
|
Button_SetCheck(GetDlgItem(hDlg, IDC_FULLSCREENENABLE), false);
|
|
|
|
break;
|
2008-12-08 05:25:12 +00:00
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Apply(HWND hDlg)
|
|
|
|
{
|
2009-09-15 08:13:45 +00:00
|
|
|
ComboBox_GetTextA(GetDlgItem(hDlg, IDC_RESOLUTIONWINDOWED), g_Config.cInternalRes, 16);
|
|
|
|
ComboBox_GetTextA(GetDlgItem(hDlg, IDC_RESOLUTION), g_Config.cFSResolution, 16);
|
|
|
|
|
2008-12-08 05:25:12 +00:00
|
|
|
g_Config.iAdapter = ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_ADAPTER));
|
|
|
|
g_Config.iMultisampleMode = ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_ANTIALIASMODE));
|
|
|
|
g_Config.bFullscreen = Button_GetCheck(GetDlgItem(hDlg, IDC_FULLSCREENENABLE)) ? true : false;
|
2009-09-15 08:13:45 +00:00
|
|
|
g_Config.bVSync = Button_GetCheck(GetDlgItem(hDlg, IDC_VSYNC)) ? true : false;
|
2009-09-13 08:21:35 +00:00
|
|
|
g_Config.RenderToMainframe = Button_GetCheck(GetDlgItem(hDlg, IDC_RENDER_TO_MAINWINDOW)) ? true : false;
|
|
|
|
g_Config.Save(FULL_CONFIG_DIR "gfx_dx9.ini");
|
2008-12-08 05:25:12 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
struct TabAdvanced : public W32Util::Tab
|
|
|
|
{
|
|
|
|
void Init(HWND hDlg)
|
|
|
|
{
|
2008-12-26 17:02:46 +00:00
|
|
|
// HWND opt = GetDlgItem(hDlg,IDC_DLOPTLEVEL);
|
|
|
|
// ComboBox_AddString(opt,"0: Interpret (slowest, most compatible)");
|
|
|
|
// ComboBox_AddString(opt,"1: Compile lists and decode vertex lists");
|
2008-12-08 05:25:12 +00:00
|
|
|
//ComboBox_AddString(opt,"2: Compile+decode to vbufs and use hw xform");
|
|
|
|
//ComboBox_AddString(opt,"Recompile to vbuffers and shaders");
|
2008-12-26 17:02:46 +00:00
|
|
|
// ComboBox_SetCurSel(opt,g_Config.iCompileDLsLevel);
|
2008-12-08 05:25:12 +00:00
|
|
|
|
|
|
|
Button_SetCheck(GetDlgItem(hDlg,IDC_OVERLAYSTATS), g_Config.bOverlayStats);
|
2009-03-08 23:46:47 +00:00
|
|
|
Button_SetCheck(GetDlgItem(hDlg,IDC_OVERLAYPROJSTATS), g_Config.bOverlayProjStats);
|
2008-12-08 05:25:12 +00:00
|
|
|
Button_SetCheck(GetDlgItem(hDlg,IDC_WIREFRAME), g_Config.bWireFrame);
|
|
|
|
Button_SetCheck(GetDlgItem(hDlg,IDC_TEXDUMP), g_Config.bDumpTextures);
|
2009-03-28 21:07:16 +00:00
|
|
|
Button_SetCheck(GetDlgItem(hDlg,IDC_DUMPFRAMES), g_Config.bDumpFrames);
|
2008-12-08 05:25:12 +00:00
|
|
|
Button_SetCheck(GetDlgItem(hDlg,IDC_SHOWSHADERERRORS), g_Config.bShowShaderErrors);
|
|
|
|
|
|
|
|
Button_SetCheck(GetDlgItem(hDlg,IDC_TEXFMT_OVERLAY), g_Config.bTexFmtOverlayEnable);
|
|
|
|
Button_SetCheck(GetDlgItem(hDlg,IDC_TEXFMT_CENTER), g_Config.bTexFmtOverlayCenter);
|
|
|
|
Button_GetCheck(GetDlgItem(hDlg,IDC_TEXFMT_OVERLAY)) ? Button_Enable(GetDlgItem(hDlg,IDC_TEXFMT_CENTER), true) : Button_Enable(GetDlgItem(hDlg,IDC_TEXFMT_CENTER), false);
|
|
|
|
}
|
|
|
|
void Command(HWND hDlg,WPARAM wParam)
|
|
|
|
{
|
|
|
|
switch (LOWORD(wParam))
|
|
|
|
{
|
2009-09-01 11:14:58 +00:00
|
|
|
// case IDC_BROWSETEXDUMPPATH: <-- Old method
|
|
|
|
// {
|
|
|
|
// std::string path = W32Util::BrowseForFolder(hDlg,"Choose texture dump path:");
|
|
|
|
// SetWindowText(GetDlgItem(hDlg,IDC_TEXDUMPPATH),path.c_str());
|
|
|
|
// }
|
|
|
|
// break;
|
2008-12-08 05:25:12 +00:00
|
|
|
case IDC_TEXFMT_OVERLAY:
|
|
|
|
{
|
2009-09-13 17:46:33 +00:00
|
|
|
Button_GetCheck(GetDlgItem(hDlg, IDC_TEXFMT_OVERLAY)) ? Button_Enable(GetDlgItem(hDlg,IDC_TEXFMT_CENTER), true) : Button_Enable(GetDlgItem(hDlg,IDC_TEXFMT_CENTER), false);
|
2008-12-08 05:25:12 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void Apply(HWND hDlg)
|
|
|
|
{
|
|
|
|
g_Config.bTexFmtOverlayEnable = Button_GetCheck(GetDlgItem(hDlg,IDC_TEXFMT_OVERLAY)) ? true : false;
|
|
|
|
g_Config.bTexFmtOverlayCenter = Button_GetCheck(GetDlgItem(hDlg,IDC_TEXFMT_CENTER)) ? true : false;
|
|
|
|
|
|
|
|
g_Config.bOverlayStats = Button_GetCheck(GetDlgItem(hDlg,IDC_OVERLAYSTATS)) ? true : false;
|
2009-03-08 23:46:47 +00:00
|
|
|
g_Config.bOverlayProjStats = Button_GetCheck(GetDlgItem(hDlg,IDC_OVERLAYPROJSTATS)) ? true : false;
|
2008-12-08 05:25:12 +00:00
|
|
|
g_Config.bDumpTextures = Button_GetCheck(GetDlgItem(hDlg,IDC_TEXDUMP)) ? true : false;
|
2009-03-28 21:07:16 +00:00
|
|
|
g_Config.bDumpFrames = Button_GetCheck(GetDlgItem(hDlg,IDC_DUMPFRAMES)) ? true : false;
|
2008-12-08 05:25:12 +00:00
|
|
|
g_Config.bShowShaderErrors = Button_GetCheck(GetDlgItem(hDlg,IDC_SHOWSHADERERRORS)) ? true : false;
|
2009-09-01 11:14:58 +00:00
|
|
|
//char temp[MAX_PATH];
|
|
|
|
//GetWindowText(GetDlgItem(hDlg,IDC_TEXDUMPPATH), temp, MAX_PATH); <-- Old method
|
|
|
|
//g_Config.texDumpPath = temp;
|
2009-09-13 08:21:35 +00:00
|
|
|
g_Config.Save(FULL_CONFIG_DIR "gfx_dx9.ini");
|
2008-12-08 05:25:12 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
struct TabEnhancements : public W32Util::Tab
|
|
|
|
{
|
|
|
|
void Init(HWND hDlg)
|
|
|
|
{
|
|
|
|
Button_SetCheck(GetDlgItem(hDlg,IDC_FORCEFILTERING),g_Config.bForceFiltering);
|
2009-09-13 08:21:35 +00:00
|
|
|
Button_SetCheck(GetDlgItem(hDlg,IDC_FORCEANISOTROPY),g_Config.iMaxAnisotropy > 1);
|
2009-09-03 19:24:16 +00:00
|
|
|
/*
|
|
|
|
Temporarily disabled the old postprocessing code since it wasn't working anyway.
|
|
|
|
New postprocessing code will come sooner or later, sharing shaders and framework with
|
|
|
|
the GL postprocessing.
|
|
|
|
|
|
|
|
HWND pp = GetDlgItem(hDlg, IDC_POSTPROCESSEFFECT);
|
2008-12-08 05:25:12 +00:00
|
|
|
const char **names = Postprocess::GetPostprocessingNames();
|
|
|
|
int i = 0;
|
|
|
|
while (true)
|
|
|
|
{
|
|
|
|
if (!names[i])
|
|
|
|
break;
|
|
|
|
|
2009-09-02 06:33:41 +00:00
|
|
|
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, names[i], -1, tempwstr, 2000);
|
|
|
|
ComboBox_AddString(pp, tempwstr);
|
2008-12-08 05:25:12 +00:00
|
|
|
i++;
|
|
|
|
}
|
|
|
|
ComboBox_SetCurSel(pp, g_Config.iPostprocessEffect);
|
2009-09-03 19:24:16 +00:00
|
|
|
*/
|
2008-12-08 05:25:12 +00:00
|
|
|
}
|
|
|
|
void Command(HWND hDlg,WPARAM wParam)
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
switch (LOWORD(wParam))
|
|
|
|
{
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
}
|
|
|
|
void Apply(HWND hDlg)
|
|
|
|
{
|
2009-09-13 08:21:35 +00:00
|
|
|
g_Config.iMaxAnisotropy = Button_GetCheck(GetDlgItem(hDlg, IDC_FORCEANISOTROPY)) ? 8 : 1;
|
|
|
|
g_Config.bForceFiltering = Button_GetCheck(GetDlgItem(hDlg, IDC_FORCEFILTERING)) ? true : false;
|
|
|
|
g_Config.Save(FULL_CONFIG_DIR "gfx_dx9.ini");
|
2008-12-08 05:25:12 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
void DlgSettings_Show(HINSTANCE hInstance, HWND _hParent)
|
|
|
|
{
|
|
|
|
bool tfoe = g_Config.bTexFmtOverlayEnable;
|
|
|
|
bool tfoc = g_Config.bTexFmtOverlayCenter;
|
|
|
|
|
2009-09-13 08:21:35 +00:00
|
|
|
g_Config.Load(FULL_CONFIG_DIR "gfx_dx9.ini");
|
2008-12-08 05:25:12 +00:00
|
|
|
W32Util::PropSheet sheet;
|
2009-09-13 08:21:35 +00:00
|
|
|
sheet.Add(new TabDirect3D, (LPCTSTR)IDD_SETTINGS,_T("Direct3D"));
|
|
|
|
sheet.Add(new TabEnhancements, (LPCTSTR)IDD_ENHANCEMENTS,_T("Enhancements"));
|
|
|
|
sheet.Add(new TabAdvanced, (LPCTSTR)IDD_ADVANCED,_T("Advanced"));
|
2009-09-06 02:55:14 +00:00
|
|
|
|
|
|
|
#ifdef DEBUGFAST
|
|
|
|
sheet.Show(hInstance,_hParent,_T("DX9 Graphics Plugin (DEBUGFAST)"));
|
|
|
|
#else
|
|
|
|
#ifndef _DEBUG
|
|
|
|
sheet.Show(hInstance,_hParent,_T("DX9 Graphics Plugin"));
|
|
|
|
#else
|
|
|
|
sheet.Show(hInstance,_hParent,_T("DX9 Graphics Plugin (DEBUG)"));
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
2009-09-13 17:46:33 +00:00
|
|
|
if ((tfoe != g_Config.bTexFmtOverlayEnable) ||
|
2008-12-08 05:25:12 +00:00
|
|
|
((g_Config.bTexFmtOverlayEnable) && ( tfoc != g_Config.bTexFmtOverlayCenter)))
|
|
|
|
{
|
2009-03-06 16:47:04 +00:00
|
|
|
TextureCache::Invalidate(false);
|
2008-12-08 05:25:12 +00:00
|
|
|
}
|
2008-07-12 17:40:22 +00:00
|
|
|
}
|