ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/view.C
(Generate patch)

Comparing libgender/view.C (file contents):
Revision 1.60 by root, Mon Oct 18 12:24:29 2004 UTC vs.
Revision 1.64 by root, Sat Oct 23 02:27:52 2004 UTC

90 vs->generation = ctx.generation; 90 vs->generation = ctx.generation;
91 } 91 }
92 } 92 }
93 93
94 return vs; 94 return vs;
95
96} 95}
97 96
98void view::reset_projection () 97void view::reset_projection ()
99{ 98{
100 renormalize (orig, p); 99 renormalize (orig, p);
130 //printf ("diagfact = %f\n", diagfact); 129 //printf ("diagfact = %f\n", diagfact);
131 diagfact = sqrtf (3.);//D WHY??? 130 diagfact = sqrtf (3.);//D WHY???
132 131
133 glMultMatrixf (m); 132 glMultMatrixf (m);
134 glTranslatef (-p.x, -p.y, -p.z); 133 glTranslatef (-p.x, -p.y, -p.z);
135 134
136 glGetFloatv (GL_PROJECTION_MATRIX, m); 135 glGetFloatv (GL_PROJECTION_MATRIX, m);
137 136
138 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) ); 137 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) );
139 frustum.r = 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) ); 138 frustum.r = 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) );
140 frustum.b = plane ( m(3,0) + m(1,0), m(3,1) + m(1,1), m(3,2) + m(1,2), m(3,3) + m(1,3) ); 139 frustum.b = plane ( m(3,0) + m(1,0), m(3,1) + m(1,1), m(3,2) + m(1,2), m(3,3) + m(1,3) );
164 163
165void view::begin () 164void view::begin ()
166{ 165{
167 generation++; 166 generation++;
168 167
169 glColorMask (1, 1, 1, 1);
170 glDepthMask (1);
171 glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
172
173 vislist.clear (); 168 vislist.clear ();
174 169
175 z_near = max (nz_near, 1.F); 170 z_near = max (nz_near, 1.F);
176 z_far = max (nz_far, z_near * 2.F); 171 z_far = max (nz_far, z_near * 2.F);
177 c_far = nc_far; 172 c_far = nc_far;
194 pass = p; 189 pass = p;
195 190
196 switch (pass) 191 switch (pass)
197 { 192 {
198 case DEPTH: 193 case DEPTH:
194 glColorMask (1, 1, 1, 1);
195 glDepthMask (1);
196
197 glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
198
199 //glEnable (GL_STENCIL_TEST); // for depth-passes
200 //glStencilOp (GL_KEEP, GL_KEEP, GL_REPLACE);
201 //glStencilFunc (GL_LESS, 1, 255);
202
199 //glEnable (GL_POLYGON_OFFSET_FILL); 203 //glEnable (GL_POLYGON_OFFSET_FILL);
200 //glPolygonOffset (0, 5); 204 //glPolygonOffset (0, 5);
201 glDisable (GL_MINMAX); 205 glDisable (GL_MINMAX);
202 glDepthRange (DEPTH_OFFSET, 1.); 206 glDepthRange (DEPTH_OFFSET, 1.);
203 glDepthFunc (GL_LESS); 207 glDepthFunc (GL_LESS);
204 glEnable (GL_DEPTH_TEST); 208 glEnable (GL_DEPTH_TEST);
205 glColorMask (0, 0, 0, 0); 209 glColorMask (0, 0, 0, 0);
206 glDepthMask (1);
207 glDisable (GL_DEPTH_CLAMP_NV); 210 glDisable (GL_DEPTH_CLAMP_NV);
208 211
209 world.depth_pass (*this); 212 world.detect_visibility (*this);
210 213
211 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
212 break; 214 break;
213 215
214 case POSTDEPTH: 216 case POSTDEPTH:
215 glDepthRange (0., 1. - DEPTH_OFFSET); 217 glDepthRange (0., 1. - DEPTH_OFFSET);
216 glDepthFunc (GL_LESS); 218 glDepthFunc (GL_LESS);
217 glColorMask (0, 0, 0, 0); 219 glColorMask (0, 0, 0, 0);
218 glDepthMask (0); 220 glDepthMask (0);
219 glEnable (GL_DEPTH_CLAMP_NV); 221 glEnable (GL_DEPTH_CLAMP_NV);
222 glDisable (GL_STENCIL_TEST);
220 223
221 // check occlusion queries 224 // check occlusion queries
222 for (vector<oq_data>::iterator i = occ_queries.begin (); i != occ_queries.end (); ++i) 225 for (vector<oq_data>::iterator i = occ_queries.begin (); i != occ_queries.end (); ++i)
223 { 226 {
224 occ_query oq(*this, i->data, ::occ_query_result (i->id)); 227 occ_query oq(*this, i->data, ::occ_query_result (i->id));
225 i->recv->event (oq); 228 i->recv->event (oq);
226 } 229 }
227 230
228 occ_queries.clear (); 231 occ_queries.clear ();
229 232
230 for (vector<octant *>::iterator i = vislist.begin (); i != vislist.end (); ++i)
231 (*i)->display (*this);
232
233 break; 233 break;
234 234
235 case LIGHTED: 235 case LIGHTED:
236 glClear (GL_STENCIL_BUFFER_BIT);
237 //glEnable (GL_STENCIL_TEST);
236 glEnable (GL_MINMAX); 238 glEnable (GL_MINMAX);
237 glDepthRange (0., 1. - DEPTH_OFFSET); 239 glDepthRange (0., 1. - DEPTH_OFFSET);
238 glDepthFunc (GL_LESS); 240 glDepthFunc (GL_LESS);
239 glColorMask (1, 1, 1, 1); 241 glColorMask (1, 1, 1, 1);
240 glDepthMask (0); 242 glDepthMask (0);
241 glDisable (GL_DEPTH_CLAMP_NV); 243 glDisable (GL_DEPTH_CLAMP_NV);
242 244
243 for (vector<octant *>::iterator i = vislist.begin (); i != vislist.end (); ++i)
244 (*i)->display (*this);
245
246 break; 245 break;
247 } 246 }
248 247
248 for (vector<octant *>::iterator i = vislist.begin (); i != vislist.end (); ++i)
249 (*i)->display (*this);
250
251 if (pass == LIGHTED)
252 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
253
249 drawn.clear (); 254 drawn.clear ();
250 255
251#if 0 256#if 0
252 if (pass == view::DEPTH) 257 if (pass == view::DEPTH)
253 { 258 {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines