new fix for initial window size problem
authorBrian Paul <brian.paul@tungstengraphics.com>
Mon, 17 Jun 2002 23:38:14 +0000 (23:38 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Mon, 17 Jun 2002 23:38:14 +0000 (23:38 +0000)
src/mesa/drivers/x11/xm_api.c
src/mesa/main/context.c

index 288eeff6b9ffa45734e1c62f0c862a4b5bd10318..1ef83c12cfe9315acc5f2baf91debf523346b919 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: xm_api.c,v 1.38 2002/06/16 01:11:10 brianp Exp $ */
+/* $Id: xm_api.c,v 1.39 2002/06/17 23:38:14 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -1277,8 +1277,6 @@ static GLboolean initialize_visual_and_buffer( int client,
       get_drawable_size( v->display, window, &w, &h );
       b->width = w;
       b->height = h;
-      b->mesa_buffer.Width = w;
-      b->mesa_buffer.Height = h;
 
       b->frontbuffer = window;
 
index c8c6b99b2437e109b32da30cdf3fa6eb4a6d4df2..0b3e23aafd660a7e630fcb4bd67e7c06f4b9b209 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: context.c,v 1.170 2002/06/17 23:36:31 brianp Exp $ */
+/* $Id: context.c,v 1.171 2002/06/17 23:38:14 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -2169,7 +2169,39 @@ _mesa_make_current2( GLcontext *newCtx, GLframebuffer *drawBuffer,
         newCtx->DrawBuffer = drawBuffer;
         newCtx->ReadBuffer = readBuffer;
         newCtx->NewState |= _NEW_BUFFERS;
-         /* _mesa_update_state( newCtx ); */
+
+         if (drawBuffer->Width == 0 && drawBuffer->Height == 0) {
+            /* get initial window size */
+            GLuint bufWidth, bufHeight;
+
+            /* ask device driver for size of output buffer */
+            (*newCtx->Driver.GetBufferSize)( drawBuffer, &bufWidth, &bufHeight );
+
+            if (drawBuffer->Width == bufWidth && drawBuffer->Height == bufHeight)
+               return; /* size is as expected */
+
+            drawBuffer->Width = bufWidth;
+            drawBuffer->Height = bufHeight;
+
+            newCtx->Driver.ResizeBuffers( drawBuffer );
+         }
+
+         if (readBuffer != drawBuffer &&
+             readBuffer->Width == 0 && readBuffer->Height == 0) {
+            /* get initial window size */
+            GLuint bufWidth, bufHeight;
+
+            /* ask device driver for size of output buffer */
+            (*newCtx->Driver.GetBufferSize)( readBuffer, &bufWidth, &bufHeight );
+
+            if (readBuffer->Width == bufWidth && readBuffer->Height == bufHeight)
+               return; /* size is as expected */
+
+            readBuffer->Width = bufWidth;
+            readBuffer->Height = bufHeight;
+
+            newCtx->Driver.ResizeBuffers( readBuffer );
+         }
       }
 
       /* This is only for T&L - a bit out of place, or misnamed (BP) */