blob: 26d991b08156b99a5ab444981761ccdb33397836 [file] [log] [blame]
/* $XFree86: xc/lib/GL/mesa/src/drv/ffb/ffb_rendertmp.h,v 1.2 2003/01/29 23:00:40 dawes Exp $ */
#define IMPL_LOCAL_VARS \
ffbContextPtr fmesa = FFB_CONTEXT(ctx); \
ffb_fbcPtr ffb = fmesa->regs; \
const GLuint * const elt = TNL_CONTEXT(ctx)->vb.Elts; \
FFB_DELAYED_VIEWPORT_VARS; \
(void) fmesa; (void) ffb; (void) elt
#if (IND & FFB_FLAT_BIT)
#define FFB_DECLARE_CACHED_COLOR(NAME) \
unsigned int NAME;
#define FFB_COMPUTE_CACHED_COLOR(NAME, VTX) \
NAME = FFB_PACK_CONST_UBYTE_ARGB_COLOR((VTX)->color[0])
#define FFB_CACHED_COLOR_SAME(NAME1, NAME2) \
((NAME1) == (NAME2))
#define FFB_CACHED_COLOR_SET(NAME) \
ffb->fg = (NAME)
#define FFB_CACHED_COLOR_UPDATE(NAME1, NAME2) \
ffb->fg = (NAME1) = (NAME2)
#define FFB_SET_PRIM_COLOR(COLOR_VERTEX) \
ffb->fg = FFB_PACK_CONST_UBYTE_ARGB_COLOR((COLOR_VERTEX)->color[0])
#define FFB_PRIM_COLOR_COST 1
#define FFB_SET_VERTEX_COLOR(VTX) /**/
#define FFB_VERTEX_COLOR_COST 0
#else
#define FFB_DECLARE_CACHED_COLOR(NAME) /**/
#define FFB_COMPUTE_CACHED_COLOR(NAME, VTX) /**/
#define FFB_CACHED_COLOR_SAME(NAME1, NAME2) 0
#define FFB_CACHED_COLOR_SET(NAME1) /**/
#define FFB_CACHED_COLOR_UPDATE(NAME1, NAME2) /**/
#define FFB_SET_PRIM_COLOR(COLOR_VERTEX) /**/
#define FFB_PRIM_COLOR_COST 0
#if (IND & FFB_ALPHA_BIT)
#define FFB_SET_VERTEX_COLOR(VTX) \
ffb->alpha = FFB_GET_ALPHA(VTX); \
ffb->red = FFB_GET_RED(VTX); \
ffb->green = FFB_GET_GREEN(VTX); \
ffb->blue = FFB_GET_BLUE(VTX)
#define FFB_VERTEX_COLOR_COST 4
#else
#define FFB_SET_VERTEX_COLOR(VTX) \
ffb->red = FFB_GET_RED(VTX); \
ffb->green = FFB_GET_GREEN(VTX); \
ffb->blue = FFB_GET_BLUE(VTX)
#define FFB_VERTEX_COLOR_COST 3
#endif
#endif
#define RESET_STIPPLE ffb->lpat = fmesa->lpat;
#if !(IND & (FFB_TRI_CULL_BIT))
static void TAG(ffb_vb_points)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
{
GLint i;
IMPL_LOCAL_VARS;
#ifdef FFB_RENDER_TRACE
fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
__FUNCTION__, start, count, flags);
#endif
ffbRenderPrimitive(ctx, GL_POINTS);
if (ctx->_TriangleCaps & DD_POINT_SMOOTH) {
for (i = start; i < count; i++) {
ffb_vertex *v0 = &fmesa->verts[ELT(i)];
FFBFifo(fmesa, 4);
ffb->fg = FFB_PACK_CONST_UBYTE_ARGB_COLOR(v0->color[0]);
ffb->z = FFB_GET_Z(v0);
ffb->y = FFB_GET_Y(v0) + 0x8000 /* FIX ME */;
ffb->x = FFB_GET_X(v0) + 0x8000 /* FIX ME */;
}
} else {
for (i = start; i < count; i++) {
ffb_vertex *v0 = &fmesa->verts[ELT(i)];
FFBFifo(fmesa, 4);
ffb->fg = FFB_PACK_CONST_UBYTE_ARGB_COLOR(v0->color[0]);
ffb->constz = Z_FROM_MESA(FFB_Z_TO_FLOAT(FFB_GET_Z(v0)));
ffb->bh = FFB_GET_Y(v0) >> 16;
ffb->bw = FFB_GET_X(v0) >> 16;
}
}
fmesa->ffbScreen->rp_active = 1;
}
static void TAG(ffb_vb_lines)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
{
GLint i;
IMPL_LOCAL_VARS;
#ifdef FFB_RENDER_TRACE
fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
__FUNCTION__, start, count, flags);
#endif
ffbRenderPrimitive(ctx, GL_LINES);
for (i = start + 1; i < count; i += 2) {
ffb_vertex *v0 = &fmesa->verts[i - 1];
ffb_vertex *v1 = &fmesa->verts[i - 0];
FFBFifo(fmesa, (1 + FFB_PRIM_COLOR_COST +
(FFB_VERTEX_COLOR_COST * 2) + 6));
RESET_STIPPLE;
FFB_SET_PRIM_COLOR(v1);
FFB_SET_VERTEX_COLOR(v0);
ffb->z = FFB_GET_Z(v0);
ffb->ryf = FFB_GET_Y(v0);
ffb->rxf = FFB_GET_X(v0);
FFB_SET_VERTEX_COLOR(v1);
ffb->z = FFB_GET_Z(v1);
ffb->y = FFB_GET_Y(v1);
ffb->x = FFB_GET_X(v1);
}
}
static void TAG(ffb_vb_line_loop)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
{
GLint i;
IMPL_LOCAL_VARS;
#ifdef FFB_RENDER_TRACE
fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
__FUNCTION__, start, count, flags);
#endif
ffbRenderPrimitive(ctx, GL_LINE_LOOP);
if ((flags & PRIM_BEGIN) != 0) {
ffb_vertex *v0 = &fmesa->verts[ELT(start + 0)];
ffb_vertex *v1 = &fmesa->verts[ELT(start + 1)];
FFBFifo(fmesa, (1 + FFB_PRIM_COLOR_COST +
((FFB_VERTEX_COLOR_COST * 2) + (3 * 2))));
RESET_STIPPLE;
FFB_SET_PRIM_COLOR(v1);
FFB_SET_VERTEX_COLOR(v0);
ffb->z = FFB_GET_Z(v0);
ffb->ryf = FFB_GET_Y(v0);
ffb->rxf = FFB_GET_X(v0);
FFB_SET_VERTEX_COLOR(v1);
ffb->z = FFB_GET_Z(v1);
ffb->y = FFB_GET_Y(v1);
ffb->x = FFB_GET_X(v1);
}
for (i = start + 2; i < count; i++) {
ffb_vertex *v0 = &fmesa->verts[ELT(i)];
FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
(FFB_VERTEX_COLOR_COST + 3)));
FFB_SET_PRIM_COLOR(v0);
FFB_SET_VERTEX_COLOR(v0);
ffb->z = FFB_GET_Z(v0);
ffb->y = FFB_GET_Y(v0);
ffb->x = FFB_GET_X(v0);
}
if ((flags & PRIM_END) != 0) {
ffb_vertex *v0 = &fmesa->verts[ELT(start)];
FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
(FFB_VERTEX_COLOR_COST + 3)));
FFB_SET_PRIM_COLOR(v0);
FFB_SET_VERTEX_COLOR(v0);
ffb->z = FFB_GET_Z(v0);
ffb->y = FFB_GET_Y(v0);
ffb->x = FFB_GET_X(v0);
}
fmesa->ffbScreen->rp_active = 1;
}
static void TAG(ffb_vb_line_strip)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
{
GLint i;
FFB_DECLARE_CACHED_COLOR(cached_fg)
IMPL_LOCAL_VARS;
#ifdef FFB_RENDER_TRACE
fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
__FUNCTION__, start, count, flags);
#endif
ffbRenderPrimitive(ctx, GL_LINE_STRIP);
FFBFifo(fmesa, (1 + FFB_PRIM_COLOR_COST +
((FFB_VERTEX_COLOR_COST * 2) + (3 * 2))));
RESET_STIPPLE;
{
ffb_vertex *v0 = &fmesa->verts[ELT(start + 0)];
ffb_vertex *v1 = &fmesa->verts[ELT(start + 1)];
FFB_COMPUTE_CACHED_COLOR(cached_fg, v0);
FFB_CACHED_COLOR_SET(cached_fg);
FFB_SET_VERTEX_COLOR(v0);
ffb->z = FFB_GET_Z(v0);
ffb->ryf = FFB_GET_Y(v0);
ffb->rxf = FFB_GET_X(v0);
FFB_SET_VERTEX_COLOR(v1);
ffb->z = FFB_GET_Z(v1);
ffb->y = FFB_GET_Y(v1);
ffb->x = FFB_GET_X(v1);
}
for (i = start + 2; i < count; i++) {
ffb_vertex *v1 = &fmesa->verts[ELT(i - 0)];
FFB_DECLARE_CACHED_COLOR(new_fg)
FFB_COMPUTE_CACHED_COLOR(new_fg, v1);
if (FFB_CACHED_COLOR_SAME(cached_fg, new_fg)) {
FFBFifo(fmesa, ((FFB_VERTEX_COLOR_COST * 1) + (3 * 1)));
} else {
FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
(FFB_VERTEX_COLOR_COST * 1) + (3 * 1)));
FFB_CACHED_COLOR_UPDATE(cached_fg, new_fg);
}
FFB_SET_VERTEX_COLOR(v1);
ffb->z = FFB_GET_Z(v1);
ffb->y = FFB_GET_Y(v1);
ffb->x = FFB_GET_X(v1);
}
fmesa->ffbScreen->rp_active = 1;
}
#endif /* !(IND & (FFB_TRI_CULL_BIT)) */
/* OK, now things start getting fun :-) */
#if (IND & (FFB_TRI_CULL_BIT))
#define FFB_AREA_DECLARE GLfloat cc, ex, ey, fx, fy;
#define FFB_COMPUTE_AREA_TRI(V0, V1, V2) \
{ ex = (V1)->x - (V0)->x; \
ey = (V1)->y - (V0)->y; \
fx = (V2)->x - (V0)->x; \
fy = (V2)->y - (V0)->y; \
cc = ex*fy-ey*fx; \
}
#define FFB_COMPUTE_AREA_QUAD(V0, V1, V2, V3) \
{ ex = (V2)->x - (V0)->x; \
ey = (V2)->y - (V0)->y; \
fx = (V3)->x - (V1)->x; \
fy = (V3)->y - (V1)->y; \
cc = ex*fy-ey*fx; \
}
#else
#define FFB_AREA_DECLARE /**/
#define FFB_COMPUTE_AREA_TRI(V0, V1, V2) do { } while(0)
#define FFB_COMPUTE_AREA_QUAD(V0, V1, V2, V3) do { } while(0)
#endif
#if (IND & FFB_TRI_CULL_BIT)
#define FFB_CULL_TRI(CULL_ACTION) \
if (cc * fmesa->backface_sign > fmesa->ffb_zero) { \
CULL_ACTION \
}
#define FFB_CULL_QUAD(CULL_ACTION) \
if (cc * fmesa->backface_sign > fmesa->ffb_zero) { \
CULL_ACTION \
}
#else
#define FFB_CULL_TRI(CULL_ACTION) do { } while (0)
#define FFB_CULL_QUAD(CULL_ACTION) do { } while (0)
#endif
static void TAG(ffb_vb_triangles)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
{
GLint i;
IMPL_LOCAL_VARS;
#ifdef FFB_RENDER_TRACE
fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
__FUNCTION__, start, count, flags);
#endif
ffbRenderPrimitive(ctx, GL_TRIANGLES);
for (i = start + 2; i < count; i += 3) {
ffb_vertex *v0 = &fmesa->verts[ELT(i - 2)];
ffb_vertex *v1 = &fmesa->verts[ELT(i - 1)];
ffb_vertex *v2 = &fmesa->verts[ELT(i - 0)];
FFB_AREA_DECLARE
FFB_COMPUTE_AREA_TRI(v0, v1, v2);
FFB_CULL_TRI(continue;);
FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
(FFB_VERTEX_COLOR_COST * 3) + 9));
FFB_SET_PRIM_COLOR(v2);
FFB_SET_VERTEX_COLOR(v0);
ffb->z = FFB_GET_Z(v0);
ffb->ryf = FFB_GET_Y(v0);
ffb->rxf = FFB_GET_X(v0);
FFB_SET_VERTEX_COLOR(v1);
ffb->z = FFB_GET_Z(v1);
ffb->y = FFB_GET_Y(v1);
ffb->x = FFB_GET_X(v1);
FFB_SET_VERTEX_COLOR(v2);
ffb->z = FFB_GET_Z(v2);
ffb->y = FFB_GET_Y(v2);
ffb->x = FFB_GET_X(v2);
}
fmesa->ffbScreen->rp_active = 1;
}
static void TAG(ffb_vb_tri_strip)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
{
GLint i;
GLint parity = 0;
IMPL_LOCAL_VARS;
#ifdef FFB_RENDER_TRACE
fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
__FUNCTION__, start, count, flags);
#endif
ffbRenderPrimitive(ctx, GL_TRIANGLE_STRIP);
i = start + 2;
goto something_clipped;
something_clipped:
for (; i < count; i++, parity ^= 1) {
ffb_vertex *v0 = &fmesa->verts[ELT(i - 2 + parity)];
ffb_vertex *v1 = &fmesa->verts[ELT(i - 1 - parity)];
ffb_vertex *v2 = &fmesa->verts[ELT(i - 0)];
FFB_AREA_DECLARE
FFB_COMPUTE_AREA_TRI(v0, v1, v2);
FFB_CULL_TRI(continue;);
FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
(FFB_VERTEX_COLOR_COST * 3) + 9));
FFB_SET_PRIM_COLOR(v2);
FFB_SET_VERTEX_COLOR(v0);
ffb->z = FFB_GET_Z(v0);
ffb->ryf = FFB_GET_Y(v0);
ffb->rxf = FFB_GET_X(v0);
FFB_SET_VERTEX_COLOR(v1);
ffb->z = FFB_GET_Z(v1);
ffb->y = FFB_GET_Y(v1);
ffb->x = FFB_GET_X(v1);
FFB_SET_VERTEX_COLOR(v2);
ffb->z = FFB_GET_Z(v2);
ffb->y = FFB_GET_Y(v2);
ffb->x = FFB_GET_X(v2);
i++;
parity ^= 1;
break;
}
for (; i < count; i++, parity ^= 1) {
ffb_vertex *v0 = &fmesa->verts[ELT(i - 2 + parity)];
ffb_vertex *v1 = &fmesa->verts[ELT(i - 1 - parity)];
ffb_vertex *v2 = &fmesa->verts[ELT(i - 0)];
FFB_AREA_DECLARE
(void) v0; (void) v1;
FFB_COMPUTE_AREA_TRI(v0, v1, v2);
FFB_CULL_TRI(i++; parity^=1; goto something_clipped;);
FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
(FFB_VERTEX_COLOR_COST * 1) + 3));
FFB_SET_PRIM_COLOR(v2);
FFB_SET_VERTEX_COLOR(v2);
ffb->z = FFB_GET_Z(v2);
ffb->y = FFB_GET_Y(v2);
ffb->x = FFB_GET_X(v2);
}
fmesa->ffbScreen->rp_active = 1;
}
static void TAG(ffb_vb_tri_fan)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
{
GLint i;
IMPL_LOCAL_VARS;
#ifdef FFB_RENDER_TRACE
fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
__FUNCTION__, start, count, flags);
#endif
ffbRenderPrimitive(ctx, GL_TRIANGLE_FAN);
i = start + 2;
goto something_clipped;
something_clipped:
for ( ; i < count; i++) {
ffb_vertex *v0 = &fmesa->verts[ELT(start)];
ffb_vertex *v1 = &fmesa->verts[ELT(i - 1)];
ffb_vertex *v2 = &fmesa->verts[ELT(i - 0)];
FFB_AREA_DECLARE
FFB_COMPUTE_AREA_TRI(v0, v1, v2);
FFB_CULL_TRI(continue;);
FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
(FFB_VERTEX_COLOR_COST * 3) + 9));
FFB_SET_PRIM_COLOR(v2);
FFB_SET_VERTEX_COLOR(v0);
ffb->z = FFB_GET_Z(v0);
ffb->ryf = FFB_GET_Y(v0);
ffb->rxf = FFB_GET_X(v0);
FFB_SET_VERTEX_COLOR(v1);
ffb->z = FFB_GET_Z(v1);
ffb->y = FFB_GET_Y(v1);
ffb->x = FFB_GET_X(v1);
FFB_SET_VERTEX_COLOR(v2);
ffb->z = FFB_GET_Z(v2);
ffb->y = FFB_GET_Y(v2);
ffb->x = FFB_GET_X(v2);
i++;
break;
}
for (; i < count; i++) {
ffb_vertex *v0 = &fmesa->verts[ELT(start)];
ffb_vertex *v1 = &fmesa->verts[ELT(i - 1)];
ffb_vertex *v2 = &fmesa->verts[ELT(i - 0)];
FFB_AREA_DECLARE
(void) v0; (void) v1;
FFB_COMPUTE_AREA_TRI(v0, v1, v2);
FFB_CULL_TRI(i++; goto something_clipped;);
FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
(FFB_VERTEX_COLOR_COST * 1) + 3));
FFB_SET_PRIM_COLOR(v2);
FFB_SET_VERTEX_COLOR(v2);
ffb->z = FFB_GET_Z(v2);
ffb->dmyf = FFB_GET_Y(v2);
ffb->dmxf = FFB_GET_X(v2);
}
fmesa->ffbScreen->rp_active = 1;
}
static void TAG(ffb_vb_poly)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
{
GLint i;
IMPL_LOCAL_VARS;
#ifdef FFB_RENDER_TRACE
fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
__FUNCTION__, start, count, flags);
#endif
ffbRenderPrimitive(ctx, GL_POLYGON);
/* XXX Optimize XXX */
for (i = start + 2; i < count; i++) {
ffb_vertex *v0 = &fmesa->verts[ELT(i - 1)];
ffb_vertex *v1 = &fmesa->verts[ELT(i)];
ffb_vertex *v2 = &fmesa->verts[ELT(start)];
FFB_AREA_DECLARE
FFB_COMPUTE_AREA_TRI(v0, v1, v2);
FFB_CULL_TRI(continue;);
FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
(FFB_VERTEX_COLOR_COST * 3) + 9));
FFB_SET_PRIM_COLOR(v2);
FFB_SET_VERTEX_COLOR(v0);
ffb->z = FFB_GET_Z(v0);
ffb->ryf = FFB_GET_Y(v0);
ffb->rxf = FFB_GET_X(v0);
FFB_SET_VERTEX_COLOR(v1);
ffb->z = FFB_GET_Z(v1);
ffb->y = FFB_GET_Y(v1);
ffb->x = FFB_GET_X(v1);
FFB_SET_VERTEX_COLOR(v2);
ffb->z = FFB_GET_Z(v2);
ffb->y = FFB_GET_Y(v2);
ffb->x = FFB_GET_X(v2);
}
fmesa->ffbScreen->rp_active = 1;
}
static void TAG(ffb_vb_quads)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
{
GLint i;
IMPL_LOCAL_VARS;
#ifdef FFB_RENDER_TRACE
fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
__FUNCTION__, start, count, flags);
#endif
ffbRenderPrimitive(ctx, GL_QUADS);
for (i = start + 3; i < count; i += 4) {
ffb_vertex *v0 = &fmesa->verts[ELT(i - 3)];
ffb_vertex *v1 = &fmesa->verts[ELT(i - 2)];
ffb_vertex *v2 = &fmesa->verts[ELT(i - 1)];
ffb_vertex *v3 = &fmesa->verts[ELT(i - 0)];
FFB_AREA_DECLARE
FFB_COMPUTE_AREA_QUAD(v0, v1, v2, v3);
FFB_CULL_QUAD(continue;);
FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
(FFB_VERTEX_COLOR_COST * 4) + 12));
FFB_SET_PRIM_COLOR(v3);
FFB_SET_VERTEX_COLOR(v0);
ffb->z = FFB_GET_Z(v0);
ffb->ryf = FFB_GET_Y(v0);
ffb->rxf = FFB_GET_X(v0);
FFB_SET_VERTEX_COLOR(v1);
ffb->z = FFB_GET_Z(v1);
ffb->y = FFB_GET_Y(v1);
ffb->x = FFB_GET_X(v1);
FFB_SET_VERTEX_COLOR(v2);
ffb->z = FFB_GET_Z(v2);
ffb->y = FFB_GET_Y(v2);
ffb->x = FFB_GET_X(v2);
FFB_SET_VERTEX_COLOR(v3);
ffb->z = FFB_GET_Z(v3);
ffb->dmyf = FFB_GET_Y(v3);
ffb->dmxf = FFB_GET_X(v3);
}
fmesa->ffbScreen->rp_active = 1;
}
static void TAG(ffb_vb_quad_strip)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags)
{
GLint i;
IMPL_LOCAL_VARS;
#ifdef FFB_RENDER_TRACE
fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",
__FUNCTION__, start, count, flags);
#endif
ffbRenderPrimitive(ctx, GL_QUAD_STRIP);
/* XXX Optimize XXX */
for (i = start + 3; i < count; i += 2) {
ffb_vertex *v0 = &fmesa->verts[ELT(i - 1)];
ffb_vertex *v1 = &fmesa->verts[ELT(i - 3)];
ffb_vertex *v2 = &fmesa->verts[ELT(i - 2)];
ffb_vertex *v3 = &fmesa->verts[ELT(i - 0)];
FFB_AREA_DECLARE
FFB_COMPUTE_AREA_QUAD(v0, v1, v2, v3);
FFB_CULL_QUAD(continue;);
FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +
(FFB_VERTEX_COLOR_COST * 4) + 12));
FFB_SET_PRIM_COLOR(v3);
FFB_DUMP_VERTEX(v0);
FFB_SET_VERTEX_COLOR(v0);
ffb->z = FFB_GET_Z(v0);
ffb->ryf = FFB_GET_Y(v0);
ffb->rxf = FFB_GET_X(v0);
FFB_DUMP_VERTEX(v1);
FFB_SET_VERTEX_COLOR(v1);
ffb->z = FFB_GET_Z(v1);
ffb->y = FFB_GET_Y(v1);
ffb->x = FFB_GET_X(v1);
FFB_DUMP_VERTEX(v2);
FFB_SET_VERTEX_COLOR(v2);
ffb->z = FFB_GET_Z(v2);
ffb->y = FFB_GET_Y(v2);
ffb->x = FFB_GET_X(v2);
FFB_DUMP_VERTEX(v3);
FFB_SET_VERTEX_COLOR(v3);
ffb->z = FFB_GET_Z(v3);
ffb->dmyf = FFB_GET_Y(v3);
ffb->dmxf = FFB_GET_X(v3);
}
fmesa->ffbScreen->rp_active = 1;
}
static void (*TAG(render_tab)[GL_POLYGON + 2])(GLcontext *, GLuint, GLuint, GLuint) =
{
#if !(IND & (FFB_TRI_CULL_BIT))
TAG(ffb_vb_points),
TAG(ffb_vb_lines),
TAG(ffb_vb_line_loop),
TAG(ffb_vb_line_strip),
#else
NULL,
NULL,
NULL,
NULL,
#endif
TAG(ffb_vb_triangles),
TAG(ffb_vb_tri_strip),
TAG(ffb_vb_tri_fan),
TAG(ffb_vb_quads),
TAG(ffb_vb_quad_strip),
TAG(ffb_vb_poly),
ffb_vb_noop,
};
#undef IND
#undef TAG
#undef IMPL_LOCAL_VARS
#undef FFB_DECLARE_CACHED_COLOR
#undef FFB_COMPUTE_CACHED_COLOR
#undef FFB_CACHED_COLOR_SAME
#undef FFB_CACHED_COLOR_SET
#undef FFB_CACHED_COLOR_UPDATE
#undef FFB_SET_PRIM_COLOR
#undef FFB_PRIM_COLOR_COST
#undef FFB_SET_VERTEX_COLOR
#undef FFB_VERTEX_COLOR_COST
#undef RESET_STIPPLE
#undef FFB_AREA_DECLARE
#undef FFB_COMPUTE_AREA_TRI
#undef FFB_COMPUTE_AREA_QUAD
#undef FFB_CULL_TRI
#undef FFB_CULL_QUAD