newpoly

view 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 source
1 #include "mgl.h"
2 #include "poly.h"
4 struct vertex {
5 int32_t x, y, z;
6 int32_t u, v;
7 };
9 static void proc_prim(void);
11 static int cur_prim;
12 static int vidx;
13 static struct vertex varr[4];
14 static int32_t cur_u, cur_v;
16 void mgl_begin(int prim)
17 {
18 cur_prim = prim;
19 vidx = 0;
20 }
22 void mgl_end(void)
23 {
24 if(cur_prim) {
25 proc_prim();
26 }
27 cur_prim = 0;
28 }
30 void mgl_vertex3f(float x, float y, float z)
31 {
32 mgl_vertex3x((int32_t)(x * 65536.0f), (int32_t)(y * 65536.0f), (int32_t)(z * 65536.0f));
33 }
35 void mgl_vertex3x(int32_t x, int32_t y, int32_t z)
36 {
37 varr[vidx].x = x;
38 varr[vidx].y = y;
39 varr[vidx].z = z;
40 varr[vidx].u = cur_u;
41 varr[vidx].v = cur_v;
43 if(++vidx >= cur_prim) {
44 proc_prim();
45 vidx = 0;
46 }
47 }
49 void mgl_texcoord2f(float u, float v)
50 {
51 cur_u = (int32_t)(u * 65536.0);
52 cur_v = (int32_t)(v * 65536.0);
53 }
55 void mgl_texcoord2x(int32_t u, int32_t v)
56 {
57 cur_u = u;
58 cur_v = v;
59 }
61 void proc_prim(void)
62 {
63 int i;
64 struct poly_vertex v[4];
66 for(i=0; i<cur_prim; i++) {
67 v[i].x = varr[i].x;
68 v[i].y = varr[i].y;
69 v[i].z = varr[i].z;
70 v[i].u = varr[i].u;
71 v[i].v = varr[i].v;
72 }
74 polyfill_flat(v, cur_prim);
75 }