summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/windows/gdi/wgl.c
diff options
context:
space:
mode:
authorKarl Schultz <kschultz@freedesktop.org>2006-03-30 07:58:24 +0000
committerKarl Schultz <kschultz@freedesktop.org>2006-03-30 07:58:24 +0000
commit87af12dbdcb078b95391d57dabe53ce17b19f651 (patch)
tree20c22ec3b2877fe9a66f0b4ca9d9014bcafa1dde /src/mesa/drivers/windows/gdi/wgl.c
parenta8c9ecfab005088b1b201abc9d04f5169d1b3b64 (diff)
Fixes from Brian to help migrate to render buffer DD interfaces. Also fix bug in the viewport function that was using the viewport size to resize the buffer, when it should have been using the window size. Fix bug in write_rgb_span_32 where the incoming pixel data parameter was coded as a [][4] instead of [][3]. Now all the demos work correctly except singlebuffer.
Diffstat (limited to 'src/mesa/drivers/windows/gdi/wgl.c')
-rw-r--r--src/mesa/drivers/windows/gdi/wgl.c45
1 files changed, 16 insertions, 29 deletions
diff --git a/src/mesa/drivers/windows/gdi/wgl.c b/src/mesa/drivers/windows/gdi/wgl.c
index 47e32c579f..197de0743c 100644
--- a/src/mesa/drivers/windows/gdi/wgl.c
+++ b/src/mesa/drivers/windows/gdi/wgl.c
@@ -1,4 +1,4 @@
-/* $Id: wgl.c,v 1.11 2006/01/25 06:02:55 kschultz Exp $ */
+/* $Id: wgl.c,v 1.12 2006/03/30 07:58:24 kschultz Exp $ */
/*
* This library is free software; you can redistribute it and/or
@@ -38,8 +38,6 @@
#include "GL/wmesa.h" /* protos for wmesa* functions */
-typedef struct wmesa_context *PWMC;
-
/*
* Pixel Format Descriptors
*/
@@ -143,7 +141,6 @@ int npfd = sizeof(pfd) / sizeof(pfd[0]);
typedef struct {
WMesaContext ctx;
- HDC hdc;
} MesaWglCtx;
#define MESAWGL_CTX_MAX_COUNT 20
@@ -154,13 +151,15 @@ static unsigned ctx_count = 0;
static int ctx_current = -1;
static unsigned curPFD = 0;
+static HDC CurrentHDC = 0;
+
+
WINGDIAPI HGLRC GLAPIENTRY wglCreateContext(HDC hdc)
{
int i = 0;
if (!ctx_count) {
for(i=0;i<MESAWGL_CTX_MAX_COUNT;i++) {
wgl_ctx[i].ctx = NULL;
- wgl_ctx[i].hdc = NULL;
}
}
for( i = 0; i < MESAWGL_CTX_MAX_COUNT; i++ ) {
@@ -173,7 +172,6 @@ WINGDIAPI HGLRC GLAPIENTRY wglCreateContext(HDC hdc)
GL_TRUE : GL_FALSE) );
if (wgl_ctx[i].ctx == NULL)
break;
- wgl_ctx[i].hdc = hdc;
ctx_count++;
return ((HGLRC)wgl_ctx[i].ctx);
}
@@ -186,11 +184,10 @@ WINGDIAPI BOOL GLAPIENTRY wglDeleteContext(HGLRC hglrc)
{
int i;
for ( i = 0; i < MESAWGL_CTX_MAX_COUNT; i++ ) {
- if ( wgl_ctx[i].ctx == (PWMC) hglrc ){
- WMesaMakeCurrent((PWMC) hglrc);
- WMesaDestroyContext();
+ if ( wgl_ctx[i].ctx == (WMesaContext) hglrc ){
+ WMesaMakeCurrent((WMesaContext) hglrc, NULL);
+ WMesaDestroyContext(wgl_ctx[i].ctx);
wgl_ctx[i].ctx = NULL;
- wgl_ctx[i].hdc = NULL;
ctx_count--;
return(TRUE);
}
@@ -209,26 +206,24 @@ WINGDIAPI HGLRC GLAPIENTRY wglGetCurrentContext(VOID)
WINGDIAPI HDC GLAPIENTRY wglGetCurrentDC(VOID)
{
- if (ctx_current < 0)
- return 0;
- else
- return wgl_ctx[ctx_current].hdc;
+ return CurrentHDC;
}
-WINGDIAPI BOOL GLAPIENTRY wglMakeCurrent(HDC hdc,HGLRC hglrc)
+WINGDIAPI BOOL GLAPIENTRY wglMakeCurrent(HDC hdc, HGLRC hglrc)
{
int i;
+ CurrentHDC = hdc;
+
if (!hdc || !hglrc) {
- WMesaMakeCurrent(NULL);
+ WMesaMakeCurrent(NULL, NULL);
ctx_current = -1;
return TRUE;
}
for ( i = 0; i < MESAWGL_CTX_MAX_COUNT; i++ ) {
- if ( wgl_ctx[i].ctx == (PWMC) hglrc ) {
- wgl_ctx[i].hdc = hdc;
- WMesaMakeCurrent( (WMesaContext) hglrc );
+ if ( wgl_ctx[i].ctx == (WMesaContext) hglrc ) {
+ WMesaMakeCurrent( (WMesaContext) hglrc, hdc );
ctx_current = i;
return TRUE;
}
@@ -353,16 +348,8 @@ WINGDIAPI BOOL GLAPIENTRY wglSetPixelFormat(HDC hdc,int iPixelFormat,
WINGDIAPI BOOL GLAPIENTRY wglSwapBuffers(HDC hdc)
{
- (void) hdc;
- if (ctx_current < 0)
- return FALSE;
-
- if(wgl_ctx[ctx_current].ctx == NULL) {
- SetLastError(0);
- return(FALSE);
- }
- WMesaSwapBuffers();
- return(TRUE);
+ WMesaSwapBuffers(hdc);
+ return TRUE;
}
static FIXED FixedFromDouble(double d)