2 static void TAG(ffb_triangle
)( GLcontext
*ctx
,
7 ffbContextPtr fmesa
= FFB_CONTEXT(ctx
);
8 ffb_fbcPtr ffb
= fmesa
->regs
;
9 #if (IND & FFB_TRI_FLAT_BIT)
12 FFB_DELAYED_VIEWPORT_VARS
;
15 fprintf(stderr
, "FFB: ffb_triangle ["
16 #if (IND & FFB_TRI_CULL_BIT)
19 #if (IND & FFB_TRI_FLAT_BIT)
22 #if (IND & FFB_TRI_ALPHA_BIT)
28 #if (IND & FFB_TRI_CULL_BIT)
29 { /* NOTE: These are not viewport transformed yet. */
30 GLfloat ex
= v1
->x
- v0
->x
;
31 GLfloat ey
= v1
->y
- v0
->y
;
32 GLfloat fx
= v2
->x
- v0
->x
;
33 GLfloat fy
= v2
->y
- v0
->y
;
34 GLfloat c
= ex
*fy
-ey
*fx
;
37 if (c
* fmesa
->backface_sign
> fmesa
->ffb_zero
)
42 #if (IND & FFB_TRI_FLAT_BIT)
43 const_fg
= FFB_PACK_CONST_UBYTE_ARGB_COLOR( v2
->color
[0] );
45 fprintf(stderr
, "FFB_tri: const_fg %08x (B[%f] G[%f] R[%f])\n",
47 FFB_2_30_FIXED_TO_FLOAT(v2
->color
[0].blue
),
48 FFB_2_30_FIXED_TO_FLOAT(v2
->color
[0].green
),
49 FFB_2_30_FIXED_TO_FLOAT(v2
->color
[0].red
));
54 #if (IND & FFB_TRI_FLAT_BIT)
59 #if (IND & FFB_TRI_FLAT_BIT)
62 #if (IND & FFB_TRI_ALPHA_BIT)
70 #if !(IND & FFB_TRI_FLAT_BIT)
71 #if (IND & FFB_TRI_ALPHA_BIT)
72 ffb
->alpha
= FFB_GET_ALPHA(v0
);
74 ffb
->red
= FFB_GET_RED(v0
);
75 ffb
->green
= FFB_GET_GREEN(v0
);
76 ffb
->blue
= FFB_GET_BLUE(v0
);
78 ffb
->z
= FFB_GET_Z(v0
);
79 ffb
->ryf
= FFB_GET_Y(v0
);
80 ffb
->rxf
= FFB_GET_X(v0
);
83 #if !(IND & FFB_TRI_FLAT_BIT)
84 #if (IND & FFB_TRI_ALPHA_BIT)
85 ffb
->alpha
= FFB_GET_ALPHA(v1
);
87 ffb
->red
= FFB_GET_RED(v1
);
88 ffb
->green
= FFB_GET_GREEN(v1
);
89 ffb
->blue
= FFB_GET_BLUE(v1
);
91 ffb
->z
= FFB_GET_Z(v1
);
92 ffb
->y
= FFB_GET_Y(v1
);
93 ffb
->x
= FFB_GET_X(v1
);
96 #if !(IND & FFB_TRI_FLAT_BIT)
97 #if (IND & FFB_TRI_ALPHA_BIT)
98 ffb
->alpha
= FFB_GET_ALPHA(v2
);
100 ffb
->red
= FFB_GET_RED(v2
);
101 ffb
->green
= FFB_GET_GREEN(v2
);
102 ffb
->blue
= FFB_GET_BLUE(v2
);
104 ffb
->z
= FFB_GET_Z(v2
);
105 ffb
->y
= FFB_GET_Y(v2
);
106 ffb
->x
= FFB_GET_X(v2
);
108 fmesa
->ffbScreen
->rp_active
= 1;
112 static void TAG(ffb_quad
)(GLcontext
*ctx
,
118 ffbContextPtr fmesa
= FFB_CONTEXT(ctx
);
119 ffb_fbcPtr ffb
= fmesa
->regs
;
120 #if (IND & FFB_TRI_FLAT_BIT)
123 FFB_DELAYED_VIEWPORT_VARS
;
126 fprintf(stderr
, "FFB: ffb_quad ["
127 #if (IND & FFB_TRI_CULL_BIT)
130 #if (IND & FFB_TRI_FLAT_BIT)
133 #if (IND & FFB_TRI_ALPHA_BIT)
137 #endif /* TRI_DEBUG */
139 #if (IND & FFB_TRI_CULL_BIT)
140 { /* NOTE: These are not viewport transformed yet. */
141 GLfloat ex
= v2
->x
- v0
->x
;
142 GLfloat ey
= v2
->y
- v0
->y
;
143 GLfloat fx
= v3
->x
- v1
->x
;
144 GLfloat fy
= v3
->y
- v1
->y
;
145 GLfloat c
= ex
*fy
-ey
*fx
;
148 if (c
* fmesa
->backface_sign
> fmesa
->ffb_zero
)
153 #if (IND & FFB_TRI_FLAT_BIT)
154 const_fg
= FFB_PACK_CONST_UBYTE_ARGB_COLOR( v3
->color
[0] );
156 fprintf(stderr
, "FFB_quad: const_fg %08x (B[%f] G[%f] R[%f])\n",
158 FFB_2_30_FIXED_TO_FLOAT(v3
->color
[0].blue
),
159 FFB_2_30_FIXED_TO_FLOAT(v3
->color
[0].green
),
160 FFB_2_30_FIXED_TO_FLOAT(v3
->color
[0].red
));
165 #if (IND & FFB_TRI_FLAT_BIT)
169 #if (IND & FFB_TRI_ALPHA_BIT)
177 #if !(IND & FFB_TRI_FLAT_BIT)
178 #if (IND & FFB_TRI_ALPHA_BIT)
179 ffb
->alpha
= FFB_GET_ALPHA(v0
);
181 ffb
->red
= FFB_GET_RED(v0
);
182 ffb
->green
= FFB_GET_GREEN(v0
);
183 ffb
->blue
= FFB_GET_BLUE(v0
);
185 ffb
->z
= FFB_GET_Z(v0
);
186 ffb
->ryf
= FFB_GET_Y(v0
);
187 ffb
->rxf
= FFB_GET_X(v0
);
190 #if !(IND & FFB_TRI_FLAT_BIT)
191 #if (IND & FFB_TRI_ALPHA_BIT)
192 ffb
->alpha
= FFB_GET_ALPHA(v1
);
194 ffb
->red
= FFB_GET_RED(v1
);
195 ffb
->green
= FFB_GET_GREEN(v1
);
196 ffb
->blue
= FFB_GET_BLUE(v1
);
198 ffb
->z
= FFB_GET_Z(v1
);
199 ffb
->y
= FFB_GET_Y(v1
);
200 ffb
->x
= FFB_GET_X(v1
);
203 #if !(IND & FFB_TRI_FLAT_BIT)
204 #if (IND & FFB_TRI_ALPHA_BIT)
205 ffb
->alpha
= FFB_GET_ALPHA(v2
);
207 ffb
->red
= FFB_GET_RED(v2
);
208 ffb
->green
= FFB_GET_GREEN(v2
);
209 ffb
->blue
= FFB_GET_BLUE(v2
);
211 ffb
->z
= FFB_GET_Z(v2
);
212 ffb
->y
= FFB_GET_Y(v2
);
213 ffb
->x
= FFB_GET_X(v2
);
216 #if !(IND & FFB_TRI_FLAT_BIT)
217 #if (IND & FFB_TRI_ALPHA_BIT)
218 ffb
->alpha
= FFB_GET_ALPHA(v3
);
220 ffb
->red
= FFB_GET_RED(v3
);
221 ffb
->green
= FFB_GET_GREEN(v3
);
222 ffb
->blue
= FFB_GET_BLUE(v3
);
224 ffb
->z
= FFB_GET_Z(v3
);
225 ffb
->dmyf
= FFB_GET_Y(v3
);
226 ffb
->dmxf
= FFB_GET_X(v3
);
228 fmesa
->ffbScreen
->rp_active
= 1;
231 static void TAG(ffb_init
)(void)
233 ffb_tri_tab
[IND
] = TAG(ffb_triangle
);
234 ffb_quad_tab
[IND
] = TAG(ffb_quad
);