annotate src/video/win32/SDL_win32opengl.c @ 3495:1b22878e04d0

Adam Strzelecki to SDL D3D renderer shall try mapping YV12 and I420 (IYUV) to D3D texture formats via FOURCC. This will enable HW acceleration for those formats when driver is capable (most of them are). Note that SDL's IYUV maps I420 FOURCC on Woe.
author Sam Lantinga <slouken@libsdl.org>
date Fri, 27 Nov 2009 03:11:26 +0000
parents 7f684f249ec9
children f43c8f688f77
rev   line source
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1 /*
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
2 SDL - Simple DirectMedia Layer
2859
99210400e8b9 Updated copyright date
Sam Lantinga <slouken@libsdl.org>
parents: 2735
diff changeset
3 Copyright (C) 1997-2009 Sam Lantinga
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
4
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
5 This library is free software; you can redistribute it and/or
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
6 modify it under the terms of the GNU Lesser General Public
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
7 License as published by the Free Software Foundation; either
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
8 version 2.1 of the License, or (at your option) any later version.
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
9
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
10 This library is distributed in the hope that it will be useful,
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
13 Lesser General Public License for more details.
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
14
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
15 You should have received a copy of the GNU Lesser General Public
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
16 License along with this library; if not, write to the Free Software
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
18
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
19 Sam Lantinga
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
20 slouken@libsdl.org
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
21 */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
22 #include "SDL_config.h"
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
23
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
24 #include "SDL_win32video.h"
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
25
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
26 /* WGL implementation of SDL OpenGL support */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
27
1952
420716272158 Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents: 1936
diff changeset
28 #if SDL_VIDEO_OPENGL_WGL
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
29 #include "SDL_opengl.h"
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
30
1952
420716272158 Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents: 1936
diff changeset
31 #define DEFAULT_OPENGL "OPENGL32.DLL"
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
32
3100
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
33 #ifndef WGL_ARB_create_context
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
34 #define WGL_ARB_create_context
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
35 #define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
36 #define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
37 #define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
38 #define WGL_CONTEXT_FLAGS_ARB 0x2093
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
39 #define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
40 #define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
41 #endif
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
42
3139
Sam Lantinga <slouken@libsdl.org>
parents: 3105
diff changeset
43 typedef HGLRC(APIENTRYP PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC,
Sam Lantinga <slouken@libsdl.org>
parents: 3105
diff changeset
44 HGLRC
Sam Lantinga <slouken@libsdl.org>
parents: 3105
diff changeset
45 hShareContext,
Sam Lantinga <slouken@libsdl.org>
parents: 3105
diff changeset
46 const int
Sam Lantinga <slouken@libsdl.org>
parents: 3105
diff changeset
47 *attribList);
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
48
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
49 int
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
50 WIN_GL_LoadLibrary(_THIS, const char *path)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
51 {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
52 LPTSTR wpath;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
53 HANDLE handle;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
54
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
55 if (path == NULL) {
1952
420716272158 Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents: 1936
diff changeset
56 path = SDL_getenv("SDL_OPENGL_LIBRARY");
420716272158 Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents: 1936
diff changeset
57 }
420716272158 Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents: 1936
diff changeset
58 if (path == NULL) {
420716272158 Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents: 1936
diff changeset
59 path = DEFAULT_OPENGL;
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
60 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
61 wpath = WIN_UTF8ToString(path);
3057
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
62 _this->gl_config.dll_handle = LoadLibrary(wpath);
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
63 SDL_free(wpath);
3057
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
64 if (!_this->gl_config.dll_handle) {
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
65 char message[1024];
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
66 SDL_snprintf(message, SDL_arraysize(message), "LoadLibrary(\"%s\")",
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
67 path);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
68 WIN_SetError(message);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
69 return -1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
70 }
3057
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
71 SDL_strlcpy(_this->gl_config.driver_path, path,
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
72 SDL_arraysize(_this->gl_config.driver_path));
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
73
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
74 /* Allocate OpenGL memory */
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
75 _this->gl_data =
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
76 (struct SDL_GLDriverData *) SDL_calloc(1,
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
77 sizeof(struct
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
78 SDL_GLDriverData));
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
79 if (!_this->gl_data) {
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
80 SDL_OutOfMemory();
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
81 return -1;
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
82 }
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
83
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
84 /* Load function pointers */
3057
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
85 handle = _this->gl_config.dll_handle;
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
86 _this->gl_data->wglGetProcAddress = (void *(WINAPI *) (const char *))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
87 GetProcAddress(handle, "wglGetProcAddress");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
88 _this->gl_data->wglCreateContext = (HGLRC(WINAPI *) (HDC))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
89 GetProcAddress(handle, "wglCreateContext");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
90 _this->gl_data->wglDeleteContext = (BOOL(WINAPI *) (HGLRC))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
91 GetProcAddress(handle, "wglDeleteContext");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
92 _this->gl_data->wglMakeCurrent = (BOOL(WINAPI *) (HDC, HGLRC))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
93 GetProcAddress(handle, "wglMakeCurrent");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
94 _this->gl_data->wglSwapIntervalEXT = (void (WINAPI *) (int))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
95 GetProcAddress(handle, "wglSwapIntervalEXT");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
96 _this->gl_data->wglGetSwapIntervalEXT = (int (WINAPI *) (void))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
97 GetProcAddress(handle, "wglGetSwapIntervalEXT");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
98
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
99 if (!_this->gl_data->wglGetProcAddress ||
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
100 !_this->gl_data->wglCreateContext ||
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
101 !_this->gl_data->wglDeleteContext ||
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
102 !_this->gl_data->wglMakeCurrent) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
103 SDL_SetError("Could not retrieve OpenGL functions");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
104 FreeLibrary(handle);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
105 return -1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
106 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
107
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
108 return 0;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
109 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
110
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
111 void *
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
112 WIN_GL_GetProcAddress(_THIS, const char *proc)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
113 {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
114 void *func;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
115
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
116 /* This is to pick up extensions */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
117 func = _this->gl_data->wglGetProcAddress(proc);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
118 if (!func) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
119 /* This is probably a normal GL function */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
120 func = GetProcAddress(_this->gl_config.dll_handle, proc);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
121 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
122 return func;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
123 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
124
3057
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
125 void
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
126 WIN_GL_UnloadLibrary(_THIS)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
127 {
3057
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
128 FreeLibrary((HMODULE) _this->gl_config.dll_handle);
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
129 _this->gl_config.dll_handle = NULL;
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
130
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
131 /* Free OpenGL memory */
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
132 SDL_free(_this->gl_data);
089a77aebb7d Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
133 _this->gl_data = NULL;
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
134 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
135
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
136 static void
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
137 WIN_GL_SetupPixelFormat(_THIS, PIXELFORMATDESCRIPTOR * pfd)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
138 {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
139 SDL_zerop(pfd);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
140 pfd->nSize = sizeof(*pfd);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
141 pfd->nVersion = 1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
142 pfd->dwFlags = (PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
143 if (_this->gl_config.double_buffer) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
144 pfd->dwFlags |= PFD_DOUBLEBUFFER;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
145 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
146 if (_this->gl_config.stereo) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
147 pfd->dwFlags |= PFD_STEREO;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
148 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
149 pfd->iLayerType = PFD_MAIN_PLANE;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
150 pfd->iPixelType = PFD_TYPE_RGBA;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
151 pfd->cRedBits = _this->gl_config.red_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
152 pfd->cGreenBits = _this->gl_config.green_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
153 pfd->cBlueBits = _this->gl_config.blue_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
154 pfd->cAlphaBits = _this->gl_config.alpha_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
155 if (_this->gl_config.buffer_size) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
156 pfd->cColorBits =
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
157 _this->gl_config.buffer_size - _this->gl_config.alpha_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
158 } else {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
159 pfd->cColorBits = (pfd->cRedBits + pfd->cGreenBits + pfd->cBlueBits);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
160 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
161 pfd->cAccumRedBits = _this->gl_config.accum_red_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
162 pfd->cAccumGreenBits = _this->gl_config.accum_green_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
163 pfd->cAccumBlueBits = _this->gl_config.accum_blue_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
164 pfd->cAccumAlphaBits = _this->gl_config.accum_alpha_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
165 pfd->cAccumBits =
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
166 (pfd->cAccumRedBits + pfd->cAccumGreenBits + pfd->cAccumBlueBits +
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
167 pfd->cAccumAlphaBits);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
168 pfd->cDepthBits = _this->gl_config.depth_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
169 pfd->cStencilBits = _this->gl_config.stencil_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
170 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
171
2150
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
172 /* Choose the closest pixel format that meets or exceeds the target.
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
173 FIXME: Should we weight any particular attribute over any other?
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
174 */
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
175 static int
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
176 WIN_GL_ChoosePixelFormat(HDC hdc, PIXELFORMATDESCRIPTOR * target)
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
177 {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
178 PIXELFORMATDESCRIPTOR pfd;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
179 int count, index, best = 0;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
180 unsigned int dist, best_dist = ~0U;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
181
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
182 count = DescribePixelFormat(hdc, 1, sizeof(pfd), NULL);
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
183
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
184 for (index = 1; index <= count; index++) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
185
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
186 if (!DescribePixelFormat(hdc, index, sizeof(pfd), &pfd)) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
187 continue;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
188 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
189
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
190 if ((pfd.dwFlags & target->dwFlags) != target->dwFlags) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
191 continue;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
192 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
193
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
194 if (pfd.iLayerType != target->iLayerType) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
195 continue;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
196 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
197 if (pfd.iPixelType != target->iPixelType) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
198 continue;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
199 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
200
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
201 dist = 0;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
202
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
203 if (pfd.cColorBits < target->cColorBits) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
204 continue;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
205 } else {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
206 dist += (pfd.cColorBits - target->cColorBits);
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
207 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
208 if (pfd.cRedBits < target->cRedBits) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
209 continue;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
210 } else {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
211 dist += (pfd.cRedBits - target->cRedBits);
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
212 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
213 if (pfd.cGreenBits < target->cGreenBits) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
214 continue;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
215 } else {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
216 dist += (pfd.cGreenBits - target->cGreenBits);
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
217 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
218 if (pfd.cBlueBits < target->cBlueBits) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
219 continue;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
220 } else {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
221 dist += (pfd.cBlueBits - target->cBlueBits);
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
222 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
223 if (pfd.cAlphaBits < target->cAlphaBits) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
224 continue;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
225 } else {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
226 dist += (pfd.cAlphaBits - target->cAlphaBits);
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
227 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
228 if (pfd.cAccumBits < target->cAccumBits) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
229 continue;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
230 } else {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
231 dist += (pfd.cAccumBits - target->cAccumBits);
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
232 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
233 if (pfd.cAccumRedBits < target->cAccumRedBits) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
234 continue;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
235 } else {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
236 dist += (pfd.cAccumRedBits - target->cAccumRedBits);
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
237 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
238 if (pfd.cAccumGreenBits < target->cAccumGreenBits) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
239 continue;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
240 } else {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
241 dist += (pfd.cAccumGreenBits - target->cAccumGreenBits);
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
242 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
243 if (pfd.cAccumBlueBits < target->cAccumBlueBits) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
244 continue;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
245 } else {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
246 dist += (pfd.cAccumBlueBits - target->cAccumBlueBits);
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
247 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
248 if (pfd.cAccumAlphaBits < target->cAccumAlphaBits) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
249 continue;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
250 } else {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
251 dist += (pfd.cAccumAlphaBits - target->cAccumAlphaBits);
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
252 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
253 if (pfd.cDepthBits < target->cDepthBits) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
254 continue;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
255 } else {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
256 dist += (pfd.cDepthBits - target->cDepthBits);
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
257 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
258 if (pfd.cStencilBits < target->cStencilBits) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
259 continue;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
260 } else {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
261 dist += (pfd.cStencilBits - target->cStencilBits);
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
262 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
263
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
264 if (dist < best_dist) {
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
265 best = index;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
266 best_dist = dist;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
267 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
268 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
269
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
270 return best;
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
271 }
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
272
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
273 static SDL_bool
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
274 HasExtension(const char *extension, const char *extensions)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
275 {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
276 const char *start;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
277 const char *where, *terminator;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
278
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
279 /* Extension names should not have spaces. */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
280 where = SDL_strchr(extension, ' ');
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
281 if (where || *extension == '\0')
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
282 return SDL_FALSE;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
283
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
284 if (!extensions)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
285 return SDL_FALSE;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
286
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
287 /* It takes a bit of care to be fool-proof about parsing the
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
288 * OpenGL extensions string. Don't be fooled by sub-strings,
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
289 * etc. */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
290
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
291 start = extensions;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
292
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
293 for (;;) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
294 where = SDL_strstr(start, extension);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
295 if (!where)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
296 break;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
297
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
298 terminator = where + SDL_strlen(extension);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
299 if (where == start || *(where - 1) == ' ')
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
300 if (*terminator == ' ' || *terminator == '\0')
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
301 return SDL_TRUE;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
302
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
303 start = terminator;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
304 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
305 return SDL_FALSE;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
306 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
307
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
308 static void
2178
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
309 WIN_GL_InitExtensions(_THIS, HDC hdc)
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
310 {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
311 const char *(WINAPI * wglGetExtensionsStringARB) (HDC) = 0;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
312 const char *extensions;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
313
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
314 wglGetExtensionsStringARB = (const char *(WINAPI *) (HDC))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
315 _this->gl_data->wglGetProcAddress("wglGetExtensionsStringARB");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
316 if (wglGetExtensionsStringARB) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
317 extensions = wglGetExtensionsStringARB(hdc);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
318 } else {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
319 extensions = NULL;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
320 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
321
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
322 /* Check for WGL_ARB_pixel_format */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
323 _this->gl_data->WGL_ARB_pixel_format = 0;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
324 if (HasExtension("WGL_ARB_pixel_format", extensions)) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
325 _this->gl_data->wglChoosePixelFormatARB = (BOOL(WINAPI *)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
326 (HDC, const int *,
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
327 const FLOAT *, UINT,
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
328 int *, UINT *))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
329 WIN_GL_GetProcAddress(_this, "wglChoosePixelFormatARB");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
330 _this->gl_data->wglGetPixelFormatAttribivARB =
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
331 (BOOL(WINAPI *) (HDC, int, int, UINT, const int *, int *))
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
332 WIN_GL_GetProcAddress(_this, "wglGetPixelFormatAttribivARB");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
333
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
334 if ((_this->gl_data->wglChoosePixelFormatARB != NULL) &&
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
335 (_this->gl_data->wglGetPixelFormatAttribivARB != NULL)) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
336 _this->gl_data->WGL_ARB_pixel_format = 1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
337 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
338 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
339
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
340 /* Check for WGL_EXT_swap_control */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
341 if (HasExtension("WGL_EXT_swap_control", extensions)) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
342 _this->gl_data->wglSwapIntervalEXT =
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
343 WIN_GL_GetProcAddress(_this, "wglSwapIntervalEXT");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
344 _this->gl_data->wglGetSwapIntervalEXT =
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
345 WIN_GL_GetProcAddress(_this, "wglGetSwapIntervalEXT");
2178
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
346 } else {
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
347 _this->gl_data->wglSwapIntervalEXT = NULL;
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
348 _this->gl_data->wglGetSwapIntervalEXT = NULL;
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
349 }
2178
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
350 }
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
351
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
352 static int
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
353 WIN_GL_ChoosePixelFormatARB(_THIS, int *iAttribs, float *fAttribs)
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
354 {
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
355 HWND hwnd;
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
356 HDC hdc;
2180
5ed37b16c1a7 Yes, you need to set the pixel format before creating a context.
Sam Lantinga <slouken@libsdl.org>
parents: 2178
diff changeset
357 PIXELFORMATDESCRIPTOR pfd;
2178
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
358 HGLRC hglrc;
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
359 int pixel_format = 0;
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
360 unsigned int matching;
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
361
2178
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
362 hwnd =
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
363 CreateWindow(SDL_Appname, SDL_Appname, (WS_POPUP | WS_DISABLED), 0, 0,
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
364 10, 10, NULL, NULL, SDL_Instance, NULL);
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
365 WIN_PumpEvents(_this);
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
366
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
367 hdc = GetDC(hwnd);
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
368
2180
5ed37b16c1a7 Yes, you need to set the pixel format before creating a context.
Sam Lantinga <slouken@libsdl.org>
parents: 2178
diff changeset
369 WIN_GL_SetupPixelFormat(_this, &pfd);
5ed37b16c1a7 Yes, you need to set the pixel format before creating a context.
Sam Lantinga <slouken@libsdl.org>
parents: 2178
diff changeset
370
5ed37b16c1a7 Yes, you need to set the pixel format before creating a context.
Sam Lantinga <slouken@libsdl.org>
parents: 2178
diff changeset
371 SetPixelFormat(hdc, ChoosePixelFormat(hdc, &pfd), &pfd);
5ed37b16c1a7 Yes, you need to set the pixel format before creating a context.
Sam Lantinga <slouken@libsdl.org>
parents: 2178
diff changeset
372
2178
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
373 hglrc = _this->gl_data->wglCreateContext(hdc);
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
374 if (hglrc) {
2178
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
375 _this->gl_data->wglMakeCurrent(hdc, hglrc);
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
376
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
377 WIN_GL_InitExtensions(_this, hdc);
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
378
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
379 if (_this->gl_data->WGL_ARB_pixel_format) {
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
380 _this->gl_data->wglChoosePixelFormatARB(hdc, iAttribs, fAttribs,
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
381 1, &pixel_format,
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
382 &matching);
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
383 }
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
384
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
385 _this->gl_data->wglMakeCurrent(NULL, NULL);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
386 _this->gl_data->wglDeleteContext(hglrc);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
387 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
388 ReleaseDC(hwnd, hdc);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
389 DestroyWindow(hwnd);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
390 WIN_PumpEvents(_this);
2178
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
391
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
392 return pixel_format;
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
393 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
394
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
395 int
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
396 WIN_GL_SetupWindow(_THIS, SDL_Window * window)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
397 {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
398 HDC hdc = ((SDL_WindowData *) window->driverdata)->hdc;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
399 PIXELFORMATDESCRIPTOR pfd;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
400 int pixel_format;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
401 int iAttribs[64];
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
402 int *iAttr;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
403 float fAttribs[1] = { 0 };
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
404
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
405 WIN_GL_SetupPixelFormat(_this, &pfd);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
406
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
407 /* setup WGL_ARB_pixel_format attribs */
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
408 iAttr = &iAttribs[0];
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
409
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
410 *iAttr++ = WGL_DRAW_TO_WINDOW_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
411 *iAttr++ = GL_TRUE;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
412 *iAttr++ = WGL_ACCELERATION_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
413 *iAttr++ = WGL_FULL_ACCELERATION_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
414 *iAttr++ = WGL_RED_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
415 *iAttr++ = _this->gl_config.red_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
416 *iAttr++ = WGL_GREEN_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
417 *iAttr++ = _this->gl_config.green_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
418 *iAttr++ = WGL_BLUE_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
419 *iAttr++ = _this->gl_config.blue_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
420
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
421 if (_this->gl_config.alpha_size) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
422 *iAttr++ = WGL_ALPHA_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
423 *iAttr++ = _this->gl_config.alpha_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
424 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
425
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
426 *iAttr++ = WGL_DOUBLE_BUFFER_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
427 *iAttr++ = _this->gl_config.double_buffer;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
428
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
429 *iAttr++ = WGL_DEPTH_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
430 *iAttr++ = _this->gl_config.depth_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
431
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
432 if (_this->gl_config.stencil_size) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
433 *iAttr++ = WGL_STENCIL_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
434 *iAttr++ = _this->gl_config.stencil_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
435 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
436
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
437 if (_this->gl_config.accum_red_size) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
438 *iAttr++ = WGL_ACCUM_RED_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
439 *iAttr++ = _this->gl_config.accum_red_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
440 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
441
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
442 if (_this->gl_config.accum_green_size) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
443 *iAttr++ = WGL_ACCUM_GREEN_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
444 *iAttr++ = _this->gl_config.accum_green_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
445 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
446
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
447 if (_this->gl_config.accum_blue_size) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
448 *iAttr++ = WGL_ACCUM_BLUE_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
449 *iAttr++ = _this->gl_config.accum_blue_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
450 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
451
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
452 if (_this->gl_config.accum_alpha_size) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
453 *iAttr++ = WGL_ACCUM_ALPHA_BITS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
454 *iAttr++ = _this->gl_config.accum_alpha_size;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
455 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
456
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
457 if (_this->gl_config.stereo) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
458 *iAttr++ = WGL_STEREO_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
459 *iAttr++ = GL_TRUE;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
460 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
461
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
462 if (_this->gl_config.multisamplebuffers) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
463 *iAttr++ = WGL_SAMPLE_BUFFERS_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
464 *iAttr++ = _this->gl_config.multisamplebuffers;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
465 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
466
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
467 if (_this->gl_config.multisamplesamples) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
468 *iAttr++ = WGL_SAMPLES_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
469 *iAttr++ = _this->gl_config.multisamplesamples;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
470 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
471
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
472 if (_this->gl_config.accelerated >= 0) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
473 *iAttr++ = WGL_ACCELERATION_ARB;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
474 *iAttr++ =
2735
204be4fc2726 Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents: 2180
diff changeset
475 (_this->gl_config.accelerated ? WGL_GENERIC_ACCELERATION_ARB :
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
476 WGL_NO_ACCELERATION_ARB);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
477 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
478
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
479 *iAttr = 0;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
480
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
481 /* Choose and set the closest available pixel format */
2178
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
482 pixel_format = WIN_GL_ChoosePixelFormatARB(_this, iAttribs, fAttribs);
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
483 if (!pixel_format) {
2150
abbe2c1dcf0a Fixed bug #77
Sam Lantinga <slouken@libsdl.org>
parents: 1952
diff changeset
484 pixel_format = WIN_GL_ChoosePixelFormat(hdc, &pfd);
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
485 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
486 if (!pixel_format) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
487 SDL_SetError("No matching GL pixel format available");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
488 return -1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
489 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
490 if (!SetPixelFormat(hdc, pixel_format, &pfd)) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
491 WIN_SetError("SetPixelFormat()");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
492 return (-1);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
493 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
494 return 0;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
495 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
496
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
497 SDL_GLContext
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
498 WIN_GL_CreateContext(_THIS, SDL_Window * window)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
499 {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
500 HDC hdc = ((SDL_WindowData *) window->driverdata)->hdc;
2178
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
501 HGLRC context;
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
502
3100
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
503 if (_this->gl_config.major_version < 3) {
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
504 context = _this->gl_data->wglCreateContext(hdc);
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
505 } else {
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
506 PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB;
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
507 HGLRC temp_context = _this->gl_data->wglCreateContext(hdc);
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
508 if (!temp_context) {
3139
Sam Lantinga <slouken@libsdl.org>
parents: 3105
diff changeset
509 SDL_SetError("Could not create GL context");
3100
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
510 return NULL;
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
511 }
3139
Sam Lantinga <slouken@libsdl.org>
parents: 3105
diff changeset
512
3100
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
513 /* Make the context current */
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
514 if (WIN_GL_MakeCurrent(_this, window, temp_context) < 0) {
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
515 WIN_GL_DeleteContext(_this, temp_context);
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
516 return NULL;
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
517 }
3139
Sam Lantinga <slouken@libsdl.org>
parents: 3105
diff changeset
518
Sam Lantinga <slouken@libsdl.org>
parents: 3105
diff changeset
519 wglCreateContextAttribsARB =
Sam Lantinga <slouken@libsdl.org>
parents: 3105
diff changeset
520 (PFNWGLCREATECONTEXTATTRIBSARBPROC) _this->gl_data->
Sam Lantinga <slouken@libsdl.org>
parents: 3105
diff changeset
521 wglGetProcAddress("wglCreateContextAttribsARB");
3100
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
522 if (!wglCreateContextAttribsARB) {
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
523 SDL_SetError("GL 3.x is not supported");
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
524 context = temp_context;
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
525 } else {
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
526 int attribs[] = {
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
527 WGL_CONTEXT_MAJOR_VERSION_ARB, _this->gl_config.major_version,
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
528 WGL_CONTEXT_MINOR_VERSION_ARB, _this->gl_config.minor_version,
3139
Sam Lantinga <slouken@libsdl.org>
parents: 3105
diff changeset
529 0
3100
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
530 };
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
531 /* Create the GL 3.x context */
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
532 context = wglCreateContextAttribsARB(hdc, 0, attribs);
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
533 /* Delete the GL 2.x context */
3105
cdeee9f9b14b Fixed bug #721
Sam Lantinga <slouken@libsdl.org>
parents: 3100
diff changeset
534 _this->gl_data->wglDeleteContext(temp_context);
3100
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
535 }
7dc982143c06 Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents: 3057
diff changeset
536 }
3139
Sam Lantinga <slouken@libsdl.org>
parents: 3105
diff changeset
537
2178
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
538 if (!context) {
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
539 SDL_SetError("Could not create GL context");
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
540 return NULL;
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
541 }
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
542
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
543 if (WIN_GL_MakeCurrent(_this, window, context) < 0) {
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
544 WIN_GL_DeleteContext(_this, context);
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
545 return NULL;
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
546 }
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
547
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
548 WIN_GL_InitExtensions(_this, hdc);
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
549
114a541cfae2 Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents: 2150
diff changeset
550 return context;
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
551 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
552
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
553 int
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
554 WIN_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
555 {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
556 HDC hdc;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
557 int status;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
558
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
559 if (window) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
560 hdc = ((SDL_WindowData *) window->driverdata)->hdc;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
561 } else {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
562 hdc = NULL;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
563 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
564 if (!_this->gl_data->wglMakeCurrent(hdc, (HGLRC) context)) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
565 WIN_SetError("wglMakeCurrent()");
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
566 status = -1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
567 } else {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
568 status = 0;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
569 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
570 return status;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
571 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
572
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
573 int
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
574 WIN_GL_SetSwapInterval(_THIS, int interval)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
575 {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
576 if (_this->gl_data->wglSwapIntervalEXT) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
577 _this->gl_data->wglSwapIntervalEXT(interval);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
578 return 0;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
579 } else {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
580 SDL_Unsupported();
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
581 return -1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
582 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
583 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
584
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
585 int
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
586 WIN_GL_GetSwapInterval(_THIS)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
587 {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
588 if (_this->gl_data->wglGetSwapIntervalEXT) {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
589 return _this->gl_data->wglGetSwapIntervalEXT();
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
590 } else {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
591 SDL_Unsupported();
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
592 return -1;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
593 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
594 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
595
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
596 void
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
597 WIN_GL_SwapWindow(_THIS, SDL_Window * window)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
598 {
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
599 HDC hdc = ((SDL_WindowData *) window->driverdata)->hdc;
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
600
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
601 SwapBuffers(hdc);
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
602 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
603
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
604 void
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
605 WIN_GL_DeleteContext(_THIS, SDL_GLContext context)
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
606 {
1936
83946ee0ff1f Implemented OpenGL support on Mac OS X
Sam Lantinga <slouken@libsdl.org>
parents: 1926
diff changeset
607 _this->gl_data->wglDeleteContext((HGLRC) context);
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
608 }
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
609
1952
420716272158 Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents: 1936
diff changeset
610 #endif /* SDL_VIDEO_OPENGL_WGL */
1913
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
611
83420da906a5 Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
612 /* vi: set ts=4 sw=4 expandtab: */