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 +}