Fix glXCopyContext bug
[mesa.git] / src / mesa / drivers / x11 / xm_line.c
index c76de401c888cc330ba027aef5540b1fd012ec38..989969d024d372791a7834b8121f13779789cbfc 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: xm_line.c,v 1.14 2001/01/02 22:02:52 brianp Exp $ */
+/* $Id: xm_line.c,v 1.20 2002/06/15 03:03:10 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -64,7 +64,7 @@ static void draw_points_ANY_pixmap( GLcontext *ctx, const SWvertex *vert )
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
 
-   if (xmesa->xm_visual->gl_visual->RGBAflag) {
+   if (xmesa->xm_visual->mesa_visual.RGBAflag) {
       register int x, y;
       const GLubyte *color = vert->color;
       unsigned long pixel = xmesa_color_to_pixel( xmesa,
@@ -101,7 +101,7 @@ void xmesa_choose_point( GLcontext *ctx )
    if (ctx->RenderMode == GL_RENDER
        && ctx->Point.Size == 1.0F && !ctx->Point.SmoothFlag
        && swrast->_RasterMask == 0
-       && !ctx->Texture._ReallyEnabled
+       && !ctx->Texture._EnabledUnits
        && xmesa->xm_buffer->buffer != XIMAGE) {
       swrast->Point = draw_points_ANY_pixmap;
    }
@@ -127,7 +127,7 @@ static void flat_TRUECOLOR_line( GLcontext *ctx,
                                  const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
    XMesaImage *img = xmesa->xm_buffer->backimage;
    unsigned long pixel;
    PACK_TRUECOLOR( pixel, color[0], color[1], color[2] );
@@ -148,7 +148,7 @@ static void flat_8A8B8G8R_line( GLcontext *ctx,
                                 const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
    GLuint pixel = PACK_8B8G8R( color[0], color[1], color[2] );
 
 #define PIXEL_TYPE GLuint
@@ -168,7 +168,7 @@ static void flat_8R8G8B_line( GLcontext *ctx,
                               const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
    GLuint pixel = PACK_8R8G8B( color[0], color[1], color[2] );
 
 #define PIXEL_TYPE GLuint
@@ -188,7 +188,7 @@ static void flat_8R8G8B24_line( GLcontext *ctx,
                               const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
 
 #define PIXEL_TYPE bgr_t
 #define BYTES_PER_ROW (xmesa->xm_buffer->backimage->bytes_per_line)
@@ -211,7 +211,7 @@ static void flat_5R6G5B_line( GLcontext *ctx,
                               const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
    GLushort pixel = PACK_5R6G5B( color[0], color[1], color[2] );
 
 #define PIXEL_TYPE GLushort
@@ -231,7 +231,7 @@ static void flat_DITHER_5R6G5B_line( GLcontext *ctx,
                                      const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
 
 #define PIXEL_TYPE GLushort
 #define BYTES_PER_ROW (xmesa->xm_buffer->backimage->bytes_per_line)
@@ -251,7 +251,7 @@ static void flat_DITHER8_line( GLcontext *ctx,
                                const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
    GLint r = color[0], g = color[1], b = color[2];
    DITHER_SETUP;
 
@@ -273,7 +273,7 @@ static void flat_LOOKUP8_line( GLcontext *ctx,
                                const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
    GLubyte pixel;
    LOOKUP_SETUP;
    pixel = (GLubyte) LOOKUP( color[0], color[1], color[2] );
@@ -295,7 +295,7 @@ static void flat_HPCR_line( GLcontext *ctx,
                             const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
    GLint r = color[0], g = color[1], b = color[2];
 
 #define INTERP_XY 1
@@ -317,7 +317,7 @@ static void flat_TRUECOLOR_z_line( GLcontext *ctx,
                                    const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
    XMesaImage *img = xmesa->xm_buffer->backimage;
    unsigned long pixel;
    PACK_TRUECOLOR( pixel, color[0], color[1], color[2] );
@@ -343,7 +343,7 @@ static void flat_8A8B8G8R_z_line( GLcontext *ctx,
                                   const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
    GLuint pixel = PACK_8B8G8R( color[0], color[1], color[2] );
 
 #define INTERP_Z 1
@@ -369,7 +369,7 @@ static void flat_8R8G8B_z_line( GLcontext *ctx,
                                 const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
    GLuint pixel = PACK_8R8G8B( color[0], color[1], color[2] );
 
 #define INTERP_Z 1
@@ -395,7 +395,7 @@ static void flat_8R8G8B24_z_line( GLcontext *ctx,
                                     const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
 
 #define INTERP_Z 1
 #define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE
@@ -422,7 +422,7 @@ static void flat_5R6G5B_z_line( GLcontext *ctx,
                                 const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
    GLushort pixel = PACK_5R6G5B( color[0], color[1], color[2] );
 
 #define INTERP_Z 1
@@ -447,7 +447,7 @@ static void flat_DITHER_5R6G5B_z_line( GLcontext *ctx,
                                        const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
 
 #define INTERP_Z 1
 #define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE
@@ -471,7 +471,7 @@ static void flat_DITHER8_z_line( GLcontext *ctx,
                                  const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
    GLint r = color[0], g = color[1], b = color[2];
    DITHER_SETUP;
 
@@ -498,7 +498,7 @@ static void flat_LOOKUP8_z_line( GLcontext *ctx,
                                  const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
    GLubyte pixel;
    LOOKUP_SETUP;
    pixel = (GLubyte) LOOKUP( color[0], color[1], color[2] );
@@ -526,7 +526,7 @@ static void flat_HPCR_z_line( GLcontext *ctx,
                               const SWvertex *vert0, const SWvertex *vert1 )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
-   const GLubyte *color = vert0->color;
+   const GLubyte *color = vert1->color;
    GLint r = color[0], g = color[1], b = color[2];
 
 #define INTERP_XY 1
@@ -557,15 +557,16 @@ static swrast_line_func get_line_func( GLcontext *ctx )
 
    if (ctx->RenderMode != GL_RENDER)      return (swrast_line_func) NULL;
    if (ctx->Line.SmoothFlag)              return (swrast_line_func) NULL;
-   if (ctx->Texture._ReallyEnabled)       return (swrast_line_func) NULL;
+   if (ctx->Texture._EnabledUnits)        return (swrast_line_func) NULL;
    if (ctx->Light.ShadeModel != GL_FLAT)  return (swrast_line_func) NULL;
    if (ctx->Line.StippleFlag)             return (swrast_line_func) NULL;
+   if (swrast->_RasterMask & MULTI_DRAW_BIT) return (swrast_line_func) NULL;
 
    if (xmesa->xm_buffer->buffer==XIMAGE
        && swrast->_RasterMask==DEPTH_BIT
        && ctx->Depth.Func==GL_LESS
        && ctx->Depth.Mask==GL_TRUE
-       && ctx->Visual.DepthBits == DEFAULT_SOFTWARE_DEPTH_BITS
+       && ctx->Visual.depthBits == DEFAULT_SOFTWARE_DEPTH_BITS
        && ctx->Line.Width==1.0F) {
       switch (xmesa->pixelformat) {
          case PF_TRUECOLOR:
@@ -631,39 +632,3 @@ void xmesa_choose_line( GLcontext *ctx )
    if (!(swrast->Line = get_line_func( ctx )))
       _swrast_choose_line( ctx );
 }
-
-
-#define XMESA_NEW_POINT  (_NEW_POINT | \
-                          _NEW_RENDERMODE | \
-                          _SWRAST_NEW_RASTERMASK)
-
-#define XMESA_NEW_LINE   (_NEW_LINE | \
-                          _NEW_TEXTURE | \
-                          _NEW_LIGHT | \
-                          _NEW_DEPTH | \
-                          _NEW_RENDERMODE | \
-                          _SWRAST_NEW_RASTERMASK)
-
-#define XMESA_NEW_TRIANGLE (_NEW_POLYGON | \
-                            _NEW_TEXTURE | \
-                            _NEW_LIGHT | \
-                            _NEW_DEPTH | \
-                            _NEW_RENDERMODE | \
-                            _SWRAST_NEW_RASTERMASK)
-
-
-/* Extend the software rasterizer with our line/point/triangle
- * functions.
- */
-void xmesa_register_swrast_functions( GLcontext *ctx )
-{
-   SWcontext *swrast = SWRAST_CONTEXT( ctx );
-
-   swrast->choose_point = xmesa_choose_point;
-   swrast->choose_line = xmesa_choose_line;
-   swrast->choose_triangle = xmesa_choose_triangle;
-
-   swrast->invalidate_point |= XMESA_NEW_POINT;
-   swrast->invalidate_line |= XMESA_NEW_LINE;
-   swrast->invalidate_triangle |= XMESA_NEW_TRIANGLE;
-}