gba-x3dtest

diff src/ggen.c @ 15:b755fb002f17

foo
author John Tsiombikas <nuclear@member.fsf.org>
date Wed, 25 Jun 2014 17:02:48 +0300
parents c398d834d64a
children
line diff
     1.1 --- a/src/ggen.c	Mon Jun 23 10:33:24 2014 +0300
     1.2 +++ b/src/ggen.c	Wed Jun 25 17:02:48 2014 +0300
     1.3 @@ -17,19 +17,25 @@
     1.4  		*cptr++ = b; \
     1.5  	} while(0)
     1.6  
     1.7 +#define TEXCOORD(u, v) \
     1.8 +	do { \
     1.9 +		*tptr++ = u; \
    1.10 +		*tptr++ = v; \
    1.11 +	} while(0)
    1.12 +
    1.13  int gen_box(struct mesh *m)
    1.14  {
    1.15  	int i;
    1.16 -	int num_faces = 12;
    1.17 -	int num_verts = num_faces * 3;
    1.18 +	int num_faces = 6;
    1.19 +	int num_verts = num_faces * 4;
    1.20  	int32_t v[8][3] = {
    1.21  		{-X1, -X1, -X1}, {X1, -X1, -X1}, {X1, -X1, X1}, {-X1, -X1, X1},
    1.22  		{-X1, X1, -X1}, {X1, X1, -X1}, {X1, X1, X1}, {-X1, X1, X1}
    1.23  	};
    1.24 -	int32_t *vptr, *cptr;
    1.25 +	int32_t *vptr, *cptr, *tptr;
    1.26  
    1.27  
    1.28 -	m->prim = X3D_TRIANGLES;
    1.29 +	m->prim = X3D_QUADS;
    1.30  	m->nverts = num_verts;
    1.31  	if(!(m->verts = malloc(num_verts * 3 * sizeof *m->verts))) {
    1.32  		return -1;
    1.33 @@ -41,71 +47,76 @@
    1.34  	}
    1.35  	cptr = m->colors;
    1.36  
    1.37 +	if(!(m->texcoords = malloc(num_verts * 2 * sizeof *m->texcoords))) {
    1.38 +		return -1;
    1.39 +	}
    1.40 +	tptr = m->texcoords;
    1.41 +
    1.42  	/* -Y */
    1.43  	VERTEX(v[0][0], v[0][1], v[0][2]);
    1.44  	VERTEX(v[1][0], v[1][1], v[1][2]);
    1.45  	VERTEX(v[2][0], v[2][1], v[2][2]);
    1.46 -	for(i=0; i<3; i++) COLOR(32768, 0, 32768);
    1.47 -
    1.48 -	VERTEX(v[0][0], v[0][1], v[0][2]);
    1.49 -	VERTEX(v[2][0], v[2][1], v[2][2]);
    1.50  	VERTEX(v[3][0], v[3][1], v[3][2]);
    1.51 -	for(i=0; i<3; i++) COLOR(65536, 0, 65536);
    1.52 +	TEXCOORD(65536, 0);
    1.53 +	TEXCOORD(0, 0);
    1.54 +	TEXCOORD(0, 65536);
    1.55 +	TEXCOORD(65536, 65536);
    1.56 +	for(i=0; i<4; i++) COLOR(65536, 0, 65536);
    1.57  
    1.58  	/* +Y */
    1.59 +	VERTEX(v[4][0], v[4][1], v[4][2]);
    1.60  	VERTEX(v[7][0], v[7][1], v[7][2]);
    1.61  	VERTEX(v[6][0], v[6][1], v[6][2]);
    1.62  	VERTEX(v[5][0], v[5][1], v[5][2]);
    1.63 -	for(i=0; i<3; i++) COLOR(0, 32768, 0);
    1.64 -
    1.65 -	VERTEX(v[7][0], v[7][1], v[7][2]);
    1.66 -	VERTEX(v[5][0], v[5][1], v[5][2]);
    1.67 -	VERTEX(v[4][0], v[4][1], v[4][2]);
    1.68 -	for(i=0; i<3; i++) COLOR(0, 65536, 0);
    1.69 +	TEXCOORD(0, 0);
    1.70 +	TEXCOORD(0, 65536);
    1.71 +	TEXCOORD(65536, 65536);
    1.72 +	TEXCOORD(65536, 0);
    1.73 +	for(i=0; i<4; i++) COLOR(0, 65536, 0);
    1.74  
    1.75  	/* -Z */
    1.76  	VERTEX(v[0][0], v[0][1], v[0][2]);
    1.77  	VERTEX(v[4][0], v[4][1], v[4][2]);
    1.78  	VERTEX(v[5][0], v[5][1], v[5][2]);
    1.79 -	for(i=0; i<3; i++) COLOR(32768, 32768, 0);
    1.80 -
    1.81 -	VERTEX(v[0][0], v[0][1], v[0][2]);
    1.82 -	VERTEX(v[5][0], v[5][1], v[5][2]);
    1.83  	VERTEX(v[1][0], v[1][1], v[1][2]);
    1.84 -	for(i=0; i<3; i++) COLOR(65536, 65536, 0);
    1.85 +	TEXCOORD(0, 0);
    1.86 +	TEXCOORD(0, 65536);
    1.87 +	TEXCOORD(65536, 65536);
    1.88 +	TEXCOORD(65536, 0);
    1.89 +	for(i=0; i<4; i++) COLOR(65536, 65536, 0);
    1.90  
    1.91  	/* +Z */
    1.92  	VERTEX(v[2][0], v[2][1], v[2][2]);
    1.93  	VERTEX(v[6][0], v[6][1], v[6][2]);
    1.94  	VERTEX(v[7][0], v[7][1], v[7][2]);
    1.95 -	for(i=0; i<3; i++) COLOR(0, 0, 32768);
    1.96 -
    1.97 -	VERTEX(v[2][0], v[2][1], v[2][2]);
    1.98 -	VERTEX(v[7][0], v[7][1], v[7][2]);
    1.99  	VERTEX(v[3][0], v[3][1], v[3][2]);
   1.100 -	for(i=0; i<3; i++) COLOR(0, 0, 65536);
   1.101 +	TEXCOORD(0, 0);
   1.102 +	TEXCOORD(0, 65536);
   1.103 +	TEXCOORD(65536, 65536);
   1.104 +	TEXCOORD(65536, 0);
   1.105 +	for(i=0; i<4; i++) COLOR(0, 0, 65536);
   1.106  
   1.107  	/* +X */
   1.108  	VERTEX(v[1][0], v[1][1], v[1][2]);
   1.109  	VERTEX(v[5][0], v[5][1], v[5][2]);
   1.110  	VERTEX(v[6][0], v[6][1], v[6][2]);
   1.111 -	for(i=0; i<3; i++) COLOR(32768, 0, 0);
   1.112 -
   1.113 -	VERTEX(v[1][0], v[1][1], v[1][2]);
   1.114 -	VERTEX(v[6][0], v[6][1], v[6][2]);
   1.115  	VERTEX(v[2][0], v[2][1], v[2][2]);
   1.116 -	for(i=0; i<3; i++) COLOR(65536, 0, 0);
   1.117 +	TEXCOORD(0, 0);
   1.118 +	TEXCOORD(0, 65536);
   1.119 +	TEXCOORD(65536, 65536);
   1.120 +	TEXCOORD(65536, 0);
   1.121 +	for(i=0; i<4; i++) COLOR(65536, 0, 0);
   1.122  
   1.123  	/* -X */
   1.124  	VERTEX(v[3][0], v[3][1], v[3][2]);
   1.125  	VERTEX(v[7][0], v[7][1], v[7][2]);
   1.126  	VERTEX(v[4][0], v[4][1], v[4][2]);
   1.127 -	for(i=0; i<3; i++) COLOR(0, 32768, 32768);
   1.128 -
   1.129 -	VERTEX(v[3][0], v[3][1], v[3][2]);
   1.130 -	VERTEX(v[4][0], v[4][1], v[4][2]);
   1.131  	VERTEX(v[0][0], v[0][1], v[0][2]);
   1.132 -	for(i=0; i<3; i++) COLOR(0, 65536, 65536);
   1.133 +	TEXCOORD(0, 0);
   1.134 +	TEXCOORD(0, 65536);
   1.135 +	TEXCOORD(65536, 65536);
   1.136 +	TEXCOORD(65536, 0);
   1.137 +	for(i=0; i<4; i++) COLOR(0, 65536, 65536);
   1.138  
   1.139  	return 0;
   1.140  }