1 #include "wined3dcfg.h"
5 static LONG
ReadSetting(HKEY hKey
, PWCHAR szKey
, PWCHAR szBuffer
, DWORD dwSize
)
7 return RegQueryValueExW(hKey
, szKey
, NULL
, NULL
, (LPBYTE
)szBuffer
, &dwSize
);
10 static VOID
SaveSetting(HKEY hKey
, PWCHAR szKey
, PWCHAR szState
)
12 RegSetValueExW(hKey
, szKey
, 0, REG_SZ
, (LPBYTE
)szState
, (wcslen(szState
) + 1) * sizeof(WCHAR
));
15 static VOID
InitSettings(HWND hWndDlg
)
18 WCHAR szBuffer
[MAX_KEY_LENGTH
];
19 DWORD dwSize
= MAX_KEY_LENGTH
;
21 if (RegOpenKeyExW(HKEY_CURRENT_USER
,
25 &hKey
) != ERROR_SUCCESS
)
30 if(ReadSetting(hKey
, KEY_GLSL
, szBuffer
, dwSize
) == ERROR_SUCCESS
)
31 CheckDlgButton(hWndDlg
, IDC_GLSL
, (wcscmp(VALUE_DISABLED
, szBuffer
) != 0) ? BST_CHECKED
: BST_UNCHECKED
);
33 if(ReadSetting(hKey
, KEY_MULTISAMPLING
, szBuffer
, dwSize
) == ERROR_SUCCESS
)
34 CheckDlgButton(hWndDlg
, IDC_MULTISAMPLING
, (wcscmp(VALUE_ENABLED
, szBuffer
) == 0) ? BST_CHECKED
: BST_UNCHECKED
);
36 if(ReadSetting(hKey
, KEY_PIXELSHADERS
, szBuffer
, dwSize
) == ERROR_SUCCESS
)
37 CheckDlgButton(hWndDlg
, IDC_PIXELSHADERS
, (wcscmp(VALUE_ENABLED
, szBuffer
) == 0) ? BST_CHECKED
: BST_UNCHECKED
);
39 if(ReadSetting(hKey
, KEY_STRICTDRAWORDERING
, szBuffer
, dwSize
) == ERROR_SUCCESS
)
40 CheckDlgButton(hWndDlg
, IDC_STRICTDRAWORDERING
, (wcscmp(VALUE_ENABLED
, szBuffer
) == 0) ? BST_CHECKED
: BST_UNCHECKED
);
42 if(ReadSetting(hKey
, KEY_VERTEXSHADERS
, szBuffer
, dwSize
) == ERROR_SUCCESS
)
43 CheckDlgButton(hWndDlg
, IDC_VERTEXSHADERS
, (wcscmp(VALUE_NONE
, szBuffer
) != 0) ? BST_CHECKED
: BST_UNCHECKED
);
45 SendDlgItemMessageW(hWndDlg
, IDC_OFFSCREEN
, CB_ADDSTRING
, 0, (LPARAM
)VALUE_FBO
);
46 SendDlgItemMessageW(hWndDlg
, IDC_OFFSCREEN
, CB_ADDSTRING
, 0, (LPARAM
)VALUE_BACKBUFFER
);
48 SendDlgItemMessageW(hWndDlg
, IDC_OFFSCREEN
, CB_SETITEMDATA
, ITEM_FBO
, (LPARAM
)ITEM_FBO
);
49 SendDlgItemMessageW(hWndDlg
, IDC_OFFSCREEN
, CB_SETITEMDATA
, ITEM_BACKBUFFER
, (LPARAM
)ITEM_BACKBUFFER
);
51 if(ReadSetting(hKey
, KEY_OFFSCREEN
, szBuffer
, dwSize
) == ERROR_SUCCESS
&& !wcscmp(VALUE_BACKBUFFER
, szBuffer
))
52 SendDlgItemMessageW(hWndDlg
, IDC_OFFSCREEN
, CB_SETCURSEL
, 1, 0);
54 SendDlgItemMessageW(hWndDlg
, IDC_OFFSCREEN
, CB_SETCURSEL
, 0, 0);
56 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_ADDSTRING
, 0, (LPARAM
)VALUE_READTEX
);
57 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_ADDSTRING
, 0, (LPARAM
)VALUE_READDRAW
);
58 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_ADDSTRING
, 0, (LPARAM
)VALUE_DISABLED
);
60 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_SETITEMDATA
, (WPARAM
)ITEM_READTEX
, (LPARAM
)ITEM_READTEX
);
61 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_SETITEMDATA
, (WPARAM
)ITEM_READDRAW
, (LPARAM
)ITEM_READDRAW
);
62 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_SETITEMDATA
, (WPARAM
)ITEM_DISABLED
, (LPARAM
)ITEM_DISABLED
);
64 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_SETCURSEL
, 0, 0);
66 if(ReadSetting(hKey
, KEY_LOCKING
, szBuffer
, dwSize
) == ERROR_SUCCESS
)
68 if(!wcscmp(VALUE_READDRAW
, szBuffer
))
69 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_SETCURSEL
, 1, 0);
70 else if(!wcscmp(VALUE_DISABLED
, szBuffer
))
71 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_SETCURSEL
, 2, 0);
77 static VOID
WriteSettings(HWND hWndDlg
)
82 if (RegOpenKeyExW(HKEY_CURRENT_USER
,
86 &hKey
) != ERROR_SUCCESS
)
91 SaveSetting(hKey
, KEY_GLSL
, (IsDlgButtonChecked(hWndDlg
, IDC_GLSL
) == BST_CHECKED
) ? VALUE_ENABLED
: VALUE_DISABLED
);
92 SaveSetting(hKey
, KEY_MULTISAMPLING
, (IsDlgButtonChecked(hWndDlg
, IDC_MULTISAMPLING
) == BST_CHECKED
) ? VALUE_ENABLED
: VALUE_DISABLED
);
93 SaveSetting(hKey
, KEY_PIXELSHADERS
, (IsDlgButtonChecked(hWndDlg
, IDC_PIXELSHADERS
) == BST_CHECKED
) ? VALUE_ENABLED
: VALUE_DISABLED
);
94 SaveSetting(hKey
, KEY_STRICTDRAWORDERING
, (IsDlgButtonChecked(hWndDlg
, IDC_STRICTDRAWORDERING
) == BST_CHECKED
) ? VALUE_ENABLED
: VALUE_DISABLED
);
95 SaveSetting(hKey
, KEY_VERTEXSHADERS
, (IsDlgButtonChecked(hWndDlg
, IDC_VERTEXSHADERS
) == BST_CHECKED
) ? VALUE_ENABLED
: VALUE_NONE
);
97 iCurSel
= (INT
)SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_GETCURSEL
, 0, 0);
101 iCurSel
= (INT
)SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_GETITEMDATA
, (WPARAM
)iCurSel
, 0);
103 if(iCurSel
== ITEM_READDRAW
)
104 SaveSetting(hKey
, KEY_LOCKING
, VALUE_READDRAW
);
105 else if(iCurSel
== ITEM_DISABLED
)
106 SaveSetting(hKey
, KEY_LOCKING
, VALUE_DISABLED
);
108 SaveSetting(hKey
, KEY_LOCKING
, VALUE_READTEX
);
111 iCurSel
= (INT
)SendDlgItemMessageW(hWndDlg
, IDC_OFFSCREEN
, CB_GETCURSEL
, 0, 0);
113 if(iCurSel
!= CB_ERR
)
115 iCurSel
= (INT
)SendDlgItemMessageW(hWndDlg
, IDC_OFFSCREEN
, CB_GETITEMDATA
, (WPARAM
)iCurSel
, 0);
117 if(iCurSel
== ITEM_BACKBUFFER
)
118 SaveSetting(hKey
, KEY_OFFSCREEN
, VALUE_BACKBUFFER
);
120 SaveSetting(hKey
, KEY_OFFSCREEN
, VALUE_FBO
);
127 INT_PTR CALLBACK
GeneralPageProc(HWND hWndDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
134 InitSettings(hWndDlg
);
138 switch (LOWORD(wParam
))
142 case IDC_MULTISAMPLING
:
144 case IDC_PIXELSHADERS
:
145 case IDC_STRICTDRAWORDERING
:
146 case IDC_VERTEXSHADERS
:
147 PropSheet_Changed(GetParent(hWndDlg
), hWndDlg
);
155 lppsn
= (LPPSHNOTIFY
)lParam
;
156 if (lppsn
->hdr
.code
== PSN_APPLY
)
158 WriteSettings(hWndDlg
);