newpoly

diff src/mgl.c @ 0:224206bc554a

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 15 Dec 2017 09:24:39 +0200
parents
children
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/mgl.c	Fri Dec 15 09:24:39 2017 +0200
     1.3 @@ -0,0 +1,75 @@
     1.4 +#include "mgl.h"
     1.5 +#include "poly.h"
     1.6 +
     1.7 +struct vertex {
     1.8 +	int32_t x, y, z;
     1.9 +	int32_t u, v;
    1.10 +};
    1.11 +
    1.12 +static void proc_prim(void);
    1.13 +
    1.14 +static int cur_prim;
    1.15 +static int vidx;
    1.16 +static struct vertex varr[4];
    1.17 +static int32_t cur_u, cur_v;
    1.18 +
    1.19 +void mgl_begin(int prim)
    1.20 +{
    1.21 +	cur_prim = prim;
    1.22 +	vidx = 0;
    1.23 +}
    1.24 +
    1.25 +void mgl_end(void)
    1.26 +{
    1.27 +	if(cur_prim) {
    1.28 +		proc_prim();
    1.29 +	}
    1.30 +	cur_prim = 0;
    1.31 +}
    1.32 +
    1.33 +void mgl_vertex3f(float x, float y, float z)
    1.34 +{
    1.35 +	mgl_vertex3x((int32_t)(x * 65536.0f), (int32_t)(y * 65536.0f), (int32_t)(z * 65536.0f));
    1.36 +}
    1.37 +
    1.38 +void mgl_vertex3x(int32_t x, int32_t y, int32_t z)
    1.39 +{
    1.40 +	varr[vidx].x = x;
    1.41 +	varr[vidx].y = y;
    1.42 +	varr[vidx].z = z;
    1.43 +	varr[vidx].u = cur_u;
    1.44 +	varr[vidx].v = cur_v;
    1.45 +
    1.46 +	if(++vidx >= cur_prim) {
    1.47 +		proc_prim();
    1.48 +		vidx = 0;
    1.49 +	}
    1.50 +}
    1.51 +
    1.52 +void mgl_texcoord2f(float u, float v)
    1.53 +{
    1.54 +	cur_u = (int32_t)(u * 65536.0);
    1.55 +	cur_v = (int32_t)(v * 65536.0);
    1.56 +}
    1.57 +
    1.58 +void mgl_texcoord2x(int32_t u, int32_t v)
    1.59 +{
    1.60 +	cur_u = u;
    1.61 +	cur_v = v;
    1.62 +}
    1.63 +
    1.64 +void proc_prim(void)
    1.65 +{
    1.66 +	int i;
    1.67 +	struct poly_vertex v[4];
    1.68 +
    1.69 +	for(i=0; i<cur_prim; i++) {
    1.70 +		v[i].x = varr[i].x;
    1.71 +		v[i].y = varr[i].y;
    1.72 +		v[i].z = varr[i].z;
    1.73 +		v[i].u = varr[i].u;
    1.74 +		v[i].v = varr[i].v;
    1.75 +	}
    1.76 +
    1.77 +	polyfill_flat(v, cur_prim);
    1.78 +}