diff options
-rw-r--r-- | graphics.h | 25 | ||||
-rw-r--r-- | render.c | 9 |
2 files changed, 19 insertions, 15 deletions
@@ -6,24 +6,27 @@ typedef enum { } Projection; enum { - PPoint, + /* culling modes */ + CullNone, + CullFront, + CullBack, + + /* primitive types */ + PPoint = 0, PLine, PTriangle, -}; -enum { - LIGHT_POINT, + /* light types */ + LIGHT_POINT = 0, LIGHT_DIRECTIONAL, LIGHT_SPOT, -}; -enum { - RAWTexture, /* unmanaged */ + /* texture formats */ + RAWTexture = 0, /* unmanaged */ sRGBTexture, -}; -enum { - VAPoint, + /* vertex attribute types */ + VAPoint = 0, VANumber, }; @@ -282,12 +285,12 @@ struct Camera } clip; Matrix3 proj; /* VCS to clip space xform */ Projection projtype; + int cullmode; struct { uvlong min, avg, max, acc, n, v; uvlong nframes; } stats; - struct { Rendertime R[100], E[100], Tn[100], Rn[100]; int cur; @@ -377,7 +377,6 @@ tilerdurden(void *arg) for(; np--; p++){ p->v[0].p = clip2ndc(p->v[0].p); p->v[1].p = clip2ndc(p->v[1].p); - p->v[0].p = ndc2viewport(params->fb, p->v[0].p); p->v[1].p = ndc2viewport(params->fb, p->v[1].p); @@ -425,8 +424,10 @@ tilerdurden(void *arg) p->v[2].p = clip2ndc(p->v[2].p); /* culling */ -// if(isfacingback(*p)) -// goto skiptri; + switch(params->camera->cullmode){ + case CullFront: if(!isfacingback(p)) goto skiptri; break; + case CullBack: if(isfacingback(p)) goto skiptri; break; + } p->v[0].p = ndc2viewport(params->fb, p->v[0].p); p->v[1].p = ndc2viewport(params->fb, p->v[1].p); @@ -450,7 +451,7 @@ tilerdurden(void *arg) task->p.v[2] = dupvertex(&p->v[2]); sendp(taskchans[i], task); } -//skiptri: +skiptri: delvattrs(&p->v[0]); delvattrs(&p->v[1]); delvattrs(&p->v[2]); |