Browse Source

fix viewports

David Rose 17 years ago
parent
commit
cf12fbfef7

+ 4 - 21
panda/src/tinydisplay/tinyGraphicsStateGuardian.cxx

@@ -720,33 +720,16 @@ prepare_display_region(DisplayRegionPipelineReader *dr,
   nassertv(dr != (DisplayRegionPipelineReader *)NULL);
   GraphicsStateGuardian::prepare_display_region(dr, stereo_channel);
 
-  int l, b, w, h;
-  dr->get_region_pixels(l, b, w, h);
-  int xmin = GLint(l);
-  int ymin = GLint(b);
-  int xsize = GLsizei(w);
-  int ysize = GLsizei(h);
-  
-  int xsize_req = xmin + xsize;
-  int ysize_req = ymin + ysize;
-  
-  if (_c->gl_resize_viewport && 
-      _c->gl_resize_viewport(_c, &xsize_req, &ysize_req) != 0) {
-    gl_fatal_error("glViewport: error while resizing display");
-  }
-  
-  xsize = xsize_req - xmin;
-  ysize = ysize_req - ymin;
-  if (xsize <= 0 || ysize <= 0) {
-    gl_fatal_error("glViewport: size too small");
-  }
+  int xmin, ymin, xsize, ysize;
+  dr->get_region_pixels_i(xmin, ymin, xsize, ysize);
   
   _c->viewport.xmin = xmin;
   _c->viewport.ymin = ymin;
   _c->viewport.xsize = xsize;
   _c->viewport.ysize = ysize;
-  
   gl_eval_viewport(_c);
+
+  GLViewport *v = &_c->viewport;
 }
 
 ////////////////////////////////////////////////////////////////////

+ 7 - 6
panda/src/tinydisplay/zbuffer.c

@@ -320,20 +320,21 @@ void ZB_clear_viewport(ZBuffer * zb, int clear_z, int z,
   int y;
   PIXEL *pp;
   unsigned short *zz;
-  
+  int ytop;
+
   if (clear_z) {
-    zz = zb->zbuf + xmin;
-    for (y = ymin; y < ymin + ysize; ++y) {
+    zz = zb->zbuf + xmin + ymin * zb->xsize;
+    for (y = 0; y < ysize; ++y) {
       memset_s(zz, z, xsize);
       zz += zb->xsize;
     }
   }
   if (clear_color) {
     color = RGBA_TO_PIXEL(r, g, b, a);
-    pp = zb->pbuf + xmin;
-    for (y = ymin; y < ymin + ysize; ++y) {
+    pp = zb->pbuf + xmin + ymin * zb->xsize;
+    for (y = 0; y < ysize; ++y) {
       memset_l(pp, color, xsize);
-      pp = (PIXEL *) ((char *) pp + zb->linesize);
+      pp += zb->xsize;
     }
   }
 }