gba-x3dtest

diff src/x3d.c @ 9:b0ed38f13261

working on the rasterizer
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 22 Jun 2014 05:16:10 +0300
parents fb0a0d6a8b52
children ecc022a21279
line diff
     1.1 --- a/src/x3d.c	Thu Jun 19 05:53:46 2014 +0300
     1.2 +++ b/src/x3d.c	Sun Jun 22 05:16:10 2014 +0300
     1.3 @@ -1,3 +1,4 @@
     1.4 +#include "config.h"
     1.5  #include <string.h>
     1.6  #include "x3d.h"
     1.7  #include "fixed.h"
     1.8 @@ -33,6 +34,7 @@
     1.9  static unsigned short color_count;
    1.10  
    1.11  static int32_t im_color[3];
    1.12 +static uint8_t im_color_index;
    1.13  
    1.14  void x3d_projection(int32_t fov, int32_t aspect, int32_t nearz, int32_t farz)
    1.15  {
    1.16 @@ -155,7 +157,10 @@
    1.17  	int i, j, pverts = prim;
    1.18  	const int32_t *vptr = vertex_array;
    1.19  	const int32_t *cptr = color_array;
    1.20 +#ifndef PALMODE
    1.21  	short cr, cg, cb;
    1.22 +#endif
    1.23 +	uint16_t color;
    1.24  
    1.25  	if(!vertex_array) return -1;
    1.26  
    1.27 @@ -181,6 +186,9 @@
    1.28  			if(cptr) cptr += 3;
    1.29  		}
    1.30  
    1.31 +#ifdef PALMODE
    1.32 +		color = im_color_index;
    1.33 +#else
    1.34  		cr = col[0].x >> 8;
    1.35  		cg = col[0].y >> 8;
    1.36  		cb = col[0].z >> 8;
    1.37 @@ -189,9 +197,12 @@
    1.38  		if(cg > 255) cg = 255;
    1.39  		if(cb > 255) cb = 255;
    1.40  
    1.41 +		color = RGB(cr, cg, cb);
    1.42 +#endif
    1.43 +
    1.44  		switch(pverts) {
    1.45  		case X3D_POINTS:
    1.46 -			draw_point(vpos, RGB(cr, cg, cb));
    1.47 +			draw_point(vpos, color);
    1.48  			break;
    1.49  
    1.50  		case X3D_LINES:
    1.51 @@ -199,7 +210,7 @@
    1.52  
    1.53  		case X3D_TRIANGLES:
    1.54  		case X3D_QUADS:
    1.55 -			draw_poly(pverts, vpos, RGB(cr, cg, cb));
    1.56 +			draw_poly(pverts, vpos, color);
    1.57  			break;
    1.58  		}
    1.59  	}
    1.60 @@ -239,6 +250,11 @@
    1.61  	}
    1.62  }
    1.63  
    1.64 +void x3d_color_index(int cidx)
    1.65 +{
    1.66 +	im_color_index = cidx;
    1.67 +}
    1.68 +
    1.69  void x3d_color(int32_t r, int32_t g, int32_t b)
    1.70  {
    1.71  	im_color[0] = r;