author  Sam Lantinga <slouken@libsdl.org> 
Mon, 17 Jul 2006 06:47:33 +0000  
changeset 1913  83420da906a5 
child 1926  307355678142 
permissions  rwrr 
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 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

3 
Copyright (C) 19972006 Sam Lantinga 
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 021101301 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 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

28 
#if SDL_VIDEO_OPENGL 
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 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

31 
#define DEFAULT_GL_DRIVER_PATH "OPENGL32.DLL" 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

32 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

33 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

34 
int 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

35 
WIN_GL_LoadLibrary(_THIS, const char *path) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

36 
{ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

37 
LPTSTR wpath; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

38 
HANDLE handle; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

39 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

40 
if (_this>gl_config.driver_loaded) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

41 
if (path) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

42 
SDL_SetError("OpenGL library already loaded"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

43 
return 1; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

44 
} else { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

45 
++_this>gl_config.driver_loaded; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

46 
return 0; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

47 
} 
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 
if (path == NULL) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

50 
path = DEFAULT_GL_DRIVER_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 
wpath = WIN_UTF8ToString(path); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

53 
handle = LoadLibrary(wpath); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

54 
SDL_free(wpath); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

55 
if (!handle) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

56 
char message[1024]; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

57 
SDL_snprintf(message, SDL_arraysize(message), "LoadLibrary(\"%s\")", 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

58 
path); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

59 
WIN_SetError(message); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

60 
return 1; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

61 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

62 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

63 
/* Load function pointers */ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

64 
_this>gl_data>wglGetProcAddress = (void *(WINAPI *) (const char *)) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

65 
GetProcAddress(handle, "wglGetProcAddress"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

66 
_this>gl_data>wglCreateContext = (HGLRC(WINAPI *) (HDC)) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

67 
GetProcAddress(handle, "wglCreateContext"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

68 
_this>gl_data>wglDeleteContext = (BOOL(WINAPI *) (HGLRC)) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

69 
GetProcAddress(handle, "wglDeleteContext"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

70 
_this>gl_data>wglMakeCurrent = (BOOL(WINAPI *) (HDC, HGLRC)) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

71 
GetProcAddress(handle, "wglMakeCurrent"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

72 
_this>gl_data>wglSwapIntervalEXT = (void (WINAPI *) (int)) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

73 
GetProcAddress(handle, "wglSwapIntervalEXT"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

74 
_this>gl_data>wglGetSwapIntervalEXT = (int (WINAPI *) (void)) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

75 
GetProcAddress(handle, "wglGetSwapIntervalEXT"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

76 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

77 
if (!_this>gl_data>wglGetProcAddress  
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

78 
!_this>gl_data>wglCreateContext  
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

79 
!_this>gl_data>wglDeleteContext  
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

80 
!_this>gl_data>wglMakeCurrent) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

81 
SDL_SetError("Could not retrieve OpenGL functions"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

82 
FreeLibrary(handle); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

83 
return 1; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

84 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

85 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

86 
_this>gl_config.dll_handle = handle; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

87 
SDL_strlcpy(_this>gl_config.driver_path, path, 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

88 
SDL_arraysize(_this>gl_config.driver_path)); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

89 
_this>gl_config.driver_loaded = 1; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

90 
return 0; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

91 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

92 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

93 
void * 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

94 
WIN_GL_GetProcAddress(_THIS, const char *proc) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

95 
{ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

96 
void *func; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

97 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

98 
/* This is to pick up extensions */ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

99 
func = _this>gl_data>wglGetProcAddress(proc); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

100 
if (!func) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

101 
/* This is probably a normal GL function */ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

102 
func = GetProcAddress(_this>gl_config.dll_handle, proc); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

103 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

104 
return func; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

105 
} 
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 
static void 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

108 
WIN_GL_UnloadLibrary(_THIS) 
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 
if (_this>gl_config.driver_loaded > 0) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

111 
if (_this>gl_config.driver_loaded > 0) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

112 
return; 
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 
FreeLibrary((HMODULE) _this>gl_config.dll_handle); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

115 
_this>gl_config.dll_handle = NULL; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

116 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

117 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

118 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

119 
static void 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

120 
WIN_GL_SetupPixelFormat(_THIS, PIXELFORMATDESCRIPTOR * pfd) 
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 
SDL_zerop(pfd); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

123 
pfd>nSize = sizeof(*pfd); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

124 
pfd>nVersion = 1; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

125 
pfd>dwFlags = (PFD_DRAW_TO_WINDOW  PFD_SUPPORT_OPENGL); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

126 
if (_this>gl_config.double_buffer) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

127 
pfd>dwFlags = PFD_DOUBLEBUFFER; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

128 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

129 
if (_this>gl_config.stereo) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

130 
pfd>dwFlags = PFD_STEREO; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

131 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

132 
pfd>iLayerType = PFD_MAIN_PLANE; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

133 
pfd>iPixelType = PFD_TYPE_RGBA; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

134 
pfd>cRedBits = _this>gl_config.red_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

135 
pfd>cGreenBits = _this>gl_config.green_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

136 
pfd>cBlueBits = _this>gl_config.blue_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

137 
pfd>cAlphaBits = _this>gl_config.alpha_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

138 
if (_this>gl_config.buffer_size) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

139 
pfd>cColorBits = 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

140 
_this>gl_config.buffer_size  _this>gl_config.alpha_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

141 
} else { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

142 
pfd>cColorBits = (pfd>cRedBits + pfd>cGreenBits + pfd>cBlueBits); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

143 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

144 
pfd>cAccumRedBits = _this>gl_config.accum_red_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

145 
pfd>cAccumGreenBits = _this>gl_config.accum_green_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

146 
pfd>cAccumBlueBits = _this>gl_config.accum_blue_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

147 
pfd>cAccumAlphaBits = _this>gl_config.accum_alpha_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

148 
pfd>cAccumBits = 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

149 
(pfd>cAccumRedBits + pfd>cAccumGreenBits + pfd>cAccumBlueBits + 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

150 
pfd>cAccumAlphaBits); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

151 
pfd>cDepthBits = _this>gl_config.depth_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

152 
pfd>cStencilBits = _this>gl_config.stencil_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

153 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

154 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

155 
static SDL_bool 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

156 
HasExtension(const char *extension, const char *extensions) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

157 
{ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

158 
const char *start; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

159 
const char *where, *terminator; 
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 
/* Extension names should not have spaces. */ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

162 
where = SDL_strchr(extension, ' '); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

163 
if (where  *extension == '\0') 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

164 
return SDL_FALSE; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

165 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

166 
if (!extensions) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

167 
return SDL_FALSE; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

168 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

169 
/* It takes a bit of care to be foolproof about parsing the 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

170 
* OpenGL extensions string. Don't be fooled by substrings, 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

171 
* etc. */ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

172 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

173 
start = extensions; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

174 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

175 
for (;;) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

176 
where = SDL_strstr(start, extension); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

177 
if (!where) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

178 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

179 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

180 
terminator = where + SDL_strlen(extension); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

181 
if (where == start  *(where  1) == ' ') 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

182 
if (*terminator == ' '  *terminator == '\0') 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

183 
return SDL_TRUE; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

184 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

185 
start = terminator; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

186 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

187 
return SDL_FALSE; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

188 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

189 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

190 
static void 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

191 
WIN_GL_InitExtensions(_THIS) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

192 
{ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

193 
HWND hwnd; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

194 
HDC hdc; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

195 
PIXELFORMATDESCRIPTOR pfd; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

196 
int pixel_format; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

197 
HGLRC hglrc; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

198 
const char *(WINAPI * wglGetExtensionsStringARB) (HDC) = 0; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

199 
const GLubyte *(WINAPI * glGetStringFunc) (GLenum); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

200 
const char *extensions; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

201 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

202 
hwnd = 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

203 
CreateWindow(SDL_Appname, SDL_Appname, (WS_POPUP  WS_DISABLED), 0, 0, 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

204 
10, 10, NULL, NULL, SDL_Instance, NULL); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

205 
WIN_PumpEvents(_this); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

206 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

207 
hdc = GetDC(hwnd); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

208 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

209 
WIN_GL_SetupPixelFormat(_this, &pfd); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

210 
pixel_format = ChoosePixelFormat(hdc, &pfd); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

211 
SetPixelFormat(hdc, pixel_format, &pfd); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

212 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

213 
hglrc = _this>gl_data>wglCreateContext(hdc); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

214 
if (hglrc) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

215 
_this>gl_data>wglMakeCurrent(hdc, hglrc); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

216 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

217 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

218 
wglGetExtensionsStringARB = (const char *(WINAPI *) (HDC)) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

219 
_this>gl_data>wglGetProcAddress("wglGetExtensionsStringARB"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

220 
if (wglGetExtensionsStringARB) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

221 
extensions = wglGetExtensionsStringARB(hdc); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

222 
} else { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

223 
extensions = NULL; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

224 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

225 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

226 
/* Check for WGL_ARB_pixel_format */ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

227 
_this>gl_data>WGL_ARB_pixel_format = 0; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

228 
if (HasExtension("WGL_ARB_pixel_format", extensions)) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

229 
_this>gl_data>wglChoosePixelFormatARB = (BOOL(WINAPI *) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

230 
(HDC, const int *, 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

231 
const FLOAT *, UINT, 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

232 
int *, UINT *)) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

233 
WIN_GL_GetProcAddress(_this, "wglChoosePixelFormatARB"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

234 
_this>gl_data>wglGetPixelFormatAttribivARB = 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

235 
(BOOL(WINAPI *) (HDC, int, int, UINT, const int *, int *)) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

236 
WIN_GL_GetProcAddress(_this, "wglGetPixelFormatAttribivARB"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

237 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

238 
if ((_this>gl_data>wglChoosePixelFormatARB != NULL) && 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

239 
(_this>gl_data>wglGetPixelFormatAttribivARB != NULL)) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

240 
_this>gl_data>WGL_ARB_pixel_format = 1; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

241 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

242 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

243 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

244 
glGetStringFunc = WIN_GL_GetProcAddress(_this, "glGetString"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

245 
if (glGetStringFunc) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

246 
extensions = (const char *) glGetStringFunc(GL_EXTENSIONS); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

247 
} else { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

248 
/* Uh oh, something is seriously wrong here... */ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

249 
extensions = NULL; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

250 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

251 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

252 
/* Check for WGL_EXT_swap_control */ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

253 
if (HasExtension("WGL_EXT_swap_control", extensions)) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

254 
_this>gl_data>wglSwapIntervalEXT = 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

255 
WIN_GL_GetProcAddress(_this, "wglSwapIntervalEXT"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

256 
_this>gl_data>wglGetSwapIntervalEXT = 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

257 
WIN_GL_GetProcAddress(_this, "wglGetSwapIntervalEXT"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

258 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

259 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

260 
if (hglrc) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

261 
_this>gl_data>wglMakeCurrent(NULL, NULL); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

262 
_this>gl_data>wglDeleteContext(hglrc); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

263 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

264 
ReleaseDC(hwnd, hdc); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

265 
DestroyWindow(hwnd); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

266 
WIN_PumpEvents(_this); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

267 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

268 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

269 
static void 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

270 
WIN_GL_Shutdown(_THIS) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

271 
{ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

272 
if (!_this>gl_data  (_this>gl_data>initialized > 0)) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

273 
return; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

274 
} 
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 
WIN_GL_UnloadLibrary(_this); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

277 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

278 
SDL_free(_this>gl_data); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

279 
_this>gl_data = NULL; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

280 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

281 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

282 
static int 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

283 
WIN_GL_Initialize(_THIS) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

284 
{ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

285 
if (_this>gl_data) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

286 
++_this>gl_data>initialized; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

287 
return 0; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

288 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

289 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

290 
_this>gl_data = 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

291 
(struct SDL_GLDriverData *) SDL_calloc(1, 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

292 
sizeof(struct 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

293 
SDL_GLDriverData)); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

294 
if (!_this>gl_data) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

295 
SDL_OutOfMemory(); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

296 
return 1; 
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 
_this>gl_data>initialized = 1; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

299 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

300 
if (WIN_GL_LoadLibrary(_this, NULL) < 0) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

301 
return 1; 
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 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

304 
/* Initialize extensions */ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

305 
WIN_GL_InitExtensions(_this); 
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 
return 0; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

308 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

309 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

310 
int 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

311 
WIN_GL_SetupWindow(_THIS, SDL_Window * window) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

312 
{ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

313 
HDC hdc = ((SDL_WindowData *) window>driverdata)>hdc; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

314 
PIXELFORMATDESCRIPTOR pfd; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

315 
int pixel_format; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

316 
unsigned int matching; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

317 
int iAttribs[64]; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

318 
int *iAttr; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

319 
float fAttribs[1] = { 0 }; 
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 
if (WIN_GL_Initialize(_this) < 0) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

322 
return 1; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

323 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

324 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

325 
WIN_GL_SetupPixelFormat(_this, &pfd); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

326 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

327 
/* setup WGL_ARB_pixel_format attribs */ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

328 
iAttr = &iAttribs[0]; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

329 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

330 
*iAttr++ = WGL_DRAW_TO_WINDOW_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

331 
*iAttr++ = GL_TRUE; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

332 
*iAttr++ = WGL_ACCELERATION_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

333 
*iAttr++ = WGL_FULL_ACCELERATION_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

334 
*iAttr++ = WGL_RED_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

335 
*iAttr++ = _this>gl_config.red_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

336 
*iAttr++ = WGL_GREEN_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

337 
*iAttr++ = _this>gl_config.green_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

338 
*iAttr++ = WGL_BLUE_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

339 
*iAttr++ = _this>gl_config.blue_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

340 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

341 
if (_this>gl_config.alpha_size) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

342 
*iAttr++ = WGL_ALPHA_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

343 
*iAttr++ = _this>gl_config.alpha_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

344 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

345 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

346 
*iAttr++ = WGL_DOUBLE_BUFFER_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

347 
*iAttr++ = _this>gl_config.double_buffer; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

348 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

349 
*iAttr++ = WGL_DEPTH_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

350 
*iAttr++ = _this>gl_config.depth_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

351 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

352 
if (_this>gl_config.stencil_size) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

353 
*iAttr++ = WGL_STENCIL_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

354 
*iAttr++ = _this>gl_config.stencil_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

355 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

356 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

357 
if (_this>gl_config.accum_red_size) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

358 
*iAttr++ = WGL_ACCUM_RED_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

359 
*iAttr++ = _this>gl_config.accum_red_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

360 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

361 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

362 
if (_this>gl_config.accum_green_size) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

363 
*iAttr++ = WGL_ACCUM_GREEN_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

364 
*iAttr++ = _this>gl_config.accum_green_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

365 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

366 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

367 
if (_this>gl_config.accum_blue_size) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

368 
*iAttr++ = WGL_ACCUM_BLUE_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

369 
*iAttr++ = _this>gl_config.accum_blue_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

370 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

371 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

372 
if (_this>gl_config.accum_alpha_size) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

373 
*iAttr++ = WGL_ACCUM_ALPHA_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

374 
*iAttr++ = _this>gl_config.accum_alpha_size; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

375 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

376 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

377 
if (_this>gl_config.stereo) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

378 
*iAttr++ = WGL_STEREO_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

379 
*iAttr++ = GL_TRUE; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

380 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

381 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

382 
if (_this>gl_config.multisamplebuffers) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

383 
*iAttr++ = WGL_SAMPLE_BUFFERS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

384 
*iAttr++ = _this>gl_config.multisamplebuffers; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

385 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

386 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

387 
if (_this>gl_config.multisamplesamples) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

388 
*iAttr++ = WGL_SAMPLES_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

389 
*iAttr++ = _this>gl_config.multisamplesamples; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

390 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

391 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

392 
if (_this>gl_config.accelerated >= 0) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

393 
*iAttr++ = WGL_ACCELERATION_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

394 
*iAttr++ = 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

395 
(_this>gl_config. 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

396 
accelerated ? WGL_GENERIC_ACCELERATION_ARB : 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

397 
WGL_NO_ACCELERATION_ARB); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

398 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

399 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

400 
*iAttr = 0; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

401 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

402 
/* Choose and set the closest available pixel format */ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

403 
if (!_this>gl_data>WGL_ARB_pixel_format 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

404 
 !_this>gl_data>wglChoosePixelFormatARB(hdc, iAttribs, fAttribs, 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

405 
1, &pixel_format, 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

406 
&matching)  !matching) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

407 
pixel_format = ChoosePixelFormat(hdc, &pfd); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

408 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

409 
if (!pixel_format) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

410 
SDL_SetError("No matching GL pixel format available"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

411 
return 1; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

412 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

413 
if (!SetPixelFormat(hdc, pixel_format, &pfd)) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

414 
WIN_SetError("SetPixelFormat()"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

415 
return (1); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

416 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

417 
return 0; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

418 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

419 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

420 
void 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

421 
WIN_GL_CleanupWindow(_THIS, SDL_Window * window) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

422 
{ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

423 
WIN_GL_Shutdown(_this); 
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 
int 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

427 
WIN_GL_GetWindowAttribute(_THIS, SDL_Window * window, SDL_GLattr attrib, 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

428 
int *value) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

429 
{ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

430 
HDC hdc = ((SDL_WindowData *) window>driverdata)>hdc; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

431 
int pixel_format; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

432 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

433 
pixel_format = GetPixelFormat(hdc); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

434 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

435 
if (_this>gl_data>WGL_ARB_pixel_format) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

436 
int wgl_attrib; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

437 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

438 
switch (attrib) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

439 
case SDL_GL_RED_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

440 
wgl_attrib = WGL_RED_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

441 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

442 
case SDL_GL_GREEN_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

443 
wgl_attrib = WGL_GREEN_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

444 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

445 
case SDL_GL_BLUE_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

446 
wgl_attrib = WGL_BLUE_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

447 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

448 
case SDL_GL_ALPHA_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

449 
wgl_attrib = WGL_ALPHA_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

450 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

451 
case SDL_GL_DOUBLEBUFFER: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

452 
wgl_attrib = WGL_DOUBLE_BUFFER_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

453 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

454 
case SDL_GL_BUFFER_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

455 
wgl_attrib = WGL_COLOR_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

456 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

457 
case SDL_GL_DEPTH_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

458 
wgl_attrib = WGL_DEPTH_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

459 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

460 
case SDL_GL_STENCIL_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

461 
wgl_attrib = WGL_STENCIL_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

462 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

463 
case SDL_GL_ACCUM_RED_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

464 
wgl_attrib = WGL_ACCUM_RED_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

465 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

466 
case SDL_GL_ACCUM_GREEN_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

467 
wgl_attrib = WGL_ACCUM_GREEN_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

468 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

469 
case SDL_GL_ACCUM_BLUE_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

470 
wgl_attrib = WGL_ACCUM_BLUE_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

471 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

472 
case SDL_GL_ACCUM_ALPHA_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

473 
wgl_attrib = WGL_ACCUM_ALPHA_BITS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

474 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

475 
case SDL_GL_STEREO: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

476 
wgl_attrib = WGL_STEREO_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

477 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

478 
case SDL_GL_MULTISAMPLEBUFFERS: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

479 
wgl_attrib = WGL_SAMPLE_BUFFERS_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

480 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

481 
case SDL_GL_MULTISAMPLESAMPLES: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

482 
wgl_attrib = WGL_SAMPLES_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

483 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

484 
case SDL_GL_ACCELERATED_VISUAL: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

485 
wgl_attrib = WGL_ACCELERATION_ARB; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

486 
_this>gl_data>wglGetPixelFormatAttribivARB(hdc, pixel_format, 0, 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

487 
1, &wgl_attrib, 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

488 
value); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

489 
if (*value == WGL_NO_ACCELERATION_ARB) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

490 
*value = SDL_FALSE; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

491 
} else { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

492 
*value = SDL_TRUE; 
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 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

496 
default: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

497 
return (1); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

498 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

499 
_this>gl_data>wglGetPixelFormatAttribivARB(hdc, pixel_format, 0, 1, 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

500 
&wgl_attrib, value); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

501 
return 0; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

502 
} else { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

503 
PIXELFORMATDESCRIPTOR pfd; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

504 
int retval; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

505 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

506 
if (!DescribePixelFormat(hdc, pixel_format, sizeof(pfd), &pfd)) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

507 
WIN_SetError("DescribePixelFormat()"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

508 
return 1; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

509 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

510 
retval = 0; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

511 
switch (attrib) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

512 
case SDL_GL_RED_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

513 
*value = pfd.cRedBits; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

514 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

515 
case SDL_GL_GREEN_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

516 
*value = pfd.cGreenBits; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

517 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

518 
case SDL_GL_BLUE_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

519 
*value = pfd.cBlueBits; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

520 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

521 
case SDL_GL_ALPHA_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

522 
*value = pfd.cAlphaBits; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

523 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

524 
case SDL_GL_DOUBLEBUFFER: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

525 
if (pfd.dwFlags & PFD_DOUBLEBUFFER) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

526 
*value = 1; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

527 
} else { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

528 
*value = 0; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

529 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

530 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

531 
case SDL_GL_BUFFER_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

532 
*value = pfd.cColorBits; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

533 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

534 
case SDL_GL_DEPTH_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

535 
*value = pfd.cDepthBits; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

536 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

537 
case SDL_GL_STENCIL_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

538 
*value = pfd.cStencilBits; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

539 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

540 
case SDL_GL_ACCUM_RED_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

541 
*value = pfd.cAccumRedBits; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

542 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

543 
case SDL_GL_ACCUM_GREEN_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

544 
*value = pfd.cAccumGreenBits; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

545 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

546 
case SDL_GL_ACCUM_BLUE_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

547 
*value = pfd.cAccumBlueBits; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

548 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

549 
case SDL_GL_ACCUM_ALPHA_SIZE: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

550 
*value = pfd.cAccumAlphaBits; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

551 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

552 
case SDL_GL_STEREO: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

553 
if (pfd.dwFlags & PFD_STEREO) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

554 
*value = 1; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

555 
} else { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

556 
*value = 0; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

557 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

558 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

559 
case SDL_GL_MULTISAMPLEBUFFERS: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

560 
*value = 0; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

561 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

562 
case SDL_GL_MULTISAMPLESAMPLES: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

563 
*value = 1; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

564 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

565 
default: 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

566 
retval = 1; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

567 
break; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

568 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

569 
return retval; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

570 
} 
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 
SDL_GLContext 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

574 
WIN_GL_CreateContext(_THIS, SDL_Window * window) 
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 
HDC hdc = ((SDL_WindowData *) window>driverdata)>hdc; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

577 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

578 
return _this>gl_data>wglCreateContext(hdc); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

579 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

580 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

581 
int 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

582 
WIN_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context) 
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 
HDC hdc; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

585 
int status; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

586 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

587 
if (window) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

588 
hdc = ((SDL_WindowData *) window>driverdata)>hdc; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

589 
} else { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

590 
hdc = NULL; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

591 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

592 
if (!_this>gl_data>wglMakeCurrent(hdc, (HGLRC) context)) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

593 
WIN_SetError("wglMakeCurrent()"); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

594 
status = 1; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

595 
} else { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

596 
status = 0; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

597 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

598 
return status; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

599 
} 
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 
int 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

602 
WIN_GL_SetSwapInterval(_THIS, int interval) 
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 
if (_this>gl_data>wglSwapIntervalEXT) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

605 
_this>gl_data>wglSwapIntervalEXT(interval); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

606 
return 0; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

607 
} else { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

608 
SDL_Unsupported(); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

609 
return 1; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

610 
} 
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 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

613 
int 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

614 
WIN_GL_GetSwapInterval(_THIS) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

615 
{ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

616 
if (_this>gl_data>wglGetSwapIntervalEXT) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

617 
return _this>gl_data>wglGetSwapIntervalEXT(); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

618 
} else { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

619 
SDL_Unsupported(); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

620 
return 1; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

621 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

622 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

623 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

624 
void 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

625 
WIN_GL_SwapWindow(_THIS, SDL_Window * window) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

626 
{ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

627 
HDC hdc = ((SDL_WindowData *) window>driverdata)>hdc; 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

628 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

629 
SwapBuffers(hdc); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

630 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

631 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

632 
void 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

633 
WIN_GL_DeleteContext(_THIS, SDL_GLContext context) 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

634 
{ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

635 
if (context) { 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

636 
_this>gl_data>wglDeleteContext((HGLRC) context); 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

637 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

638 
} 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

639 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

640 
#endif /* SDL_VIDEO_OPENGL */ 
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

641 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

642 

83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset

643 
/* vi: set ts=4 sw=4 expandtab: */ 