1 #include "wined3dcfg.h"
5 WINED3D_SETTINGS gwd3dsShaderLvl
[] =
7 {VALUE_DEFAULT
, REG_NONE
, 0},
8 {L
"1.4", REG_DWORD
, 1},
13 WINED3D_SETTINGS gwd3dsDisable
[] =
15 {VALUE_DEFAULT
, REG_NONE
, 0},
16 {VALUE_DISABLED
, REG_SZ
, 0}
19 WINED3D_SETTINGS gwd3dsEnable
[] =
21 {VALUE_DEFAULT
, REG_NONE
, 0},
22 {VALUE_ENABLED
, REG_SZ
, 0}
25 WINED3D_SETTINGS gwd3dsOffscreen
[] =
27 {VALUE_DEFAULT
, REG_NONE
, 0},
28 {VALUE_BACKBUFFER
, REG_SZ
, 0},
29 {VALUE_FBO
, REG_SZ
, 0}
32 WINED3D_SETTINGS gwd3dsVidMem
[] =
34 {VALUE_DEFAULT
, REG_NONE
, 0},
39 {L
"128", REG_SZ
, 128},
40 {L
"256", REG_SZ
, 256},
41 {L
"512", REG_SZ
, 512},
44 WINED3D_SETTINGS gwd3dsDdRender
[] =
46 {VALUE_DEFAULT
, REG_NONE
, 0},
47 {VALUE_GDI
, REG_SZ
, 0}
51 void InitControl(HWND hWndDlg
, HKEY hKey
, PWCHAR szKey
, PWINED3D_SETTINGS pSettings
, INT iControlId
, INT iCount
)
53 WCHAR szBuffer
[MAX_KEY_LENGTH
];
54 DWORD dwSize
= MAX_KEY_LENGTH
;
59 RegQueryValueExW(hKey
, szKey
, NULL
, &dwType
, (LPBYTE
)szBuffer
, &dwSize
);
61 for(iCurrent
= 0; iCurrent
< iCount
; iCurrent
++)
63 SendDlgItemMessageW(hWndDlg
, iControlId
, CB_ADDSTRING
, 0, (LPARAM
)pSettings
[iCurrent
].szValue
);
65 if(dwSize
&& ((dwType
== REG_DWORD
&& *szBuffer
== pSettings
[iCurrent
].iValue
) ||
66 (dwType
== REG_SZ
&& !wcscmp(szBuffer
, pSettings
[iCurrent
].szValue
))))
72 SendDlgItemMessageW(hWndDlg
, iControlId
, CB_SETCURSEL
, iActive
, 0);
76 static VOID
InitSettings(HWND hWndDlg
)
80 if (RegCreateKeyExW(HKEY_CURRENT_USER
, KEY_WINE
, 0, NULL
, 0, MAXIMUM_ALLOWED
, NULL
, &hKey
, NULL
) != ERROR_SUCCESS
)
83 INIT_CONTROL(GLSL
, gwd3dsDisable
);
84 INIT_CONTROL(OFFSCREEN
, gwd3dsOffscreen
);
85 INIT_CONTROL(VIDMEMSIZE
, gwd3dsVidMem
);
86 INIT_CONTROL(MULTISAMPLING
, gwd3dsDisable
);
87 INIT_CONTROL(STRICTDRAWORDERING
, gwd3dsEnable
);
88 INIT_CONTROL(ALWAYSOFFSCREEN
, gwd3dsEnable
);
89 INIT_CONTROL(DDRENDERER
, gwd3dsDdRender
);
90 INIT_CONTROL(PSLEVEL
, gwd3dsShaderLvl
);
91 INIT_CONTROL(VSLEVEL
, gwd3dsShaderLvl
);
92 INIT_CONTROL(GSLEVEL
, gwd3dsShaderLvl
);
98 static VOID
SaveSetting(HWND hWnd
, HKEY hKey
, PWCHAR szKey
, PWINED3D_SETTINGS pCfg
, INT iControlId
, INT iCount
)
102 iSel
= (INT
)SendDlgItemMessageW(hWnd
, iControlId
, CB_GETCURSEL
, 0, 0);
104 if(iSel
< 0 || iSel
> iCount
)
107 if(pCfg
[iSel
].iType
== REG_NONE
)
109 RegDeleteValueW(hKey
, szKey
);
113 if(pCfg
[iSel
].iType
== REG_DWORD
)
115 RegSetValueExW(hKey
, szKey
, 0, REG_DWORD
, (LPBYTE
)&pCfg
[iSel
].iValue
, sizeof(pCfg
[iSel
].iValue
));
117 } else if (pCfg
[iSel
].iType
== REG_SZ
)
119 RegSetValueExW(hKey
, szKey
, 0, pCfg
[iSel
].iType
, (LPBYTE
)pCfg
[iSel
].szValue
, (wcslen(pCfg
[iSel
].szValue
) + 1) * sizeof(WCHAR
));
124 static VOID
WriteSettings(HWND hWndDlg
)
128 if (RegOpenKeyExW(HKEY_CURRENT_USER
, KEY_WINE
, 0, KEY_WRITE
, &hKey
) != ERROR_SUCCESS
)
131 SAVE_CONTROL(GLSL
, gwd3dsDisable
);
132 SAVE_CONTROL(OFFSCREEN
, gwd3dsOffscreen
);
133 SAVE_CONTROL(VIDMEMSIZE
, gwd3dsVidMem
);
134 SAVE_CONTROL(MULTISAMPLING
, gwd3dsDisable
);
135 SAVE_CONTROL(STRICTDRAWORDERING
, gwd3dsEnable
);
136 SAVE_CONTROL(ALWAYSOFFSCREEN
, gwd3dsEnable
);
137 SAVE_CONTROL(DDRENDERER
, gwd3dsDdRender
);
138 SAVE_CONTROL(PSLEVEL
, gwd3dsShaderLvl
);
139 SAVE_CONTROL(VSLEVEL
, gwd3dsShaderLvl
);
140 SAVE_CONTROL(GSLEVEL
, gwd3dsShaderLvl
);
146 INT_PTR CALLBACK
GeneralPageProc(HWND hWndDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
153 InitSettings(hWndDlg
);
157 if (LOWORD(wParam
) > IDC_MIN
&& LOWORD(wParam
) < IDC_MAX
)
158 PropSheet_Changed(GetParent(hWndDlg
), hWndDlg
);
162 lppsn
= (LPPSHNOTIFY
)lParam
;
163 if (lppsn
->hdr
.code
== PSN_APPLY
)
165 WriteSettings(hWndDlg
);