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