fix viewports

This commit is contained in:
David Rose 2008-05-05 06:27:00 +00:00
parent e45a354a05
commit cf12fbfef7
2 changed files with 11 additions and 27 deletions

View File

@ -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;
}
////////////////////////////////////////////////////////////////////

View File

@ -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;
}
}
}