1b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
2b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz/*
345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * This library is free software; you can redistribute it and/or
445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * modify it under the terms of the GNU Library General Public
545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * License as published by the Free Software Foundation; either
645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * version 2 of the License, or (at your option) any later version.
745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz *
845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * This library is distributed in the hope that it will be useful,
945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * but WITHOUT ANY WARRANTY; without even the implied warranty of
1045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * Library General Public License for more details.
1245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz *
1345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * You should have received a copy of the GNU Library General Public
1445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * License along with this library; if not, write to the Free
1545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
1645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz *
1745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz */
18b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
19b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz/*
2045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * File name 	: wgl.c
2145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * WGL stuff. Added by Oleg Letsinsky, ajl@ultersys.ru
2245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * Some things originated from the 3Dfx WGL functions
2345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz */
24b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
2545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz/*
2645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * This file contains the implementation of the wgl* functions for
2745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * Mesa on Windows.  Since these functions are provided by Windows in
2845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * GDI/OpenGL, we must supply our versions that work with Mesa here.
2945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz */
30b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
31b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
32b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz#include <windows.h>
3337aca21129d87946d2dc6b45fa5bacd514921550zhang
3415eaf8297ecb39337109b95480e61f37a6b20f0aJosé Fonseca#include "main/config.h"
3515eaf8297ecb39337109b95480e61f37a6b20f0aJosé Fonseca#include "glapi/glapi.h"
36590321c39db86baddf656b6e550cbd76ac1e569aBrian Paul#include "swrast/swrast.h"
3745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz#include "GL/wmesa.h"   /* protos for wmesa* functions */
38b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
3945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz/*
4045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * Pixel Format Descriptors
4145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz */
42b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
4345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz/* Extend the PFD to include DB flag */
44b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultzstruct __pixelformat__
45b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
4645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    PIXELFORMATDESCRIPTOR pfd;
47b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    GLboolean doubleBuffered;
48b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz};
49b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
505c64e6885dd3810a8ac5a49a55f807c5994c30fbDelle
515c64e6885dd3810a8ac5a49a55f807c5994c30fbDelle
5245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz/* These are the PFD's supported by this driver. */
5345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultzstruct __pixelformat__	pfd[] =
54b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
555c64e6885dd3810a8ac5a49a55f807c5994c30fbDelle#if 0
56b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    /* Double Buffer, alpha */
5745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    {
5845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	{
5945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    sizeof(PIXELFORMATDESCRIPTOR),	1,
6045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|
6145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    PFD_GENERIC_FORMAT|PFD_DOUBLEBUFFER|PFD_SWAP_COPY,
6245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    PFD_TYPE_RGBA,
6345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    24,
6445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    8, 0,
6545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    8, 8,
6645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    8, 16,
6745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    8, 24,
6845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    0, 0, 0, 0, 0,
695c64e6885dd3810a8ac5a49a55f807c5994c30fbDelle	    DEFAULT_SOFTWARE_DEPTH_BITS,	8,
7045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    0, 0, 0,
7145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    0, 0, 0
7245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	},
73b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz        GL_TRUE
74b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    },
75b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    /* Single Buffer, alpha */
7645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    {
7745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	{
7845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    sizeof(PIXELFORMATDESCRIPTOR),	1,
7945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|
8045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    PFD_GENERIC_FORMAT,
8145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    PFD_TYPE_RGBA,
8245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    24,
8345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    8, 0,
8445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    8, 8,
8545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    8, 16,
8645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    8, 24,
8745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    0, 0, 0, 0,	0,
885c64e6885dd3810a8ac5a49a55f807c5994c30fbDelle	    DEFAULT_SOFTWARE_DEPTH_BITS,	8,
8945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    0, 0, 0,
9045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    0, 0, 0
9145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	},
92b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz        GL_FALSE
93b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    },
945c64e6885dd3810a8ac5a49a55f807c5994c30fbDelle#endif
95b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    /* Double Buffer, no alpha */
9645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    {
9745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	{
9845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    sizeof(PIXELFORMATDESCRIPTOR),	1,
9945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|
10045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    PFD_GENERIC_FORMAT|PFD_DOUBLEBUFFER|PFD_SWAP_COPY,
10145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    PFD_TYPE_RGBA,
10245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    24,
10345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    8, 0,
10445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    8, 8,
10545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    8, 16,
10645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    0, 0,
10745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    0, 0, 0, 0,	0,
1085c64e6885dd3810a8ac5a49a55f807c5994c30fbDelle	    DEFAULT_SOFTWARE_DEPTH_BITS,	8,
10945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    0, 0, 0,
11045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    0, 0, 0
11145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	},
112b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz        GL_TRUE
113b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    },
114b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    /* Single Buffer, no alpha */
11545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    {
11645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	{
11745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    sizeof(PIXELFORMATDESCRIPTOR),	1,
11845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|
11945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    PFD_GENERIC_FORMAT,
12045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    PFD_TYPE_RGBA,
12145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    24,
12245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    8, 0,
12345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    8, 8,
12445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    8, 16,
12545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    0, 0,
12645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    0, 0, 0, 0,	0,
1275c64e6885dd3810a8ac5a49a55f807c5994c30fbDelle	    DEFAULT_SOFTWARE_DEPTH_BITS,	8,
12845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    0, 0, 0,
12945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    0, 0, 0
13045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	},
131b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz        GL_FALSE
132b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    },
133b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz};
134b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
13545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultzint npfd = sizeof(pfd) / sizeof(pfd[0]);
13645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
13745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
13845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz/*
13945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz * Contexts
14045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz */
141b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
142b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultztypedef struct {
143b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    WMesaContext ctx;
144b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz} MesaWglCtx;
145b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
146b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz#define MESAWGL_CTX_MAX_COUNT 20
147b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
148b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultzstatic MesaWglCtx wgl_ctx[MESAWGL_CTX_MAX_COUNT];
149b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
150b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultzstatic unsigned ctx_count = 0;
15186e001b78cb46c1d5a216dd50b3d7fe32db23575Brian Paulstatic int ctx_current = -1;
152b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultzstatic unsigned curPFD = 0;
153b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
15487af12dbdcb078b95391d57dabe53ce17b19f651Karl Schultzstatic HDC CurrentHDC = 0;
15587af12dbdcb078b95391d57dabe53ce17b19f651Karl Schultz
15687af12dbdcb078b95391d57dabe53ce17b19f651Karl Schultz
15745ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI HGLRC GLAPIENTRY wglCreateContext(HDC hdc)
158b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
159b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    int i = 0;
16045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    if (!ctx_count) {
16145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	for(i=0;i<MESAWGL_CTX_MAX_COUNT;i++) {
16245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    wgl_ctx[i].ctx = NULL;
16345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	}
164b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    }
16545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    for( i = 0; i < MESAWGL_CTX_MAX_COUNT; i++ ) {
16645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz        if ( wgl_ctx[i].ctx == NULL ) {
16745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz            wgl_ctx[i].ctx =
168f66084b834ce37e7f0143e456df1265cd343a674Karl Schultz		WMesaCreateContext(hdc, NULL, (GLboolean)GL_TRUE,
169f66084b834ce37e7f0143e456df1265cd343a674Karl Schultz				   (GLboolean) (pfd[curPFD-1].doubleBuffered ?
170f66084b834ce37e7f0143e456df1265cd343a674Karl Schultz                                   GL_TRUE : GL_FALSE),
171f66084b834ce37e7f0143e456df1265cd343a674Karl Schultz				   (GLboolean)(pfd[curPFD-1].pfd.cAlphaBits ?
172f66084b834ce37e7f0143e456df1265cd343a674Karl Schultz				   GL_TRUE : GL_FALSE) );
173b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz            if (wgl_ctx[i].ctx == NULL)
174b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz                break;
175b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz            ctx_count++;
176b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz            return ((HGLRC)wgl_ctx[i].ctx);
177b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz        }
178b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    }
179b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    SetLastError(0);
180b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    return(NULL);
181b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
182b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
18345ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI BOOL GLAPIENTRY wglDeleteContext(HGLRC hglrc)
184b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
185b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    int i;
18645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    for ( i = 0; i < MESAWGL_CTX_MAX_COUNT; i++ ) {
18787af12dbdcb078b95391d57dabe53ce17b19f651Karl Schultz    	if ( wgl_ctx[i].ctx == (WMesaContext) hglrc ){
18887af12dbdcb078b95391d57dabe53ce17b19f651Karl Schultz            WMesaMakeCurrent((WMesaContext) hglrc, NULL);
18987af12dbdcb078b95391d57dabe53ce17b19f651Karl Schultz            WMesaDestroyContext(wgl_ctx[i].ctx);
190b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz            wgl_ctx[i].ctx = NULL;
191b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz            ctx_count--;
192b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz            return(TRUE);
193b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    	}
194b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    }
195b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    SetLastError(0);
196b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    return(FALSE);
197b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
198b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
19945ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI HGLRC GLAPIENTRY wglGetCurrentContext(VOID)
200b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
20145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    if (ctx_current < 0)
20245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	return 0;
20345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    else
20445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	return (HGLRC) wgl_ctx[ctx_current].ctx;
205b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
206b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
20745ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI HDC GLAPIENTRY wglGetCurrentDC(VOID)
208b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
20987af12dbdcb078b95391d57dabe53ce17b19f651Karl Schultz    return CurrentHDC;
210b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
211b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
21287af12dbdcb078b95391d57dabe53ce17b19f651Karl SchultzWINGDIAPI BOOL GLAPIENTRY wglMakeCurrent(HDC hdc, HGLRC hglrc)
213b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
21445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    int i;
21545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
21687af12dbdcb078b95391d57dabe53ce17b19f651Karl Schultz    CurrentHDC = hdc;
21787af12dbdcb078b95391d57dabe53ce17b19f651Karl Schultz
21845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    if (!hdc || !hglrc) {
21987af12dbdcb078b95391d57dabe53ce17b19f651Karl Schultz	WMesaMakeCurrent(NULL, NULL);
22045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	ctx_current = -1;
22145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	return TRUE;
22245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    }
22345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
22445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    for ( i = 0; i < MESAWGL_CTX_MAX_COUNT; i++ ) {
22587af12dbdcb078b95391d57dabe53ce17b19f651Karl Schultz	if ( wgl_ctx[i].ctx == (WMesaContext) hglrc ) {
22687af12dbdcb078b95391d57dabe53ce17b19f651Karl Schultz	    WMesaMakeCurrent( (WMesaContext) hglrc, hdc );
22745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    ctx_current = i;
22845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    return TRUE;
22945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	}
23045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    }
23145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    return FALSE;
232b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
233b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
23445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
23545ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI int GLAPIENTRY wglChoosePixelFormat(HDC hdc,
23645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					      CONST
23745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					      PIXELFORMATDESCRIPTOR *ppfd)
238b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
23945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    int		i,best = -1,bestdelta = 0x7FFFFFFF,delta;
24045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    (void) hdc;
24145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
24245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    if(ppfd->nSize != sizeof(PIXELFORMATDESCRIPTOR) || ppfd->nVersion != 1)
24345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	{
24445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    SetLastError(0);
24545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    return(0);
24645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	}
24745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    for(i = 0; i < npfd;i++)
24845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	{
24945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    delta = 0;
25045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    if(
25145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		(ppfd->dwFlags & PFD_DRAW_TO_WINDOW) &&
25245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		!(pfd[i].pfd.dwFlags & PFD_DRAW_TO_WINDOW))
25345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		continue;
25445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    if(
25545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		(ppfd->dwFlags & PFD_DRAW_TO_BITMAP) &&
25645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		!(pfd[i].pfd.dwFlags & PFD_DRAW_TO_BITMAP))
25745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		continue;
25845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    if(
25945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		(ppfd->dwFlags & PFD_SUPPORT_GDI) &&
26045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		!(pfd[i].pfd.dwFlags & PFD_SUPPORT_GDI))
26145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		continue;
26245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    if(
26345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		(ppfd->dwFlags & PFD_SUPPORT_OPENGL) &&
26445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		!(pfd[i].pfd.dwFlags & PFD_SUPPORT_OPENGL))
26545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		continue;
26645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    if(
26745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		!(ppfd->dwFlags & PFD_DOUBLEBUFFER_DONTCARE) &&
26845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		((ppfd->dwFlags & PFD_DOUBLEBUFFER) !=
26945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		 (pfd[i].pfd.dwFlags & PFD_DOUBLEBUFFER)))
27045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		continue;
27145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    if(
27245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		!(ppfd->dwFlags & PFD_STEREO_DONTCARE) &&
27345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		((ppfd->dwFlags & PFD_STEREO) !=
27445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		 (pfd[i].pfd.dwFlags & PFD_STEREO)))
27545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		continue;
27645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    if(ppfd->iPixelType != pfd[i].pfd.iPixelType)
27745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		delta++;
27845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    if(ppfd->cAlphaBits != pfd[i].pfd.cAlphaBits)
27945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		delta++;
28045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    if(delta < bestdelta)
28145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		{
28245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		    best = i + 1;
28345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		    bestdelta = delta;
28445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		    if(bestdelta == 0)
28545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz			break;
28645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		}
28745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	}
28845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    if(best == -1)
28945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	{
29045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    SetLastError(0);
29145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    return(0);
29245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	}
29345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    return(best);
29445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz}
295b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
2969b5678198604a3f959af990f5a4dd39d799ef667Karl SchultzWINGDIAPI int GLAPIENTRY wglDescribePixelFormat(HDC hdc,
2979b5678198604a3f959af990f5a4dd39d799ef667Karl Schultz					        int iPixelFormat,
2989b5678198604a3f959af990f5a4dd39d799ef667Karl Schultz					        UINT nBytes,
2999b5678198604a3f959af990f5a4dd39d799ef667Karl Schultz					        LPPIXELFORMATDESCRIPTOR ppfd)
30045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz{
30145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    (void) hdc;
30245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
30345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    if(ppfd == NULL)
30445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	return(npfd);
30545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    if(iPixelFormat < 1 || iPixelFormat > npfd ||
30645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz       nBytes != sizeof(PIXELFORMATDESCRIPTOR))
30745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	{
30845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    SetLastError(0);
30945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    return(0);
31045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	}
31145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    *ppfd = pfd[iPixelFormat - 1].pfd;
31245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    return(npfd);
31345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz}
314b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
31545ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI PROC GLAPIENTRY wglGetProcAddress(LPCSTR lpszProc)
31645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz{
31745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    PROC p = (PROC) _glapi_get_proc_address((const char *) lpszProc);
31845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    if (p)
31945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	return p;
32045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
32145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    SetLastError(0);
32245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    return(NULL);
32345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz}
32445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
32545ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI int GLAPIENTRY wglGetPixelFormat(HDC hdc)
32645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz{
32745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    (void) hdc;
32845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    if(curPFD == 0) {
32945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	SetLastError(0);
33045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	return(0);
331b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    }
33245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    return(curPFD);
333b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
334b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
33545ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI BOOL GLAPIENTRY wglSetPixelFormat(HDC hdc,int iPixelFormat,
33676fb8089103e9dba9aaa7232c86d864d5874a08fZhang					const PIXELFORMATDESCRIPTOR *ppfd)
337b1f709cc881138d8aef06381edb0fde927f69307Daniel Borca{
33845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    (void) hdc;
339c7fc4067ebd4758dd7566b20169a428dc8926c8dMorgan Armand
340c7fc4067ebd4758dd7566b20169a428dc8926c8dMorgan Armand    /* SetPixelFormat (hence wglSetPixelFormat) must not touch ppfd, per
341c7fc4067ebd4758dd7566b20169a428dc8926c8dMorgan Armand     * http://msdn.microsoft.com/en-us/library/dd369049(v=vs.85).aspx
342c7fc4067ebd4758dd7566b20169a428dc8926c8dMorgan Armand     */
343c7fc4067ebd4758dd7566b20169a428dc8926c8dMorgan Armand    (void) ppfd;
344c7fc4067ebd4758dd7566b20169a428dc8926c8dMorgan Armand
345c7fc4067ebd4758dd7566b20169a428dc8926c8dMorgan Armand    if(iPixelFormat < 1 || iPixelFormat > npfd) {
34645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	SetLastError(0);
34745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	return(FALSE);
34845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    }
34945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    curPFD = iPixelFormat;
350b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    return(TRUE);
351b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
352b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
35345ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI BOOL GLAPIENTRY wglSwapBuffers(HDC hdc)
35445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz{
35587af12dbdcb078b95391d57dabe53ce17b19f651Karl Schultz    WMesaSwapBuffers(hdc);
35687af12dbdcb078b95391d57dabe53ce17b19f651Karl Schultz    return TRUE;
35745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz}
358b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
359b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultzstatic FIXED FixedFromDouble(double d)
360b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
361b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz   long l = (long) (d * 65536L);
362a6c423d95663cfd8601cf84e10e8e1b12fa6ef15Brian Paul   return *(FIXED *) (void *) &l;
363b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
364b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
365b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
366b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz/*
367b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz** This is cribbed from FX/fxwgl.c, and seems to implement support
368b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz** for bitmap fonts where the wglUseFontBitmapsA() code implements
369b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz** support for outline fonts.  In combination they hopefully give
370b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz** fairly generic support for fonts.
371b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz*/
372b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultzstatic BOOL wglUseFontBitmaps_FX(HDC fontDevice, DWORD firstChar,
373b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz                                 DWORD numChars, DWORD listBase)
374b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
375da87370032c393077fa70099a79ea1e71ae2f5beJosé Fonseca#define VERIFY(a) (void)(a)
37645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
37745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    TEXTMETRIC metric;
37845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    BITMAPINFO *dibInfo;
37945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    HDC bitDevice;
38045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    COLORREF tempColor;
38145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    int i;
38245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
38345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    VERIFY(GetTextMetrics(fontDevice, &metric));
38445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
38545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    dibInfo = (BITMAPINFO *) calloc(sizeof(BITMAPINFO) + sizeof(RGBQUAD), 1);
38645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    dibInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
38745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    dibInfo->bmiHeader.biPlanes = 1;
38845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    dibInfo->bmiHeader.biBitCount = 1;
38945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    dibInfo->bmiHeader.biCompression = BI_RGB;
39045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
39145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    bitDevice = CreateCompatibleDC(fontDevice);
39245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
39376fb8089103e9dba9aaa7232c86d864d5874a08fZhang    /* Swap fore and back colors so the bitmap has the right polarity */
39445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    tempColor = GetBkColor(bitDevice);
39545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    SetBkColor(bitDevice, GetTextColor(bitDevice));
39645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    SetTextColor(bitDevice, tempColor);
39745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
39876fb8089103e9dba9aaa7232c86d864d5874a08fZhang    /* Place chars based on base line */
39945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    VERIFY(SetTextAlign(bitDevice, TA_BASELINE) != GDI_ERROR ? 1 : 0);
40045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
40145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    for(i = 0; i < (int)numChars; i++) {
40245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	SIZE size;
40345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	char curChar;
40445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	int charWidth,charHeight,bmapWidth,bmapHeight,numBytes,res;
40545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	HBITMAP bitObject;
40645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	HGDIOBJ origBmap;
40745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	unsigned char *bmap;
40845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
409f66084b834ce37e7f0143e456df1265cd343a674Karl Schultz	curChar = (char)(i + firstChar);
41045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
41176fb8089103e9dba9aaa7232c86d864d5874a08fZhang	/* Find how high/wide this character is */
41245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	VERIFY(GetTextExtentPoint32(bitDevice, &curChar, 1, &size));
41345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
41476fb8089103e9dba9aaa7232c86d864d5874a08fZhang	/* Create the output bitmap */
41545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	charWidth = size.cx;
41645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	charHeight = size.cy;
41776fb8089103e9dba9aaa7232c86d864d5874a08fZhang	/* Round up to the next multiple of 32 bits */
41845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	bmapWidth = ((charWidth + 31) / 32) * 32;
41945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	bmapHeight = charHeight;
42045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	bitObject = CreateCompatibleBitmap(bitDevice,
42145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					   bmapWidth,
42245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					   bmapHeight);
42376fb8089103e9dba9aaa7232c86d864d5874a08fZhang	/* VERIFY(bitObject); */
42445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
42576fb8089103e9dba9aaa7232c86d864d5874a08fZhang	/* Assign the output bitmap to the device */
42645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	origBmap = SelectObject(bitDevice, bitObject);
42745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	(void) VERIFY(origBmap);
42845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
42945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	VERIFY( PatBlt( bitDevice, 0, 0, bmapWidth, bmapHeight,BLACKNESS ) );
43045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
43176fb8089103e9dba9aaa7232c86d864d5874a08fZhang	/* Use our source font on the device */
43245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	VERIFY(SelectObject(bitDevice, GetCurrentObject(fontDevice,OBJ_FONT)));
43345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
43476fb8089103e9dba9aaa7232c86d864d5874a08fZhang	/* Draw the character */
43545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	VERIFY(TextOut(bitDevice, 0, metric.tmAscent, &curChar, 1));
43645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
43776fb8089103e9dba9aaa7232c86d864d5874a08fZhang	/* Unselect our bmap object */
43845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	VERIFY(SelectObject(bitDevice, origBmap));
43945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
44076fb8089103e9dba9aaa7232c86d864d5874a08fZhang	/* Convert the display dependant representation to a 1 bit deep DIB */
44145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	numBytes = (bmapWidth * bmapHeight) / 8;
44245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	bmap = malloc(numBytes);
44345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	dibInfo->bmiHeader.biWidth = bmapWidth;
44445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	dibInfo->bmiHeader.biHeight = bmapHeight;
44545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	res = GetDIBits(bitDevice, bitObject, 0, bmapHeight, bmap,
44645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz			dibInfo,
44745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz			DIB_RGB_COLORS);
44876fb8089103e9dba9aaa7232c86d864d5874a08fZhang	/* VERIFY(res); */
44945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
45076fb8089103e9dba9aaa7232c86d864d5874a08fZhang	/* Create the GL object */
45145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	glNewList(i + listBase, GL_COMPILE);
452f66084b834ce37e7f0143e456df1265cd343a674Karl Schultz	glBitmap(bmapWidth, bmapHeight, 0.0, (GLfloat)metric.tmDescent,
453f66084b834ce37e7f0143e456df1265cd343a674Karl Schultz		 (GLfloat)charWidth, 0.0,
45445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		 bmap);
45545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	glEndList();
45676fb8089103e9dba9aaa7232c86d864d5874a08fZhang	/* CheckGL(); */
45745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
45876fb8089103e9dba9aaa7232c86d864d5874a08fZhang	/* Destroy the bmap object */
45945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	DeleteObject(bitObject);
46045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
46176fb8089103e9dba9aaa7232c86d864d5874a08fZhang	/* Deallocate the bitmap data */
46245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	free(bmap);
46345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    }
46445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
46576fb8089103e9dba9aaa7232c86d864d5874a08fZhang    /* Destroy the DC */
46645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    VERIFY(DeleteDC(bitDevice));
46745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
46845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    free(dibInfo);
46945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
47045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    return TRUE;
471b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz#undef VERIFY
472b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
473b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
47445ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI BOOL GLAPIENTRY wglUseFontBitmapsA(HDC hdc, DWORD first,
47545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					     DWORD count, DWORD listBase)
476b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
47745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    int i;
47845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    GLuint font_list;
47945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    DWORD size;
48045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    GLYPHMETRICS gm;
48145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    HANDLE hBits;
48245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    LPSTR lpBits;
48345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    MAT2 mat;
48445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    int  success = TRUE;
48545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
48645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    if (count == 0)
48745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	return FALSE;
48845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
48945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    font_list = listBase;
49045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
49145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    mat.eM11 = FixedFromDouble(1);
49245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    mat.eM12 = FixedFromDouble(0);
49345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    mat.eM21 = FixedFromDouble(0);
49445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    mat.eM22 = FixedFromDouble(-1);
49545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
49645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    memset(&gm,0,sizeof(gm));
49745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
49845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    /*
49945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    ** If we can't get the glyph outline, it may be because this is a fixed
50045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    ** font.  Try processing it that way.
50145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    */
50245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    if( GetGlyphOutline(hdc, first, GGO_BITMAP, &gm, 0, NULL, &mat)
50345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	== GDI_ERROR ) {
50445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	return wglUseFontBitmaps_FX( hdc, first, count, listBase );
50545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    }
50645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
50745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    /*
50845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    ** Otherwise process all desired characters.
50945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    */
51045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    for (i = 0; i < (int)count; i++) {
51145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	DWORD err;
51245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
51345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	glNewList( font_list+i, GL_COMPILE );
51445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
51545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	/* allocate space for the bitmap/outline */
51645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	size = GetGlyphOutline(hdc, first + i, GGO_BITMAP,
51745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz			       &gm, 0, NULL, &mat);
51845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	if (size == GDI_ERROR) {
51945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    glEndList( );
52045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    err = GetLastError();
52145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    success = FALSE;
52245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    continue;
52345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	}
52445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
52545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	hBits  = GlobalAlloc(GHND, size+1);
52645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	lpBits = GlobalLock(hBits);
52745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
52845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	err =
52945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    GetGlyphOutline(hdc,         /* handle to device context */
53045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz			    first + i,   /* character to query */
53145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz			    GGO_BITMAP,  /* format of data to return */
53245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz			    &gm,         /* ptr to structure for metrics*/
53345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz			    size,        /* size of buffer for data */
53445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz			    lpBits,      /* pointer to buffer for data */
53545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz			    &mat         /* pointer to transformation */
53645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz			    /* matrix structure */
53745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		);
53845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
53945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	if (err == GDI_ERROR) {
54045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    GlobalUnlock(hBits);
54145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    GlobalFree(hBits);
54245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
54345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    glEndList( );
54445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    err = GetLastError();
54545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    success = FALSE;
54645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	    continue;
54745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	}
54845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
54945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	glBitmap(gm.gmBlackBoxX,gm.gmBlackBoxY,
550f66084b834ce37e7f0143e456df1265cd343a674Karl Schultz		 (GLfloat)-gm.gmptGlyphOrigin.x,
551f66084b834ce37e7f0143e456df1265cd343a674Karl Schultz		 (GLfloat)gm.gmptGlyphOrigin.y,
552f66084b834ce37e7f0143e456df1265cd343a674Karl Schultz		 (GLfloat)gm.gmCellIncX,
553f66084b834ce37e7f0143e456df1265cd343a674Karl Schultz		 (GLfloat)gm.gmCellIncY,
55445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz		 (const GLubyte * )lpBits);
55545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
55645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	GlobalUnlock(hBits);
55745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	GlobalFree(hBits);
55845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
55945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz	glEndList( );
56045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    }
56145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
56245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    return success;
563b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
564b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
565645c131264ae169cf64753a930ada500b6933fe7Brian PaulWINGDIAPI BOOL GLAPIENTRY wglShareLists(HGLRC hglrc1,
566645c131264ae169cf64753a930ada500b6933fe7Brian Paul					HGLRC hglrc2)
567645c131264ae169cf64753a930ada500b6933fe7Brian Paul{
568645c131264ae169cf64753a930ada500b6933fe7Brian Paul    WMesaShareLists((WMesaContext)hglrc1, (WMesaContext)hglrc2);
569645c131264ae169cf64753a930ada500b6933fe7Brian Paul    return(TRUE);
570645c131264ae169cf64753a930ada500b6933fe7Brian Paul}
571645c131264ae169cf64753a930ada500b6933fe7Brian Paul
572b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
57345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
57445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz/* NOT IMPLEMENTED YET */
57545ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI BOOL GLAPIENTRY wglCopyContext(HGLRC hglrcSrc,
57645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					 HGLRC hglrcDst,
57745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					 UINT mask)
57845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz{
57945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    (void) hglrcSrc; (void) hglrcDst; (void) mask;
58045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    return(FALSE);
58145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz}
58245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
58345ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI HGLRC GLAPIENTRY wglCreateLayerContext(HDC hdc,
58445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz						 int iLayerPlane)
58545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz{
58645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    SetLastError(0);
58700c02626d8087cab0cf5581911c4e68f7b32eb6eKarl Schultz    if (iLayerPlane == 0)
58800c02626d8087cab0cf5581911c4e68f7b32eb6eKarl Schultz        return wglCreateContext( hdc );
58945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    return(NULL);
59045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz}
59145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
59245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz
59345ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI BOOL GLAPIENTRY wglUseFontBitmapsW(HDC hdc,
59445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					     DWORD first,
59545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					     DWORD count,
59645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					     DWORD listBase)
597b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
598b1f709cc881138d8aef06381edb0fde927f69307Daniel Borca    (void) hdc; (void) first; (void) count; (void) listBase;
599b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    return FALSE;
600b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
601b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
60245ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI BOOL GLAPIENTRY wglUseFontOutlinesA(HDC hdc,
60345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					      DWORD first,
60445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					      DWORD count,
60545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					      DWORD listBase,
60645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					      FLOAT deviation,
60745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					      FLOAT extrusion,
60845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					      int format,
60945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					      LPGLYPHMETRICSFLOAT lpgmf)
610b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
611b1f709cc881138d8aef06381edb0fde927f69307Daniel Borca    (void) hdc; (void) first; (void) count;
612b1f709cc881138d8aef06381edb0fde927f69307Daniel Borca    (void) listBase; (void) deviation; (void) extrusion; (void) format;
613b1f709cc881138d8aef06381edb0fde927f69307Daniel Borca    (void) lpgmf;
614b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    SetLastError(0);
615b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    return(FALSE);
616b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
617b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
61845ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI BOOL GLAPIENTRY wglUseFontOutlinesW(HDC hdc,
61945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					      DWORD first,
62045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					      DWORD count,
62145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					      DWORD listBase,
62245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					      FLOAT deviation,
62345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					      FLOAT extrusion,
62445ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					      int format,
62545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					      LPGLYPHMETRICSFLOAT lpgmf)
626b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
627b1f709cc881138d8aef06381edb0fde927f69307Daniel Borca    (void) hdc; (void) first; (void) count;
628b1f709cc881138d8aef06381edb0fde927f69307Daniel Borca    (void) listBase; (void) deviation; (void) extrusion; (void) format;
629b1f709cc881138d8aef06381edb0fde927f69307Daniel Borca    (void) lpgmf;
630b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    SetLastError(0);
631b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    return(FALSE);
632b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
633b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
63445ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI BOOL GLAPIENTRY wglDescribeLayerPlane(HDC hdc,
63545ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz						int iPixelFormat,
63645ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz						int iLayerPlane,
63745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz						UINT nBytes,
63845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz						LPLAYERPLANEDESCRIPTOR plpd)
639b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
64045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    (void) hdc; (void) iPixelFormat; (void) iLayerPlane;
64145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    (void) nBytes; (void) plpd;
642b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    SetLastError(0);
643b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    return(FALSE);
644b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
645b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
64645ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI int GLAPIENTRY wglSetLayerPaletteEntries(HDC hdc,
64745ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz						   int iLayerPlane,
64845ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz						   int iStart,
64945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz						   int cEntries,
65045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz						   CONST COLORREF *pcr)
651b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
65245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    (void) hdc; (void) iLayerPlane; (void) iStart;
65345ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    (void) cEntries; (void) pcr;
654b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    SetLastError(0);
655b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    return(0);
656b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
657b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
65845ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI int GLAPIENTRY wglGetLayerPaletteEntries(HDC hdc,
65945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz						   int iLayerPlane,
66045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz						   int iStart,
66145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz						   int cEntries,
66245ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz						   COLORREF *pcr)
663b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
664b1f709cc881138d8aef06381edb0fde927f69307Daniel Borca    (void) hdc; (void) iLayerPlane; (void) iStart; (void) cEntries; (void) pcr;
665b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    SetLastError(0);
666b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    return(0);
667b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
668b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
66945ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI BOOL GLAPIENTRY wglRealizeLayerPalette(HDC hdc,
67045ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz						 int iLayerPlane,
67145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz						 BOOL bRealize)
672b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
673b1f709cc881138d8aef06381edb0fde927f69307Daniel Borca    (void) hdc; (void) iLayerPlane; (void) bRealize;
674b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    SetLastError(0);
675b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    return(FALSE);
676b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
677b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
67845ab8cb08aaf641a397c1a30ac19f0942498430bKarl SchultzWINGDIAPI BOOL GLAPIENTRY wglSwapLayerBuffers(HDC hdc,
67945ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz					      UINT fuPlanes)
680b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz{
68145ab8cb08aaf641a397c1a30ac19f0942498430bKarl Schultz    (void) hdc; (void) fuPlanes;
682b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    SetLastError(0);
683b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz    return(FALSE);
684b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz}
685b6a74a4f6e17dc95c5b3fed73f77fb9b7d9ea806Karl Schultz
6867f1274fa8b98f334fc12e13f18caf23b2a79a415Karl SchultzWINGDIAPI const char * GLAPIENTRY wglGetExtensionsStringARB(HDC hdc)
6877f1274fa8b98f334fc12e13f18caf23b2a79a415Karl Schultz{
6887f1274fa8b98f334fc12e13f18caf23b2a79a415Karl Schultz    return "WGL_ARB_extensions_string";
6897f1274fa8b98f334fc12e13f18caf23b2a79a415Karl Schultz}
690