GSSettingsDlg.cpp
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:7k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2005 Gabest
  3.  * http://www.gabest.org
  4.  *
  5.  *  This Program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2, or (at your option)
  8.  *  any later version.
  9.  *   
  10.  *  This Program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13.  *  GNU General Public License for more details.
  14.  *   
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with GNU Make; see the file COPYING.  If not, write to
  17.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  18.  *  http://www.gnu.org/copyleft/gpl.html
  19.  *
  20.  */
  21. #include "stdafx.h"
  22. #include "GSdx9.h"
  23. #include "GSSettingsDlg.h"
  24. #include <shlobj.h>
  25. static struct {int id; const TCHAR* name;} s_renderers[] =
  26. {
  27. {RENDERER_D3D_HW, "Direct3D"},
  28. // {RENDERER_D3D_SW_FX, "Software (fixed)"},
  29. {RENDERER_D3D_SW_FP, "Software (float)"},
  30. {RENDERER_D3D_NULL, "Do not render"},
  31. };
  32. static struct {DWORD id; const TCHAR* name;} s_psversions[] =
  33. {
  34. {D3DPS_VERSION(3, 0), _T("Pixel Shader 3.0")},
  35. {D3DPS_VERSION(2, 0), _T("Pixel Shader 2.0")},
  36. {D3DPS_VERSION(1, 4), _T("Pixel Shader 1.4")},
  37. {D3DPS_VERSION(1, 1), _T("Pixel Shader 1.1")},
  38. {D3DPS_VERSION(0, 0), _T("Fixed Pipeline (bogus)")},
  39. };
  40. IMPLEMENT_DYNAMIC(CGSSettingsDlg, CDialog)
  41. CGSSettingsDlg::CGSSettingsDlg(CWnd* pParent /*=NULL*/)
  42. : CDialog(CGSSettingsDlg::IDD, pParent)
  43. , m_fEnablePalettizedTextures(FALSE)
  44. , m_fEnableTvOut(FALSE)
  45. , m_fRecordState(FALSE)
  46. , m_fLinearTexFilter(TRUE)
  47. {
  48. }
  49. CGSSettingsDlg::~CGSSettingsDlg()
  50. {
  51. }
  52. void CGSSettingsDlg::DoDataExchange(CDataExchange* pDX)
  53. {
  54. CDialog::DoDataExchange(pDX);
  55. DDX_Control(pDX, IDC_COMBO3, m_resolution);
  56. DDX_Control(pDX, IDC_COMBO1, m_renderer);
  57. DDX_Control(pDX, IDC_COMBO4, m_psversion);
  58. DDX_Check(pDX, IDC_CHECK1, m_fEnablePalettizedTextures);
  59. DDX_Check(pDX, IDC_CHECK3, m_fEnableTvOut);
  60. DDX_Check(pDX, IDC_CHECK2, m_fRecordState);
  61. DDX_Text(pDX, IDC_EDIT1, m_strRecordState);
  62. DDX_Check(pDX, IDC_CHECK4, m_fLinearTexFilter);
  63. }
  64. BEGIN_MESSAGE_MAP(CGSSettingsDlg, CDialog)
  65. ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
  66. END_MESSAGE_MAP()
  67. // CGSSettingsDlg message handlers
  68. BOOL CGSSettingsDlg::OnInitDialog()
  69. {
  70. __super::OnInitDialog();
  71.     CWinApp* pApp = AfxGetApp();
  72. D3DCAPS9 caps;
  73. ZeroMemory(&caps, sizeof(caps));
  74. caps.PixelShaderVersion = D3DPS_VERSION(0, 0);
  75. m_modes.RemoveAll();
  76. // windowed
  77. {
  78. D3DDISPLAYMODE mode;
  79. memset(&mode, 0, sizeof(mode));
  80. m_modes.AddTail(mode);
  81. int iItem = m_resolution.AddString(_T("Windowed"));
  82. m_resolution.SetItemDataPtr(iItem, m_modes.GetTailPosition());
  83. m_resolution.SetCurSel(iItem);
  84. }
  85. // fullscreen
  86. if(CComPtr<IDirect3D9> pD3D = Direct3DCreate9(D3D_SDK_VERSION))
  87. {
  88. int ModeWidth = pApp->GetProfileInt(_T("Settings"), _T("ModeWidth"), 0);
  89. int ModeHeight = pApp->GetProfileInt(_T("Settings"), _T("ModeHeight"), 0);
  90. int ModeRefreshRate = pApp->GetProfileInt(_T("Settings"), _T("ModeRefreshRate"), 0);
  91. UINT nModes = pD3D->GetAdapterModeCount(D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8);
  92. for(UINT i = 0; i < nModes; i++)
  93. {
  94. D3DDISPLAYMODE mode;
  95. if(S_OK == pD3D->EnumAdapterModes(D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8, i, &mode))
  96. {
  97. CString str;
  98. str.Format(_T("%dx%d %dHz"), mode.Width, mode.Height, mode.RefreshRate);
  99. int iItem = m_resolution.AddString(str);
  100. m_modes.AddTail(mode);
  101. m_resolution.SetItemDataPtr(iItem, m_modes.GetTailPosition());
  102. if(ModeWidth == mode.Width && ModeHeight == mode.Height && ModeRefreshRate == mode.RefreshRate)
  103. m_resolution.SetCurSel(iItem);
  104. }
  105. }
  106. pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_X, &caps);
  107. }
  108. // renderer
  109. int renderer_id = pApp->GetProfileInt(_T("Settings"), _T("Renderer"), RENDERER_D3D_HW);
  110. for(int i = 0; i < countof(s_renderers); i++)
  111. {
  112. int iItem = m_renderer.AddString(s_renderers[i].name);
  113. m_renderer.SetItemData(iItem, s_renderers[i].id);
  114. if(s_renderers[i].id == renderer_id) m_renderer.SetCurSel(iItem);
  115. }
  116. // shader
  117. DWORD psversion_id = pApp->GetProfileInt(_T("Settings"), _T("PixelShaderVersion2"), D3DPS_VERSION(2, 0));
  118. for(int i = 0; i < countof(s_psversions); i++)
  119. {
  120. if(s_psversions[i].id > caps.PixelShaderVersion) continue;
  121. int iItem = m_psversion.AddString(s_psversions[i].name);
  122. m_psversion.SetItemData(iItem, s_psversions[i].id);
  123. if(s_psversions[i].id == psversion_id) m_psversion.SetCurSel(iItem);
  124. }
  125. //
  126. m_fEnablePalettizedTextures = pApp->GetProfileInt(_T("Settings"), _T("fEnablePalettizedTextures"), FALSE);
  127. //
  128. m_fLinearTexFilter = (D3DTEXTUREFILTERTYPE)pApp->GetProfileInt(_T("Settings"), _T("TexFilter"), D3DTEXF_LINEAR) == D3DTEXF_LINEAR;
  129. //
  130. m_fEnableTvOut = pApp->GetProfileInt(_T("Settings"), _T("fEnableTvOut"), FALSE);
  131. //
  132. m_fRecordState = pApp->GetProfileInt(_T("Settings"), _T("RecordState"), FALSE);
  133. m_strRecordState = pApp->GetProfileString(_T("Settings"), _T("RecordStatePath"), _T(""));
  134. //
  135. UpdateData(FALSE);
  136. return TRUE;  // return TRUE unless you set the focus to a control
  137. // EXCEPTION: OCX Property Pages should return FALSE
  138. }
  139. void CGSSettingsDlg::OnOK()
  140. {
  141. CWinApp* pApp = AfxGetApp();
  142. UpdateData();
  143. if(m_resolution.GetCurSel() >= 0)
  144. {
  145.         D3DDISPLAYMODE& mode = m_modes.GetAt((POSITION)m_resolution.GetItemData(m_resolution.GetCurSel()));
  146. pApp->WriteProfileInt(_T("Settings"), _T("ModeWidth"), mode.Width);
  147. pApp->WriteProfileInt(_T("Settings"), _T("ModeHeight"), mode.Height);
  148. pApp->WriteProfileInt(_T("Settings"), _T("ModeRefreshRate"), mode.RefreshRate);
  149. }
  150. if(m_renderer.GetCurSel() >= 0)
  151. {
  152. pApp->WriteProfileInt(_T("Settings"), _T("Renderer"), m_renderer.GetItemData(m_renderer.GetCurSel()));
  153. }
  154. if(m_psversion.GetCurSel() >= 0)
  155. {
  156. pApp->WriteProfileInt(_T("Settings"), _T("PixelShaderVersion2"), m_psversion.GetItemData(m_psversion.GetCurSel()));
  157. }
  158. pApp->WriteProfileInt(_T("Settings"), _T("fEnablePalettizedTextures"), m_fEnablePalettizedTextures);
  159. pApp->WriteProfileInt(_T("Settings"), _T("TexFilter"), m_fLinearTexFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT);
  160. pApp->WriteProfileInt(_T("Settings"), _T("fEnableTvOut"), m_fEnableTvOut);
  161. pApp->WriteProfileInt(_T("Settings"), _T("RecordState"), m_fRecordState);
  162. pApp->WriteProfileString(_T("Settings"), _T("RecordStatePath"), m_strRecordState);
  163. __super::OnOK();
  164. }
  165. void CGSSettingsDlg::OnBnClickedButton1()
  166. {
  167. TCHAR path[MAX_PATH];
  168. BROWSEINFO bi;
  169. bi.hwndOwner = m_hWnd;
  170. bi.pidlRoot = NULL;
  171. bi.pszDisplayName = path;
  172. bi.lpszTitle = _T("Select path for the state file");
  173. bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_VALIDATE | BIF_USENEWUI;
  174. bi.lpfn = NULL;
  175. bi.lParam = 0;
  176. bi.iImage = 0; 
  177. LPITEMIDLIST iil;
  178. if(iil = SHBrowseForFolder(&bi))
  179. {
  180. SHGetPathFromIDList(iil, path);
  181. m_strRecordState = path;
  182. UpdateData(FALSE);
  183. }
  184. }