fix roundoff errors in zbuffer size
This commit is contained in:
parent
098fdd44e1
commit
251416cd5c
|
|
@ -251,13 +251,10 @@ prepare_display_region(DisplayRegionPipelineReader *dr,
|
|||
xsize = int(xsize * pixel_factor);
|
||||
ysize = int(ysize * pixel_factor);
|
||||
if (_aux_frame_buffer == (ZBuffer *)NULL) {
|
||||
// We add 3 to xsize, since ZB_open may resize the frame buffer
|
||||
// down by up to 3 pixels to make it fit within the
|
||||
// word-alignment rule.
|
||||
_aux_frame_buffer = ZB_open(xsize + 3, ysize, ZB_MODE_RGBA, 0, 0, 0, 0);
|
||||
_aux_frame_buffer = ZB_open(xsize, ysize, ZB_MODE_RGBA, 0, 0, 0, 0);
|
||||
} else if (_aux_frame_buffer->xsize < xsize || _aux_frame_buffer->ysize < ysize) {
|
||||
ZB_resize(_aux_frame_buffer, NULL,
|
||||
max(_aux_frame_buffer->xsize, xsize) + 3,
|
||||
max(_aux_frame_buffer->xsize, xsize),
|
||||
max(_aux_frame_buffer->ysize, ysize));
|
||||
}
|
||||
_c->zb = _aux_frame_buffer;
|
||||
|
|
@ -272,6 +269,11 @@ prepare_display_region(DisplayRegionPipelineReader *dr,
|
|||
_c->viewport.xsize = xsize;
|
||||
_c->viewport.ysize = ysize;
|
||||
set_scissor(0.0f, 1.0f, 0.0f, 1.0f);
|
||||
|
||||
nassertv(xmin >= 0 && xmin < _c->zb->xsize &&
|
||||
ymin >= 0 && ymin < _c->zb->ysize &&
|
||||
xmin + xsize >= 0 && xmin + xsize <= _c->zb->xsize &&
|
||||
ymin + ysize >= 0 && ymin + ysize <= _c->zb->ysize);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ ZBuffer *ZB_open(int xsize, int ysize, int mode,
|
|||
return NULL;
|
||||
|
||||
/* xsize must be a multiple of 4 */
|
||||
xsize = xsize & ~3;
|
||||
xsize = (xsize + 3) & ~3;
|
||||
|
||||
zb->xsize = xsize;
|
||||
zb->ysize = ysize;
|
||||
|
|
@ -107,7 +107,7 @@ void ZB_resize(ZBuffer * zb, void *frame_buffer, int xsize, int ysize)
|
|||
int size;
|
||||
|
||||
/* xsize must be a multiple of 4 */
|
||||
xsize = xsize & ~3;
|
||||
xsize = (xsize + 3) & ~3;
|
||||
|
||||
zb->xsize = xsize;
|
||||
zb->ysize = ysize;
|
||||
|
|
@ -336,6 +336,11 @@ void ZB_clear_viewport(ZBuffer * zb, int clear_z, ZPOINT z,
|
|||
PIXEL *pp;
|
||||
ZPOINT *zz;
|
||||
|
||||
nassertv(xmin >= 0 && xmin < zb->xsize &&
|
||||
ymin >= 0 && ymin < zb->ysize &&
|
||||
xmin + xsize >= 0 && xmin + xsize <= zb->xsize &&
|
||||
ymin + ysize >= 0 && ymin + ysize <= zb->ysize);
|
||||
|
||||
if (clear_z) {
|
||||
zz = zb->zbuf + xmin + ymin * zb->xsize;
|
||||
for (y = 0; y < ysize; ++y) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue