deepstone

diff src/mingl.c @ 3:0e781cc43178

adding textures
author John Tsiombikas <nuclear@member.fsf.org>
date Mon, 21 Nov 2011 10:16:09 +0200
parents f04884489bad
children bce78aaafc68
line diff
     1.1 --- a/src/mingl.c	Mon Nov 21 10:15:37 2011 +0200
     1.2 +++ b/src/mingl.c	Mon Nov 21 10:16:09 2011 +0200
     1.3 @@ -23,11 +23,13 @@
     1.4  #include "mingl.h"
     1.5  #include "mglimpl.h"
     1.6  
     1.7 +
     1.8  #define DOT(a, b)	((a).x * (b).x + (a).y * (b).y + (a).z * (b).z)
     1.9  
    1.10  static void transform(vec4_t *res, vec4_t *v, float *mat);
    1.11  static void transform3(vec3_t *res, vec3_t *v, float *mat);
    1.12  static void vertex_proc(struct vertex *vert);
    1.13 +static int calc_shiftmask(int val, int *shiftp, unsigned int *maskp);
    1.14  
    1.15  static struct state st;
    1.16  static struct framebuffer fb;
    1.17 @@ -106,6 +108,11 @@
    1.18  	st.flags &= ~bit;
    1.19  }
    1.20  
    1.21 +int mgl_isenabled(unsigned int bit)
    1.22 +{
    1.23 +	return (st.flags & bit) != 0;
    1.24 +}
    1.25 +
    1.26  void mgl_front_face(int ff)
    1.27  {
    1.28  	st.frontface = ff;
    1.29 @@ -464,3 +471,30 @@
    1.30  	float x = nr * tan(vfov_rad / 2.0);
    1.31  	mgl_frustum(-aspect * x, aspect * x, -x, x, nr, fr);
    1.32  }
    1.33 +
    1.34 +void mgl_teximage(int width, int height, unsigned char *pixels)
    1.35 +{
    1.36 +	st.tex.width = width;
    1.37 +	st.tex.height = height;
    1.38 +	st.tex.pixels = pixels;
    1.39 +
    1.40 +	if(calc_shiftmask(width, &st.tex.xshift, &st.tex.xmask) == -1 ||
    1.41 +			calc_shiftmask(height, &st.tex.yshift, &st.tex.ymask) == -1) {
    1.42 +		st.tex.pixels = 0;
    1.43 +	}
    1.44 +}
    1.45 +
    1.46 +#define MAX_SHIFT	12
    1.47 +static int calc_shiftmask(int val, int *shiftp, unsigned int *maskp)
    1.48 +{
    1.49 +	int i;
    1.50 +
    1.51 +	for(i=0; i<MAX_SHIFT; i++) {
    1.52 +		if((val >> i) == 1) {
    1.53 +			*shiftp = i;
    1.54 +			*maskp = ~(0xffff << i);
    1.55 +			return 0;
    1.56 +		}
    1.57 +	}
    1.58 +	return -1;
    1.59 +}