21 #include "../../SDL_internal.h"
23 #if SDL_VIDEO_DRIVER_WINDOWS
30 #include "../SDL_sysvideo.h"
31 #include "../SDL_pixels_c.h"
39 static int WIN_VideoInit(
_THIS);
40 static void WIN_VideoQuit(
_THIS);
47 UpdateWindowsEnableMessageLoop(
void *userdata,
const char *
name,
const char *oldValue,
const char *newValue)
49 if (newValue && *newValue ==
'0') {
57 UpdateWindowFrameUsableWhileCursorHidden(
void *userdata,
const char *name,
const char *oldValue,
const char *newValue)
59 if (newValue && *newValue ==
'0') {
66 static void WIN_SuspendScreenSaver(
_THIS)
69 SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED);
71 SetThreadExecutionState(ES_CONTINUOUS);
102 WIN_CreateDevice(
int devindex)
183 #if SDL_VIDEO_OPENGL_WGL
193 #elif SDL_VIDEO_OPENGL_EGL
220 device->
free = WIN_DeleteDevice;
227 "windows",
"SDL Windows video driver", WIN_Available, WIN_CreateDevice
255 #define D3D_DEBUG_INFO
263 typedef IDirect3D9 *(WINAPI *Direct3DCreate9_t) (
UINT SDKVersion);
264 Direct3DCreate9_t Direct3DCreate9Func;
267 typedef HRESULT (WINAPI *Direct3DCreate9Ex_t)(
UINT SDKVersion, IDirect3D9Ex **ppD3D);
268 Direct3DCreate9Ex_t Direct3DCreate9ExFunc;
270 Direct3DCreate9ExFunc = (Direct3DCreate9Ex_t)
SDL_LoadFunction(*pD3DDLL,
"Direct3DCreate9Ex");
271 if (Direct3DCreate9ExFunc) {
272 IDirect3D9Ex *pDirect3D9ExInterface;
273 HRESULT hr = Direct3DCreate9ExFunc(D3D_SDK_VERSION, &pDirect3D9ExInterface);
275 const GUID IDirect3D9_GUID = { 0x81bdcbca, 0x64d4, 0x426d, { 0xae, 0x8d, 0xad, 0x1, 0x47, 0xf4, 0x27, 0x5c } };
276 hr = IDirect3D9Ex_QueryInterface(pDirect3D9ExInterface, &IDirect3D9_GUID, (
void**)pDirect3D9Interface);
277 IDirect3D9Ex_Release(pDirect3D9ExInterface);
285 Direct3DCreate9Func = (Direct3DCreate9_t)
SDL_LoadFunction(*pD3DDLL,
"Direct3DCreate9");
286 if (Direct3DCreate9Func) {
287 *pDirect3D9Interface = Direct3DCreate9Func(D3D_SDK_VERSION);
288 if (*pDirect3D9Interface) {
296 *pDirect3D9Interface =
NULL;
308 return D3DADAPTER_DEFAULT;
311 int adapterIndex = D3DADAPTER_DEFAULT;
318 unsigned int count = IDirect3D9_GetAdapterCount(pD3D);
320 for (i=0; i<
count; i++) {
321 D3DADAPTER_IDENTIFIER9
id;
322 IDirect3D9_GetAdapterIdentifier(pD3D, i, 0, &
id);
324 if (
SDL_strcmp(
id.DeviceName, displayName) == 0) {
333 IDirect3D9_Release(pD3D);
346 DXGI_LoadDLL(
void **pDXGIDLL, IDXGIFactory **pDXGIFactory)
350 HRESULT (WINAPI *CreateDXGI)(REFIID riid,
void **ppFactory);
354 "CreateDXGIFactory");
356 GUID dxgiGUID = {0x7b7166ec,0x21c7,0x44ae,{0xb2,0x1a,0xc9,0xae,0x32,0x1a,0xe3,0x69}};
357 if (!
SUCCEEDED(CreateDXGI(&dxgiGUID, (
void**)pDXGIFactory))) {
358 *pDXGIFactory =
NULL;
361 if (!*pDXGIFactory) {
369 *pDXGIFactory =
NULL;
380 if (adapterIndex) *adapterIndex = -1;
381 if (outputIndex) *outputIndex = -1;
382 SDL_SetError(
"SDL was compiled without DXGI support due to missing dxgi.h header");
388 int nAdapter, nOutput;
389 IDXGIFactory *pDXGIFactory;
390 IDXGIAdapter *pDXGIAdapter;
391 IDXGIOutput* pDXGIOutput;
411 if (!DXGI_LoadDLL(&pDXGIDLL, &pDXGIFactory)) {
418 while (*adapterIndex == -1 &&
SUCCEEDED(IDXGIFactory_EnumAdapters(pDXGIFactory, nAdapter, &pDXGIAdapter))) {
420 while (*adapterIndex == -1 &&
SUCCEEDED(IDXGIAdapter_EnumOutputs(pDXGIAdapter, nOutput, &pDXGIOutput))) {
421 DXGI_OUTPUT_DESC outputDesc;
422 if (
SUCCEEDED(IDXGIOutput_GetDesc(pDXGIOutput, &outputDesc))) {
424 if (
SDL_strcmp(outputName, displayName) == 0) {
425 *adapterIndex = nAdapter;
426 *outputIndex = nOutput;
430 IDXGIOutput_Release(pDXGIOutput);
433 IDXGIAdapter_Release(pDXGIAdapter);
439 IDXGIFactory_Release(pDXGIFactory);
442 if (*adapterIndex == -1) {