2 #define VERT_SET_IND( v, c )
3 #define VERT_COPY_IND( v0, v1 )
4 #define VERT_SAVE_IND( idx )
5 #define VERT_RESTORE_IND( idx )
9 #define VERT_SET_SPEC( v, c )
10 #define VERT_COPY_SPEC( v0, v1 )
11 #define VERT_SAVE_SPEC( idx )
12 #define VERT_RESTORE_SPEC( idx )
15 static void TAG(unfilled_tri
)( GLcontext
*ctx
,
17 GLuint e0
, GLuint e1
, GLuint e2
)
19 struct vertex_buffer
*VB
= &TNL_CONTEXT(ctx
)->vb
;
20 GLubyte
*ef
= VB
->EdgeFlag
;
24 v
[0] = (VERTEX
*)GET_VERTEX(e0
);
25 v
[1] = (VERTEX
*)GET_VERTEX(e1
);
26 v
[2] = (VERTEX
*)GET_VERTEX(e2
);
28 if ((ctx
->_TriangleCaps
& DD_FLATSHADE
) && HAVE_HW_FLATSHADE
) {
32 VERT_COPY_RGBA(v
[0], v
[2]);
33 VERT_COPY_RGBA(v
[1], v
[2]);
38 VERT_COPY_SPEC(v
[0], v
[2]);
39 VERT_COPY_SPEC(v
[1], v
[2]);
44 VERT_COPY_IND(v
[0], v
[2]);
45 VERT_COPY_IND(v
[1], v
[2]);
49 if (mode
== GL_POINT
) {
51 if (ef
[e0
]) POINT( v
[0] );
52 if (ef
[e1
]) POINT( v
[1] );
53 if (ef
[e2
]) POINT( v
[2] );
57 if (RENDER_PRIMITIVE
== GL_POLYGON
) {
58 if (ef
[e2
]) LINE( v
[2], v
[0] );
59 if (ef
[e0
]) LINE( v
[0], v
[1] );
60 if (ef
[e1
]) LINE( v
[1], v
[2] );
63 if (ef
[e0
]) LINE( v
[0], v
[1] );
64 if (ef
[e1
]) LINE( v
[1], v
[2] );
65 if (ef
[e2
]) LINE( v
[2], v
[0] );
69 if ((ctx
->_TriangleCaps
& DD_FLATSHADE
) && HAVE_HW_FLATSHADE
) {
86 static void TAG(unfilled_quad
)( GLcontext
*ctx
,
89 GLuint e2
, GLuint e3
)
91 struct vertex_buffer
*VB
= &TNL_CONTEXT(ctx
)->vb
;
92 GLubyte
*ef
= VB
->EdgeFlag
;
96 v
[0] = (VERTEX
*)GET_VERTEX(e0
);
97 v
[1] = (VERTEX
*)GET_VERTEX(e1
);
98 v
[2] = (VERTEX
*)GET_VERTEX(e2
);
99 v
[3] = (VERTEX
*)GET_VERTEX(e3
);
101 /* Hardware flatshading breaks down here. If the hardware doesn't
102 * support flatshading, this will already have been done:
104 if ((ctx
->_TriangleCaps
& DD_FLATSHADE
) && HAVE_HW_FLATSHADE
) {
109 VERT_COPY_RGBA(v
[0], v
[3]);
110 VERT_COPY_RGBA(v
[1], v
[3]);
111 VERT_COPY_RGBA(v
[2], v
[3]);
117 VERT_COPY_SPEC(v
[0], v
[3]);
118 VERT_COPY_SPEC(v
[1], v
[3]);
119 VERT_COPY_SPEC(v
[2], v
[3]);
125 VERT_COPY_IND(v
[0], v
[3]);
126 VERT_COPY_IND(v
[1], v
[3]);
127 VERT_COPY_IND(v
[2], v
[3]);
131 if (mode
== GL_POINT
) {
132 RASTERIZE(GL_POINTS
);
133 if (ef
[e0
]) POINT( v
[0] );
134 if (ef
[e1
]) POINT( v
[1] );
135 if (ef
[e2
]) POINT( v
[2] );
136 if (ef
[e3
]) POINT( v
[3] );
140 if (ef
[e0
]) LINE( v
[0], v
[1] );
141 if (ef
[e1
]) LINE( v
[1], v
[2] );
142 if (ef
[e2
]) LINE( v
[2], v
[3] );
143 if (ef
[e3
]) LINE( v
[3], v
[0] );
146 if ((ctx
->_TriangleCaps
& DD_FLATSHADE
) && HAVE_HW_FLATSHADE
) {
148 VERT_RESTORE_RGBA(0);
149 VERT_RESTORE_RGBA(1);
150 VERT_RESTORE_RGBA(2);
153 VERT_RESTORE_SPEC(0);
154 VERT_RESTORE_SPEC(1);
155 VERT_RESTORE_SPEC(2);
170 #undef VERT_RESTORE_IND
175 #undef VERT_COPY_SPEC
176 #undef VERT_SAVE_SPEC
177 #undef VERT_RESTORE_SPEC