# HG changeset patch # User John Tsiombikas # Date 1396720424 -10800 # Node ID 9035507275d653f61de0f344c1c15f9e0f8f3be1 # Parent c273c6f799a4d4285c53371bd42a265ce0553154 foo diff -r c273c6f799a4 -r 9035507275d6 Makefile --- a/Makefile Sat Apr 05 18:31:00 2014 +0300 +++ b/Makefile Sat Apr 05 20:53:44 2014 +0300 @@ -1,4 +1,4 @@ -modelobj = main.obj min3d.obj logger.obj +modelobj = main.obj min3d.obj m3drast.obj logger.obj rendobj = rend.obj vmath.obj scnobj = scene.obj object.obj sysobj = gfx.obj vbe.obj dpmi.obj timer.obj mouse.obj keyb.obj diff -r c273c6f799a4 -r 9035507275d6 src/m3dimpl.h --- a/src/m3dimpl.h Sat Apr 05 18:31:00 2014 +0300 +++ b/src/m3dimpl.h Sat Apr 05 20:53:44 2014 +0300 @@ -25,6 +25,12 @@ int mmode; /* matrix mode */ struct min3d_mstack mstack[2]; -} *m3dctx; +}; + +extern struct min3d_context *m3dctx; + +void draw_point(struct min3d_vertex *v); +void draw_line(struct min3d_vertex *v); +void draw_poly(struct min3d_vertex *v, int numv); #endif /* M3DIMPL_H_ */ diff -r c273c6f799a4 -r 9035507275d6 src/m3drast.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/m3drast.c Sat Apr 05 20:53:44 2014 +0300 @@ -0,0 +1,14 @@ +#include "m3dimpl.h" + + +void draw_point(struct min3d_vertex *v) +{ +} + +void draw_line(struct min3d_vertex *v) +{ +} + +void draw_poly(struct min3d_vertex *v, int numv) +{ +} diff -r c273c6f799a4 -r 9035507275d6 src/min3d.c --- a/src/min3d.c Sat Apr 05 18:31:00 2014 +0300 +++ b/src/min3d.c Sat Apr 05 20:53:44 2014 +0300 @@ -6,6 +6,8 @@ #define M_PI 3.141592653 #endif +struct min3d_context *m3dctx; + int m3d_init(void) { if(!(m3dctx = malloc(sizeof *m3dctx))) { @@ -178,15 +180,88 @@ vec[3] = w; } -static void proc_vertex(struct min3d_vertex *v) +static int proc_prim(int prim, struct min3d_vertex *res, struct min3d_vertex *v) { - struct min3d_vertex *tv; + int i; + int vcount = prim; + int mvtop, ptop; + float *mvmat, *pmat; + + mvtop = m3dctx->mstack[M3D_MODELVIEW].top; + mvmat = m3dctx->mstack[M3D_MODELVIEW].m[mvtop]; + ptop = m3dctx->mstack[M3D_PROJECTION].top; + pmat = m3dctx->mstack[M3D_PROJECTION].m[ptop]; + + /* transform to view space */ + for(i=0; i= w || + res[0].pos[0] / w < -1 || res[0].pos[0] / w >= 1 || + res[0].pos[1] / w < -1 || res[0].pos[1] / w >= 1) { + vcount = 0; + } + } + break; + + default: + break; /* TODO */ + } + + /* perspective division */ + for(i=0; i