--- libgender/view.C 2004/10/18 12:24:29 1.60 +++ libgender/view.C 2004/10/23 02:27:52 1.64 @@ -92,7 +92,6 @@ } return vs; - } void view::reset_projection () @@ -132,7 +131,7 @@ glMultMatrixf (m); glTranslatef (-p.x, -p.y, -p.z); - + glGetFloatv (GL_PROJECTION_MATRIX, m); frustum.l = plane ( m(3,0) + m(0,0), m(3,1) + m(0,1), m(3,2) + m(0,2), m(3,3) + m(0,3) ); @@ -166,10 +165,6 @@ { generation++; - glColorMask (1, 1, 1, 1); - glDepthMask (1); - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - vislist.clear (); z_near = max (nz_near, 1.F); @@ -196,6 +191,15 @@ switch (pass) { case DEPTH: + glColorMask (1, 1, 1, 1); + glDepthMask (1); + + glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); + + //glEnable (GL_STENCIL_TEST); // for depth-passes + //glStencilOp (GL_KEEP, GL_KEEP, GL_REPLACE); + //glStencilFunc (GL_LESS, 1, 255); + //glEnable (GL_POLYGON_OFFSET_FILL); //glPolygonOffset (0, 5); glDisable (GL_MINMAX); @@ -203,12 +207,10 @@ glDepthFunc (GL_LESS); glEnable (GL_DEPTH_TEST); glColorMask (0, 0, 0, 0); - glDepthMask (1); glDisable (GL_DEPTH_CLAMP_NV); - world.depth_pass (*this); + world.detect_visibility (*this); - printf ("fps %f NF %f:%f vis %d CAM (%d,%d,%d)\n", timer.fps, z_near, z_far, drawn.size (), orig.x, orig.y, orig.z);//D break; case POSTDEPTH: @@ -217,6 +219,7 @@ glColorMask (0, 0, 0, 0); glDepthMask (0); glEnable (GL_DEPTH_CLAMP_NV); + glDisable (GL_STENCIL_TEST); // check occlusion queries for (vector::iterator i = occ_queries.begin (); i != occ_queries.end (); ++i) @@ -227,12 +230,11 @@ occ_queries.clear (); - for (vector::iterator i = vislist.begin (); i != vislist.end (); ++i) - (*i)->display (*this); - break; case LIGHTED: + glClear (GL_STENCIL_BUFFER_BIT); + //glEnable (GL_STENCIL_TEST); glEnable (GL_MINMAX); glDepthRange (0., 1. - DEPTH_OFFSET); glDepthFunc (GL_LESS); @@ -240,12 +242,15 @@ glDepthMask (0); glDisable (GL_DEPTH_CLAMP_NV); - for (vector::iterator i = vislist.begin (); i != vislist.end (); ++i) - (*i)->display (*this); - break; } + for (vector::iterator i = vislist.begin (); i != vislist.end (); ++i) + (*i)->display (*this); + + if (pass == LIGHTED) + printf ("fps %f NF %f:%f vis %d CAM (%d,%d,%d)\n", timer.fps, z_near, z_far, drawn.size (), orig.x, orig.y, orig.z);//D + drawn.clear (); #if 0