summaryrefslogtreecommitdiff
path: root/glx
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <ssp@redhat.com>2011-03-29 13:06:36 -0400
committerSøren Sandmann Pedersen <ssp@redhat.com>2011-04-22 21:39:31 -0400
commit61a92a78cd49969f74a046fa26c3199e06365814 (patch)
tree3a720768b20e76fdd935a11a76711d9f3984290c /glx
parentc7bce22b58530239e583d91ae56312bad1630da4 (diff)
Add RegionInitBoxes(), and fix some buggy callers of RegionInit().
The interface to RegionInit(): RegionInit (RegionPtr pReg, BoxPtr rect, int size); is very confusing because it doesn't take a list of boxes, it takes *one* box, but if that box is NULL, it initializes an empty region with 'size' rectangles preallocated. Most callers of this function were correctly passing either NULL or just one box, but there were three confused cases, where the code seems to expect a region to be created from a list of boxes. This patch adds a new function RegionInitBoxes() and fixes those instances to call that instead. And yes, the pixman function to initialize a region from a list of boxes is called init_rects() because pixman is also awesome. V2: Make RegionInitBoxes() return a Bool indicating whether the call succeeded, and fix the callers to check this return value. Reviewed-by: Keith Packard <keithp@keithp.com> Signed-off-by: Søren Sandmann <ssp@redhat.com>
Diffstat (limited to 'glx')
-rw-r--r--glx/glxdri.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/glx/glxdri.c b/glx/glxdri.c
index c87ac9a65..244eac6c2 100644
--- a/glx/glxdri.c
+++ b/glx/glxdri.c
@@ -817,10 +817,19 @@ static void __glXReportDamage(__DRIdrawable *driDraw,
__glXenterServer(GL_FALSE);
- RegionInit(&region, (BoxPtr) rects, num_rects);
- RegionTranslate(&region, pDraw->x, pDraw->y);
- DamageDamageRegion(pDraw, &region);
- RegionUninit(&region);
+ if (RegionInitBoxes(&region, (BoxPtr) rects, num_rects)) {
+ RegionTranslate(&region, pDraw->x, pDraw->y);
+ DamageDamageRegion(pDraw, &region);
+ RegionUninit(&region);
+ }
+ else {
+ while (num_rects--) {
+ RegionInit (&region, (BoxPtr) rects++, 1);
+ RegionTranslate(&region, pDraw->x, pDraw->y);
+ DamageDamageRegion(pDraw, &region);
+ RegionUninit(&region);
+ }
+ }
__glXleaveServer(GL_FALSE);
}