1 #include "wined3dcfg.h"
3 static LONG
ReadSetting(HKEY hKey
, PWCHAR szKey
, PWCHAR szBuffer
, DWORD dwSize
)
5 return RegQueryValueExW(hKey
, szKey
, NULL
, NULL
, (LPBYTE
)szBuffer
, &dwSize
);
8 static VOID
SaveSetting(HKEY hKey
, PWCHAR szKey
, PWCHAR szState
)
10 RegSetValueExW(hKey
, szKey
, 0, REG_SZ
, (LPBYTE
)szState
, (wcslen(szState
) + 1) * sizeof(WCHAR
));
13 static VOID
InitSettings(HWND hWndDlg
)
16 WCHAR szBuffer
[MAX_KEY_LENGTH
];
17 DWORD dwSize
= MAX_KEY_LENGTH
;
19 if (RegOpenKeyExW(HKEY_CURRENT_USER
,
23 &hKey
) != ERROR_SUCCESS
)
28 if(ReadSetting(hKey
, KEY_GLSL
, szBuffer
, dwSize
) == ERROR_SUCCESS
)
29 CheckDlgButton(hWndDlg
, IDC_GLSL
, (wcscmp(VALUE_DISABLED
, szBuffer
) != 0) ? BST_CHECKED
: BST_UNCHECKED
);
31 if(ReadSetting(hKey
, KEY_MULTISAMPLING
, szBuffer
, dwSize
) == ERROR_SUCCESS
)
32 CheckDlgButton(hWndDlg
, IDC_MULTISAMPLING
, (wcscmp(VALUE_ENABLED
, szBuffer
) == 0) ? BST_CHECKED
: BST_UNCHECKED
);
34 if(ReadSetting(hKey
, KEY_PIXELSHADERS
, szBuffer
, dwSize
) == ERROR_SUCCESS
)
35 CheckDlgButton(hWndDlg
, IDC_PIXELSHADERS
, (wcscmp(VALUE_ENABLED
, szBuffer
) == 0) ? BST_CHECKED
: BST_UNCHECKED
);
37 if(ReadSetting(hKey
, KEY_STRICTDRAWORDERING
, szBuffer
, dwSize
) == ERROR_SUCCESS
)
38 CheckDlgButton(hWndDlg
, IDC_STRICTDRAWORDERING
, (wcscmp(VALUE_ENABLED
, szBuffer
) == 0) ? BST_CHECKED
: BST_UNCHECKED
);
40 if(ReadSetting(hKey
, KEY_VERTEXSHADERS
, szBuffer
, dwSize
) == ERROR_SUCCESS
)
41 CheckDlgButton(hWndDlg
, IDC_VERTEXSHADERS
, (wcscmp(VALUE_NONE
, szBuffer
) != 0) ? BST_CHECKED
: BST_UNCHECKED
);
43 SendDlgItemMessageW(hWndDlg
, IDC_OFFSCREEN
, CB_ADDSTRING
, 0, (LPARAM
)VALUE_FBO
);
44 SendDlgItemMessageW(hWndDlg
, IDC_OFFSCREEN
, CB_ADDSTRING
, 0, (LPARAM
)VALUE_BACKBUFFER
);
46 SendDlgItemMessageW(hWndDlg
, IDC_OFFSCREEN
, CB_SETITEMDATA
, ITEM_FBO
, (LPARAM
)ITEM_FBO
);
47 SendDlgItemMessageW(hWndDlg
, IDC_OFFSCREEN
, CB_SETITEMDATA
, ITEM_BACKBUFFER
, (LPARAM
)ITEM_BACKBUFFER
);
49 if(ReadSetting(hKey
, KEY_OFFSCREEN
, szBuffer
, dwSize
) == ERROR_SUCCESS
&& !wcscmp(VALUE_BACKBUFFER
, szBuffer
))
50 SendDlgItemMessageW(hWndDlg
, IDC_OFFSCREEN
, CB_SETCURSEL
, 1, 0);
52 SendDlgItemMessageW(hWndDlg
, IDC_OFFSCREEN
, CB_SETCURSEL
, 0, 0);
54 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_ADDSTRING
, 0, (LPARAM
)VALUE_READTEX
);
55 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_ADDSTRING
, 0, (LPARAM
)VALUE_READDRAW
);
56 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_ADDSTRING
, 0, (LPARAM
)VALUE_DISABLED
);
58 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_SETITEMDATA
, (WPARAM
)ITEM_READTEX
, (LPARAM
)ITEM_READTEX
);
59 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_SETITEMDATA
, (WPARAM
)ITEM_READDRAW
, (LPARAM
)ITEM_READDRAW
);
60 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_SETITEMDATA
, (WPARAM
)ITEM_DISABLED
, (LPARAM
)ITEM_DISABLED
);
62 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_SETCURSEL
, 0, 0);
64 if(ReadSetting(hKey
, KEY_LOCKING
, szBuffer
, dwSize
) == ERROR_SUCCESS
)
66 if(!wcscmp(VALUE_READDRAW
, szBuffer
))
67 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_SETCURSEL
, 1, 0);
68 else if(!wcscmp(VALUE_DISABLED
, szBuffer
))
69 SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_SETCURSEL
, 2, 0);
75 static VOID
WriteSettings(HWND hWndDlg
)
80 if (RegOpenKeyExW(HKEY_CURRENT_USER
,
84 &hKey
) != ERROR_SUCCESS
)
89 SaveSetting(hKey
, KEY_GLSL
, (IsDlgButtonChecked(hWndDlg
, IDC_GLSL
) == BST_CHECKED
) ? VALUE_ENABLED
: VALUE_DISABLED
);
90 SaveSetting(hKey
, KEY_MULTISAMPLING
, (IsDlgButtonChecked(hWndDlg
, IDC_MULTISAMPLING
) == BST_CHECKED
) ? VALUE_ENABLED
: VALUE_DISABLED
);
91 SaveSetting(hKey
, KEY_PIXELSHADERS
, (IsDlgButtonChecked(hWndDlg
, IDC_PIXELSHADERS
) == BST_CHECKED
) ? VALUE_ENABLED
: VALUE_DISABLED
);
92 SaveSetting(hKey
, KEY_STRICTDRAWORDERING
, (IsDlgButtonChecked(hWndDlg
, IDC_STRICTDRAWORDERING
) == BST_CHECKED
) ? VALUE_ENABLED
: VALUE_DISABLED
);
93 SaveSetting(hKey
, KEY_VERTEXSHADERS
, (IsDlgButtonChecked(hWndDlg
, IDC_VERTEXSHADERS
) == BST_CHECKED
) ? VALUE_ENABLED
: VALUE_NONE
);
95 iCurSel
= (INT
)SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_GETCURSEL
, 0, 0);
99 iCurSel
= (INT
)SendDlgItemMessageW(hWndDlg
, IDC_LOCKING
, CB_GETITEMDATA
, (WPARAM
)iCurSel
, 0);
101 if(iCurSel
== ITEM_READDRAW
)
102 SaveSetting(hKey
, KEY_LOCKING
, VALUE_READDRAW
);
103 else if(iCurSel
== ITEM_DISABLED
)
104 SaveSetting(hKey
, KEY_LOCKING
, VALUE_DISABLED
);
106 SaveSetting(hKey
, KEY_LOCKING
, VALUE_READTEX
);
109 iCurSel
= (INT
)SendDlgItemMessageW(hWndDlg
, IDC_OFFSCREEN
, CB_GETCURSEL
, 0, 0);
111 if(iCurSel
!= CB_ERR
)
113 iCurSel
= (INT
)SendDlgItemMessageW(hWndDlg
, IDC_OFFSCREEN
, CB_GETITEMDATA
, (WPARAM
)iCurSel
, 0);
115 if(iCurSel
== ITEM_BACKBUFFER
)
116 SaveSetting(hKey
, KEY_OFFSCREEN
, VALUE_BACKBUFFER
);
118 SaveSetting(hKey
, KEY_OFFSCREEN
, VALUE_FBO
);
125 INT_PTR CALLBACK
GeneralPageProc(HWND hWndDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
132 InitSettings(hWndDlg
);
136 switch (LOWORD(wParam
))
140 case IDC_MULTISAMPLING
:
142 case IDC_PIXELSHADERS
:
143 case IDC_STRICTDRAWORDERING
:
144 case IDC_VERTEXSHADERS
:
145 PropSheet_Changed(GetParent(hWndDlg
), hWndDlg
);
153 lppsn
= (LPPSHNOTIFY
)lParam
;
154 if (lppsn
->hdr
.code
== PSN_APPLY
)
156 WriteSettings(hWndDlg
);