-/* $Id: xm_line.c,v 1.7 2000/11/06 15:52:48 brianp Exp $ */
+/* $Id: xm_line.c,v 1.8 2000/11/06 17:28:20 brianp Exp $ */
/*
* Mesa 3-D graphics library
XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
SWcontext *swrast = SWRAST_CONTEXT(ctx);
- if (ctx->Point.Size == 1.0F && !ctx->Point.SmoothFlag
+ if (ctx->RenderMode == GL_RENDER
+ && ctx->Point.Size == 1.0F && !ctx->Point.SmoothFlag
&& swrast->_RasterMask == 0
&& !ctx->Texture._ReallyEnabled
&& xmesa->xm_buffer->buffer != XIMAGE) {
}
-#if 0
-/*
- * Examine ctx->Line attributes and set xmesa->xm_buffer->gc1
- * and xmesa->xm_buffer->gc2 appropriately.
- */
-static void setup_x_line_options( GLcontext *ctx )
-{
- XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
- int i, state, state0, new_state, len, offs;
- int tbit;
- char *dptr;
- int n_segments = 0;
- char dashes[20];
- int line_width, line_style;
-
- /*** Line Stipple ***/
- if (ctx->Line.StippleFlag) {
- const int pattern = ctx->Line.StipplePattern;
-
- dptr = dashes;
- state0 = state = ((pattern & 1) != 0);
-
- /* Decompose the pattern */
- for (i=1,tbit=2,len=1;i<16;++i,tbit=(tbit<<1))
- {
- new_state = ((tbit & pattern) != 0);
- if (state != new_state)
- {
- *dptr++ = ctx->Line.StippleFactor * len;
- len = 1;
- state = new_state;
- }
- else
- ++len;
- }
- *dptr = ctx->Line.StippleFactor * len;
- n_segments = 1 + (dptr - dashes);
-
- /* ensure an even no. of segments, or X may toggle on/off for consecutive patterns */
- /* if (n_segments & 1) dashes [n_segments++] = 0; value of 0 not allowed in dash list */
-
- /* Handle case where line style starts OFF */
- if (state0 == 0)
- offs = dashes[0];
- else
- offs = 0;
-
-#if 0
-fprintf (stderr, "input pattern: 0x%04x, offset %d, %d segments:", pattern, offs, n_segments);
-for (i = 0; i < n_segments; i++)
-fprintf (stderr, " %d", dashes[i]);
-fprintf (stderr, "\n");
-#endif
-
- XMesaSetDashes( xmesa->display, xmesa->xm_buffer->gc1,
- offs, dashes, n_segments );
- XMesaSetDashes( xmesa->display, xmesa->xm_buffer->gc2,
- offs, dashes, n_segments );
-
- line_style = LineOnOffDash;
- }
- else {
- line_style = LineSolid;
- }
-
- /*** Line Width ***/
- line_width = (int) (ctx->Line.Width+0.5F);
- if (line_width < 2) {
- /* Use fast lines when possible */
- line_width = 0;
- }
-
- /*** Set GC attributes ***/
- XMesaSetLineAttributes( xmesa->display, xmesa->xm_buffer->gc1,
- line_width, line_style, CapButt, JoinBevel);
- XMesaSetLineAttributes( xmesa->display, xmesa->xm_buffer->gc2,
- line_width, line_style, CapButt, JoinBevel);
- XMesaSetFillStyle( xmesa->display, xmesa->xm_buffer->gc1, FillSolid );
- XMesaSetFillStyle( xmesa->display, xmesa->xm_buffer->gc2, FillSolid );
-}
-#endif
-
-
static swrast_line_func get_line_func( GLcontext *ctx )
{
XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
(void) DitherValues; /* silence unused var warning */
(void) kernel1; /* silence unused var warning */
- if (ctx->Line.SmoothFlag) return (swrast_line_func)NULL;
- if (ctx->Texture._ReallyEnabled) return (swrast_line_func)NULL;
- if (ctx->Light.ShadeModel!=GL_FLAT) return (swrast_line_func)NULL;
- /* X line stippling doesn't match OpenGL stippling */
- if (ctx->Line.StippleFlag==GL_TRUE) return (swrast_line_func)NULL;
+ 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->Light.ShadeModel != GL_FLAT) return (swrast_line_func) NULL;
+ if (ctx->Line.StippleFlag) return (swrast_line_func) NULL;
if (xmesa->xm_buffer->buffer==XIMAGE
&& swrast->_RasterMask==DEPTH_BIT
case PF_DITHER_5R6G5B:
return flat_DITHER_5R6G5B_z_line;
case PF_DITHER:
- return (depth==8) ? flat_DITHER8_z_line : (swrast_line_func)NULL;
+ return (depth==8) ? flat_DITHER8_z_line : (swrast_line_func) NULL;
case PF_LOOKUP:
- return (depth==8) ? flat_LOOKUP8_z_line : (swrast_line_func)NULL;
+ return (depth==8) ? flat_LOOKUP8_z_line : (swrast_line_func) NULL;
case PF_HPCR:
return flat_HPCR_z_line;
default:
case PF_DITHER_5R6G5B:
return flat_DITHER_5R6G5B_line;
case PF_DITHER:
- return (depth==8) ? flat_DITHER8_line : (swrast_line_func)NULL;
+ return (depth==8) ? flat_DITHER8_line : (swrast_line_func) NULL;
case PF_LOOKUP:
- return (depth==8) ? flat_LOOKUP8_line : (swrast_line_func)NULL;
+ return (depth==8) ? flat_LOOKUP8_line : (swrast_line_func) NULL;
case PF_HPCR:
return flat_HPCR_line;
default:
return (swrast_line_func)NULL;
}
}
-#if 0
- /* XXX have to disable this because X's rasterization rules don't match
- * software Mesa's. This causes the linehv.c conformance test to fail.
- * In the future, we might provide a config option to enable this.
- */
- if (xmesa->xm_buffer->buffer!=XIMAGE && ctx->_RasterMask==0) {
- setup_x_line_options( ctx );
- return flat_pixmap_line;
- }
-#endif
- return (swrast_line_func)NULL;
+
+ return (swrast_line_func) NULL;
}
/* Override for the swrast line-selection function. Try to use one
}
-#define XMESA_NEW_POINT (_NEW_POINT|_SWRAST_NEW_RASTERMASK)
-#define XMESA_NEW_LINE (_NEW_LINE|_NEW_TEXTURE|_NEW_LIGHT|\
- _NEW_DEPTH|_SWRAST_NEW_RASTERMASK)
-#define XMESA_NEW_TRIANGLE (_NEW_POLYGON|_NEW_TEXTURE|_NEW_LIGHT|\
- _SWRAST_NEW_RASTERMASK|_NEW_DEPTH)
+#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
-/* $Id: xm_tri.c,v 1.7 2000/11/05 18:26:12 keithw Exp $ */
+/* $Id: xm_tri.c,v 1.8 2000/11/06 17:28:20 brianp Exp $ */
/*
* Mesa 3-D graphics library
}
-
-#if 0
-/*
- * This function is called if we're about to render triangles into an
- * X window/pixmap. It sets the polygon stipple pattern if enabled.
- */
-static void setup_x_polygon_options( GLcontext *ctx )
-{
- XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
- int fill_type;
-
- if (ctx->Polygon.StippleFlag) {
- if (xmesa->xm_buffer->stipple_pixmap == 0) {
- /* Allocate polygon stippling stuff once for this context. */
- XMesaBuffer b = xmesa->xm_buffer;
- b->stipple_pixmap = XMesaCreatePixmap( xmesa->display,
- b->buffer, 32, 32, 1 );
-#ifdef XFree86Server
- b->stipple_gc = CreateScratchGC(xmesa->display, 1);
-#else
- b->stipple_gc = XCreateGC(xmesa->display, b->stipple_pixmap, 0, NULL);
-#endif
- XMesaSetFunction(xmesa->display, b->stipple_gc, GXcopy);
- XMesaSetForeground(xmesa->display, b->stipple_gc, 1);
- XMesaSetBackground(xmesa->display, b->stipple_gc, 0);
- }
-
- /*
- * NOTE: We don't handle the following here!
- * GL_UNPACK_SWAP_BYTES
- * GL_UNPACK_LSB_FIRST
- */
- /* Copy Mesa stipple pattern to an XImage then to Pixmap */
- {
- XMesaImage *stipple_ximage;
- GLuint stipple[32];
- int i;
- int shift = xmesa->xm_buffer->height % 32;
- for (i=0;i<32;i++) {
- stipple[31-i] = ctx->PolygonStipple[(i+shift) % 32];
- }
-#ifdef XFree86Server
- stipple_ximage = XMesaCreateImage(1, 32, 32, (char *)stipple);
-#else
- stipple_ximage = XCreateImage( xmesa->display,
- xmesa->xm_visual->visinfo->visual,
- 1, ZPixmap, 0,
- (char *)stipple,
- 32, 32, 8, 0 );
- stipple_ximage->byte_order = LSBFirst;
- stipple_ximage->bitmap_bit_order = LSBFirst;
- stipple_ximage->bitmap_unit = 32;
-#endif
- XMesaPutImage( xmesa->display,
- (XMesaDrawable)xmesa->xm_buffer->stipple_pixmap,
- xmesa->xm_buffer->stipple_gc,
- stipple_ximage, 0, 0, 0, 0, 32, 32 );
- stipple_ximage->data = NULL;
- XMesaDestroyImage( stipple_ximage );
- }
-
- XMesaSetStipple( xmesa->display, xmesa->xm_buffer->gc1,
- xmesa->xm_buffer->stipple_pixmap );
- XMesaSetStipple( xmesa->display, xmesa->xm_buffer->gc2,
- xmesa->xm_buffer->stipple_pixmap );
- fill_type = FillStippled;
- }
- else {
- fill_type = FillSolid;
- }
-
- XMesaSetFillStyle( xmesa->display, xmesa->xm_buffer->gc1, fill_type );
- XMesaSetFillStyle( xmesa->display, xmesa->xm_buffer->gc2, fill_type );
-}
-#endif
-
-
-
#ifdef DEBUG
void
_xmesa_print_triangle_func( swrast_tri_func triFunc )
(void) kernel1;
- if (ctx->Polygon.SmoothFlag) return (swrast_tri_func)NULL;
- if (ctx->Texture._ReallyEnabled) return (swrast_tri_func)NULL;
+ if (ctx->RenderMode != GL_RENDER) return (swrast_tri_func) NULL;
+ if (ctx->Polygon.SmoothFlag) return (swrast_tri_func) NULL;
+ if (ctx->Texture._ReallyEnabled) return (swrast_tri_func) NULL;
if (xmesa->xm_buffer->buffer==XIMAGE) {
if ( ctx->Light.ShadeModel==GL_SMOOTH
}
else {
/* draw to pixmap */
-#if 0
- /* XXX have to disable this because X's rasterization rules
- * don't match software Mesa's. This causes a buffer invariance
- * test failure in the conformance tests.
- * In the future, we might provide a config option to enable this.
- */
- if (ctx->Light.ShadeModel==GL_FLAT && ctx->_RasterMask==0) {
- if (ctx->Color.DitherFlag && depth < 24)
- return (swrast_tri_func)NULL;
- setup_x_polygon_options( ctx );
- return flat_pixmap_triangle;
- }
-#endif
- return (swrast_tri_func)NULL;
+ return (swrast_tri_func) NULL;
}
}