s_lines.c revision 46b0988c673b28e072fd0cbf477632a9ab6f9f18
146b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell/* $Id: s_lines.c,v 1.11 2001/02/16 18:14:41 keithw Exp $ */ 2e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 3e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* 4e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Mesa 3-D graphics library 5e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Version: 3.5 6e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * 7b6bcae5698df88f7730d40004ce7ce0462e97a20Brian Paul * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. 8e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * 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: 15e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * 16e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * The above copyright notice and this permission notice shall be included 17e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * in all copies or substantial portions of the Software. 18e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * 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 56e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat, color index line */ 57e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_ci_line( GLcontext *ctx, 58a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 59a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 60e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 61cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 62cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell 63cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB_SET_INDEX( PB, vert0->index ); 64e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 65e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 66cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define PLOT(X,Y) PB_WRITE_PIXEL(PB, X, Y, 0, 0); 67e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 68e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 69e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 70e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell gl_flush_pb(ctx); 71e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 72e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 73e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 74e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 75e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat, color index line with Z interpolation/testing */ 76e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_ci_z_line( GLcontext *ctx, 77a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 78a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 79e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 80cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 81cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB_SET_INDEX( PB, vert0->index ); 82e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 83e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 84e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 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 89e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell gl_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 108e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell gl_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 124cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define PLOT(X,Y) PB_WRITE_PIXEL(PB, X, Y, Z, fog0); 125e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 126e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 127e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 128e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell gl_flush_pb(ctx); 129e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 130e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 131e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 132e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 133e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth shaded, color index line */ 134e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_ci_line( GLcontext *ctx, 135a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 136a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 137e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 138cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 139cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 140cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 141cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 142cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLuint *pbi = PB->index; 143e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 144cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 145e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 146e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 147e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1 148e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 149e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 150e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 151e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 152e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbi[count] = I; \ 153e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; 154e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 155e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 156e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 157cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 158e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell gl_flush_pb(ctx); 159e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 160e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 161e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 162e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 163e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth shaded, color index line with Z interpolation/testing */ 164e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_ci_z_line( GLcontext *ctx, 165a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 166a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 167e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 168cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 169cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 170cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 171cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 172cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 173cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLuint *pbi = PB->index; 174e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 175cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 176e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 177e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 178e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 179e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1 180e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 181e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 182e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 183e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 184e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 185e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbi[count] = I; \ 186e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; 187e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 188e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 189e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 190cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 191e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell gl_flush_pb(ctx); 192e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 193e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 194e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 195e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 196e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, RGBA line */ 197e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_rgba_line( GLcontext *ctx, 198a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 199a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 200e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 201cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 202cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 203cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 204cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 205cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLchan (*pbrgba)[4] = PB->rgba; 206e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 207cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 208e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 209e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 210e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 211e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 212e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 213e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 214e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 215e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 216e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 217e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 218e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 219e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 220e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; 221e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 222e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 223e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 224cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 225e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell gl_flush_pb(ctx); 226e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 227e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 228e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 229e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 230e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, RGBA line with Z interpolation/testing */ 231e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_rgba_z_line( GLcontext *ctx, 232a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 233a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 234e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 235cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 236cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 237cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 238cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 239cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 240cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfixed *pbfog = PB->fog; 241cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLchan (*pbrgba)[4] = PB->rgba; 242e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 243e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 244cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 245e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 246e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 247e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 248e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 249e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 250e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 2510070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define PLOT(X,Y) \ 2520070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbx[count] = X; \ 2530070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pby[count] = Y; \ 2540070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbz[count] = Z; \ 255e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; \ 256e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 257e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 258e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 259e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 260e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; 261e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 262e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 263e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 264cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 265e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell gl_flush_pb(ctx); 266e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 267e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 268e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 2690070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define CHECK_FULL(count) \ 2700070d398d13759adc519f9bc764ffd39bc88890eBrian Paul if (count >= PB_SIZE-MAX_WIDTH) { \ 2710070d398d13759adc519f9bc764ffd39bc88890eBrian Paul PB->count = count; \ 2720070d398d13759adc519f9bc764ffd39bc88890eBrian Paul gl_flush_pb(ctx); \ 2730070d398d13759adc519f9bc764ffd39bc88890eBrian Paul count = PB->count; \ 2740070d398d13759adc519f9bc764ffd39bc88890eBrian Paul } 275e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 276e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 277e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 278e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth shaded, color index, any width, maybe stippled */ 279e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_smooth_ci_line( GLcontext *ctx, 280a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 281a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 282e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 283cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 284cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 285cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 286cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 287cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 288cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfixed *pbfog = PB->fog; 289cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLuint *pbi = PB->index; 290e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 291cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 292e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 293e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.StippleFlag) { 294e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* stippled */ 295e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 296e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 297e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1 298e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 299e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1 300e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 301e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 302e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 303e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 3040070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 305e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbi[count] = I; \ 306e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 307e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 308e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 309e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 310e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 311e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled */ 312e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.Width==2.0F) { 313e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* special case: unstippled and width=2 */ 314e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 315e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 316e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1 3170070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define XMAJOR_PLOT(X,Y) \ 3180070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbx[count] = X; pbx[count+1] = X; \ 3190070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pby[count] = Y; pby[count+1] = Y+1; \ 3200070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbz[count] = Z; pbz[count+1] = Z; \ 321e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; pbfog[count+1] = fog0; \ 3220070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbi[count] = I; pbi[count+1] = I; \ 3230070d398d13759adc519f9bc764ffd39bc88890eBrian Paul count += 2; \ 324e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 3250070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define YMAJOR_PLOT(X,Y) \ 3260070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbx[count] = X; pbx[count+1] = X+1; \ 3270070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pby[count] = Y; pby[count+1] = Y; \ 3280070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbz[count] = Z; pbz[count+1] = Z; \ 329e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; pbfog[count+1] = fog0; \ 3300070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbi[count] = I; pbi[count+1] = I; \ 3310070d398d13759adc519f9bc764ffd39bc88890eBrian Paul count += 2; \ 332e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 333e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 334e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 335e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 336e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled, any width */ 337e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 338e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 339e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_INDEX 1 340e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 341e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 342e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 343e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 344e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 345e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbi[count] = I; \ 346e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; \ 347e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 348e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 349e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 350e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 351e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 352e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 353cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 354e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell gl_flush_pb(ctx); 355e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 356e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 357e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 358e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat shaded, color index, any width, maybe stippled */ 359e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_flat_ci_line( GLcontext *ctx, 360a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 361a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 362e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 363cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 364e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell GLint count; 365cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 366cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 367cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 368cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfixed *pbfog = PB->fog; 369cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB_SET_INDEX( PB, vert0->index ); 370cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell count = PB->count; 371e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 372e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.StippleFlag) { 373e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* stippled, any width */ 374e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 375e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 376e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 377e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1 378e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 379e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 380e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 381e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 3820070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 383e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 384e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 385e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 386e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 387e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 388e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled */ 389e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.Width==2.0F) { 390e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* special case: unstippled and width=2 */ 391e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 392e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 3930070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define XMAJOR_PLOT(X,Y) \ 3940070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbx[count] = X; pbx[count+1] = X; \ 3950070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pby[count] = Y; pby[count+1] = Y+1; \ 3960070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbz[count] = Z; pbz[count+1] = Z; \ 397e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; pbfog[count+1] = fog0; \ 3980070d398d13759adc519f9bc764ffd39bc88890eBrian Paul count += 2; \ 399e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 4000070d398d13759adc519f9bc764ffd39bc88890eBrian Paul#define YMAJOR_PLOT(X,Y) \ 4010070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbx[count] = X; pbx[count+1] = X+1; \ 4020070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pby[count] = Y; pby[count+1] = Y; \ 4030070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbz[count] = Z; pbz[count+1] = Z; \ 404e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; pbfog[count+1] = fog0; \ 4050070d398d13759adc519f9bc764ffd39bc88890eBrian Paul count += 2; \ 406e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 407e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 408e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 409e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 410e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled, any width */ 411e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 412e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 413e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 414e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 415e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 416e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 417e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 4180070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 419e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 420e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 421e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 422e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 423e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 424e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 425cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 426e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell gl_flush_pb(ctx); 427e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 428e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 429e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 430e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 431e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_smooth_rgba_line( GLcontext *ctx, 432a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 433a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 434e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 435cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 436cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 437cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 438cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 439cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 440cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfixed *pbfog = PB->fog; 441cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLchan (*pbrgba)[4] = PB->rgba; 442e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 443cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 444e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 445e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.StippleFlag) { 446e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* stippled */ 447e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 448e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 449e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 450e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 451e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 452e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1 453e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 454e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 455e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 456e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 4570070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 458e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 459e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 460e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 461e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 462e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 463e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 464e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 465e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 466e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 467e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled */ 468e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.Width==2.0F) { 469e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* special case: unstippled and width=2 */ 470e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 471e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 472e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 473e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 474e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define XMAJOR_PLOT(X,Y) \ 475e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; pbx[count+1] = X; \ 476e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; pby[count+1] = Y+1; \ 477e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; pbz[count+1] = Z; \ 478e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; pbfog[count+1] = fog0; \ 479e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 480e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 481e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 482e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 483e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count+1][RCOMP] = FixedToInt(r0); \ 484e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count+1][GCOMP] = FixedToInt(g0); \ 485e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count+1][BCOMP] = FixedToInt(b0); \ 486e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count+1][ACOMP] = FixedToInt(a0); \ 487e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count += 2; \ 488e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 489e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define YMAJOR_PLOT(X,Y) \ 490e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; pbx[count+1] = X+1; \ 491e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; pby[count+1] = Y; \ 492e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; pbz[count+1] = Z; \ 493e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; pbfog[count+1] = fog0; \ 494e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 495e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 496e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 497e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 498e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count+1][RCOMP] = FixedToInt(r0); \ 499e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count+1][GCOMP] = FixedToInt(g0); \ 500e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count+1][BCOMP] = FixedToInt(b0); \ 501e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count+1][ACOMP] = FixedToInt(a0); \ 502e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count += 2; \ 503e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 504e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 505e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 506e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 507e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled, any width */ 508e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 509e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 510e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 511e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 512e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 513e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 514e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 515e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 516e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 5170070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 518e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 519e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 520e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 521e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 522e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 523e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); 524e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 525e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 526e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 527e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 528cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 529e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell gl_flush_pb(ctx); 530e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 531e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 532e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 533e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void general_flat_rgba_line( GLcontext *ctx, 534a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 535a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 536e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 537cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 5388415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell const GLchan *color = vert1->color; 539cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB_SET_COLOR( PB, color[0], color[1], color[2], color[3] ); 540e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 541e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.StippleFlag) { 542e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* stippled */ 543e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 544e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 545e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 546e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1 547cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define PLOT(X,Y) PB_WRITE_PIXEL(PB, X, Y, Z, fog0); 548e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 549e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 550e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 551e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled */ 552e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.Width==2.0F) { 553e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* special case: unstippled and width=2 */ 554e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 555e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 556cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define XMAJOR_PLOT(X,Y) PB_WRITE_PIXEL(PB, X, Y, Z, fog0); \ 557cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB_WRITE_PIXEL(PB, X, Y+1, Z, fog0); 558cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define YMAJOR_PLOT(X,Y) PB_WRITE_PIXEL(PB, X, Y, Z, fog0); \ 559cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB_WRITE_PIXEL(PB, X+1, Y, Z, fog0); 560e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 561e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 562e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 563e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled, any width */ 564e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 565e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 566e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 567cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell#define PLOT(X,Y) PB_WRITE_PIXEL(PB, X, Y, Z, fog0); 568e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 569e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 570e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 571e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 572e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell gl_flush_pb(ctx); 573e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 574e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 575e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 576e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, textured, any width, maybe stippled */ 577e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_textured_line( GLcontext *ctx, 578a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 579a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 580e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 581cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 582e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell GLint count; 583cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 584cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 585cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 586cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfixed *pbfog = PB->fog; 587cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfloat *pbs = PB->s[0]; 588cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfloat *pbt = PB->t[0]; 589cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfloat *pbu = PB->u[0]; 5908415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell GLchan *color = (GLchan*) vert1->color; 591cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB_SET_COLOR( PB, color[0], color[1], color[2], color[3] ); 592cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell count = PB->count; 593e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 594e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.StippleFlag) { 595e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* stippled */ 596e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 597e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 598e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1 599e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 600e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1 601e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 602e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell { \ 603e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 604e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 605e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 606e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; \ 607e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbs[count] = fragTexcoord[0];\ 608e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbt[count] = fragTexcoord[1];\ 609e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbu[count] = fragTexcoord[2];\ 610e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 611e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); \ 612e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 613e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 614e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 615e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 616e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled */ 617e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 618e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 619e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1 620e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 621e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 622e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell { \ 623e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 624e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 625e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 626e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbfog[count] = fog0; \ 627e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbs[count] = fragTexcoord[0];\ 628e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbt[count] = fragTexcoord[1];\ 629e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbu[count] = fragTexcoord[2];\ 630e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 631e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); \ 632e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 633e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 634e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 635e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 636cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 637e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell gl_flush_pb(ctx); 638e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 639e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 640e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 641e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 642e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, textured, any width, maybe stippled */ 643e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_textured_line( GLcontext *ctx, 644a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 645a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 646e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 647cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 648cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 649cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 650cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 651cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 652cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfixed *pbfog = PB->fog; 653cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfloat *pbs = PB->s[0]; 654cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfloat *pbt = PB->t[0]; 655cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfloat *pbu = PB->u[0]; 656cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLchan (*pbrgba)[4] = PB->rgba; 657cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell 658cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 659e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 660e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.StippleFlag) { 661e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* stippled */ 662e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 663e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 664e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 665e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 666e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1 667e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 668e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1 669e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 670e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell { \ 671e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 672e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 673e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 6740070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 675e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbs[count] = fragTexcoord[0]; \ 676e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbt[count] = fragTexcoord[1]; \ 677e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbu[count] = fragTexcoord[2]; \ 678e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 679e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 680e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 681e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 682e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 683e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); \ 684e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 685e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 686e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 687e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 688e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled */ 689e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 690e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 691e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 692e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 693e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_TEX 1 694e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 695e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 696e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell { \ 697e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 698e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 699e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 7000070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 701e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbs[count] = fragTexcoord[0]; \ 702e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbt[count] = fragTexcoord[1]; \ 703e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbu[count] = fragTexcoord[2]; \ 704e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 705e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 706e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 707e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 708e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 709e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); \ 710e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 711e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 712e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 713e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 714cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 715e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell gl_flush_pb(ctx); 716e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 717e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 718e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 719e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Smooth-shaded, multitextured, any width, maybe stippled, separate specular 720e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * color interpolation. 721e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 722e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void smooth_multitextured_line( GLcontext *ctx, 723a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 724a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 725e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 726cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 727cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 728cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 729cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 730cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 731cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfixed *pbfog = PB->fog; 732cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLchan (*pbrgba)[4] = PB->rgba; 733cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLchan (*pbspec)[3] = PB->spec; 734e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 735cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 736e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 737e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.StippleFlag) { 738e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* stippled */ 739e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 740e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 741e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 742e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_SPEC 1 743e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 744e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1 745e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 746e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1 747e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 748e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell { \ 749e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell GLuint u; \ 750e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 751e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 752e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 7530070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 754e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 755e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 756e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 757e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 758e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][RCOMP] = FixedToInt(sr0); \ 759e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][GCOMP] = FixedToInt(sg0); \ 760e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][BCOMP] = FixedToInt(sb0); \ 761e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { \ 7620070d398d13759adc519f9bc764ffd39bc88890eBrian Paul if (ctx->Texture.Unit[u]._ReallyEnabled) { \ 763cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->s[u][0] = fragTexcoord[u][0]; \ 764cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->s[u][1] = fragTexcoord[u][1]; \ 765cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->s[u][2] = fragTexcoord[u][2]; \ 766cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->s[u][3] = fragTexcoord[u][3]; \ 767e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } \ 768e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } \ 769e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 770e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); \ 771e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 772e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 773e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 774e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 775e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled */ 776e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 777e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 778e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_RGB 1 779e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_SPEC 1 780e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 781e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1 782e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 783e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 784e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell { \ 785e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell GLuint u; \ 786e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 787e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 788e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 7890070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 790e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = FixedToInt(r0); \ 791e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = FixedToInt(g0); \ 792e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = FixedToInt(b0); \ 793e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = FixedToInt(a0); \ 794e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][RCOMP] = FixedToInt(sr0); \ 795e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][GCOMP] = FixedToInt(sg0); \ 796e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][BCOMP] = FixedToInt(sb0); \ 797e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { \ 7980070d398d13759adc519f9bc764ffd39bc88890eBrian Paul if (ctx->Texture.Unit[u]._ReallyEnabled) { \ 799cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->s[u][0] = fragTexcoord[u][0]; \ 800cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->s[u][1] = fragTexcoord[u][1]; \ 801cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->s[u][2] = fragTexcoord[u][2]; \ 802cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->s[u][3] = fragTexcoord[u][3]; \ 803e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } \ 804e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } \ 805e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 806e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); \ 807e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 808e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 809e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 810e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 811cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 812e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell gl_flush_pb(ctx); 813e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 814e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 815e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 816e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* Flat-shaded, multitextured, any width, maybe stippled, separate specular 817e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * color interpolation. 818e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 819e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellstatic void flat_multitextured_line( GLcontext *ctx, 820a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert0, 821a852378a6289d154364dde440f89a39bbfc33e2dBrian Paul const SWvertex *vert1 ) 822e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 823cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell struct pixel_buffer *PB = SWRAST_CONTEXT(ctx)->PB; 824cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint count = PB->count; 825cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pbx = PB->x; 826cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLint *pby = PB->y; 827cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLdepth *pbz = PB->z; 828cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLfixed *pbfog = PB->fog; 829cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLchan (*pbrgba)[4] = PB->rgba; 830cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell GLchan (*pbspec)[3] = PB->spec; 8318415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell GLchan *color = (GLchan*) vert1->color; 8328415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell GLchan sRed = vert1->specular[0]; 8338415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell GLchan sGreen = vert1->specular[1]; 8348415686ea22bc9165720590261581ff997f2eb7aKeith Whitwell GLchan sBlue = vert1->specular[2]; 835cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell 836cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->mono = GL_FALSE; 837e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 838e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.StippleFlag) { 839e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* stippled */ 840e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 841e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 842e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 843e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1 844e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 845e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define STIPPLE 1 846e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 847e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell { \ 848e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell GLuint u; \ 849e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 850e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 851e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 8520070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 853e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = color[0]; \ 854e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = color[1]; \ 855e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = color[2]; \ 856e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = color[3]; \ 857e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][RCOMP] = sRed; \ 858e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][GCOMP] = sGreen; \ 859e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][BCOMP] = sBlue; \ 860e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { \ 8610070d398d13759adc519f9bc764ffd39bc88890eBrian Paul if (ctx->Texture.Unit[u]._ReallyEnabled) { \ 862cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->s[u][0] = fragTexcoord[u][0]; \ 863cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->s[u][1] = fragTexcoord[u][1]; \ 864cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->s[u][2] = fragTexcoord[u][2]; \ 865cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->s[u][3] = fragTexcoord[u][3]; \ 866e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } \ 867e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } \ 868e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 869e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); \ 870e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 871e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 872e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 873e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 874e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* unstippled */ 875e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_XY 1 876e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_Z 1 877e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_ALPHA 1 878e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define INTERP_MULTITEX 1 879e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define WIDE 1 880e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#define PLOT(X,Y) \ 881e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell { \ 882e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell GLuint u; \ 883e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbx[count] = X; \ 884e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pby[count] = Y; \ 885e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbz[count] = Z; \ 8860070d398d13759adc519f9bc764ffd39bc88890eBrian Paul pbfog[count] = fog0; \ 887e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][RCOMP] = color[0]; \ 888e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][GCOMP] = color[1]; \ 889e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][BCOMP] = color[2]; \ 890e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbrgba[count][ACOMP] = color[3]; \ 891e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][RCOMP] = sRed; \ 892e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][GCOMP] = sGreen; \ 893e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell pbspec[count][BCOMP] = sBlue; \ 894e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { \ 8950070d398d13759adc519f9bc764ffd39bc88890eBrian Paul if (ctx->Texture.Unit[u]._ReallyEnabled) { \ 896cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->s[u][0] = fragTexcoord[u][0]; \ 897cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->s[u][1] = fragTexcoord[u][1]; \ 898cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->s[u][2] = fragTexcoord[u][2]; \ 899cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->s[u][3] = fragTexcoord[u][3]; \ 900e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } \ 901e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } \ 902e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell count++; \ 903e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell CHECK_FULL(count); \ 904e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 905e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#include "s_linetemp.h" 906e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 907e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 908cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell PB->count = count; 909e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell gl_flush_pb(ctx); 910e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 911e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 912e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 91346b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwellvoid _swrast_add_spec_terms_line( GLcontext *ctx, 91446b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell const SWvertex *v0, 91546b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell const SWvertex *v1 ) 91646b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell{ 91746b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell SWvertex *ncv0 = (SWvertex *)v0; 91846b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell SWvertex *ncv1 = (SWvertex *)v1; 91946b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell GLchan c[2][4]; 92046b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( c[0], ncv0->color ); 92146b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( c[1], ncv1->color ); 92246b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell ACC_3V( ncv0->color, ncv0->specular ); 92346b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell ACC_3V( ncv1->color, ncv1->specular ); 92446b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell SWRAST_CONTEXT(ctx)->SpecLine( ctx, ncv0, ncv1 ); 92546b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( ncv0->color, c[0] ); 92646b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell COPY_CHAN4( ncv1->color, c[1] ); 92746b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell} 92846b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell 929e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 930e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#ifdef DEBUG 931ba41b8afb1b40b967cf5c0e604bbf09793eb8feeBrian Paulextern void 932ba41b8afb1b40b967cf5c0e604bbf09793eb8feeBrian Paul_mesa_print_line_function(GLcontext *ctx); /* silence compiler warning */ 933e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellvoid 934e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell_mesa_print_line_function(GLcontext *ctx) 935e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 936cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell SWcontext *swrast = SWRAST_CONTEXT(ctx); 937cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell 938e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("Line Func == "); 939cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell if (swrast->Line == flat_ci_line) 940e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_ci_line\n"); 941cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_ci_z_line) 942e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_ci_z_line\n"); 943cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_rgba_line) 944e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_rgba_line\n"); 945cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_rgba_z_line) 946e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_rgba_z_line\n"); 947cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_ci_line) 948e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_ci_line\n"); 949cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_ci_z_line) 950e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_ci_z_line\n"); 951cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_rgba_line) 952e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_rgba_line\n"); 953cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_rgba_z_line) 954e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_rgba_z_line\n"); 955cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_smooth_ci_line) 956e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_smooth_ci_line\n"); 957cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_flat_ci_line) 958e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_flat_ci_line\n"); 959cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_smooth_rgba_line) 960e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_smooth_rgba_line\n"); 961cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == general_flat_rgba_line) 962e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("general_flat_rgba_line\n"); 963cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_textured_line) 964e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_textured_line\n"); 965cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_textured_line) 966e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_textured_line\n"); 967cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == smooth_multitextured_line) 968e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("smooth_multitextured_line\n"); 969cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (swrast->Line == flat_multitextured_line) 970e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell printf("flat_multitextured_line\n"); 971e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 972cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell printf("Driver func %p\n", swrast->Line); 973e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 974e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell#endif 975e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 976e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 977e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 978e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell/* 979e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Determine which line drawing function to use given the current 980e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * rendering context. 981e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * 982e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * Please update the summary flag _SWRAST_NEW_LINE if you add or remove 983e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell * tests to this code. 984e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell */ 985e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwellvoid 986cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell_swrast_choose_line( GLcontext *ctx ) 987e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell{ 988cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell SWcontext *swrast = SWRAST_CONTEXT(ctx); 989b6bcae5698df88f7730d40004ce7ce0462e97a20Brian Paul const GLboolean rgbmode = ctx->Visual.rgbMode; 990e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 991e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->RenderMode==GL_RENDER) { 992e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Line.SmoothFlag) { 993e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* antialiased lines */ 9940070d398d13759adc519f9bc764ffd39bc88890eBrian Paul _swrast_choose_aa_line_function(ctx); 9950070d398d13759adc519f9bc764ffd39bc88890eBrian Paul ASSERT(swrast->Triangle); 996e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 997cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell else if (ctx->Texture._ReallyEnabled) { 99846b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell if (swrast->_MultiTextureEnabled || 99946b0988c673b28e072fd0cbf477632a9ab6f9f18Keith Whitwell (ctx->_TriangleCaps & DD_SEPERATE_SPECULAR)) { 1000e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* multi-texture and/or separate specular color */ 1001e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Light.ShadeModel==GL_SMOOTH) 1002cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = smooth_multitextured_line; 1003e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 1004cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = flat_multitextured_line; 1005e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1006e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 1007e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Light.ShadeModel==GL_SMOOTH) { 1008cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = smooth_textured_line; 1009e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1010e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 1011cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = flat_textured_line; 1012e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1013e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1014e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 10150070d398d13759adc519f9bc764ffd39bc88890eBrian Paul else if (ctx->Line.Width!=1.0 || ctx->Line.StippleFlag) { 1016e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Light.ShadeModel==GL_SMOOTH) { 1017e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 1018cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = general_smooth_rgba_line; 1019e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 1020cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = general_smooth_ci_line; 1021e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1022e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 1023e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 1024cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = general_flat_rgba_line; 1025e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 1026cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = general_flat_ci_line; 1027e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1028e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1029e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 1030e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Light.ShadeModel==GL_SMOOTH) { 1031e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* Width==1, non-stippled, smooth-shaded */ 1032e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Depth.Test || ctx->Fog.Enabled) { 1033e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 1034cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = smooth_rgba_z_line; 1035e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 1036cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = smooth_ci_z_line; 1037e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1038e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 1039e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 1040cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = smooth_rgba_line; 1041e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 1042cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = smooth_ci_line; 1043e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1044e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1045e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 1046e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* Width==1, non-stippled, flat-shaded */ 1047e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (ctx->Depth.Test || ctx->Fog.Enabled) { 1048e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 1049cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = flat_rgba_z_line; 1050e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 1051cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = flat_ci_z_line; 1052e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1053e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 1054e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell if (rgbmode) 1055cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = flat_rgba_line; 1056e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else 1057cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = flat_ci_line; 1058e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1059e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1060e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1061e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1062e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else if (ctx->RenderMode==GL_FEEDBACK) { 1063cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = gl_feedback_line; 1064e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1065e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell else { 1066e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /* GL_SELECT mode */ 1067cd03ed4f54444d96e4e47cdb118a3dfd94d92bb0Keith Whitwell swrast->Line = gl_select_line; 1068e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell } 1069e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell 1070e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell /*_mesa_print_line_function(ctx);*/ 1071e3a051e0538a605551f4d58294c94f5eb00ed07fKeith Whitwell} 1072