2 * $Logfile: /Freespace2/code/Graphics/GrZbuffer.cpp $
7 * Code for the software renderer's zbuffer
10 * Revision 1.1 2002/05/03 03:28:09 root
14 * 2 10/07/98 10:53a Dave
17 * 1 10/07/98 10:49a Dave
19 * 1 3/25/98 8:07p John
20 * Split software renderer into Win32 and DirectX
29 #include "grinternal.h"
31 int gr_zcount=GR_Z_COUNT;
34 uint *gr_zbuffer = NULL;
38 int gr_zbuffering = 0;
39 int gr_zbuffering_mode = 0;
40 int gr_global_zbuffering = 0;
42 // If mode is FALSE, turn zbuffer off the entire frame,
43 // no matter what people pass to gr_zbuffer_set.
44 void gr8_zbuffer_clear(int mode)
48 gr_zbuffering_mode = GR_ZBUFF_FULL;
49 gr_global_zbuffering = 1;
51 if ( (!gr_zbuffer) || (gr_screen.max_w!=gr_zbuffer_w) || (gr_screen.max_h!=gr_zbuffer_h) ) {
52 //mprintf(( "Allocating a %d x %d zbuffer\n", gr_screen.max_w, gr_screen.max_h ));
57 gr_zbuffer_w = gr_screen.max_w;
58 gr_zbuffer_h = gr_screen.max_h;
59 gr_zbuffer = (uint *)malloc(gr_zbuffer_w*gr_zbuffer_h*sizeof(uint));
61 Error( LOCATION, "Couldn't allocate zbuffer\n" );
65 memset( gr_zbuffer, 0, gr_zbuffer_w*gr_zbuffer_h*sizeof(uint) );
70 gr_zoffset += GR_Z_RANGE;
71 if ( gr_zcount >= (GR_Z_COUNT-16) ) {
72 //mprintf(( "Bing!\n" ));
73 memset( gr_zbuffer, 0, gr_zbuffer_w*gr_zbuffer_h*sizeof(uint) );
75 gr_zoffset = GR_Z_RANGE*16;
79 gr_zbuffering_mode = GR_ZBUFF_NONE;
80 gr_global_zbuffering = 0;
87 if ( !gr_global_zbuffering ) {
90 return gr_zbuffering_mode;
93 int gr8_zbuffer_set(int mode)
95 if ( !gr_global_zbuffering ) {
100 int tmp = gr_zbuffering_mode;
102 gr_zbuffering_mode = mode;
104 if ( gr_zbuffering_mode == GR_ZBUFF_NONE ) {