From c04bf694693e99052d2819ca0a6b0f41bb9ced59 Mon Sep 17 00:00:00 2001 From: Sam Steele Date: Sat, 19 Nov 2005 17:30:49 +0000 Subject: [PATCH] KGL: Support GL_TRIANGLE_FAN --- gldraw.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/gldraw.c b/gldraw.c index d2fe3e5..9652ba4 100644 --- a/gldraw.c +++ b/gldraw.c @@ -141,6 +141,67 @@ sizeof(gl_vertex_t)); */ } } +static void end_triangle_fan() { + int i; + volatile pvr_vertex_t *vert; + pvr_dr_state_t dr_state; + + pvr_dr_init(dr_state); + + /* Should be at least 3 points in the buffer */ + assert_msg(gl_vbuf_top >= 3, "Need at least three vertices."); + + gl_vbuf[0].flags = PVR_CMD_VERTEX_EOL; + + for (i=0; iflags = gl_vbuf[i].flags; + vert->x = gl_xbuf[i].x; + vert->y = gl_xbuf[i].y; + vert->z = gl_xbuf[i].z; + vert->u = gl_vbuf[i].u; + vert->v = gl_vbuf[i].v; + vert->argb = gl_vbuf[i].argb; + vert->oargb = gl_vbuf[i].oargb; + pvr_dr_commit(vert); + + vert = pvr_dr_target(dr_state); + vert->flags = gl_vbuf[i+1].flags; + vert->x = gl_xbuf[i+1].x; + vert->y = gl_xbuf[i+1].y; + vert->z = gl_xbuf[i+1].z; + vert->u = gl_vbuf[i+1].u; + vert->v = gl_vbuf[i+1].v; + vert->argb = gl_vbuf[i+1].argb; + vert->oargb = gl_vbuf[i+1].oargb; + pvr_dr_commit(vert); + + vert = pvr_dr_target(dr_state); + vert->flags = gl_vbuf[0].flags; + vert->x = gl_xbuf[0].x; + vert->y = gl_xbuf[0].y; + vert->z = gl_xbuf[0].z; + vert->u = gl_vbuf[0].u; + vert->v = gl_vbuf[0].v; + vert->argb = gl_vbuf[0].argb; + vert->oargb = gl_vbuf[0].oargb; + pvr_dr_commit(vert); + } +} + static void end_triangle_strip() { int i; volatile pvr_vertex_t *vert; @@ -348,6 +409,8 @@ static void check_end() { break; case GL_TRIANGLE_STRIP: break; + case GL_TRIANGLE_FAN: + break; case GL_QUADS: if (gl_vbuf_top == 4) { end_quads(); @@ -454,6 +517,9 @@ void glEnd(void) { case GL_TRIANGLE_STRIP: end_triangle_strip(); break; + case GL_TRIANGLE_FAN: + end_triangle_fan(); + break; case GL_QUADS: break; case GL_QUAD_STRIP: