s_lines.c revision a670c1280b78e6da3b298b61f623e4c733c6be94
1a670c1280b78e6da3b298b61f623e4c733c6be94Brian Paul/* $Id: s_lines.c,v 1.28 2002/04/19 00:38:27 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) { 80a670c1280b78e6da3b298b61f623e4c733c6be94Brian Paul GLuint i; 81a670c1280b78e6da3b298b61f623e4c733c6be94Brian Paul GLint w; 82b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (w = 0; w < width; w++) { 83b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (w == 0) { 84b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (i = 0; i < span->end; i++) 85b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span->yArray[i] -= start; 86b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 87b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 88b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (i = 0; i < span->end; i++) 89b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span->yArray[i]++; 90b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 91b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if ((span->interpMask | span->arrayMask) & SPAN_TEXTURE) 92b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_texture_span(ctx, span); 93b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else if ((span->interpMask | span->arrayMask) & SPAN_RGBA) 94b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_rgba_span(ctx, span); 95b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else 96b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_index_span(ctx, span); 97b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 98b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 99b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 100a670c1280b78e6da3b298b61f623e4c733c6be94Brian Paul GLuint i; 101a670c1280b78e6da3b298b61f623e4c733c6be94Brian Paul GLint w; 102b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (w = 0; w < width; w++) { 103b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (w == 0) { 104b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (i = 0; i < span->end; i++) 105b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span->xArray[i] -= start; 106b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 107b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 108b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (i = 0; i < span->end; i++) 109b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span->xArray[i]++; 110b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 111b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if ((span->interpMask | span->arrayMask) & SPAN_TEXTURE) 112b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_texture_span(ctx, span); 113b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else if ((span->interpMask | span->arrayMask) & SPAN_RGBA) 114b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_rgba_span(ctx, span); 115b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else 116b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_index_span(ctx, span); 117b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 118b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 119e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 120e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 121e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 122e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 123b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul/**********************************************************************/ 124b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul/***** Rasterization *****/ 125b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul/**********************************************************************/ 126b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 127b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 128b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul/* Flat, color index line */ 129b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paulstatic void flat_ci_line( GLcontext *ctx, 130b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul const SWvertex *vert0, 131b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul const SWvertex *vert1 ) 132e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 133b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 134b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 135b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 136b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(!ctx->Line.StippleFlag); 137b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Line.Width == 1.0F); 138b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 139b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, SPAN_INDEX, SPAN_XY); 140b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul /*span.arrayMask |= SPAN_XY; 141b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul span.interpMask |= SPAN_INDEX;*/ 142b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.index = IntToFixed(vert1->index); 143b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.indexStep = 0; 144e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 145e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 146b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 147b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 148b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 149b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 150b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 151b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 152e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 153e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 154e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 155b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_index_span(ctx, &span); 156e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 157e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 158e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 159e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, RGBA line */ 160e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_rgba_line( GLcontext *ctx, 161a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 162a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 163e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 164b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 165b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 166b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 167b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(!ctx->Line.StippleFlag); 168b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Line.Width == 1.0F); 169b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 170b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, SPAN_RGBA, SPAN_XY); 171b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul /*span.arrayMask |= SPAN_XY; 172b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul span.interpMask |= SPAN_RGBA;*/ 173b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.red = ChanToFixed(vert1->color[0]); 174b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.green = ChanToFixed(vert1->color[1]); 175b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.blue = ChanToFixed(vert1->color[2]); 176b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.alpha = ChanToFixed(vert1->color[3]); 177b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.redStep = 0; 178b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.greenStep = 0; 179b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.blueStep = 0; 180b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.alphaStep = 0; 181e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 182e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 183b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 184b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 185b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 186b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 187b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 188b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 189e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 190e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 191e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 192b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_rgba_span(ctx, &span); 193e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 194e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 195e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 196e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth shaded, color index line */ 197e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_ci_line( GLcontext *ctx, 198a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 199a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 200e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 201b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 202e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 203b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 204b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(!ctx->Line.StippleFlag); 205b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Line.Width == 1.0F); 206e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 207b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, 0, SPAN_XY | SPAN_INDEX); 208b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul /*span.arrayMask |= (SPAN_XY | SPAN_INDEX);*/ 209e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 210e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 211e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1 212b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 213b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 214b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 215b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 216b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.index[span.end] = I; \ 217b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 218b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 219e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 220e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 221e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 222b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_index_span(ctx, &span); 223e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 224e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 225e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 226e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, RGBA line */ 227e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_rgba_line( GLcontext *ctx, 228a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 229a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 230e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 231b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 232e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 233b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 234b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(!ctx->Line.StippleFlag); 235b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Line.Width == 1.0F); 236e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 237b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, 0, SPAN_XY | SPAN_RGBA); 238b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul /*span.arrayMask |= (SPAN_XY | SPAN_RGBA);*/ 239e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 240e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 241e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 242e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 243b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 244b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 245b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 246b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 247b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][RCOMP] = FixedToInt(r0); \ 248b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][GCOMP] = FixedToInt(g0); \ 249b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][BCOMP] = FixedToInt(b0); \ 250b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][ACOMP] = FixedToInt(a0); \ 251b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 252b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 253e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 254e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 255e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 256b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_rgba_span(ctx, &span); 257e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 258e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 259e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 260e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth shaded, color index, any width, maybe stippled */ 261e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_smooth_ci_line( GLcontext *ctx, 262a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 263a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 264e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 265b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 266b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 267e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 268b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 269e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 270b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, 0, 271b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_INDEX); 272b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul /*span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_INDEX);*/ 273b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 274b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 275e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 276e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 27795e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 278e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1 279b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 280b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 281b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 282b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 283b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.zArray[span.end] = Z; \ 284b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.fogArray[span.end] = fog0; \ 285b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.index[span.end] = I; \ 286b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 287e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 288e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 289b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 290b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 291b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_MASK; 292b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul compute_stipple_mask(ctx, span.end, span.mask); 293e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 294e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 295b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 296b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul draw_wide_line(ctx, &span, xMajor); 297b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 298b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 299b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_index_span(ctx, &span); 300b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 301e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 302e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 303e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 304e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat shaded, color index, any width, maybe stippled */ 305e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_flat_ci_line( GLcontext *ctx, 306a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 307a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 308e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 309b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 310b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 311e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 312b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 313b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 314b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, SPAN_INDEX, 315b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul SPAN_XY | SPAN_Z | SPAN_FOG); 316b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul /*span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG); 317b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul span.interpMask |= SPAN_INDEX;*/ 318b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.index = IntToFixed(vert1->index); 319b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.indexStep = 0; 320b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 321b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 322e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 323e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 32495e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 325b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 326b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 327b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 328b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 329b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.zArray[span.end] = Z; \ 330b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.fogArray[span.end] = fog0; \ 331b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 332e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 333e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 334b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 335b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 336b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_MASK; 337b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul compute_stipple_mask(ctx, span.end, span.mask); 338e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 339e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 340b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 341b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul draw_wide_line(ctx, &span, xMajor); 342b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 343b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 344b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_index_span(ctx, &span); 345b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 346e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 347e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 348e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 349e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 350e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_smooth_rgba_line( GLcontext *ctx, 351a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 352a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 353e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 354b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 355b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 356e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 357b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 358e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 359b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, 0, 360b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA); 361b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul /*span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA);*/ 362b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 363b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 364e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 365e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 36695e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 367e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 368e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 369b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 370b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 371b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 372b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 373b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.zArray[span.end] = Z; \ 374b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][RCOMP] = FixedToInt(r0); \ 375b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][GCOMP] = FixedToInt(g0); \ 376b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][BCOMP] = FixedToInt(b0); \ 377b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][ACOMP] = FixedToInt(a0); \ 378b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.fogArray[span.end] = fog0; \ 379b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 380e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 381e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 382b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 383b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 384b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_MASK; 385b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul compute_stipple_mask(ctx, span.end, span.mask); 386e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 387e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 388b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 389b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul draw_wide_line(ctx, &span, xMajor); 390b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 391b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 392b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_rgba_span(ctx, &span); 393b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 394e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 395e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 396e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 397e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_flat_rgba_line( GLcontext *ctx, 398a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 399a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 400e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 401b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 402b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 403b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 404b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 405b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 406b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, SPAN_RGBA, 407b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul SPAN_XY | SPAN_Z | SPAN_FOG); 408b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul /*span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG); 409b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul span.interpMask |= SPAN_RGBA;*/ 410b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.red = ChanToFixed(vert1->color[0]); 411b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.green = ChanToFixed(vert1->color[1]); 412b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.blue = ChanToFixed(vert1->color[2]); 413b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.alpha = ChanToFixed(vert1->color[3]); 414b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.redStep = 0; 415b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.greenStep = 0; 416b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.blueStep = 0; 417b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.alphaStep = 0; 418b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 419b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 420e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 421e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 42295e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 423b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 424b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 425b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 426b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 427b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.zArray[span.end] = Z; \ 428b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.fogArray[span.end] = fog0; \ 429b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 430e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 431e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 432b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 433b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 434b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_MASK; 435b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul compute_stipple_mask(ctx, span.end, span.mask); 436e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 437e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 438b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 439b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul draw_wide_line(ctx, &span, xMajor); 440b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 441b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 442b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_rgba_span(ctx, &span); 443b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 444e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 445e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 446e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 447e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, textured, any width, maybe stippled */ 448e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_textured_line( GLcontext *ctx, 449a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 450a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 451e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 452b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 453b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 454b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 455b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 456b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 457b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, SPAN_RGBA | SPAN_SPEC, 458b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_TEXTURE | SPAN_RGBA); 459b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul /*span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_TEXTURE | SPAN_LAMBDA); 460b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul span.interpMask |= (SPAN_RGBA | SPAN_SPEC);*/ 461b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.red = ChanToFixed(vert1->color[0]); 462b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.green = ChanToFixed(vert1->color[1]); 463b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.blue = ChanToFixed(vert1->color[2]); 464b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.alpha = ChanToFixed(vert1->color[3]); 465b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.redStep = 0; 466b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.greenStep = 0; 467b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.blueStep = 0; 468b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.alphaStep = 0; 469b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specRed = ChanToFixed(vert1->specular[0]); 470b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specGreen = ChanToFixed(vert1->specular[1]); 471b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specBlue = ChanToFixed(vert1->specular[2]); 472b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specRedStep = 0; 473b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specGreenStep = 0; 474b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specBlueStep = 0; 475b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 476b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 477e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 478e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 47995e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 480e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1 481b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 482b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 483b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 484b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 485b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.zArray[span.end] = Z; \ 486b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.fogArray[span.end] = fog0; \ 487b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[0][span.end][0] = fragTexcoord[0]; \ 488b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[0][span.end][1] = fragTexcoord[1]; \ 489b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[0][span.end][2] = fragTexcoord[2]; \ 490b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.lambda[0][span.end] = 0.0; \ 491b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 492e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 493e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 494b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 495b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 496b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_MASK; 497b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul compute_stipple_mask(ctx, span.end, span.mask); 498e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 499e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 500b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 501b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul draw_wide_line(ctx, &span, xMajor); 502b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 503b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 504b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_texture_span(ctx, &span); 505b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 506e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 507e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 508e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 509e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 510e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, textured, any width, maybe stippled */ 511e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_textured_line( GLcontext *ctx, 512a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 513a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 514e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 515b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 516b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 517cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell 518b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 519e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 520b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, 0, 521b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA | SPAN_TEXTURE | SPAN_LAMBDA); 522b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul /*span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA | SPAN_TEXTURE | SPAN_LAMBDA);*/ 523b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 524b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 525e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 526e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 52795e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 528e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 529e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 530e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1 531b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 532b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 533b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 534b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 535b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.zArray[span.end] = Z; \ 536b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.fogArray[span.end] = fog0; \ 537b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][RCOMP] = FixedToInt(r0); \ 538b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][GCOMP] = FixedToInt(g0); \ 539b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][BCOMP] = FixedToInt(b0); \ 540b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][ACOMP] = FixedToInt(a0); \ 541b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[0][span.end][0] = fragTexcoord[0]; \ 542b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[0][span.end][1] = fragTexcoord[1]; \ 543b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[0][span.end][2] = fragTexcoord[2]; \ 544b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.lambda[0][span.end] = 0.0; \ 545b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 546e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 547e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 548b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 549b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 550b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_MASK; 551b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul compute_stipple_mask(ctx, span.end, span.mask); 552e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 553e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 554b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 555b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul draw_wide_line(ctx, &span, xMajor); 556b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 557b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 558b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_texture_span(ctx, &span); 559b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 560e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 561e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 562e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 563e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, multitextured, any width, maybe stippled, separate specular 564e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * color interpolation. 565e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 566e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_multitextured_line( GLcontext *ctx, 567a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 568a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 569e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 570b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 571b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 572b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLuint u; 573e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 574b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 575b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 576b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, 0, 577b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA | SPAN_SPEC | SPAN_TEXTURE | SPAN_LAMBDA); 578b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul /*span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA | SPAN_SPEC | SPAN_TEXTURE | SPAN_LAMBDA);*/ 579b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 580b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 581e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 582e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 58395e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 584e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 585e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_SPEC 1 586e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 587e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1 588b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 589b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 590b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 591b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 592b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.zArray[span.end] = Z; \ 593b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.fogArray[span.end] = fog0; \ 594b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][RCOMP] = FixedToInt(r0); \ 595b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][GCOMP] = FixedToInt(g0); \ 596b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][BCOMP] = FixedToInt(b0); \ 597b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.color.rgba[span.end][ACOMP] = FixedToInt(a0); \ 598b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specArray[span.end][RCOMP] = FixedToInt(sr0); \ 599b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specArray[span.end][GCOMP] = FixedToInt(sb0); \ 600b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specArray[span.end][BCOMP] = FixedToInt(sb0); \ 601b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { \ 602b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Texture.Unit[u]._ReallyEnabled) { \ 603b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[u][span.end][0] = fragTexcoord[u][0]; \ 604b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[u][span.end][1] = fragTexcoord[u][1]; \ 605b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[u][span.end][2] = fragTexcoord[u][2]; \ 606b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.lambda[u][span.end] = 0.0; \ 607b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } \ 608b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } \ 609b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 610e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 611e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 612b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 613b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 614b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_MASK; 615b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul compute_stipple_mask(ctx, span.end, span.mask); 616e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 617e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 618b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 619b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul draw_wide_line(ctx, &span, xMajor); 620b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 621b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 622b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_texture_span(ctx, &span); 623b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 624e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 625e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 626e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 627e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, multitextured, any width, maybe stippled, separate specular 628e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * color interpolation. 629e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 630e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_multitextured_line( GLcontext *ctx, 631a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 632a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 633e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 634b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 635b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul struct sw_span span; 636b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLuint u; 637b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 638b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 639b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 640b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, SPAN_RGBA | SPAN_SPEC, 641b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_TEXTURE | SPAN_LAMBDA); 642b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul /*span.arrayMask |= (SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_TEXTURE | SPAN_LAMBDA); 643b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul span.interpMask |= (SPAN_RGBA | SPAN_SPEC);*/ 644b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.red = ChanToFixed(vert1->color[0]); 645b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.green = ChanToFixed(vert1->color[1]); 646b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.blue = ChanToFixed(vert1->color[2]); 647b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.alpha = ChanToFixed(vert1->color[3]); 648b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.redStep = 0; 649b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.greenStep = 0; 650b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.blueStep = 0; 651b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.alphaStep = 0; 652b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specRed = ChanToFixed(vert1->specular[0]); 653b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specGreen = ChanToFixed(vert1->specular[1]); 654b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specBlue = ChanToFixed(vert1->specular[2]); 655b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specRedStep = 0; 656b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specGreenStep = 0; 657b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.specBlueStep = 0; 658b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 659b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 660e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 661e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 66295e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 663e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1 664b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 665b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 666b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.xArray[span.end] = X; \ 667b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.yArray[span.end] = Y; \ 668b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.zArray[span.end] = Z; \ 669b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.fogArray[span.end] = fog0; \ 670b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { \ 671b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Texture.Unit[u]._ReallyEnabled) { \ 672b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[u][span.end][0] = fragTexcoord[u][0]; \ 673b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[u][span.end][1] = fragTexcoord[u][1]; \ 674b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.texcoords[u][span.end][2] = fragTexcoord[u][2]; \ 675b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.lambda[u][span.end] = 0.0; \ 676b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } \ 677b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } \ 678b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.end++; \ 679e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 680e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 681b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 682b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 683b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul span.arrayMask |= SPAN_MASK; 684b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul compute_stipple_mask(ctx, span.end, span.mask); 685e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 686e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 687b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 688b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul draw_wide_line(ctx, &span, xMajor); 689b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 690b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 691b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_texture_span(ctx, &span); 692b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 693e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 694e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 695e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 69622144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughesvoid _swrast_add_spec_terms_line( GLcontext *ctx, 69746b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell const SWvertex *v0, 69846b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell const SWvertex *v1 ) 69946b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell{ 70046b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell SWvertex *ncv0 = (SWvertex *)v0; 70146b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell SWvertex *ncv1 = (SWvertex *)v1; 70246b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell GLchan c[2][4]; 70346b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( c[0], ncv0->color ); 70446b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( c[1], ncv1->color ); 70546b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell ACC_3V( ncv0->color, ncv0->specular ); 70646b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell ACC_3V( ncv1->color, ncv1->specular ); 70746b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell SWRAST_CONTEXT(ctx)->SpecLine( ctx, ncv0, ncv1 ); 70846b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( ncv0->color, c[0] ); 70946b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( ncv1->color, c[1] ); 71046b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell} 71146b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell 712e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 713e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#ifdef DEBUG 714ba41b8afb1b40b967cf5c0e604bbf09793eb8feeBrian Paulextern void 715ba41b8afb1b40b967cf5c0e604bbf09793eb8feeBrian Paul_mesa_print_line_function(GLcontext *ctx); /* silence compiler warning */ 716e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellvoid 717e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell_mesa_print_line_function(GLcontext *ctx) 718e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 719cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell SWcontext *swrast = SWRAST_CONTEXT(ctx); 720cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell 721e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("Line Func == "); 722cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell if (swrast->Line == flat_ci_line) 723e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_ci_line\n"); 724cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_rgba_line) 725e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_rgba_line\n"); 726cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_ci_line) 727e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_ci_line\n"); 728cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_rgba_line) 729e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_rgba_line\n"); 730cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_smooth_ci_line) 731e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_smooth_ci_line\n"); 732cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_flat_ci_line) 733e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_flat_ci_line\n"); 734cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_smooth_rgba_line) 735e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_smooth_rgba_line\n"); 736cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_flat_rgba_line) 737e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_flat_rgba_line\n"); 738cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_textured_line) 739e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_textured_line\n"); 740cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_textured_line) 741e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_textured_line\n"); 742cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_multitextured_line) 743e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_multitextured_line\n"); 744cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_multitextured_line) 745e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_multitextured_line\n"); 746e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 7474b7ccad6829d11c07f1ceac3b3d12f8aec9e640bBrian Paul printf("Driver func %p\n", (void *) swrast->Line); 748e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 749e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#endif 750e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 751e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 752e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 753233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#ifdef DEBUG 754233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 755233aafbb30594d0193b00705d0532be97060ebd1Brian Paul/* record the current line function name */ 756233aafbb30594d0193b00705d0532be97060ebd1Brian Paulstatic const char *lineFuncName = NULL; 757233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 758233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#define USE(lineFunc) \ 759233aafbb30594d0193b00705d0532be97060ebd1Brian Pauldo { \ 760233aafbb30594d0193b00705d0532be97060ebd1Brian Paul lineFuncName = #lineFunc; \ 761233aafbb30594d0193b00705d0532be97060ebd1Brian Paul /*printf("%s\n", lineFuncName);*/ \ 762233aafbb30594d0193b00705d0532be97060ebd1Brian Paul swrast->Line = lineFunc; \ 763233aafbb30594d0193b00705d0532be97060ebd1Brian Paul} while (0) 764233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 765233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#else 766233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 767c123a9b2edc5852cb50485f344219508254081a8Brian Paul#define USE(lineFunc) swrast->Line = lineFunc 768233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 769233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#endif 770233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 771233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 772233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 773e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* 774e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Determine which line drawing function to use given the current 775e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * rendering context. 776e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * 777e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Please update the summary flag _SWRAST_NEW_LINE if you add or remove 778e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * tests to this code. 779e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 780e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellvoid 781cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell_swrast_choose_line( GLcontext *ctx ) 782e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 783cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell SWcontext *swrast = SWRAST_CONTEXT(ctx); 784b6bcae5698df88f7730d40004ce7ce0462e97a20Brian Paul const GLboolean rgbmode = ctx->Visual.rgbMode; 785e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 786b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->RenderMode == GL_RENDER) { 787e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.SmoothFlag) { 788e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* antialiased lines */ 7890070d398d13759adc519f9bc764ffd39bc88890eBrian Paul _swrast_choose_aa_line_function(ctx); 7900070d398d13759adc519f9bc764ffd39bc88890eBrian Paul ASSERT(swrast->Triangle); 791e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 792cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (ctx->Texture._ReallyEnabled) { 79389dae684aa1d74b06a4f70cb76b33671d0cef9e6Keith Whitwell if (ctx->Texture._ReallyEnabled > TEXTURE0_ANY || 794ee403ff0ba272f5be539ddc921d3fffb3d250cc4Brian Paul (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR)) { 795e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* multi-texture and/or separate specular color */ 796b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Light.ShadeModel == GL_SMOOTH) 797233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_multitextured_line); 798e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 799233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_multitextured_line); 800e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 801e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 802b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Light.ShadeModel == GL_SMOOTH) { 803233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_textured_line); 804e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 805e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 806233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_textured_line); 807e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 808e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 809e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 810e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 811b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Light.ShadeModel == GL_SMOOTH) { 812b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Depth.Test || ctx->Fog.Enabled || ctx->Line.Width != 1.0 813b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul || ctx->Line.StippleFlag) { 814e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 815b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul USE(general_smooth_rgba_line); 816e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 817b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul USE(general_smooth_ci_line); 818e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 819e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 820e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 821233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_rgba_line); 822e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 823233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_ci_line); 824e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 825e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 826e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 827b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Depth.Test || ctx->Fog.Enabled || ctx->Line.Width != 1.0 828b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul || ctx->Line.StippleFlag) { 829e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 830b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul USE(general_flat_rgba_line); 831e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 832b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul USE(general_flat_ci_line); 833e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 834e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 835e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 836233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_rgba_line); 837e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 838233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_ci_line); 839e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 840e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 841e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 842e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 843b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else if (ctx->RenderMode == GL_FEEDBACK) { 844233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(_mesa_feedback_line); 845e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 846e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 847b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->RenderMode == GL_SELECT); 848233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(_mesa_select_line); 849e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 850e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 851e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /*_mesa_print_line_function(ctx);*/ 852e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 853