1 /* $XFree86: xc/lib/GL/mesa/src/drv/ffb/ffb_tritmp.h,v 1.2 2002/02/22 21:32:59 dawes Exp $ */
3 static void TAG(ffb_triangle
)( GLcontext
*ctx
,
8 ffbContextPtr fmesa
= FFB_CONTEXT(ctx
);
9 ffb_fbcPtr ffb
= fmesa
->regs
;
10 #if (IND & FFB_TRI_FLAT_BIT)
13 FFB_DELAYED_VIEWPORT_VARS
;
16 fprintf(stderr
, "FFB: ffb_triangle ["
17 #if (IND & FFB_TRI_CULL_BIT)
20 #if (IND & FFB_TRI_FLAT_BIT)
23 #if (IND & FFB_TRI_ALPHA_BIT)
29 #if (IND & FFB_TRI_CULL_BIT)
30 { /* NOTE: These are not viewport transformed yet. */
31 GLfloat ex
= v1
->x
- v0
->x
;
32 GLfloat ey
= v1
->y
- v0
->y
;
33 GLfloat fx
= v2
->x
- v0
->x
;
34 GLfloat fy
= v2
->y
- v0
->y
;
35 GLfloat c
= ex
*fy
-ey
*fx
;
38 if (c
* fmesa
->backface_sign
> fmesa
->ffb_zero
)
43 #if (IND & FFB_TRI_FLAT_BIT)
44 const_fg
= FFB_PACK_CONST_UBYTE_ARGB_COLOR( v2
->color
[0] );
46 fprintf(stderr
, "FFB_tri: const_fg %08x (B[%f] G[%f] R[%f])\n",
48 FFB_2_30_FIXED_TO_FLOAT(v2
->color
[0].blue
),
49 FFB_2_30_FIXED_TO_FLOAT(v2
->color
[0].green
),
50 FFB_2_30_FIXED_TO_FLOAT(v2
->color
[0].red
));
55 #if (IND & FFB_TRI_FLAT_BIT)
60 #if (IND & FFB_TRI_FLAT_BIT)
63 #if (IND & FFB_TRI_ALPHA_BIT)
71 #if !(IND & FFB_TRI_FLAT_BIT)
72 #if (IND & FFB_TRI_ALPHA_BIT)
73 ffb
->alpha
= FFB_GET_ALPHA(v0
);
75 ffb
->red
= FFB_GET_RED(v0
);
76 ffb
->green
= FFB_GET_GREEN(v0
);
77 ffb
->blue
= FFB_GET_BLUE(v0
);
79 ffb
->z
= FFB_GET_Z(v0
);
80 ffb
->ryf
= FFB_GET_Y(v0
);
81 ffb
->rxf
= FFB_GET_X(v0
);
84 #if !(IND & FFB_TRI_FLAT_BIT)
85 #if (IND & FFB_TRI_ALPHA_BIT)
86 ffb
->alpha
= FFB_GET_ALPHA(v1
);
88 ffb
->red
= FFB_GET_RED(v1
);
89 ffb
->green
= FFB_GET_GREEN(v1
);
90 ffb
->blue
= FFB_GET_BLUE(v1
);
92 ffb
->z
= FFB_GET_Z(v1
);
93 ffb
->y
= FFB_GET_Y(v1
);
94 ffb
->x
= FFB_GET_X(v1
);
97 #if !(IND & FFB_TRI_FLAT_BIT)
98 #if (IND & FFB_TRI_ALPHA_BIT)
99 ffb
->alpha
= FFB_GET_ALPHA(v2
);
101 ffb
->red
= FFB_GET_RED(v2
);
102 ffb
->green
= FFB_GET_GREEN(v2
);
103 ffb
->blue
= FFB_GET_BLUE(v2
);
105 ffb
->z
= FFB_GET_Z(v2
);
106 ffb
->y
= FFB_GET_Y(v2
);
107 ffb
->x
= FFB_GET_X(v2
);
109 fmesa
->ffbScreen
->rp_active
= 1;
113 static void TAG(ffb_quad
)(GLcontext
*ctx
,
119 ffbContextPtr fmesa
= FFB_CONTEXT(ctx
);
120 ffb_fbcPtr ffb
= fmesa
->regs
;
121 #if (IND & FFB_TRI_FLAT_BIT)
124 FFB_DELAYED_VIEWPORT_VARS
;
127 fprintf(stderr
, "FFB: ffb_quad ["
128 #if (IND & FFB_TRI_CULL_BIT)
131 #if (IND & FFB_TRI_FLAT_BIT)
134 #if (IND & FFB_TRI_ALPHA_BIT)
138 #endif /* TRI_DEBUG */
140 #if (IND & FFB_TRI_CULL_BIT)
141 { /* NOTE: These are not viewport transformed yet. */
142 GLfloat ex
= v2
->x
- v0
->x
;
143 GLfloat ey
= v2
->y
- v0
->y
;
144 GLfloat fx
= v3
->x
- v1
->x
;
145 GLfloat fy
= v3
->y
- v1
->y
;
146 GLfloat c
= ex
*fy
-ey
*fx
;
149 if (c
* fmesa
->backface_sign
> fmesa
->ffb_zero
)
154 #if (IND & FFB_TRI_FLAT_BIT)
155 const_fg
= FFB_PACK_CONST_UBYTE_ARGB_COLOR( v3
->color
[0] );
157 fprintf(stderr
, "FFB_quad: const_fg %08x (B[%f] G[%f] R[%f])\n",
159 FFB_2_30_FIXED_TO_FLOAT(v3
->color
[0].blue
),
160 FFB_2_30_FIXED_TO_FLOAT(v3
->color
[0].green
),
161 FFB_2_30_FIXED_TO_FLOAT(v3
->color
[0].red
));
166 #if (IND & FFB_TRI_FLAT_BIT)
170 #if (IND & FFB_TRI_ALPHA_BIT)
178 #if !(IND & FFB_TRI_FLAT_BIT)
179 #if (IND & FFB_TRI_ALPHA_BIT)
180 ffb
->alpha
= FFB_GET_ALPHA(v0
);
182 ffb
->red
= FFB_GET_RED(v0
);
183 ffb
->green
= FFB_GET_GREEN(v0
);
184 ffb
->blue
= FFB_GET_BLUE(v0
);
186 ffb
->z
= FFB_GET_Z(v0
);
187 ffb
->ryf
= FFB_GET_Y(v0
);
188 ffb
->rxf
= FFB_GET_X(v0
);
191 #if !(IND & FFB_TRI_FLAT_BIT)
192 #if (IND & FFB_TRI_ALPHA_BIT)
193 ffb
->alpha
= FFB_GET_ALPHA(v1
);
195 ffb
->red
= FFB_GET_RED(v1
);
196 ffb
->green
= FFB_GET_GREEN(v1
);
197 ffb
->blue
= FFB_GET_BLUE(v1
);
199 ffb
->z
= FFB_GET_Z(v1
);
200 ffb
->y
= FFB_GET_Y(v1
);
201 ffb
->x
= FFB_GET_X(v1
);
204 #if !(IND & FFB_TRI_FLAT_BIT)
205 #if (IND & FFB_TRI_ALPHA_BIT)
206 ffb
->alpha
= FFB_GET_ALPHA(v2
);
208 ffb
->red
= FFB_GET_RED(v2
);
209 ffb
->green
= FFB_GET_GREEN(v2
);
210 ffb
->blue
= FFB_GET_BLUE(v2
);
212 ffb
->z
= FFB_GET_Z(v2
);
213 ffb
->y
= FFB_GET_Y(v2
);
214 ffb
->x
= FFB_GET_X(v2
);
217 #if !(IND & FFB_TRI_FLAT_BIT)
218 #if (IND & FFB_TRI_ALPHA_BIT)
219 ffb
->alpha
= FFB_GET_ALPHA(v3
);
221 ffb
->red
= FFB_GET_RED(v3
);
222 ffb
->green
= FFB_GET_GREEN(v3
);
223 ffb
->blue
= FFB_GET_BLUE(v3
);
225 ffb
->z
= FFB_GET_Z(v3
);
226 ffb
->dmyf
= FFB_GET_Y(v3
);
227 ffb
->dmxf
= FFB_GET_X(v3
);
229 fmesa
->ffbScreen
->rp_active
= 1;
232 static void TAG(ffb_init
)(void)
234 ffb_tri_tab
[IND
] = TAG(ffb_triangle
);
235 ffb_quad_tab
[IND
] = TAG(ffb_quad
);