SDL  2.0
SDL_windowsvideo.c
Go to the documentation of this file.
1 /*
2  Simple DirectMedia Layer
3  Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
4 
5  This software is provided 'as-is', without any express or implied
6  warranty. In no event will the authors be held liable for any damages
7  arising from the use of this software.
8 
9  Permission is granted to anyone to use this software for any purpose,
10  including commercial applications, and to alter it and redistribute it
11  freely, subject to the following restrictions:
12 
13  1. The origin of this software must not be misrepresented; you must not
14  claim that you wrote the original software. If you use this software
15  in a product, an acknowledgment in the product documentation would be
16  appreciated but is not required.
17  2. Altered source versions must be plainly marked as such, and must not be
18  misrepresented as being the original software.
19  3. This notice may not be removed or altered from any source distribution.
20 */
21 #include "../../SDL_internal.h"
22 
23 #if SDL_VIDEO_DRIVER_WINDOWS
24 
25 #include "SDL_main.h"
26 #include "SDL_video.h"
27 #include "SDL_hints.h"
28 #include "SDL_mouse.h"
29 #include "SDL_system.h"
30 #include "../SDL_sysvideo.h"
31 #include "../SDL_pixels_c.h"
32 
33 #include "SDL_windowsvideo.h"
34 #include "SDL_windowsframebuffer.h"
35 #include "SDL_windowsshape.h"
36 
37 /* Initialization/Query functions */
38 static int WIN_VideoInit(_THIS);
39 static void WIN_VideoQuit(_THIS);
40 
41 /* Hints */
44 
45 static void UpdateWindowsEnableMessageLoop(void *userdata, const char *name, const char *oldValue, const char *newValue)
46 {
47  if (newValue && *newValue == '0') {
49  } else {
51  }
52 }
53 
54 static void UpdateWindowFrameUsableWhileCursorHidden(void *userdata, const char *name, const char *oldValue, const char *newValue)
55 {
56  if (newValue && *newValue == '0') {
58  } else {
60  }
61 }
62 
63 
64 /* Windows driver bootstrap functions */
65 
66 static int
67 WIN_Available(void)
68 {
69  return (1);
70 }
71 
72 static void
73 WIN_DeleteDevice(SDL_VideoDevice * device)
74 {
76 
78  if (data->userDLL) {
80  }
81  if (data->shcoreDLL) {
83  }
84 
85  SDL_free(device->driverdata);
86  SDL_free(device);
87 }
88 
89 static SDL_VideoDevice *
90 WIN_CreateDevice(int devindex)
91 {
92  SDL_VideoDevice *device;
94 
96 
97  /* Initialize all variables that we clean on shutdown */
98  device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice));
99  if (device) {
100  data = (struct SDL_VideoData *) SDL_calloc(1, sizeof(SDL_VideoData));
101  } else {
102  data = NULL;
103  }
104  if (!data) {
105  SDL_free(device);
106  SDL_OutOfMemory();
107  return NULL;
108  }
109  device->driverdata = data;
110 
111  data->userDLL = SDL_LoadObject("USER32.DLL");
112  if (data->userDLL) {
113  data->CloseTouchInputHandle = (BOOL (WINAPI *)(HTOUCHINPUT)) SDL_LoadFunction(data->userDLL, "CloseTouchInputHandle");
114  data->GetTouchInputInfo = (BOOL (WINAPI *)(HTOUCHINPUT, UINT, PTOUCHINPUT, int)) SDL_LoadFunction(data->userDLL, "GetTouchInputInfo");
115  data->RegisterTouchWindow = (BOOL (WINAPI *)(HWND, ULONG)) SDL_LoadFunction(data->userDLL, "RegisterTouchWindow");
116  }
117 
118  data->shcoreDLL = SDL_LoadObject("SHCORE.DLL");
119  if (data->shcoreDLL) {
120  data->GetDpiForMonitor = (HRESULT (WINAPI *)(HMONITOR, MONITOR_DPI_TYPE, UINT *, UINT *)) SDL_LoadFunction(data->shcoreDLL, "GetDpiForMonitor");
121  }
122 
123  /* Set the function pointers */
124  device->VideoInit = WIN_VideoInit;
125  device->VideoQuit = WIN_VideoQuit;
131  device->PumpEvents = WIN_PumpEvents;
132 
133 #undef CreateWindow
134  device->CreateWindow = WIN_CreateWindow;
141  device->ShowWindow = WIN_ShowWindow;
142  device->HideWindow = WIN_HideWindow;
143  device->RaiseWindow = WIN_RaiseWindow;
160 
164 
165 #if SDL_VIDEO_OPENGL_WGL
166  device->GL_LoadLibrary = WIN_GL_LoadLibrary;
167  device->GL_GetProcAddress = WIN_GL_GetProcAddress;
168  device->GL_UnloadLibrary = WIN_GL_UnloadLibrary;
169  device->GL_CreateContext = WIN_GL_CreateContext;
170  device->GL_MakeCurrent = WIN_GL_MakeCurrent;
171  device->GL_SetSwapInterval = WIN_GL_SetSwapInterval;
172  device->GL_GetSwapInterval = WIN_GL_GetSwapInterval;
173  device->GL_SwapWindow = WIN_GL_SwapWindow;
174  device->GL_DeleteContext = WIN_GL_DeleteContext;
175 #elif SDL_VIDEO_OPENGL_EGL
176  /* Use EGL based functions */
177  device->GL_LoadLibrary = WIN_GLES_LoadLibrary;
178  device->GL_GetProcAddress = WIN_GLES_GetProcAddress;
179  device->GL_UnloadLibrary = WIN_GLES_UnloadLibrary;
180  device->GL_CreateContext = WIN_GLES_CreateContext;
181  device->GL_MakeCurrent = WIN_GLES_MakeCurrent;
182  device->GL_SetSwapInterval = WIN_GLES_SetSwapInterval;
183  device->GL_GetSwapInterval = WIN_GLES_GetSwapInterval;
184  device->GL_SwapWindow = WIN_GLES_SwapWindow;
185  device->GL_DeleteContext = WIN_GLES_DeleteContext;
186 #endif
190 
194 
195  device->free = WIN_DeleteDevice;
196 
197  return device;
198 }
199 
200 
201 VideoBootStrap WINDOWS_bootstrap = {
202  "windows", "SDL Windows video driver", WIN_Available, WIN_CreateDevice
203 };
204 
205 int
206 WIN_VideoInit(_THIS)
207 {
208  if (WIN_InitModes(_this) < 0) {
209  return -1;
210  }
211 
214 
215  SDL_AddHintCallback(SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP, UpdateWindowsEnableMessageLoop, NULL);
216  SDL_AddHintCallback(SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN, UpdateWindowFrameUsableWhileCursorHidden, NULL);
217 
218  return 0;
219 }
220 
221 void
222 WIN_VideoQuit(_THIS)
223 {
227 }
228 
229 
230 #define D3D_DEBUG_INFO
231 #include <d3d9.h>
232 
233 SDL_bool
234 D3D_LoadDLL(void **pD3DDLL, IDirect3D9 **pDirect3D9Interface)
235 {
236  *pD3DDLL = SDL_LoadObject("D3D9.DLL");
237  if (*pD3DDLL) {
238  typedef IDirect3D9 *(WINAPI *Direct3DCreate9_t) (UINT SDKVersion);
239  Direct3DCreate9_t Direct3DCreate9Func;
240 
241 #ifdef USE_D3D9EX
242  typedef HRESULT (WINAPI *Direct3DCreate9Ex_t)(UINT SDKVersion, IDirect3D9Ex **ppD3D);
243  Direct3DCreate9Ex_t Direct3DCreate9ExFunc;
244 
245  Direct3DCreate9ExFunc = (Direct3DCreate9Ex_t)SDL_LoadFunction(*pD3DDLL, "Direct3DCreate9Ex");
246  if (Direct3DCreate9ExFunc) {
247  IDirect3D9Ex *pDirect3D9ExInterface;
248  HRESULT hr = Direct3DCreate9ExFunc(D3D_SDK_VERSION, &pDirect3D9ExInterface);
249  if (SUCCEEDED(hr)) {
250  const GUID IDirect3D9_GUID = { 0x81bdcbca, 0x64d4, 0x426d, { 0xae, 0x8d, 0xad, 0x1, 0x47, 0xf4, 0x27, 0x5c } };
251  hr = IDirect3D9Ex_QueryInterface(pDirect3D9ExInterface, &IDirect3D9_GUID, (void**)pDirect3D9Interface);
252  IDirect3D9Ex_Release(pDirect3D9ExInterface);
253  if (SUCCEEDED(hr)) {
254  return SDL_TRUE;
255  }
256  }
257  }
258 #endif /* USE_D3D9EX */
259 
260  Direct3DCreate9Func = (Direct3DCreate9_t)SDL_LoadFunction(*pD3DDLL, "Direct3DCreate9");
261  if (Direct3DCreate9Func) {
262  *pDirect3D9Interface = Direct3DCreate9Func(D3D_SDK_VERSION);
263  if (*pDirect3D9Interface) {
264  return SDL_TRUE;
265  }
266  }
267 
268  SDL_UnloadObject(*pD3DDLL);
269  *pD3DDLL = NULL;
270  }
271  *pDirect3D9Interface = NULL;
272  return SDL_FALSE;
273 }
274 
275 
276 int
277 SDL_Direct3D9GetAdapterIndex(int displayIndex)
278 {
279  void *pD3DDLL;
280  IDirect3D9 *pD3D;
281  if (!D3D_LoadDLL(&pD3DDLL, &pD3D)) {
282  SDL_SetError("Unable to create Direct3D interface");
283  return D3DADAPTER_DEFAULT;
284  } else {
285  SDL_DisplayData *pData = (SDL_DisplayData *)SDL_GetDisplayDriverData(displayIndex);
286  int adapterIndex = D3DADAPTER_DEFAULT;
287 
288  if (!pData) {
289  SDL_SetError("Invalid display index");
290  adapterIndex = -1; /* make sure we return something invalid */
291  } else {
292  char *displayName = WIN_StringToUTF8(pData->DeviceName);
293  unsigned int count = IDirect3D9_GetAdapterCount(pD3D);
294  unsigned int i;
295  for (i=0; i<count; i++) {
296  D3DADAPTER_IDENTIFIER9 id;
297  IDirect3D9_GetAdapterIdentifier(pD3D, i, 0, &id);
298 
299  if (SDL_strcmp(id.DeviceName, displayName) == 0) {
300  adapterIndex = i;
301  break;
302  }
303  }
304  SDL_free(displayName);
305  }
306 
307  /* free up the D3D stuff we inited */
308  IDirect3D9_Release(pD3D);
309  SDL_UnloadObject(pD3DDLL);
310 
311  return adapterIndex;
312  }
313 }
314 
315 #if HAVE_DXGI_H
316 #define CINTERFACE
317 #define COBJMACROS
318 #include <dxgi.h>
319 
320 static SDL_bool
321 DXGI_LoadDLL(void **pDXGIDLL, IDXGIFactory **pDXGIFactory)
322 {
323  *pDXGIDLL = SDL_LoadObject("DXGI.DLL");
324  if (*pDXGIDLL) {
325  HRESULT (WINAPI *CreateDXGI)(REFIID riid, void **ppFactory);
326 
327  CreateDXGI =
328  (HRESULT (WINAPI *) (REFIID, void**)) SDL_LoadFunction(*pDXGIDLL,
329  "CreateDXGIFactory");
330  if (CreateDXGI) {
331  GUID dxgiGUID = {0x7b7166ec,0x21c7,0x44ae,{0xb2,0x1a,0xc9,0xae,0x32,0x1a,0xe3,0x69}};
332  if (!SUCCEEDED(CreateDXGI(&dxgiGUID, (void**)pDXGIFactory))) {
333  *pDXGIFactory = NULL;
334  }
335  }
336  if (!*pDXGIFactory) {
337  SDL_UnloadObject(*pDXGIDLL);
338  *pDXGIDLL = NULL;
339  return SDL_FALSE;
340  }
341 
342  return SDL_TRUE;
343  } else {
344  *pDXGIFactory = NULL;
345  return SDL_FALSE;
346  }
347 }
348 #endif
349 
350 
351 SDL_bool
352 SDL_DXGIGetOutputInfo(int displayIndex, int *adapterIndex, int *outputIndex)
353 {
354 #if !HAVE_DXGI_H
355  if (adapterIndex) *adapterIndex = -1;
356  if (outputIndex) *outputIndex = -1;
357  SDL_SetError("SDL was compiled without DXGI support due to missing dxgi.h header");
358  return SDL_FALSE;
359 #else
360  SDL_DisplayData *pData = (SDL_DisplayData *)SDL_GetDisplayDriverData(displayIndex);
361  void *pDXGIDLL;
362  char *displayName;
363  int nAdapter, nOutput;
364  IDXGIFactory *pDXGIFactory;
365  IDXGIAdapter *pDXGIAdapter;
366  IDXGIOutput* pDXGIOutput;
367 
368  if (!adapterIndex) {
369  SDL_InvalidParamError("adapterIndex");
370  return SDL_FALSE;
371  }
372 
373  if (!outputIndex) {
374  SDL_InvalidParamError("outputIndex");
375  return SDL_FALSE;
376  }
377 
378  *adapterIndex = -1;
379  *outputIndex = -1;
380 
381  if (!pData) {
382  SDL_SetError("Invalid display index");
383  return SDL_FALSE;
384  }
385 
386  if (!DXGI_LoadDLL(&pDXGIDLL, &pDXGIFactory)) {
387  SDL_SetError("Unable to create DXGI interface");
388  return SDL_FALSE;
389  }
390 
391  displayName = WIN_StringToUTF8(pData->DeviceName);
392  nAdapter = 0;
393  while (*adapterIndex == -1 && SUCCEEDED(IDXGIFactory_EnumAdapters(pDXGIFactory, nAdapter, &pDXGIAdapter))) {
394  nOutput = 0;
395  while (*adapterIndex == -1 && SUCCEEDED(IDXGIAdapter_EnumOutputs(pDXGIAdapter, nOutput, &pDXGIOutput))) {
396  DXGI_OUTPUT_DESC outputDesc;
397  if (SUCCEEDED(IDXGIOutput_GetDesc(pDXGIOutput, &outputDesc))) {
398  char *outputName = WIN_StringToUTF8(outputDesc.DeviceName);
399  if (SDL_strcmp(outputName, displayName) == 0) {
400  *adapterIndex = nAdapter;
401  *outputIndex = nOutput;
402  }
403  SDL_free(outputName);
404  }
405  IDXGIOutput_Release(pDXGIOutput);
406  nOutput++;
407  }
408  IDXGIAdapter_Release(pDXGIAdapter);
409  nAdapter++;
410  }
411  SDL_free(displayName);
412 
413  /* free up the DXGI factory */
414  IDXGIFactory_Release(pDXGIFactory);
415  SDL_UnloadObject(pDXGIDLL);
416 
417  if (*adapterIndex == -1) {
418  return SDL_FALSE;
419  } else {
420  return SDL_TRUE;
421  }
422 #endif
423 }
424 
425 #endif /* SDL_VIDEO_DRIVER_WINDOWS */
426 
427 /* vim: set ts=4 sw=4 expandtab: */
struct IDirect3D9 IDirect3D9
int(* GetDisplayDPI)(_THIS, SDL_VideoDisplay *display, float *ddpi, float *hdpi, float *vdpi)
Definition: SDL_sysvideo.h:179
GLuint id
SDL_bool g_WindowFrameUsableWhileCursorHidden
void(* RestoreWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:220
void WIN_SetWindowSize(_THIS, SDL_Window *window)
int Win32_ResizeWindowShape(SDL_Window *window)
SDL_bool SDL_DXGIGetOutputInfo(int displayIndex, int *adapterIndex, int *outputIndex)
Returns the DXGI Adapter and Output indices for the specified display index.
int(* SetWindowHitTest)(SDL_Window *window, SDL_bool enabled)
Definition: SDL_sysvideo.h:287
void WIN_QuitModes(_THIS)
void WIN_RaiseWindow(_THIS, SDL_Window *window)
GLuint GLuint GLsizei count
Definition: SDL_opengl.h:1564
int(* CreateWindowFrom)(_THIS, SDL_Window *window, const void *data)
Definition: SDL_sysvideo.h:204
MONITOR_DPI_TYPE
int WIN_GetWindowGammaRamp(_THIS, SDL_Window *window, Uint16 *ramp)
void(* free)(_THIS)
Definition: SDL_sysvideo.h:358
void WIN_DestroyWindow(_THIS, SDL_Window *window)
char * WIN_GetClipboardText(_THIS)
SDL_bool WIN_GetWindowWMInfo(_THIS, SDL_Window *window, struct SDL_SysWMinfo *info)
int(* GL_SetSwapInterval)(_THIS, int interval)
Definition: SDL_sysvideo.h:253
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1967
void WIN_MaximizeWindow(_THIS, SDL_Window *window)
void(* ShowWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:215
void(* StartTextInput)(_THIS)
Definition: SDL_sysvideo.h:268
void(* SetWindowSize)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:208
GLuint const GLchar * name
SDL_WindowShaper * Win32_CreateShaper(SDL_Window *window)
void(* GL_SwapWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:255
#define SDL_InvalidParamError(param)
Definition: SDL_error.h:54
#define SDL_LoadObject
#define SDL_UnloadObject
int WIN_InitModes(_THIS)
SDL_bool g_WindowsEnableMessageLoop
void WIN_OnWindowEnter(_THIS, SDL_Window *window)
int(* GL_LoadLibrary)(_THIS, const char *path)
Definition: SDL_sysvideo.h:247
int(* SetDisplayMode)(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode)
Definition: SDL_sysvideo.h:197
void WIN_SetWindowPosition(_THIS, SDL_Window *window)
void * SDL_GetDisplayDriverData(int displayIndex)
Definition: SDL_video.c:645
int WIN_SetWindowHitTest(SDL_Window *window, SDL_bool enabled)
void(* SetWindowBordered)(_THIS, SDL_Window *window, SDL_bool bordered)
Definition: SDL_sysvideo.h:221
int WIN_CreateWindow(_THIS, SDL_Window *window)
int SDL_Direct3D9GetAdapterIndex(int displayIndex)
Returns the D3D9 adapter index that matches the specified display index.
static SDL_VideoDevice * _this
Definition: SDL_video.c:118
void WIN_InitMouse(_THIS)
int WIN_CreateWindowFramebuffer(_THIS, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
void(* HideWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:216
void SDL_UnregisterApp(void)
void WIN_GetDisplayModes(_THIS, SDL_VideoDisplay *display)
TCHAR DeviceName[32]
void(* RaiseWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:217
int(* SetWindowShape)(SDL_WindowShaper *shaper, SDL_Surface *shape, SDL_WindowShapeMode *shape_mode)
Definition: SDL_sysvideo.h:59
void(* SetTextInputRect)(_THIS, SDL_Rect *rect)
Definition: SDL_sysvideo.h:270
void WIN_StartTextInput(_THIS)
void * SDL_calloc(size_t nmemb, size_t size)
int WIN_GetDisplayBounds(_THIS, SDL_VideoDisplay *display, SDL_Rect *rect)
SDL_bool(* GetWindowWMInfo)(_THIS, SDL_Window *window, struct SDL_SysWMinfo *info)
Definition: SDL_sysvideo.h:240
SDL_GLContext(* GL_CreateContext)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:250
void WIN_DestroyWindowFramebuffer(_THIS, SDL_Window *window)
void WIN_SetWindowResizable(_THIS, SDL_Window *window, SDL_bool resizable)
#define SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP
A variable controlling whether the windows message loop is processed by SDL.
Definition: SDL_hints.h:222
void WIN_MinimizeWindow(_THIS, SDL_Window *window)
#define _THIS
int(* GL_MakeCurrent)(_THIS, SDL_Window *window, SDL_GLContext context)
Definition: SDL_sysvideo.h:251
int WIN_SetWindowOpacity(_THIS, SDL_Window *window, float opacity)
void SDL_free(void *mem)
HRESULT(WINAPI *GetDpiForMonitor)(HMONITOR hmonitor
void WIN_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon)
int WIN_SetDisplayMode(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode)
void WIN_ShowWindow(_THIS, SDL_Window *window)
int(* GetDisplayBounds)(_THIS, SDL_VideoDisplay *display, SDL_Rect *rect)
Definition: SDL_sysvideo.h:174
void(* DestroyWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:227
void WIN_StopTextInput(_THIS)
#define WIN_StringToUTF8(S)
Definition: SDL_windows.h:45
void(* StopTextInput)(_THIS)
Definition: SDL_sysvideo.h:269
void(* SetWindowIcon)(_THIS, SDL_Window *window, SDL_Surface *icon)
Definition: SDL_sysvideo.h:206
void WIN_InitKeyboard(_THIS)
SDL_bool WIN_HasClipboardText(_THIS)
#define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN
A variable controlling whether the window frame and title bar are interactive when the cursor is hidd...
Definition: SDL_hints.h:211
void WIN_QuitKeyboard(_THIS)
BOOL(WINAPI *CloseTouchInputHandle)(HTOUCHINPUT)
void WIN_RestoreWindow(_THIS, SDL_Window *window)
void WIN_QuitMouse(_THIS)
SDL_bool D3D_LoadDLL(void **pD3DDLL, IDirect3D9 **pDirect3D9Interface)
void(* DestroyWindowFramebuffer)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:230
void(* GL_UnloadLibrary)(_THIS)
Definition: SDL_sysvideo.h:249
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:50
void(* GetDisplayModes)(_THIS, SDL_VideoDisplay *display)
Definition: SDL_sysvideo.h:189
int WIN_SetWindowGammaRamp(_THIS, SDL_Window *window, const Uint16 *ramp)
#define NULL
Definition: begin_code.h:143
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
SDL_bool
Definition: SDL_stdinc.h:130
void(* VideoQuit)(_THIS)
Definition: SDL_sysvideo.h:164
#define SUCCEEDED(x)
Definition: SDL_directx.h:51
#define SDL_SetError
void WIN_SetWindowTitle(_THIS, SDL_Window *window)
void WIN_SetTextInputRect(_THIS, SDL_Rect *rect)
SDL_WindowShaper *(* CreateShaper)(SDL_Window *window)
Definition: SDL_sysvideo.h:58
void WIN_PumpEvents(_THIS)
int(* ResizeWindowShape)(SDL_Window *window)
Definition: SDL_sysvideo.h:60
int(* SetWindowOpacity)(_THIS, SDL_Window *window, float opacity)
Definition: SDL_sysvideo.h:212
void WIN_SetWindowGrab(_THIS, SDL_Window *window, SDL_bool grabbed)
int Win32_SetWindowShape(SDL_WindowShaper *shaper, SDL_Surface *shape, SDL_WindowShapeMode *shape_mode)
void(* SetWindowPosition)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:207
int(* CreateWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:203
int(* GetWindowGammaRamp)(_THIS, SDL_Window *window, Uint16 *ramp)
Definition: SDL_sysvideo.h:225
void(* MinimizeWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:219
#define SDL_AddHintCallback
void WIN_SetWindowFullscreen(_THIS, SDL_Window *window, SDL_VideoDisplay *display, SDL_bool fullscreen)
SDL_bool(* HasClipboardText)(_THIS)
Definition: SDL_sysvideo.h:281
SDL_ShapeDriver shape_driver
Definition: SDL_sysvideo.h:237
int(* VideoInit)(_THIS)
Definition: SDL_sysvideo.h:158
int WIN_GetDisplayDPI(_THIS, SDL_VideoDisplay *display, float *ddpi, float *hdpi, float *vdpi)
void(* SetWindowFullscreen)(_THIS, SDL_Window *window, SDL_VideoDisplay *display, SDL_bool fullscreen)
Definition: SDL_sysvideo.h:223
void WIN_SetWindowBordered(_THIS, SDL_Window *window, SDL_bool bordered)
int(* UpdateWindowFramebuffer)(_THIS, SDL_Window *window, const SDL_Rect *rects, int numrects)
Definition: SDL_sysvideo.h:229
#define SDL_strcmp
void * SDL_LoadFunction(void *handle, const char *name)
void(* GL_DeleteContext)(_THIS, SDL_GLContext context)
Definition: SDL_sysvideo.h:256
char *(* GetClipboardText)(_THIS)
Definition: SDL_sysvideo.h:280
int WIN_CreateWindowFrom(_THIS, SDL_Window *window, const void *data)
void(* SetWindowTitle)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:205
void(* SetWindowResizable)(_THIS, SDL_Window *window, SDL_bool resizable)
Definition: SDL_sysvideo.h:222
int(* GetDisplayUsableBounds)(_THIS, SDL_VideoDisplay *display, SDL_Rect *rect)
Definition: SDL_sysvideo.h:184
int(* GL_GetSwapInterval)(_THIS)
Definition: SDL_sysvideo.h:254
void(* MaximizeWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:218
int(* SetClipboardText)(_THIS, const char *text)
Definition: SDL_sysvideo.h:279
void WIN_HideWindow(_THIS, SDL_Window *window)
int(* SetWindowGammaRamp)(_THIS, SDL_Window *window, const Uint16 *ramp)
Definition: SDL_sysvideo.h:224
int WIN_SetClipboardText(_THIS, const char *text)
void(* OnWindowEnter)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:231
void(* SetWindowGrab)(_THIS, SDL_Window *window, SDL_bool grabbed)
Definition: SDL_sysvideo.h:226
int(* CreateWindowFramebuffer)(_THIS, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
Definition: SDL_sysvideo.h:228
int SDL_RegisterApp(char *name, Uint32 style, void *hInst)
void *(* GL_GetProcAddress)(_THIS, const char *proc)
Definition: SDL_sysvideo.h:248
int WIN_GetDisplayUsableBounds(_THIS, SDL_VideoDisplay *display, SDL_Rect *rect)
int WIN_UpdateWindowFramebuffer(_THIS, SDL_Window *window, const SDL_Rect *rects, int numrects)
void(* PumpEvents)(_THIS)
Definition: SDL_sysvideo.h:262