s_lines.c revision 77df88727cb0a423dd5cb41498c2302d9df4fce7
177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul/* $Id: s_lines.c,v 1.31 2002/08/07 00:45:07 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) { 8077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLint *y = span->array->y; 81a670c1280b78e6da3b298b61f623e4c733c6be94Brian Paul GLuint i; 82a670c1280b78e6da3b298b61f623e4c733c6be94Brian Paul GLint w; 83b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (w = 0; w < width; w++) { 84b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (w == 0) { 85b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (i = 0; i < span->end; i++) 8677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y[i] -= start; 87b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 88b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 89b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (i = 0; i < span->end; i++) 9077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y[i]++; 91b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 92b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if ((span->interpMask | span->arrayMask) & SPAN_TEXTURE) 93b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_texture_span(ctx, span); 94b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else if ((span->interpMask | span->arrayMask) & SPAN_RGBA) 95b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_rgba_span(ctx, span); 96b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else 97b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_index_span(ctx, span); 98b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 99b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 100b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 10177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLint *x = span->array->x; 102a670c1280b78e6da3b298b61f623e4c733c6be94Brian Paul GLuint i; 103a670c1280b78e6da3b298b61f623e4c733c6be94Brian Paul GLint w; 104b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (w = 0; w < width; w++) { 105b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (w == 0) { 106b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (i = 0; i < span->end; i++) 10777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x[i] -= start; 108b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 109b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 110b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (i = 0; i < span->end; i++) 11177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x[i]++; 112b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 113b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if ((span->interpMask | span->arrayMask) & SPAN_TEXTURE) 114b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_texture_span(ctx, span); 115b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else if ((span->interpMask | span->arrayMask) & SPAN_RGBA) 116b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_rgba_span(ctx, span); 117b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else 118b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul _mesa_write_index_span(ctx, span); 119b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 120b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 121e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 122e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 123e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 124e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 125b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul/**********************************************************************/ 126b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul/***** Rasterization *****/ 127b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul/**********************************************************************/ 128b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 129b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 130b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul/* Flat, color index line */ 131b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paulstatic void flat_ci_line( GLcontext *ctx, 132b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul const SWvertex *vert0, 133b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul const SWvertex *vert1 ) 134e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 13577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLint *x, *y; 13677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul struct sw_span span; 137b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 138b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 139b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(!ctx->Line.StippleFlag); 140b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Line.Width == 1.0F); 141b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 142b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, SPAN_INDEX, SPAN_XY); 14377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.index = IntToFixed(vert1->index); 14477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.indexStep = 0; 14577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x = span.array->x; 14677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y = span.array->y; 147e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 148e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 14977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul#define PLOT(X,Y) \ 15077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul { \ 15177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x[span.end] = X; \ 15277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y[span.end] = Y; \ 15377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.end++; \ 154b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 155e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 156e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 157e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 15877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul _mesa_write_index_span(ctx, &span); 159e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 160e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 161e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 162e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, RGBA line */ 163e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_rgba_line( GLcontext *ctx, 164a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 165a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 166e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 16777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul struct sw_span span; 16877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLint *x, *y; 169b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 170b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 171b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(!ctx->Line.StippleFlag); 172b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Line.Width == 1.0F); 173b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 174b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, SPAN_RGBA, SPAN_XY); 17577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.red = ChanToFixed(vert1->color[0]); 17677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.green = ChanToFixed(vert1->color[1]); 17777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.blue = ChanToFixed(vert1->color[2]); 17877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.alpha = ChanToFixed(vert1->color[3]); 17977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.redStep = 0; 18077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.greenStep = 0; 18177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.blueStep = 0; 18277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.alphaStep = 0; 18377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x = span.array->x; 18477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y = span.array->y; 185e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 186e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 18777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul#define PLOT(X,Y) \ 18877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul { \ 18977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x[span.end] = X; \ 19077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y[span.end] = Y; \ 19177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.end++; \ 192b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 193e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 194e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 195e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 19677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul _mesa_write_rgba_span(ctx, &span); 197e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 198e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 199e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 200e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth shaded, color index line */ 201e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_ci_line( GLcontext *ctx, 202a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 203a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 204e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 20577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul struct sw_span span; 20677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLint *x, *y; 20777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLuint *index; 208e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 209b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 210b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(!ctx->Line.StippleFlag); 211b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Line.Width == 1.0F); 212e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 213b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, 0, SPAN_XY | SPAN_INDEX); 21477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x = span.array->x; 21577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y = span.array->y; 21677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul index = span.array->index; 217e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 218e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 219e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1 22077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul#define PLOT(X,Y) \ 22177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul { \ 22277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x[span.end] = X; \ 22377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y[span.end] = Y; \ 22477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul index[span.end] = I; \ 22577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.end++; \ 226b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 227e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 228e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 229e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 23077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul _mesa_write_index_span(ctx, &span); 231e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 232e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 233e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 234e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, RGBA line */ 235e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_rgba_line( GLcontext *ctx, 236a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 237a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 238e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 23977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul struct sw_span span; 24077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLint *x, *y; 24177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLchan (*rgba)[4]; 242e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 243b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 244b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(!ctx->Line.StippleFlag); 245b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Line.Width == 1.0F); 246e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 247b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, 0, SPAN_XY | SPAN_RGBA); 24877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x = span.array->x; 24977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y = span.array->y; 25077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul rgba = span.array->rgba; 251e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 252e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 253e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 254e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 25577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul#define PLOT(X,Y) \ 25677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul { \ 25777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x[span.end] = X; \ 25877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y[span.end] = Y; \ 25977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul rgba[span.end][RCOMP] = FixedToInt(r0); \ 26077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul rgba[span.end][GCOMP] = FixedToInt(g0); \ 26177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul rgba[span.end][BCOMP] = FixedToInt(b0); \ 26277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul rgba[span.end][ACOMP] = FixedToInt(a0); \ 26377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.end++; \ 264b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 265e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 266e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 267e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 26877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul _mesa_write_rgba_span(ctx, &span); 269e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 270e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 271e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 272e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth shaded, color index, any width, maybe stippled */ 273e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_smooth_ci_line( GLcontext *ctx, 274a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 275a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 276e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 277b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 27877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul struct sw_span span; 27977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLint *x, *y; 28077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLdepth *z; 28177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLfloat *fog; 28277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLuint *index; 283e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 284b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 285e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 286b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, 0, 287b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_INDEX); 28877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x = span.array->x; 28977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y = span.array->y; 29077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul z = span.array->z; 29177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul fog = span.array->fog; 29277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul index = span.array->index; 293b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 294b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 295e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 296e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 29795e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 298e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1 29977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul#define PLOT(X,Y) \ 30077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul { \ 30177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x[span.end] = X; \ 30277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y[span.end] = Y; \ 30377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul z[span.end] = Z; \ 30477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul fog[span.end] = fog0; \ 30577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul index[span.end] = I; \ 30677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.end++; \ 307e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 308e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 309b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 310b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 31177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.arrayMask |= SPAN_MASK; 31277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul compute_stipple_mask(ctx, span.end, span.array->mask); 313e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 314e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 315b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 31677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul draw_wide_line(ctx, &span, xMajor); 317b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 318b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 31977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul _mesa_write_index_span(ctx, &span); 320b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 321e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 322e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 323e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 324e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat shaded, color index, any width, maybe stippled */ 325e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_flat_ci_line( GLcontext *ctx, 326a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 327a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 328e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 329b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 33077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul struct sw_span span; 33177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLint *x, *y; 33277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLdepth *z; 33377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLfloat *fog; 334e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 335b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 336b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 337b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, SPAN_INDEX, 338b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul SPAN_XY | SPAN_Z | SPAN_FOG); 33977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.index = IntToFixed(vert1->index); 34077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.indexStep = 0; 34177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x = span.array->x; 34277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y = span.array->y; 34377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul z = span.array->z; 34477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul fog = span.array->fog; 345b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 346b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 347e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 348e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 34995e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 35077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul#define PLOT(X,Y) \ 35177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul { \ 35277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x[span.end] = X; \ 35377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y[span.end] = Y; \ 35477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul z[span.end] = Z; \ 35577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul fog[span.end] = fog0; \ 35677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.end++; \ 357e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 358e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 359b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 360b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 36177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.arrayMask |= SPAN_MASK; 36277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul compute_stipple_mask(ctx, span.end, span.array->mask); 363e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 364e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 365b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 36677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul draw_wide_line(ctx, &span, xMajor); 367b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 368b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 36977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul _mesa_write_index_span(ctx, &span); 370b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 371e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 372e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 373e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 374e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 375e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_smooth_rgba_line( GLcontext *ctx, 376a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 377a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 378e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 379b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 38077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul struct sw_span span; 38177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLint *x, *y; 38277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLdepth *z; 38377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLchan (*rgba)[4]; 38477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLfloat *fog; 385e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 386b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 387e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 388b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, 0, 389b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA); 39077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x = span.array->x; 39177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y = span.array->y; 39277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul z = span.array->z; 39377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul rgba = span.array->rgba; 39477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul fog = span.array->fog; 395b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 396b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 397e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 398e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 39995e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 400e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 401e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 40277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul#define PLOT(X,Y) \ 40377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul { \ 40477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x[span.end] = X; \ 40577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y[span.end] = Y; \ 40677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul z[span.end] = Z; \ 40777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul rgba[span.end][RCOMP] = FixedToInt(r0); \ 40877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul rgba[span.end][GCOMP] = FixedToInt(g0); \ 40977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul rgba[span.end][BCOMP] = FixedToInt(b0); \ 41077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul rgba[span.end][ACOMP] = FixedToInt(a0); \ 41177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul fog[span.end] = fog0; \ 41277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.end++; \ 413e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 414e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 415b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 416b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 41777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.arrayMask |= SPAN_MASK; 41877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul compute_stipple_mask(ctx, span.end, span.array->mask); 419e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 420e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 421b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 42277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul draw_wide_line(ctx, &span, xMajor); 423b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 424b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 42577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul _mesa_write_rgba_span(ctx, &span); 426b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 427e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 428e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 429e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 430e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_flat_rgba_line( GLcontext *ctx, 431a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 432a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 433e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 434b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 43577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul struct sw_span span; 43677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLint *x, *y; 43777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLdepth *z; 43877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul GLfloat *fog; 439b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 440b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 441b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 442b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, SPAN_RGBA, 443b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul SPAN_XY | SPAN_Z | SPAN_FOG); 44477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.red = ChanToFixed(vert1->color[0]); 44577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.green = ChanToFixed(vert1->color[1]); 44677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.blue = ChanToFixed(vert1->color[2]); 44777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.alpha = ChanToFixed(vert1->color[3]); 44877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.redStep = 0; 44977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.greenStep = 0; 45077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.blueStep = 0; 45177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.alphaStep = 0; 45277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x = span.array->x; 45377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y = span.array->y; 45477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul z = span.array->z; 45577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul fog = span.array->fog; 456b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 457b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 458e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 459e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 46095e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 46177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul#define PLOT(X,Y) \ 46277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul { \ 46377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul x[span.end] = X; \ 46477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul y[span.end] = Y; \ 46577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul z[span.end] = Z; \ 46677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul fog[span.end] = fog0; \ 46777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.end++; \ 468e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 469e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 470b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 471b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 47277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.arrayMask |= SPAN_MASK; 47377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul compute_stipple_mask(ctx, span.end, span.array->mask); 474e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 475e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 476b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 47777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul draw_wide_line(ctx, &span, xMajor); 478b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 479b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 48077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul _mesa_write_rgba_span(ctx, &span); 481b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 482e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 483e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 484e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 485e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, textured, any width, maybe stippled */ 486e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_textured_line( GLcontext *ctx, 487a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 488a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 489e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 490b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 49177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul struct sw_span span; 492b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 493b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 494b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 495b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, SPAN_RGBA | SPAN_SPEC, 496bf80e1ed620836e2ca0dd3f7d2d4cb187d17563dBrian Paul SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_TEXTURE | SPAN_LAMBDA); 49777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.red = ChanToFixed(vert1->color[0]); 49877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.green = ChanToFixed(vert1->color[1]); 49977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.blue = ChanToFixed(vert1->color[2]); 50077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.alpha = ChanToFixed(vert1->color[3]); 50177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.redStep = 0; 50277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.greenStep = 0; 50377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.blueStep = 0; 50477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.alphaStep = 0; 50577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.specRed = ChanToFixed(vert1->specular[0]); 50677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.specGreen = ChanToFixed(vert1->specular[1]); 50777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.specBlue = ChanToFixed(vert1->specular[2]); 50877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.specRedStep = 0; 50977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.specGreenStep = 0; 51077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.specBlueStep = 0; 511b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 512b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 513e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 514e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 51595e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 516e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1 517b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 518b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 51977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->x[span.end] = X; \ 52077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->y[span.end] = Y; \ 52177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->z[span.end] = Z; \ 52277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->fog[span.end] = fog0; \ 52377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->texcoords[0][span.end][0] = fragTexcoord[0]; \ 52477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->texcoords[0][span.end][1] = fragTexcoord[1]; \ 52577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->texcoords[0][span.end][2] = fragTexcoord[2]; \ 52677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->lambda[0][span.end] = 0.0; \ 52777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.end++; \ 528e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 529e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 530b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 531b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 53277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.arrayMask |= SPAN_MASK; 53377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul compute_stipple_mask(ctx, span.end, span.array->mask); 534e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 535e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 536b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 53777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul draw_wide_line(ctx, &span, xMajor); 538b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 539b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 54077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul _mesa_write_texture_span(ctx, &span); 541b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 542e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 543e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 544e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 545e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 546e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, textured, any width, maybe stippled */ 547e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_textured_line( GLcontext *ctx, 548a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 549a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 550e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 551b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 55277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul struct sw_span span; 553cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell 554b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 555e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 556b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, 0, 557b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA | SPAN_TEXTURE | SPAN_LAMBDA); 558b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 559b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 560e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 561e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 56295e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 563e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 564e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 565e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1 566b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 567b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 56877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->x[span.end] = X; \ 56977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->y[span.end] = Y; \ 57077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->z[span.end] = Z; \ 57177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->fog[span.end] = fog0; \ 57277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->rgba[span.end][RCOMP] = FixedToInt(r0); \ 57377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->rgba[span.end][GCOMP] = FixedToInt(g0); \ 57477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->rgba[span.end][BCOMP] = FixedToInt(b0); \ 57577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->rgba[span.end][ACOMP] = FixedToInt(a0); \ 57677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->texcoords[0][span.end][0] = fragTexcoord[0]; \ 57777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->texcoords[0][span.end][1] = fragTexcoord[1]; \ 57877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->texcoords[0][span.end][2] = fragTexcoord[2]; \ 57977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->lambda[0][span.end] = 0.0; \ 58077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.end++; \ 581e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 582e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 583b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 584b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 58577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.arrayMask |= SPAN_MASK; 58677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul compute_stipple_mask(ctx, span.end, span.array->mask); 587e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 588e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 589b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 59077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul draw_wide_line(ctx, &span, xMajor); 591b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 592b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 59377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul _mesa_write_texture_span(ctx, &span); 594b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 595e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 596e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 597e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 598e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, multitextured, any width, maybe stippled, separate specular 599e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * color interpolation. 600e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 601e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_multitextured_line( GLcontext *ctx, 602a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 603a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 604e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 605b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 60677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul struct sw_span span; 607b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLuint u; 608e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 609b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_SMOOTH); 610b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 611b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, 0, 612b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_RGBA | SPAN_SPEC | SPAN_TEXTURE | SPAN_LAMBDA); 613b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 614b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 615e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 616e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 61795e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 618e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 619e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_SPEC 1 620e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 621e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1 622b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 623b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 62477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->x[span.end] = X; \ 62577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->y[span.end] = Y; \ 62677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->z[span.end] = Z; \ 62777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->fog[span.end] = fog0; \ 62877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->rgba[span.end][RCOMP] = FixedToInt(r0); \ 62977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->rgba[span.end][GCOMP] = FixedToInt(g0); \ 63077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->rgba[span.end][BCOMP] = FixedToInt(b0); \ 63177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->rgba[span.end][ACOMP] = FixedToInt(a0); \ 63277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->spec[span.end][RCOMP] = FixedToInt(sr0); \ 63377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->spec[span.end][GCOMP] = FixedToInt(sg0); \ 63477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->spec[span.end][BCOMP] = FixedToInt(sb0); \ 635b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { \ 636b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Texture.Unit[u]._ReallyEnabled) { \ 63777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->texcoords[u][span.end][0] = fragTexcoord[u][0]; \ 63877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->texcoords[u][span.end][1] = fragTexcoord[u][1]; \ 63977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->texcoords[u][span.end][2] = fragTexcoord[u][2]; \ 64077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->lambda[u][span.end] = 0.0; \ 641b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } \ 642b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } \ 64377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.end++; \ 644e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 645e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 646b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 647b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 64877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.arrayMask |= SPAN_MASK; 64977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul compute_stipple_mask(ctx, span.end, span.array->mask); 650e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 651e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 652b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 65377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul draw_wide_line(ctx, &span, xMajor); 654b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 655b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 65677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul _mesa_write_texture_span(ctx, &span); 657b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 658e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 659e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 660e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 661e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, multitextured, any width, maybe stippled, separate specular 662e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * color interpolation. 663e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 664e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_multitextured_line( GLcontext *ctx, 665a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 666a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 667e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 668b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLboolean xMajor = GL_FALSE; 66977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul struct sw_span span; 670b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul GLuint u; 671b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 672b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->Light.ShadeModel == GL_FLAT); 673b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 674b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul INIT_SPAN(span, GL_LINE, 0, SPAN_RGBA | SPAN_SPEC, 675b7f5e92f1749ce4601a758f66ddc64959f11742bBrian Paul SPAN_XY | SPAN_Z | SPAN_FOG | SPAN_TEXTURE | SPAN_LAMBDA); 67677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.red = ChanToFixed(vert1->color[0]); 67777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.green = ChanToFixed(vert1->color[1]); 67877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.blue = ChanToFixed(vert1->color[2]); 67977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.alpha = ChanToFixed(vert1->color[3]); 68077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.redStep = 0; 68177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.greenStep = 0; 68277df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.blueStep = 0; 68377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.alphaStep = 0; 68477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.specRed = ChanToFixed(vert1->specular[0]); 68577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.specGreen = ChanToFixed(vert1->specular[1]); 68677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.specBlue = ChanToFixed(vert1->specular[2]); 68777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.specRedStep = 0; 68877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.specGreenStep = 0; 68977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.specBlueStep = 0; 690b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 691b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define SET_XMAJOR 1 692e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 693e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 69495e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 695e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1 696b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul#define PLOT(X,Y) \ 697b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul { \ 69877df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->x[span.end] = X; \ 69977df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->y[span.end] = Y; \ 70077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->z[span.end] = Z; \ 70177df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->fog[span.end] = fog0; \ 702b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { \ 703b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Texture.Unit[u]._ReallyEnabled) { \ 70477df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->texcoords[u][span.end][0] = fragTexcoord[u][0]; \ 70577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->texcoords[u][span.end][1] = fragTexcoord[u][1]; \ 70677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->texcoords[u][span.end][2] = fragTexcoord[u][2]; \ 70777df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.array->lambda[u][span.end] = 0.0; \ 708b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } \ 709b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } \ 71077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.end++; \ 711e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 712e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 713b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul 714b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.StippleFlag) { 71577df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul span.arrayMask |= SPAN_MASK; 71677df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul compute_stipple_mask(ctx, span.end, span.array->mask); 717e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 718e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 719b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Line.Width > 1.0) { 72077df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul draw_wide_line(ctx, &span, xMajor); 721b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 722b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else { 72377df88727cb0a423dd5cb41498c2302d9df4fce7Brian Paul _mesa_write_texture_span(ctx, &span); 724b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul } 725e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 726e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 727e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 72822144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughesvoid _swrast_add_spec_terms_line( GLcontext *ctx, 72946b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell const SWvertex *v0, 73046b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell const SWvertex *v1 ) 73146b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell{ 73246b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell SWvertex *ncv0 = (SWvertex *)v0; 73346b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell SWvertex *ncv1 = (SWvertex *)v1; 73446b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell GLchan c[2][4]; 73546b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( c[0], ncv0->color ); 73646b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( c[1], ncv1->color ); 73746b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell ACC_3V( ncv0->color, ncv0->specular ); 73846b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell ACC_3V( ncv1->color, ncv1->specular ); 73946b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell SWRAST_CONTEXT(ctx)->SpecLine( ctx, ncv0, ncv1 ); 74046b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( ncv0->color, c[0] ); 74146b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( ncv1->color, c[1] ); 74246b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell} 74346b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell 744e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 745e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#ifdef DEBUG 746ba41b8afb1b40b967cf5c0e604bbf09793eb8feeBrian Paulextern void 747ba41b8afb1b40b967cf5c0e604bbf09793eb8feeBrian Paul_mesa_print_line_function(GLcontext *ctx); /* silence compiler warning */ 748e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellvoid 749e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell_mesa_print_line_function(GLcontext *ctx) 750e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 751cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell SWcontext *swrast = SWRAST_CONTEXT(ctx); 752cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell 753e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("Line Func == "); 754cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell if (swrast->Line == flat_ci_line) 755e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_ci_line\n"); 756cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_rgba_line) 757e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_rgba_line\n"); 758cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_ci_line) 759e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_ci_line\n"); 760cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_rgba_line) 761e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_rgba_line\n"); 762cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_smooth_ci_line) 763e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_smooth_ci_line\n"); 764cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_flat_ci_line) 765e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_flat_ci_line\n"); 766cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_smooth_rgba_line) 767e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_smooth_rgba_line\n"); 768cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_flat_rgba_line) 769e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_flat_rgba_line\n"); 770cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_textured_line) 771e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_textured_line\n"); 772cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_textured_line) 773e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_textured_line\n"); 774cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_multitextured_line) 775e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_multitextured_line\n"); 776cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_multitextured_line) 777e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_multitextured_line\n"); 778e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 7794b7ccad6829d11c07f1ceac3b3d12f8aec9e640bBrian Paul printf("Driver func %p\n", (void *) swrast->Line); 780e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 781e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#endif 782e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 783e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 784e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 785233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#ifdef DEBUG 786233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 787233aafbb30594d0193b00705d0532be97060ebd1Brian Paul/* record the current line function name */ 788233aafbb30594d0193b00705d0532be97060ebd1Brian Paulstatic const char *lineFuncName = NULL; 789233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 790233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#define USE(lineFunc) \ 791233aafbb30594d0193b00705d0532be97060ebd1Brian Pauldo { \ 792233aafbb30594d0193b00705d0532be97060ebd1Brian Paul lineFuncName = #lineFunc; \ 793233aafbb30594d0193b00705d0532be97060ebd1Brian Paul /*printf("%s\n", lineFuncName);*/ \ 794233aafbb30594d0193b00705d0532be97060ebd1Brian Paul swrast->Line = lineFunc; \ 795233aafbb30594d0193b00705d0532be97060ebd1Brian Paul} while (0) 796233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 797233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#else 798233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 799c123a9b2edc5852cb50485f344219508254081a8Brian Paul#define USE(lineFunc) swrast->Line = lineFunc 800233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 801233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#endif 802233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 803233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 804233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 805e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* 806e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Determine which line drawing function to use given the current 807e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * rendering context. 808e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * 809e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Please update the summary flag _SWRAST_NEW_LINE if you add or remove 810e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * tests to this code. 811e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 812e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellvoid 813cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell_swrast_choose_line( GLcontext *ctx ) 814e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 815cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell SWcontext *swrast = SWRAST_CONTEXT(ctx); 816b6bcae5698df88f7730d40004ce7ce0462e97a20Brian Paul const GLboolean rgbmode = ctx->Visual.rgbMode; 817e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 818b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->RenderMode == GL_RENDER) { 819e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.SmoothFlag) { 820e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* antialiased lines */ 8210070d398d13759adc519f9bc764ffd39bc88890eBrian Paul _swrast_choose_aa_line_function(ctx); 8220070d398d13759adc519f9bc764ffd39bc88890eBrian Paul ASSERT(swrast->Triangle); 823e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 8248afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul else if (ctx->Texture._EnabledUnits) { 8258afe7de8deaf3c9613fd68b344de8c52b02b1879Brian Paul if (ctx->Texture._EnabledUnits > 1 || 826ee403ff0ba272f5be539ddc921d3fffb3d250cc4Brian Paul (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR)) { 827e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* multi-texture and/or separate specular color */ 828b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Light.ShadeModel == GL_SMOOTH) 829233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_multitextured_line); 830e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 831233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_multitextured_line); 832e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 833e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 834b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Light.ShadeModel == GL_SMOOTH) { 835233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_textured_line); 836e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 837e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 838233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_textured_line); 839e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 840e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 841e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 842e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 843b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Light.ShadeModel == GL_SMOOTH) { 844b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Depth.Test || ctx->Fog.Enabled || ctx->Line.Width != 1.0 845b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul || ctx->Line.StippleFlag) { 846e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 847b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul USE(general_smooth_rgba_line); 848e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 849b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul USE(general_smooth_ci_line); 850e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 851e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 852e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 853233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_rgba_line); 854e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 855233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_ci_line); 856e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 857e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 858e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 859b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul if (ctx->Depth.Test || ctx->Fog.Enabled || ctx->Line.Width != 1.0 860b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul || ctx->Line.StippleFlag) { 861e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 862b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul USE(general_flat_rgba_line); 863e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 864b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul USE(general_flat_ci_line); 865e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 866e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 867e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 868233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_rgba_line); 869e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 870233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_ci_line); 871e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 872e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 873e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 874e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 875b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul else if (ctx->RenderMode == GL_FEEDBACK) { 876233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(_mesa_feedback_line); 877e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 878e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 879b37a084357dd08573b86d6d8c5ba43d65bdc1bd7Brian Paul ASSERT(ctx->RenderMode == GL_SELECT); 880233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(_mesa_select_line); 881e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 882e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 883e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /*_mesa_print_line_function(ctx);*/ 884e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 885