s_lines.c revision b37a084357dd08573b86d6d8c5ba43d65bdc1bd7
1b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul/* $Id: s_lines.c,v 1.25 2002/02/02 21:40:33 brianp Exp $ */ 2e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 3e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* 4e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Mesa 3-D graphics library 5b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul * Version: 4.1 622144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes * 7b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. 822144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes * 9e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 10e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * copy of this software and associated documentation files (the "Software"), 11e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * to deal in the Software without restriction, including without limitation 12e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * the rights to use, copy, modify, merge, publish, distribute, sublicense, 13e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * and/or sell copies of the Software, and to permit persons to whom the 14e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Software is furnished to do so, subject to the following conditions: 1522144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes * 16e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * The above copyright notice and this permission notice shall be included 17e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * in all copies or substantial portions of the Software. 1822144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes * 19e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 23e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 24e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 26e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 27e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 28e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "glheader.h" 2946b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell#include "colormac.h" 30e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "macros.h" 31e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "mmath.h" 320070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#include "s_aaline.h" 33cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#include "s_context.h" 34e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_depth.h" 35cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#include "s_feedback.h" 36b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#include "s_lines.h" 37b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#include "s_span.h" 38e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 39e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 40b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul/* 41b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul * Init the mask[] array to implement a line stipple. 42b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul */ 43b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paulstatic void 44b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paulcompute_stipple_mask( GLcontext *ctx, GLuint len, GLubyte mask[] ) 45b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul{ 46b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul SWcontext *swrast = SWRAST_CONTEXT(ctx); 47b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLuint i; 48e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 49b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (i = 0; i < len; i++) { 50b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLuint bit = (swrast->StippleCounter / ctx->Line.StippleFactor) & 0xf; 51b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if ((1 << bit) & ctx->Line.StipplePattern) { 52b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul mask[i] = GL_TRUE; 53b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 54b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 55b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul mask[i] = GL_FALSE; 56b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 57b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul swrast->StippleCounter++; 58b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 59b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul} 60e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 61e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 62e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* 63b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul * To draw a wide line we can simply redraw the span N times, side by side. 64e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 65b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paulstatic void 66b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Pauldraw_wide_line( GLcontext *ctx, struct sw_span *span, GLboolean xMajor ) 67e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 68b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLint width, start; 69cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell 70b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(span->end < MAX_WIDTH); 71e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 72b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul width = (GLint) CLAMP( ctx->Line.Width, MIN_LINE_WIDTH, MAX_LINE_WIDTH ); 73e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 74b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (width & 1) 75b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul start = width / 2; 76b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else 77b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul start = width / 2 - 1; 78b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 79b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (xMajor) { 80b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLuint i, w; 81b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (w = 0; w < width; w++) { 82b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (w == 0) { 83b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (i = 0; i < span->end; i++) 84b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span->yArray[i] -= start; 85b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 86b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 87b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (i = 0; i < span->end; i++) 88b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span->yArray[i]++; 89b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 90b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if ((span->interpMask | span->arrayMask) & SPAN_TEXTURE) 91b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_texture_span(ctx, span, GL_LINE); 92b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else if ((span->interpMask | span->arrayMask) & SPAN_RGBA) 93b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_rgba_span(ctx, span, GL_LINE); 94b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else 95b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_index_span(ctx, span, GL_LINE); 96b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 97b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 98b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 99b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLuint i, w; 100b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (w = 0; w < width; w++) { 101b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (w == 0) { 102b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (i = 0; i < span->end; i++) 103b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span->xArray[i] -= start; 104b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 105b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 106b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (i = 0; i < span->end; i++) 107b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span->xArray[i]++; 108b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 109b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if ((span->interpMask | span->arrayMask) & SPAN_TEXTURE) 110b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_texture_span(ctx, span, GL_LINE); 111b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else if ((span->interpMask | span->arrayMask) & SPAN_RGBA) 112b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_rgba_span(ctx, span, GL_LINE); 113b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else 114b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_index_span(ctx, span, GL_LINE); 115b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 116b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 117e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 118e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 119e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 120e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 121b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul/**********************************************************************/ 122b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul/***** Rasterization *****/ 123b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul/**********************************************************************/ 124b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 125b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 126b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul/* Flat, color index line */ 127b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paulstatic void flat_ci_line( GLcontext *ctx, 128b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul const SWvertex *vert0, 129b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul const SWvertex *vert1 ) 130e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 131b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 132b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 133b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 134b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(!ctx->Line.StippleFlag); 135b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Line.Width == 1.0F); 136b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 137b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul INIT_SPAN(span); 138b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_XY; 139b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.interpMask |= SPAN_INDEX; 140b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.index = IntToFixed(vert1->index); 141b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.indexStep = 0; 142e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 143e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 144b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 145b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 146b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 147b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 148b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 149b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 150e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 151e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 152e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 153b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_index_span(ctx, &span, GL_LINE); 154e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 155e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 156e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 157e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, RGBA line */ 158e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_rgba_line( GLcontext *ctx, 159a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 160a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 161e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 162b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 163b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 164b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 165b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(!ctx->Line.StippleFlag); 166b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Line.Width == 1.0F); 167b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 168b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul INIT_SPAN(span); 169b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_XY; 170b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.interpMask |= SPAN_RGBA; 171b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.red = ChanToFixed(vert1->color[0]); 172b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.green = ChanToFixed(vert1->color[1]); 173b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.blue = ChanToFixed(vert1->color[2]); 174b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.alpha = ChanToFixed(vert1->color[3]); 175b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.redStep = 0; 176b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.greenStep = 0; 177b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.blueStep = 0; 178b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.alphaStep = 0; 179e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 180e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 181b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 182b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 183b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 184b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 185b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 186b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 187e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 188e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 189e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 190b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_rgba_span(ctx, &span, GL_LINE); 191e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 192e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 193e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 194e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth shaded, color index line */ 195e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_ci_line( GLcontext *ctx, 196a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 197a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 198e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 199b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 200e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 201b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 202b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(!ctx->Line.StippleFlag); 203b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Line.Width == 1.0F); 204e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 205b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul INIT_SPAN(span); 206b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= (SPAN_XY | SPAN_INDEX); 207e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 208e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 209e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1 210b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 211b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 212b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 213b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 214b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.index[span.end] = I; \ 215b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 216b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 217e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 218e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 219e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 220b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_index_span(ctx, &span, GL_LINE); 221e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 222e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 223e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 224e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, RGBA line */ 225e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_rgba_line( GLcontext *ctx, 226a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 227a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 228e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 229b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 230e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 231b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 232b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(!ctx->Line.StippleFlag); 233b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Line.Width == 1.0F); 234e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 235b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul INIT_SPAN(span); 236b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= (SPAN_XY | SPAN_RGBA); 237e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 238e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 239e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 240e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 241b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 242b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 243b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 244b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 245b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][RCOMP] = FixedToInt(r0); \ 246b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][GCOMP] = FixedToInt(g0); \ 247b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][BCOMP] = FixedToInt(b0); \ 248b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][ACOMP] = FixedToInt(a0); \ 249b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 250b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 251e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 252e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 253e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 254b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_rgba_span(ctx, &span, GL_LINE); 255e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 256e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 257e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 258e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth shaded, color index, any width, maybe stippled */ 259e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_smooth_ci_line( GLcontext *ctx, 260a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 261a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 262e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 263b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 264b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 265e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 266b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 267e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 268b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul INIT_SPAN(span); 269b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_INDEX); 270b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 271b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 272e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 273e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 27495e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 275e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1 276b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 277b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 278b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 279b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 280b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.zArray[span.end] = Z; \ 281b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.fogArray[span.end] = fog0; \ 282b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.index[span.end] = I; \ 283b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 284e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 285e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 286b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 287b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 288b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_MASK; 289b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul compute_stipple_mask(ctx, span.end, span.mask); 290e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 291e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 292b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 293b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul draw_wide_line(ctx, &span, xMajor); 294b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 295b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 296b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_index_span(ctx, &span, GL_LINE); 297b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 298e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 299e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 300e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 301e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat shaded, color index, any width, maybe stippled */ 302e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_flat_ci_line( GLcontext *ctx, 303a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 304a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 305e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 306b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 307b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 308e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 309b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 310b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 311b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul INIT_SPAN(span); 312b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG); 313b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.interpMask |= SPAN_INDEX; 314b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.index = IntToFixed(vert1->index); 315b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.indexStep = 0; 316b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 317b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 318e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 319e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 32095e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 321b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 322b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 323b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 324b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 325b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.zArray[span.end] = Z; \ 326b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.fogArray[span.end] = fog0; \ 327b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 328e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 329e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 330b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 331b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 332b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_MASK; 333b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul compute_stipple_mask(ctx, span.end, span.mask); 334e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 335e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 336b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 337b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul draw_wide_line(ctx, &span, xMajor); 338b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 339b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 340b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_index_span(ctx, &span, GL_LINE); 341b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 342e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 343e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 344e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 345e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 346e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_smooth_rgba_line( GLcontext *ctx, 347a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 348a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 349e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 350b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 351b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 352e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 353b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 354e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 355b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul INIT_SPAN(span); 356b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA); 357b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 358b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 359e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 360e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 36195e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 362e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 363e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 364b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 365b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 366b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 367b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 368b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.zArray[span.end] = Z; \ 369b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][RCOMP] = FixedToInt(r0); \ 370b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][GCOMP] = FixedToInt(g0); \ 371b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][BCOMP] = FixedToInt(b0); \ 372b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][ACOMP] = FixedToInt(a0); \ 373b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.fogArray[span.end] = fog0; \ 374b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 375e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 376e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 377b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 378b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 379b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_MASK; 380b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul compute_stipple_mask(ctx, span.end, span.mask); 381e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 382e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 383b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 384b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul draw_wide_line(ctx, &span, xMajor); 385b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 386b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 387b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_rgba_span(ctx, &span, GL_LINE); 388b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 389e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 390e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 391e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 392e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_flat_rgba_line( GLcontext *ctx, 393a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 394a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 395e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 396b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 397b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 398b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 399b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 400b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 401b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul INIT_SPAN(span); 402b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG); 403b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.interpMask |= SPAN_RGBA; 404b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.red = ChanToFixed(vert1->color[0]); 405b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.green = ChanToFixed(vert1->color[1]); 406b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.blue = ChanToFixed(vert1->color[2]); 407b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.alpha = ChanToFixed(vert1->color[3]); 408b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.redStep = 0; 409b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.greenStep = 0; 410b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.blueStep = 0; 411b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.alphaStep = 0; 412b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 413b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 414e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 415e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 41695e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 417b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 418b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 419b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 420b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 421b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.zArray[span.end] = Z; \ 422b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.fogArray[span.end] = fog0; \ 423b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 424e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 425e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 426b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 427b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 428b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_MASK; 429b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul compute_stipple_mask(ctx, span.end, span.mask); 430e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 431e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 432b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 433b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul draw_wide_line(ctx, &span, xMajor); 434b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 435b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 436b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_rgba_span(ctx, &span, GL_LINE); 437b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 438e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 439e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 440e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 441e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, textured, any width, maybe stippled */ 442e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_textured_line( GLcontext *ctx, 443a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 444a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 445e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 446b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 447b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 448b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 449b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 450b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 451b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul INIT_SPAN(span); 452b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_TEXTURE | SPAN_LAMBDA); 453b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.interpMask |= (SPAN_RGBA | SPAN_SPEC); 454b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.red = ChanToFixed(vert1->color[0]); 455b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.green = ChanToFixed(vert1->color[1]); 456b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.blue = ChanToFixed(vert1->color[2]); 457b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.alpha = ChanToFixed(vert1->color[3]); 458b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.redStep = 0; 459b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.greenStep = 0; 460b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.blueStep = 0; 461b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.alphaStep = 0; 462b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specRed = ChanToFixed(vert1->specular[0]); 463b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specGreen = ChanToFixed(vert1->specular[1]); 464b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specBlue = ChanToFixed(vert1->specular[2]); 465b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specRedStep = 0; 466b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specGreenStep = 0; 467b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specBlueStep = 0; 468b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 469b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 470e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 471e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 47295e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 473e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1 474b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 475b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 476b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 477b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 478b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.zArray[span.end] = Z; \ 479b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.fogArray[span.end] = fog0; \ 480b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[0][span.end][0] = fragTexcoord[0]; \ 481b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[0][span.end][1] = fragTexcoord[1]; \ 482b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[0][span.end][2] = fragTexcoord[2]; \ 483b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.lambda[0][span.end] = 0.0; \ 484b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 485e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 486e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 487b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 488b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 489b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_MASK; 490b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul compute_stipple_mask(ctx, span.end, span.mask); 491e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 492e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 493b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 494b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul draw_wide_line(ctx, &span, xMajor); 495b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 496b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 497b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_texture_span(ctx, &span, GL_LINE); 498b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 499e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 500e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 501e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 502e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 503e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, textured, any width, maybe stippled */ 504e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_textured_line( GLcontext *ctx, 505a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 506a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 507e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 508b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 509b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 510cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell 511b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 512e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 513b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul INIT_SPAN(span); 514b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA | SPAN_TEXTURE | SPAN_LAMBDA); 515b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 516b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 517e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 518e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 51995e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 520e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 521e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 522e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1 523b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 524b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 525b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 526b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 527b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.zArray[span.end] = Z; \ 528b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.fogArray[span.end] = fog0; \ 529b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][RCOMP] = FixedToInt(r0); \ 530b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][GCOMP] = FixedToInt(g0); \ 531b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][BCOMP] = FixedToInt(b0); \ 532b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][ACOMP] = FixedToInt(a0); \ 533b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[0][span.end][0] = fragTexcoord[0]; \ 534b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[0][span.end][1] = fragTexcoord[1]; \ 535b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[0][span.end][2] = fragTexcoord[2]; \ 536b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.lambda[0][span.end] = 0.0; \ 537b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 538e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 539e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 540b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 541b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 542b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_MASK; 543b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul compute_stipple_mask(ctx, span.end, span.mask); 544e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 545e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 546b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 547b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul draw_wide_line(ctx, &span, xMajor); 548b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 549b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 550b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_texture_span(ctx, &span, GL_LINE); 551b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 552e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 553e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 554e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 555e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, multitextured, any width, maybe stippled, separate specular 556e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * color interpolation. 557e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 558e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_multitextured_line( GLcontext *ctx, 559a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 560a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 561e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 562b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 563b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 564b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLuint u; 565e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 566b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 567b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 568b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul INIT_SPAN(span); 569b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA | SPAN_TEXTURE | SPAN_LAMBDA); 570b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 571b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 572e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 573e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 57495e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 575e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 576e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_SPEC 1 577e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 578e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1 579b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 580b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 581b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 582b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 583b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.zArray[span.end] = Z; \ 584b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.fogArray[span.end] = fog0; \ 585b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][RCOMP] = FixedToInt(r0); \ 586b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][GCOMP] = FixedToInt(g0); \ 587b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][BCOMP] = FixedToInt(b0); \ 588b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][ACOMP] = FixedToInt(a0); \ 589b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specArray[span.end][RCOMP] = FixedToInt(sr0); \ 590b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specArray[span.end][GCOMP] = FixedToInt(sb0); \ 591b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specArray[span.end][BCOMP] = FixedToInt(sb0); \ 592b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { \ 593b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Texture.Unit[u]._ReallyEnabled) { \ 594b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[u][span.end][0] = fragTexcoord[u][0]; \ 595b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[u][span.end][1] = fragTexcoord[u][1]; \ 596b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[u][span.end][2] = fragTexcoord[u][2]; \ 597b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.lambda[u][span.end] = 0.0; \ 598b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } \ 599b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } \ 600b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 601e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 602e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 603b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 604b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 605b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_MASK; 606b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul compute_stipple_mask(ctx, span.end, span.mask); 607e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 608e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 609b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 610b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul draw_wide_line(ctx, &span, xMajor); 611b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 612b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 613b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_texture_span(ctx, &span, GL_LINE); 614b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 615e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 616e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 617e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 618e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, multitextured, any width, maybe stippled, separate specular 619e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * color interpolation. 620e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 621e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_multitextured_line( GLcontext *ctx, 622a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 623a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 624e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 625b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 626b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 627b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLuint u; 628b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 629b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 630b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 631b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul INIT_SPAN(span); 632b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_TEXTURE | SPAN_LAMBDA); 633b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.interpMask |= (SPAN_RGBA | SPAN_SPEC); 634b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.red = ChanToFixed(vert1->color[0]); 635b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.green = ChanToFixed(vert1->color[1]); 636b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.blue = ChanToFixed(vert1->color[2]); 637b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.alpha = ChanToFixed(vert1->color[3]); 638b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.redStep = 0; 639b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.greenStep = 0; 640b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.blueStep = 0; 641b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.alphaStep = 0; 642b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specRed = ChanToFixed(vert1->specular[0]); 643b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specGreen = ChanToFixed(vert1->specular[1]); 644b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specBlue = ChanToFixed(vert1->specular[2]); 645b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specRedStep = 0; 646b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specGreenStep = 0; 647b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specBlueStep = 0; 648b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 649b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 650e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 651e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 65295e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 653e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1 654b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 655b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 656b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 657b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 658b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.zArray[span.end] = Z; \ 659b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.fogArray[span.end] = fog0; \ 660b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { \ 661b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Texture.Unit[u]._ReallyEnabled) { \ 662b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[u][span.end][0] = fragTexcoord[u][0]; \ 663b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[u][span.end][1] = fragTexcoord[u][1]; \ 664b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[u][span.end][2] = fragTexcoord[u][2]; \ 665b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.lambda[u][span.end] = 0.0; \ 666b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } \ 667b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } \ 668b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 669e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 670e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 671b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 672b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 673b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_MASK; 674b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul compute_stipple_mask(ctx, span.end, span.mask); 675e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 676e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 677b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 678b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul draw_wide_line(ctx, &span, xMajor); 679b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 680b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 681b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul _mesa_write_texture_span(ctx, &span, GL_LINE); 682b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 683e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 684e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 685e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 68622144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughesvoid _swrast_add_spec_terms_line( GLcontext *ctx, 68746b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell const SWvertex *v0, 68846b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell const SWvertex *v1 ) 68946b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell{ 69046b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell SWvertex *ncv0 = (SWvertex *)v0; 69146b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell SWvertex *ncv1 = (SWvertex *)v1; 69246b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell GLchan c[2][4]; 69346b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( c[0], ncv0->color ); 69446b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( c[1], ncv1->color ); 69546b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell ACC_3V( ncv0->color, ncv0->specular ); 69646b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell ACC_3V( ncv1->color, ncv1->specular ); 69746b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell SWRAST_CONTEXT(ctx)->SpecLine( ctx, ncv0, ncv1 ); 69846b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( ncv0->color, c[0] ); 69946b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( ncv1->color, c[1] ); 70046b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell} 70146b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell 702e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 703e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#ifdef DEBUG 704ba41b8afb1b40b967cf5c0e604bbf09793eb8feeBrian Paulextern void 705ba41b8afb1b40b967cf5c0e604bbf09793eb8feeBrian Paul_mesa_print_line_function(GLcontext *ctx); /* silence compiler warning */ 706e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellvoid 707e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell_mesa_print_line_function(GLcontext *ctx) 708e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 709cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell SWcontext *swrast = SWRAST_CONTEXT(ctx); 710cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell 711e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("Line Func == "); 712cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell if (swrast->Line == flat_ci_line) 713e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_ci_line\n"); 714cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_rgba_line) 715e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_rgba_line\n"); 716cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_ci_line) 717e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_ci_line\n"); 718cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_rgba_line) 719e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_rgba_line\n"); 720cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_smooth_ci_line) 721e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_smooth_ci_line\n"); 722cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_flat_ci_line) 723e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_flat_ci_line\n"); 724cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_smooth_rgba_line) 725e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_smooth_rgba_line\n"); 726cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_flat_rgba_line) 727e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_flat_rgba_line\n"); 728cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_textured_line) 729e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_textured_line\n"); 730cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_textured_line) 731e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_textured_line\n"); 732cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_multitextured_line) 733e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_multitextured_line\n"); 734cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_multitextured_line) 735e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_multitextured_line\n"); 736e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 7374b7ccad6829d11c07f1ceac3b3d12f8aec9e640bBrian Paul printf("Driver func %p\n", (void *) swrast->Line); 738e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 739e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#endif 740e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 741e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 742e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 743233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#ifdef DEBUG 744233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 745233aafbb30594d0193b00705d0532be97060ebd1Brian Paul/* record the current line function name */ 746233aafbb30594d0193b00705d0532be97060ebd1Brian Paulstatic const char *lineFuncName = NULL; 747233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 748233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#define USE(lineFunc) \ 749233aafbb30594d0193b00705d0532be97060ebd1Brian Pauldo { \ 750233aafbb30594d0193b00705d0532be97060ebd1Brian Paul lineFuncName = #lineFunc; \ 751233aafbb30594d0193b00705d0532be97060ebd1Brian Paul /*printf("%s\n", lineFuncName);*/ \ 752233aafbb30594d0193b00705d0532be97060ebd1Brian Paul swrast->Line = lineFunc; \ 753233aafbb30594d0193b00705d0532be97060ebd1Brian Paul} while (0) 754233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 755233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#else 756233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 757c123a9b2edc5852cb50485f344219508254081a8Brian Paul#define USE(lineFunc) swrast->Line = lineFunc 758233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 759233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#endif 760233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 761233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 762233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 763e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* 764e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Determine which line drawing function to use given the current 765e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * rendering context. 766e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * 767e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Please update the summary flag _SWRAST_NEW_LINE if you add or remove 768e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * tests to this code. 769e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 770e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellvoid 771cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell_swrast_choose_line( GLcontext *ctx ) 772e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 773cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell SWcontext *swrast = SWRAST_CONTEXT(ctx); 774b6bcae5698df88f7730d40004ce7ce0462e97a20Brian Paul const GLboolean rgbmode = ctx->Visual.rgbMode; 775e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 776b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->RenderMode == GL_RENDER) { 777e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.SmoothFlag) { 778e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* antialiased lines */ 7790070d398d13759adc519f9bc764ffd39bc88890eBrian Paul _swrast_choose_aa_line_function(ctx); 7800070d398d13759adc519f9bc764ffd39bc88890eBrian Paul ASSERT(swrast->Triangle); 781e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 782cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (ctx->Texture._ReallyEnabled) { 78389dae684aa1d74b06a4f70cb76b33671d0cef9e6Keith Whitwell if (ctx->Texture._ReallyEnabled > TEXTURE0_ANY || 784ee403ff0ba272f5be539ddc921d3fffb3d250cc4Brian Paul (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR)) { 785e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* multi-texture and/or separate specular color */ 786b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Light.ShadeModel == GL_SMOOTH) 787233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_multitextured_line); 788e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 789233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_multitextured_line); 790e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 791e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 792b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Light.ShadeModel == GL_SMOOTH) { 793233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_textured_line); 794e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 795e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 796233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_textured_line); 797e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 798e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 799e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 800e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 801b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Light.ShadeModel == GL_SMOOTH) { 802b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Depth.Test || ctx->Fog.Enabled || ctx->Line.Width != 1.0 803b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul || ctx->Line.StippleFlag) { 804e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 805b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul USE(general_smooth_rgba_line); 806e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 807b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul USE(general_smooth_ci_line); 808e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 809e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 810e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 811233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_rgba_line); 812e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 813233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_ci_line); 814e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 815e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 816e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 817b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Depth.Test || ctx->Fog.Enabled || ctx->Line.Width != 1.0 818b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul || ctx->Line.StippleFlag) { 819e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 820b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul USE(general_flat_rgba_line); 821e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 822b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul USE(general_flat_ci_line); 823e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 824e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 825e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 826233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_rgba_line); 827e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 828233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_ci_line); 829e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 830e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 831e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 832e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 833b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else if (ctx->RenderMode == GL_FEEDBACK) { 834233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(_mesa_feedback_line); 835e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 836e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 837b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->RenderMode == GL_SELECT); 838233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(_mesa_select_line); 839e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 840e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 841e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /*_mesa_print_line_function(ctx);*/ 842e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 843