2 * $Logfile: /Freespace2/code/Graphics/GrZbuffer.cpp $
7 * Code for the software renderer's zbuffer
10 * Revision 1.2 2002/05/07 03:16:45 theoddone33
11 * The Great Newline Fix
13 * Revision 1.1.1.1 2002/05/03 03:28:09 root
17 * 2 10/07/98 10:53a Dave
20 * 1 10/07/98 10:49a Dave
22 * 1 3/25/98 8:07p John
23 * Split software renderer into Win32 and DirectX
32 #include "grinternal.h"
34 int gr_zcount=GR_Z_COUNT;
37 uint *gr_zbuffer = NULL;
41 int gr_zbuffering = 0;
42 int gr_zbuffering_mode = 0;
43 int gr_global_zbuffering = 0;
45 // If mode is FALSE, turn zbuffer off the entire frame,
46 // no matter what people pass to gr_zbuffer_set.
47 void gr8_zbuffer_clear(int mode)
51 gr_zbuffering_mode = GR_ZBUFF_FULL;
52 gr_global_zbuffering = 1;
54 if ( (!gr_zbuffer) || (gr_screen.max_w!=gr_zbuffer_w) || (gr_screen.max_h!=gr_zbuffer_h) ) {
55 //mprintf(( "Allocating a %d x %d zbuffer\n", gr_screen.max_w, gr_screen.max_h ));
60 gr_zbuffer_w = gr_screen.max_w;
61 gr_zbuffer_h = gr_screen.max_h;
62 gr_zbuffer = (uint *)malloc(gr_zbuffer_w*gr_zbuffer_h*sizeof(uint));
64 Error( LOCATION, "Couldn't allocate zbuffer\n" );
68 memset( gr_zbuffer, 0, gr_zbuffer_w*gr_zbuffer_h*sizeof(uint) );
73 gr_zoffset += GR_Z_RANGE;
74 if ( gr_zcount >= (GR_Z_COUNT-16) ) {
75 //mprintf(( "Bing!\n" ));
76 memset( gr_zbuffer, 0, gr_zbuffer_w*gr_zbuffer_h*sizeof(uint) );
78 gr_zoffset = GR_Z_RANGE*16;
82 gr_zbuffering_mode = GR_ZBUFF_NONE;
83 gr_global_zbuffering = 0;
90 if ( !gr_global_zbuffering ) {
93 return gr_zbuffering_mode;
96 int gr8_zbuffer_set(int mode)
98 if ( !gr_global_zbuffering ) {
100 return GR_ZBUFF_NONE;
103 int tmp = gr_zbuffering_mode;
105 gr_zbuffering_mode = mode;
107 if ( gr_zbuffering_mode == GR_ZBUFF_NONE ) {