deepstone

diff src/mingl.c @ 9:bce78aaafc68

foo
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 26 Nov 2011 03:59:48 +0200
parents 0e781cc43178
children 0909996838ff
line diff
     1.1 --- a/src/mingl.c	Mon Nov 21 12:45:18 2011 +0200
     1.2 +++ b/src/mingl.c	Sat Nov 26 03:59:48 2011 +0200
     1.3 @@ -84,8 +84,19 @@
     1.4  
     1.5  void mgl_free(void)
     1.6  {
     1.7 +	int i;
     1.8 +
     1.9  	mgl_rast_cleanup();
    1.10  	free(fb.pixels);
    1.11 +	fb.pixels = 0;
    1.12 +
    1.13 +	if(fb.zbuf) {
    1.14 +		for(i=0; i<fb.num_ztiles; i++) {
    1.15 +			free(fb.zbuf[i]);
    1.16 +		}
    1.17 +		free(fb.zbuf);
    1.18 +		fb.zbuf = 0;
    1.19 +	}
    1.20  }
    1.21  
    1.22  unsigned char *mgl_framebuffer(void)
    1.23 @@ -98,6 +109,34 @@
    1.24  	memset(fb.pixels, cidx, fb.width * fb.height);
    1.25  }
    1.26  
    1.27 +void mgl_clear_depth(void)
    1.28 +{
    1.29 +	int i;
    1.30 +
    1.31 +	if(!fb.zbuf) {
    1.32 +		long num_pixels = (long)fb.width * (long)fb.height;
    1.33 +		fb.num_ztiles = (num_pixels + ZTILE_SIZE - 1) / ZTILE_SIZE;
    1.34 +
    1.35 +		if(!(fb.zbuf = malloc(fb.num_ztiles * sizeof *fb.zbuf))) {
    1.36 +			fprintf(stderr, "failed to allocate ztile array\n");
    1.37 +			abort();
    1.38 +		}
    1.39 +
    1.40 +		for(i=0; i<fb.num_ztiles; i++) {
    1.41 +			if(!(fb.zbuf[i] = malloc(ZTILE_SIZE * 2))) {
    1.42 +				fprintf(stderr, "failed to allocate ztile %d\n", i);
    1.43 +				abort();
    1.44 +			}
    1.45 +			memset(fb.zbuf[i], 0xff, ZTILE_SIZE * 2);
    1.46 +		}
    1.47 +		return;
    1.48 +	}
    1.49 +
    1.50 +	for(i=0; i<fb.num_ztiles; i++) {
    1.51 +		memset(fb.zbuf[i], 0xff, ZTILE_SIZE * 2);
    1.52 +	}
    1.53 +}
    1.54 +
    1.55  void mgl_enable(unsigned int bit)
    1.56  {
    1.57  	st.flags |= bit;