[MSACM32]
[reactos.git] / reactos / dll / opengl / mesa / src / gallium / state_trackers / wgl / stw_wgl.c
1 /**************************************************************************
2 *
3 * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
4 * All Rights Reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the
8 * "Software"), to deal in the Software without restriction, including
9 * without limitation the rights to use, copy, modify, merge, publish,
10 * distribute, sub license, and/or sell copies of the Software, and to
11 * permit persons to whom the Software is furnished to do so, subject to
12 * the following conditions:
13 *
14 * The above copyright notice and this permission notice (including the
15 * next paragraph) shall be included in all copies or substantial portions
16 * of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 *
26 **************************************************************************/
27
28 //#include <windows.h>
29
30 #include "util/u_debug.h"
31 #include "stw_icd.h"
32 #include "stw_context.h"
33 #include "stw_pixelformat.h"
34 #include "stw_wgl.h"
35
36
37 WINGDIAPI BOOL APIENTRY
38 wglCopyContext(
39 HGLRC hglrcSrc,
40 HGLRC hglrcDst,
41 UINT mask )
42 {
43 return DrvCopyContext( (DHGLRC)(UINT_PTR)hglrcSrc,
44 (DHGLRC)(UINT_PTR)hglrcDst,
45 mask );
46 }
47
48 WINGDIAPI HGLRC APIENTRY
49 wglCreateContext(
50 HDC hdc )
51 {
52 return (HGLRC) DrvCreateContext(hdc);
53 }
54
55 WINGDIAPI HGLRC APIENTRY
56 wglCreateLayerContext(
57 HDC hdc,
58 int iLayerPlane )
59 {
60 return (HGLRC) DrvCreateLayerContext( hdc, iLayerPlane );
61 }
62
63 WINGDIAPI BOOL APIENTRY
64 wglDeleteContext(
65 HGLRC hglrc )
66 {
67 return DrvDeleteContext((DHGLRC)(UINT_PTR)hglrc );
68 }
69
70
71 WINGDIAPI HGLRC APIENTRY
72 wglGetCurrentContext( VOID )
73 {
74 return (HGLRC)(UINT_PTR)stw_get_current_context();
75 }
76
77 WINGDIAPI HDC APIENTRY
78 wglGetCurrentDC( VOID )
79 {
80 return stw_get_current_dc();
81 }
82
83 WINGDIAPI BOOL APIENTRY
84 wglMakeCurrent(
85 HDC hdc,
86 HGLRC hglrc )
87 {
88 return DrvSetContext( hdc, (DHGLRC)(UINT_PTR)hglrc, NULL ) ? TRUE : FALSE;
89 }
90
91
92 WINGDIAPI BOOL APIENTRY
93 wglSwapBuffers(
94 HDC hdc )
95 {
96 return DrvSwapBuffers( hdc );
97 }
98
99
100 WINGDIAPI DWORD WINAPI
101 wglSwapMultipleBuffers(UINT n,
102 CONST WGLSWAP *ps)
103 {
104 UINT i;
105
106 for (i =0; i < n; ++i)
107 wglSwapBuffers(ps->hdc);
108
109 return 0;
110 }
111
112
113 WINGDIAPI BOOL APIENTRY
114 wglSwapLayerBuffers(
115 HDC hdc,
116 UINT fuPlanes )
117 {
118 return DrvSwapLayerBuffers( hdc, fuPlanes );
119 }
120
121 WINGDIAPI PROC APIENTRY
122 wglGetProcAddress(
123 LPCSTR lpszProc )
124 {
125 return DrvGetProcAddress( lpszProc );
126 }
127
128
129 WINGDIAPI int APIENTRY
130 wglChoosePixelFormat(
131 HDC hdc,
132 CONST PIXELFORMATDESCRIPTOR *ppfd )
133 {
134 if (ppfd->nSize != sizeof( PIXELFORMATDESCRIPTOR ) || ppfd->nVersion != 1)
135 return 0;
136 if (ppfd->iPixelType != PFD_TYPE_RGBA)
137 return 0;
138 if (!(ppfd->dwFlags & PFD_DRAW_TO_WINDOW))
139 return 0;
140 if (!(ppfd->dwFlags & PFD_SUPPORT_OPENGL))
141 return 0;
142 if (ppfd->dwFlags & PFD_DRAW_TO_BITMAP)
143 return 0;
144 if (ppfd->dwFlags & PFD_SUPPORT_GDI)
145 return 0;
146 if (!(ppfd->dwFlags & PFD_STEREO_DONTCARE) && (ppfd->dwFlags & PFD_STEREO))
147 return 0;
148
149 return stw_pixelformat_choose( hdc, ppfd );
150 }
151
152 WINGDIAPI int APIENTRY
153 wglDescribePixelFormat(
154 HDC hdc,
155 int iPixelFormat,
156 UINT nBytes,
157 LPPIXELFORMATDESCRIPTOR ppfd )
158 {
159 return DrvDescribePixelFormat( hdc, iPixelFormat, nBytes, ppfd );
160 }
161
162 WINGDIAPI int APIENTRY
163 wglGetPixelFormat(
164 HDC hdc )
165 {
166 return stw_pixelformat_get( hdc );
167 }
168
169 WINGDIAPI BOOL APIENTRY
170 wglSetPixelFormat(
171 HDC hdc,
172 int iPixelFormat,
173 const PIXELFORMATDESCRIPTOR *ppfd )
174 {
175 /* SetPixelFormat (hence wglSetPixelFormat) must not touch ppfd, per
176 * http://msdn.microsoft.com/en-us/library/dd369049(v=vs.85).aspx
177 */
178 (void) ppfd;
179
180 return DrvSetPixelFormat( hdc, iPixelFormat );
181 }
182
183
184 WINGDIAPI BOOL APIENTRY
185 wglUseFontBitmapsA(
186 HDC hdc,
187 DWORD first,
188 DWORD count,
189 DWORD listBase )
190 {
191 (void) hdc;
192 (void) first;
193 (void) count;
194 (void) listBase;
195
196 assert( 0 );
197
198 return FALSE;
199 }
200
201 WINGDIAPI BOOL APIENTRY
202 wglShareLists(
203 HGLRC hglrc1,
204 HGLRC hglrc2 )
205 {
206 return DrvShareLists((DHGLRC)(UINT_PTR)hglrc1,
207 (DHGLRC)(UINT_PTR)hglrc2);
208 }
209
210 WINGDIAPI BOOL APIENTRY
211 wglUseFontBitmapsW(
212 HDC hdc,
213 DWORD first,
214 DWORD count,
215 DWORD listBase )
216 {
217 (void) hdc;
218 (void) first;
219 (void) count;
220 (void) listBase;
221
222 assert( 0 );
223
224 return FALSE;
225 }
226
227 WINGDIAPI BOOL APIENTRY
228 wglUseFontOutlinesA(
229 HDC hdc,
230 DWORD first,
231 DWORD count,
232 DWORD listBase,
233 FLOAT deviation,
234 FLOAT extrusion,
235 int format,
236 LPGLYPHMETRICSFLOAT lpgmf )
237 {
238 (void) hdc;
239 (void) first;
240 (void) count;
241 (void) listBase;
242 (void) deviation;
243 (void) extrusion;
244 (void) format;
245 (void) lpgmf;
246
247 assert( 0 );
248
249 return FALSE;
250 }
251
252 WINGDIAPI BOOL APIENTRY
253 wglUseFontOutlinesW(
254 HDC hdc,
255 DWORD first,
256 DWORD count,
257 DWORD listBase,
258 FLOAT deviation,
259 FLOAT extrusion,
260 int format,
261 LPGLYPHMETRICSFLOAT lpgmf )
262 {
263 (void) hdc;
264 (void) first;
265 (void) count;
266 (void) listBase;
267 (void) deviation;
268 (void) extrusion;
269 (void) format;
270 (void) lpgmf;
271
272 assert( 0 );
273
274 return FALSE;
275 }
276
277 WINGDIAPI BOOL APIENTRY
278 wglDescribeLayerPlane(
279 HDC hdc,
280 int iPixelFormat,
281 int iLayerPlane,
282 UINT nBytes,
283 LPLAYERPLANEDESCRIPTOR plpd )
284 {
285 return DrvDescribeLayerPlane(hdc, iPixelFormat, iLayerPlane, nBytes, plpd);
286 }
287
288 WINGDIAPI int APIENTRY
289 wglSetLayerPaletteEntries(
290 HDC hdc,
291 int iLayerPlane,
292 int iStart,
293 int cEntries,
294 CONST COLORREF *pcr )
295 {
296 return DrvSetLayerPaletteEntries(hdc, iLayerPlane, iStart, cEntries, pcr);
297 }
298
299 WINGDIAPI int APIENTRY
300 wglGetLayerPaletteEntries(
301 HDC hdc,
302 int iLayerPlane,
303 int iStart,
304 int cEntries,
305 COLORREF *pcr )
306 {
307 return DrvGetLayerPaletteEntries(hdc, iLayerPlane, iStart, cEntries, pcr);
308 }
309
310 WINGDIAPI BOOL APIENTRY
311 wglRealizeLayerPalette(
312 HDC hdc,
313 int iLayerPlane,
314 BOOL bRealize )
315 {
316 (void) hdc;
317 (void) iLayerPlane;
318 (void) bRealize;
319
320 assert( 0 );
321
322 return FALSE;
323 }