s_lines.c revision c123a9b2edc5852cb50485f344219508254081a8
1c123a9b2edc5852cb50485f344219508254081a8Brian Paul/* $Id: s_lines.c,v 1.21 2001/08/20 21:45:15 brianp Exp $ */ 2e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 3e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* 4e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Mesa 3-D graphics library 5e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Version: 3.5 622144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes * 7b6bcae5698df88f7730d40004ce7ce0462e97a20Brian Paul * Copyright (C) 1999-2001 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" 33e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_pb.h" 34cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#include "s_context.h" 35e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_depth.h" 36cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#include "s_lines.h" 37cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#include "s_feedback.h" 38e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 39e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 40e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 41e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/**********************************************************************/ 42e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/***** Rasterization *****/ 43e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/**********************************************************************/ 44e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 45e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 46e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* 47e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * There are 4 pairs (RGBA, CI) of line drawing functions: 48e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * 1. simple: width=1 and no special rasterization functions (fastest) 49e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * 2. flat: width=1, non-stippled, flat-shaded, any raster operations 50e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * 3. smooth: width=1, non-stippled, smooth-shaded, any raster operations 51e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * 4. general: any other kind of line (slowest) 52e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 53e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 54e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 55e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat, color index line */ 56e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_ci_line( GLcontext *ctx, 57a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 58a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 59e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 60cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 61cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell 62cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB_SET_INDEX( PB, vert0->index ); 63e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 64e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 65cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define PLOT(X,Y) PB_WRITE_PIXEL(PB, X, Y, 0, 0); 66e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 67e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 68e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 6908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_flush_pb(ctx); 70e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 71e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 72e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 73e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 74e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat, color index line with Z interpolation/testing */ 75e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_ci_z_line( GLcontext *ctx, 76a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 77a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 78e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 79cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 80cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB_SET_INDEX( PB, vert0->index ); 81e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 82e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 83e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 8495e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 85cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define PLOT(X,Y) PB_WRITE_PIXEL(PB, X, Y, Z, fog0); 86e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 87e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 88e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 8908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_flush_pb(ctx); 90e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 91e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 92e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 93e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 94e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, RGBA line */ 95e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_rgba_line( GLcontext *ctx, 96a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 97a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 98e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 998415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell const GLchan *color = vert1->color; 100cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 101cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB_SET_COLOR( PB, color[0], color[1], color[2], color[3] ); 102e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 103e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 104cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define PLOT(X,Y) PB_WRITE_PIXEL(PB, X, Y, 0, 0); 105e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 106e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 107e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 10808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_flush_pb(ctx); 109e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 110e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 111e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 112e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 113e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, RGBA line with Z interpolation/testing */ 114e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_rgba_z_line( GLcontext *ctx, 115a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 116a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 117e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 1188415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell const GLchan *color = vert1->color; 119cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 120cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB_SET_COLOR( PB, color[0], color[1], color[2], color[3] ); 121e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 122e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 123e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 12495e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 125cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define PLOT(X,Y) PB_WRITE_PIXEL(PB, X, Y, Z, fog0); 126e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 127e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 128e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 12908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_flush_pb(ctx); 130e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 131e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 132e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 133e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 134e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth shaded, color index line */ 135e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_ci_line( GLcontext *ctx, 136a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 137a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 138e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 139cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 140cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 141cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 142cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 143cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLuint *pbi = PB->index; 144e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 145cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 146e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 147e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 148e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1 149e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 150e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 151e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 152e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 153e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbi[count] = I; \ 154e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; 155e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 156e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 157e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 158cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 15908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_flush_pb(ctx); 160e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 161e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 162e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 163e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 164e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth shaded, color index line with Z interpolation/testing */ 165e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_ci_z_line( GLcontext *ctx, 166a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 167a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 168e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 169cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 170cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 171cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 172cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 173cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 174cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLuint *pbi = PB->index; 175e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 176cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 177e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 178e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 179e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 18095e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 181e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1 182e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 183e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 184e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 185e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 186e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 187e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbi[count] = I; \ 188e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; 189e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 190e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 191e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 192cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 19308836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_flush_pb(ctx); 194e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 195e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 196e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 197e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 198e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, RGBA line */ 199e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_rgba_line( GLcontext *ctx, 200a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 201a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 202e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 203cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 204cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 205cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 206cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 207cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLchan (*pbrgba)[4] = PB->rgba; 208e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 209cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 210e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 211e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 212e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 213e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 214e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 215e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 216e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 217e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 218e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 219e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 220e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 221e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 222e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; 223e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 224e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 225e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 226cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 22708836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_flush_pb(ctx); 228e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 229e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 230e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 231e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 232e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, RGBA line with Z interpolation/testing */ 233e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_rgba_z_line( GLcontext *ctx, 234a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 235a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 236e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 237cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 238cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 239cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 240cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 241cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 2421b3528fe635242f782fbcdde3ba74b5b7359a362Brian Paul GLfloat *pbfog = PB->fog; 243cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLchan (*pbrgba)[4] = PB->rgba; 244e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 245e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 246cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 247e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 248e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 249e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 25095e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 251e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 252e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 253e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 2540070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define PLOT(X,Y) \ 2550070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbx[count] = X; \ 2560070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pby[count] = Y; \ 2570070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbz[count] = Z; \ 258e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; \ 259e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 260e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 261e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 262e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 263e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; 264e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 265e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 266e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 267cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 26808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_flush_pb(ctx); 269e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 270e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 271e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 2720070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define CHECK_FULL(count) \ 2730070d398d13759adc519f9bc764ffd39bc88890eBrian Paul if (count >= PB_SIZE-MAX_WIDTH) { \ 2740070d398d13759adc519f9bc764ffd39bc88890eBrian Paul PB->count = count; \ 27508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_flush_pb(ctx); \ 2760070d398d13759adc519f9bc764ffd39bc88890eBrian Paul count = PB->count; \ 2770070d398d13759adc519f9bc764ffd39bc88890eBrian Paul } 278e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 279e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 280e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 281e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth shaded, color index, any width, maybe stippled */ 282e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_smooth_ci_line( GLcontext *ctx, 283a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 284a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 285e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 286cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 287cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 288cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 289cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 290cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 2911b3528fe635242f782fbcdde3ba74b5b7359a362Brian Paul GLfloat *pbfog = PB->fog; 292cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLuint *pbi = PB->index; 293e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 294cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 295e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 296e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.StippleFlag) { 297e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* stippled */ 298e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 299e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 30095e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 301e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1 302e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 303e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1 304e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 305e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 306e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 307e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 3080070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 309e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbi[count] = I; \ 310e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 311e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 312e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 313e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 314e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 315e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled */ 316e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.Width==2.0F) { 317e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* special case: unstippled and width=2 */ 318e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 319e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 32095e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 321e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1 3220070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define XMAJOR_PLOT(X,Y) \ 3230070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbx[count] = X; pbx[count+1] = X; \ 3240070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pby[count] = Y; pby[count+1] = Y+1; \ 3250070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbz[count] = Z; pbz[count+1] = Z; \ 326e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; pbfog[count+1] = fog0; \ 3270070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbi[count] = I; pbi[count+1] = I; \ 3280070d398d13759adc519f9bc764ffd39bc88890eBrian Paul count += 2; \ 329e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 3300070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define YMAJOR_PLOT(X,Y) \ 3310070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbx[count] = X; pbx[count+1] = X+1; \ 3320070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pby[count] = Y; pby[count+1] = Y; \ 3330070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbz[count] = Z; pbz[count+1] = Z; \ 334e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; pbfog[count+1] = fog0; \ 3350070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbi[count] = I; pbi[count+1] = I; \ 3360070d398d13759adc519f9bc764ffd39bc88890eBrian Paul count += 2; \ 337e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 338e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 339e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 340e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 341e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled, any width */ 342e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 343e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 34495e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 345e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1 346e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 347e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 348e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 349e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 350e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 351e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbi[count] = I; \ 352e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; \ 353e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 354e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 355e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 356e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 357e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 358e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 359cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 36008836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_flush_pb(ctx); 361e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 362e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 363e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 364e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat shaded, color index, any width, maybe stippled */ 365e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_flat_ci_line( GLcontext *ctx, 366a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 367a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 368e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 369cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 370e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell GLint count; 371cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 372cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 373cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 3741b3528fe635242f782fbcdde3ba74b5b7359a362Brian Paul GLfloat *pbfog = PB->fog; 375cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB_SET_INDEX( PB, vert0->index ); 376cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell count = PB->count; 377e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 378e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.StippleFlag) { 379e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* stippled, any width */ 380e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 381e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 38295e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 383e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 384e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1 385e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 386e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 387e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 388e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 3890070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 390e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 391e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 392e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 393e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 394e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 395e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled */ 396e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.Width==2.0F) { 397e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* special case: unstippled and width=2 */ 398e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 399e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 40095e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 4010070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define XMAJOR_PLOT(X,Y) \ 4020070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbx[count] = X; pbx[count+1] = X; \ 4030070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pby[count] = Y; pby[count+1] = Y+1; \ 4040070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbz[count] = Z; pbz[count+1] = Z; \ 405e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; pbfog[count+1] = fog0; \ 4060070d398d13759adc519f9bc764ffd39bc88890eBrian Paul count += 2; \ 407e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 4080070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define YMAJOR_PLOT(X,Y) \ 4090070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbx[count] = X; pbx[count+1] = X+1; \ 4100070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pby[count] = Y; pby[count+1] = Y; \ 4110070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbz[count] = Z; pbz[count+1] = Z; \ 412e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; pbfog[count+1] = fog0; \ 4130070d398d13759adc519f9bc764ffd39bc88890eBrian Paul count += 2; \ 414e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 415e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 416e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 417e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 418e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled, any width */ 419e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 420e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 42195e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 422e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 423e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 424e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 425e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 426e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 4270070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 428e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 429e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 430e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 431e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 432e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 433e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 434cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 43508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_flush_pb(ctx); 436e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 437e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 438e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 439e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 440e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_smooth_rgba_line( GLcontext *ctx, 441a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 442a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 443e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 444cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 445cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 446cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 447cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 448cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 4491b3528fe635242f782fbcdde3ba74b5b7359a362Brian Paul GLfloat *pbfog = PB->fog; 450cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLchan (*pbrgba)[4] = PB->rgba; 451e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 452cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 453e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 454e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.StippleFlag) { 455e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* stippled */ 456e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 457e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 45895e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 459e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 460e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 461e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 462e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1 463e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 464e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 465e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 466e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 4670070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 468e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 469e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 470e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 471e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 472e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 473e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 474e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 475e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 476e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 477e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled */ 478e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.Width==2.0F) { 479e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* special case: unstippled and width=2 */ 480e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 481e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 48295e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 483e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 484e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 485e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define XMAJOR_PLOT(X,Y) \ 486e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; pbx[count+1] = X; \ 487e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; pby[count+1] = Y+1; \ 488e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; pbz[count+1] = Z; \ 489e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; pbfog[count+1] = fog0; \ 490e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 491e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 492e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 493e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 494e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count+1][RCOMP] = FixedToInt(r0); \ 495e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count+1][GCOMP] = FixedToInt(g0); \ 496e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count+1][BCOMP] = FixedToInt(b0); \ 497e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count+1][ACOMP] = FixedToInt(a0); \ 498e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count += 2; \ 499e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 500e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define YMAJOR_PLOT(X,Y) \ 501e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; pbx[count+1] = X+1; \ 502e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; pby[count+1] = Y; \ 503e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; pbz[count+1] = Z; \ 504e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; pbfog[count+1] = fog0; \ 505e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 506e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 507e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 508e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 509e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count+1][RCOMP] = FixedToInt(r0); \ 510e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count+1][GCOMP] = FixedToInt(g0); \ 511e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count+1][BCOMP] = FixedToInt(b0); \ 512e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count+1][ACOMP] = FixedToInt(a0); \ 513e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count += 2; \ 514e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 515e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 516e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 517e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 518e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled, any width */ 519e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 520e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 52195e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 522e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 523e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 524e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 525e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 526e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 527e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 528e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 5290070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 530e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 531e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 532e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 533e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 534e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 535e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 536e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 537e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 538e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 539e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 540cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 54108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_flush_pb(ctx); 542e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 543e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 544e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 545e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_flat_rgba_line( GLcontext *ctx, 546a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 547a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 548e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 549cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 5508415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell const GLchan *color = vert1->color; 55157b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul GLuint count; 552cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB_SET_COLOR( PB, color[0], color[1], color[2], color[3] ); 553e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 554e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.StippleFlag) { 555e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* stippled */ 556e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 557e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 55895e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 559e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 560e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1 56157b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul#define PLOT(X,Y) \ 56257b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul PB_WRITE_PIXEL(PB, X, Y, Z, fog0); \ 56357b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul count = PB->count; \ 56457b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul CHECK_FULL(count); 565e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 566e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 567e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 568e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled */ 569e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.Width==2.0F) { 570e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* special case: unstippled and width=2 */ 571e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 572e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 57395e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 574cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define XMAJOR_PLOT(X,Y) PB_WRITE_PIXEL(PB, X, Y, Z, fog0); \ 575cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB_WRITE_PIXEL(PB, X, Y+1, Z, fog0); 576cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define YMAJOR_PLOT(X,Y) PB_WRITE_PIXEL(PB, X, Y, Z, fog0); \ 577cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB_WRITE_PIXEL(PB, X+1, Y, Z, fog0); 578e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 579e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 580e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 581e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled, any width */ 582e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 583e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 58495e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 585e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 58657b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul#define PLOT(X,Y) \ 58757b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul PB_WRITE_PIXEL(PB, X, Y, Z, fog0); \ 58857b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul count = PB->count; \ 58957b46ee6ea62f233b20d20aabedbacd814a15697Brian Paul CHECK_FULL(count); 590e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 591e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 592e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 593e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 59408836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_flush_pb(ctx); 595e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 596e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 597e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 598e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, textured, any width, maybe stippled */ 599e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_textured_line( GLcontext *ctx, 600a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 601a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 602e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 603cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 604e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell GLint count; 605cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 606cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 607cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 6081b3528fe635242f782fbcdde3ba74b5b7359a362Brian Paul GLfloat *pbfog = PB->fog; 609cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfloat *pbs = PB->s[0]; 610cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfloat *pbt = PB->t[0]; 611cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfloat *pbu = PB->u[0]; 6128415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell GLchan *color = (GLchan*) vert1->color; 613cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB_SET_COLOR( PB, color[0], color[1], color[2], color[3] ); 614cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell count = PB->count; 615e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 616e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.StippleFlag) { 617e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* stippled */ 618e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 619e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 62095e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 621e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1 622e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 623e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1 624e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 625e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell { \ 626e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 627e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 628e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 629e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; \ 630e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbs[count] = fragTexcoord[0];\ 631e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbt[count] = fragTexcoord[1];\ 632e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbu[count] = fragTexcoord[2];\ 633e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 634e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); \ 635e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 636e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 637e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 638e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 639e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled */ 640e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 641e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 64295e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 643e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1 644e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 645e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 646e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell { \ 647e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 648e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 649e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 650e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; \ 651e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbs[count] = fragTexcoord[0];\ 652e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbt[count] = fragTexcoord[1];\ 653e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbu[count] = fragTexcoord[2];\ 654e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 655e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); \ 656e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 657e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 658e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 659e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 660cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 66108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_flush_pb(ctx); 662e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 663e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 664e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 665e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 666e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, textured, any width, maybe stippled */ 667e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_textured_line( GLcontext *ctx, 668a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 669a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 670e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 671cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 672cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 673cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 674cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 675cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 6761b3528fe635242f782fbcdde3ba74b5b7359a362Brian Paul GLfloat *pbfog = PB->fog; 677cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfloat *pbs = PB->s[0]; 678cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfloat *pbt = PB->t[0]; 679cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfloat *pbu = PB->u[0]; 680cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLchan (*pbrgba)[4] = PB->rgba; 681cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell 682cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 683e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 684e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.StippleFlag) { 685e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* stippled */ 686e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 687e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 68895e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 689e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 690e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 691e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1 692e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 693e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1 694e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 695e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell { \ 696e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 697e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 698e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 6990070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 700e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbs[count] = fragTexcoord[0]; \ 701e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbt[count] = fragTexcoord[1]; \ 702e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbu[count] = fragTexcoord[2]; \ 703e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 704e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 705e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 706e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 707e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 708e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); \ 709e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 710e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 711e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 712e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 713e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled */ 714e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 715e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 71695e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 717e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 718e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 719e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1 720e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 721e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 722e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell { \ 723e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 724e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 725e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 7260070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 727e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbs[count] = fragTexcoord[0]; \ 728e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbt[count] = fragTexcoord[1]; \ 729e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbu[count] = fragTexcoord[2]; \ 730e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 731e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 732e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 733e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 734e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 735e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); \ 736e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 737e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 738e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 739e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 740cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 74108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_flush_pb(ctx); 742e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 743e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 744e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 745e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, multitextured, any width, maybe stippled, separate specular 746e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * color interpolation. 747e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 748e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_multitextured_line( GLcontext *ctx, 749a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 750a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 751e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 752cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 753cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 754cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 755cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 756cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 7571b3528fe635242f782fbcdde3ba74b5b7359a362Brian Paul GLfloat *pbfog = PB->fog; 758cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLchan (*pbrgba)[4] = PB->rgba; 759cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLchan (*pbspec)[3] = PB->spec; 760e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 761cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 762e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 763e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.StippleFlag) { 764e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* stippled */ 765e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 766e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 76795e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 768e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 769e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_SPEC 1 770e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 771e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1 772e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 773e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1 774e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 775e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell { \ 776e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell GLuint u; \ 777e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 778e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 779e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 7800070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 781e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 782e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 783e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 784e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 785e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][RCOMP] = FixedToInt(sr0); \ 786e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][GCOMP] = FixedToInt(sg0); \ 787e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][BCOMP] = FixedToInt(sb0); \ 788e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { \ 7890070d398d13759adc519f9bc764ffd39bc88890eBrian Paul if (ctx->Texture.Unit[u]._ReallyEnabled) { \ 7906b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul PB->s[u][count] = fragTexcoord[u][0]; \ 7916b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul PB->t[u][count] = fragTexcoord[u][1]; \ 7926b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul PB->u[u][count] = fragTexcoord[u][2]; \ 793e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } \ 794e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } \ 795e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 796e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); \ 797e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 798e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 799e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 800e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 801e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled */ 802e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 803e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 80495e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 805e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 806e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_SPEC 1 807e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 808e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1 809e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 810e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 811e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell { \ 812e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell GLuint u; \ 813e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 814e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 815e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 8160070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 817e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 818e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 819e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 820e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 821e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][RCOMP] = FixedToInt(sr0); \ 822e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][GCOMP] = FixedToInt(sg0); \ 823e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][BCOMP] = FixedToInt(sb0); \ 824e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { \ 8250070d398d13759adc519f9bc764ffd39bc88890eBrian Paul if (ctx->Texture.Unit[u]._ReallyEnabled) { \ 8266b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul PB->s[u][count] = fragTexcoord[u][0]; \ 8276b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul PB->t[u][count] = fragTexcoord[u][1]; \ 8286b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul PB->u[u][count] = fragTexcoord[u][2]; \ 829e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } \ 830e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } \ 831e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 832e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); \ 833e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 834e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 835e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 836e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 837cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 83808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_flush_pb(ctx); 839e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 840e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 841e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 842e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, multitextured, any width, maybe stippled, separate specular 843e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * color interpolation. 844e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 845e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_multitextured_line( GLcontext *ctx, 846a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 847a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 848e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 849cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 850cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 851cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 852cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 853cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 8541b3528fe635242f782fbcdde3ba74b5b7359a362Brian Paul GLfloat *pbfog = PB->fog; 855cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLchan (*pbrgba)[4] = PB->rgba; 856cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLchan (*pbspec)[3] = PB->spec; 8578415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell GLchan *color = (GLchan*) vert1->color; 8588415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell GLchan sRed = vert1->specular[0]; 8598415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell GLchan sGreen = vert1->specular[1]; 8608415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell GLchan sBlue = vert1->specular[2]; 861cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell 862cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 863e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 864e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.StippleFlag) { 865e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* stippled */ 866e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 867e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 86895e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 869e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 870e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1 871e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 872e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1 873e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 874e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell { \ 875e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell GLuint u; \ 876e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 877e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 878e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 8790070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 880e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = color[0]; \ 881e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = color[1]; \ 882e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = color[2]; \ 883e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = color[3]; \ 884e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][RCOMP] = sRed; \ 885e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][GCOMP] = sGreen; \ 886e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][BCOMP] = sBlue; \ 887e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { \ 8880070d398d13759adc519f9bc764ffd39bc88890eBrian Paul if (ctx->Texture.Unit[u]._ReallyEnabled) { \ 8896b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul PB->s[u][count] = fragTexcoord[u][0]; \ 8906b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul PB->t[u][count] = fragTexcoord[u][1]; \ 8916b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul PB->u[u][count] = fragTexcoord[u][2]; \ 892e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } \ 893e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } \ 894e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 895e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); \ 896e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 897e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 898e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 899e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 900e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled */ 901e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 902e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 90395e02a210ed339ad20b0c16284dcdcf9af2dc755Brian Paul#define INTERP_FOG 1 904e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 905e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1 906e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 907e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 908e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell { \ 909e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell GLuint u; \ 910e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 911e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 912e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 9130070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 914e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = color[0]; \ 915e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = color[1]; \ 916e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = color[2]; \ 917e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = color[3]; \ 918e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][RCOMP] = sRed; \ 919e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][GCOMP] = sGreen; \ 920e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][BCOMP] = sBlue; \ 921e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { \ 9220070d398d13759adc519f9bc764ffd39bc88890eBrian Paul if (ctx->Texture.Unit[u]._ReallyEnabled) { \ 9236b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul PB->s[u][count] = fragTexcoord[u][0]; \ 9246b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul PB->t[u][count] = fragTexcoord[u][1]; \ 9256b1e4ea5a54ea852a904440cd9fa50251f63f64cBrian Paul PB->u[u][count] = fragTexcoord[u][2]; \ 926e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } \ 927e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } \ 928e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 929e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); \ 930e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 931e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 932e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 933e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 934cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 93508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_flush_pb(ctx); 936e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 937e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 938e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 93922144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughesvoid _swrast_add_spec_terms_line( GLcontext *ctx, 94046b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell const SWvertex *v0, 94146b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell const SWvertex *v1 ) 94246b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell{ 94346b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell SWvertex *ncv0 = (SWvertex *)v0; 94446b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell SWvertex *ncv1 = (SWvertex *)v1; 94546b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell GLchan c[2][4]; 94646b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( c[0], ncv0->color ); 94746b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( c[1], ncv1->color ); 94846b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell ACC_3V( ncv0->color, ncv0->specular ); 94946b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell ACC_3V( ncv1->color, ncv1->specular ); 95046b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell SWRAST_CONTEXT(ctx)->SpecLine( ctx, ncv0, ncv1 ); 95146b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( ncv0->color, c[0] ); 95246b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( ncv1->color, c[1] ); 95346b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell} 95446b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell 955e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 956e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#ifdef DEBUG 957ba41b8afb1b40b967cf5c0e604bbf09793eb8feeBrian Paulextern void 958ba41b8afb1b40b967cf5c0e604bbf09793eb8feeBrian Paul_mesa_print_line_function(GLcontext *ctx); /* silence compiler warning */ 959e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellvoid 960e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell_mesa_print_line_function(GLcontext *ctx) 961e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 962cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell SWcontext *swrast = SWRAST_CONTEXT(ctx); 963cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell 964e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("Line Func == "); 965cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell if (swrast->Line == flat_ci_line) 966e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_ci_line\n"); 967cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_ci_z_line) 968e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_ci_z_line\n"); 969cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_rgba_line) 970e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_rgba_line\n"); 971cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_rgba_z_line) 972e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_rgba_z_line\n"); 973cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_ci_line) 974e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_ci_line\n"); 975cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_ci_z_line) 976e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_ci_z_line\n"); 977cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_rgba_line) 978e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_rgba_line\n"); 979cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_rgba_z_line) 980e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_rgba_z_line\n"); 981cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_smooth_ci_line) 982e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_smooth_ci_line\n"); 983cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_flat_ci_line) 984e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_flat_ci_line\n"); 985cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_smooth_rgba_line) 986e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_smooth_rgba_line\n"); 987cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_flat_rgba_line) 988e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_flat_rgba_line\n"); 989cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_textured_line) 990e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_textured_line\n"); 991cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_textured_line) 992e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_textured_line\n"); 993cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_multitextured_line) 994e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_multitextured_line\n"); 995cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_multitextured_line) 996e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_multitextured_line\n"); 997e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 998cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell printf("Driver func %p\n", swrast->Line); 999e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 1000e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#endif 1001e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 1002e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 1003e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 1004233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#ifdef DEBUG 1005233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 1006233aafbb30594d0193b00705d0532be97060ebd1Brian Paul/* record the current line function name */ 1007233aafbb30594d0193b00705d0532be97060ebd1Brian Paulstatic const char *lineFuncName = NULL; 1008233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 1009233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#define USE(lineFunc) \ 1010233aafbb30594d0193b00705d0532be97060ebd1Brian Pauldo { \ 1011233aafbb30594d0193b00705d0532be97060ebd1Brian Paul lineFuncName = #lineFunc; \ 1012233aafbb30594d0193b00705d0532be97060ebd1Brian Paul /*printf("%s\n", lineFuncName);*/ \ 1013233aafbb30594d0193b00705d0532be97060ebd1Brian Paul swrast->Line = lineFunc; \ 1014233aafbb30594d0193b00705d0532be97060ebd1Brian Paul} while (0) 1015233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 1016233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#else 1017233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 1018c123a9b2edc5852cb50485f344219508254081a8Brian Paul#define USE(lineFunc) swrast->Line = lineFunc 1019233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 1020233aafbb30594d0193b00705d0532be97060ebd1Brian Paul#endif 1021233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 1022233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 1023233aafbb30594d0193b00705d0532be97060ebd1Brian Paul 1024e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* 1025e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Determine which line drawing function to use given the current 1026e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * rendering context. 1027e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * 1028e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Please update the summary flag _SWRAST_NEW_LINE if you add or remove 1029e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * tests to this code. 1030e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 1031e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellvoid 1032cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell_swrast_choose_line( GLcontext *ctx ) 1033e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 1034cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell SWcontext *swrast = SWRAST_CONTEXT(ctx); 1035b6bcae5698df88f7730d40004ce7ce0462e97a20Brian Paul const GLboolean rgbmode = ctx->Visual.rgbMode; 1036e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 1037e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->RenderMode==GL_RENDER) { 1038e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.SmoothFlag) { 1039e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* antialiased lines */ 10400070d398d13759adc519f9bc764ffd39bc88890eBrian Paul _swrast_choose_aa_line_function(ctx); 10410070d398d13759adc519f9bc764ffd39bc88890eBrian Paul ASSERT(swrast->Triangle); 1042e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1043cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (ctx->Texture._ReallyEnabled) { 104489dae684aa1d74b06a4f70cb76b33671d0cef9e6Keith Whitwell if (ctx->Texture._ReallyEnabled > TEXTURE0_ANY || 1045ee403ff0ba272f5be539ddc921d3fffb3d250cc4Brian Paul (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR)) { 1046e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* multi-texture and/or separate specular color */ 1047e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Light.ShadeModel==GL_SMOOTH) 1048233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_multitextured_line); 1049e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 1050233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_multitextured_line); 1051e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1052e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 1053e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Light.ShadeModel==GL_SMOOTH) { 1054233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_textured_line); 1055e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1056e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 1057233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_textured_line); 1058e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1059e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1060e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 10610070d398d13759adc519f9bc764ffd39bc88890eBrian Paul else if (ctx->Line.Width!=1.0 || ctx->Line.StippleFlag) { 1062e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Light.ShadeModel==GL_SMOOTH) { 1063e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 1064233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(general_smooth_rgba_line); 1065e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 1066233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(general_smooth_ci_line); 1067e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1068e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 1069e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 1070233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(general_flat_rgba_line); 1071e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 1072233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(general_flat_ci_line); 1073e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1074e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1075e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 1076e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Light.ShadeModel==GL_SMOOTH) { 1077e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* Width==1, non-stippled, smooth-shaded */ 1078e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Depth.Test || ctx->Fog.Enabled) { 1079e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 1080233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_rgba_z_line); 1081e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 1082233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_ci_z_line); 1083e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1084e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 1085e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 1086233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_rgba_line); 1087e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 1088233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(smooth_ci_line); 1089e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1090e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1091e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 1092e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* Width==1, non-stippled, flat-shaded */ 1093e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Depth.Test || ctx->Fog.Enabled) { 1094e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 1095233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_rgba_z_line); 1096e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 1097233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_ci_z_line); 1098e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1099e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 1100e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 1101233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_rgba_line); 1102e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 1103233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(flat_ci_line); 1104e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1105e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1106e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1107e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1108e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else if (ctx->RenderMode==GL_FEEDBACK) { 1109233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(_mesa_feedback_line); 1110e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1111e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 1112e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* GL_SELECT mode */ 1113233aafbb30594d0193b00705d0532be97060ebd1Brian Paul USE(_mesa_select_line); 1114e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1115e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 1116e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /*_mesa_print_line_function(ctx);*/ 1117e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 1118