Improve Xgl offscreen memory manager
This commit is contained in:
parent
e26a096cb6
commit
51155ca68b
@ -40,6 +40,7 @@ xglAreaMoveOut (xglAreaPtr pArea)
|
|||||||
{
|
{
|
||||||
(*pArea->pRoot->funcs->MoveOut) (pArea, pArea->closure);
|
(*pArea->pRoot->funcs->MoveOut) (pArea, pArea->closure);
|
||||||
|
|
||||||
|
pArea->closure = (pointer) 0;
|
||||||
pArea->state = xglAreaAvailable;
|
pArea->state = xglAreaAvailable;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,34 +109,37 @@ xglAreaDestroy (xglAreaPtr pArea)
|
|||||||
static xglAreaPtr
|
static xglAreaPtr
|
||||||
xglAreaGetTopScoredSubArea (xglAreaPtr pArea)
|
xglAreaGetTopScoredSubArea (xglAreaPtr pArea)
|
||||||
{
|
{
|
||||||
|
if (!pArea)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
switch (pArea->state) {
|
switch (pArea->state) {
|
||||||
case xglAreaOccupied:
|
case xglAreaOccupied:
|
||||||
return pArea;
|
return pArea;
|
||||||
case xglAreaAvailable:
|
case xglAreaAvailable:
|
||||||
break;
|
break;
|
||||||
case xglAreaDivided:
|
case xglAreaDivided: {
|
||||||
{
|
|
||||||
xglAreaPtr tmp, top = NULL;
|
xglAreaPtr tmp, top = NULL;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
{
|
|
||||||
if (pArea->pArea[i])
|
|
||||||
{
|
{
|
||||||
tmp = xglAreaGetTopScoredSubArea (pArea->pArea[i]);
|
tmp = xglAreaGetTopScoredSubArea (pArea->pArea[i]);
|
||||||
if (!tmp)
|
if (tmp && top)
|
||||||
break;
|
{
|
||||||
|
if ((*pArea->pRoot->funcs->CompareScore) (tmp,
|
||||||
if ((!top) ||
|
|
||||||
(*pArea->pRoot->funcs->CompareScore) (tmp,
|
|
||||||
tmp->closure,
|
tmp->closure,
|
||||||
top->closure) > 0)
|
top->closure) > 0)
|
||||||
top = tmp;
|
top = tmp;
|
||||||
}
|
}
|
||||||
|
else if (tmp)
|
||||||
|
{
|
||||||
|
top = tmp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return top;
|
return top;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,6 +258,7 @@ xglAreaFind (xglAreaPtr pArea,
|
|||||||
pArea->pArea[i] = NULL;
|
pArea->pArea[i] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pArea->closure = (pointer) 0;
|
||||||
pArea->state = xglAreaAvailable;
|
pArea->state = xglAreaAvailable;
|
||||||
if (xglFindArea (pArea, width, height, TRUE, closure))
|
if (xglFindArea (pArea, width, height, TRUE, closure))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
Loading…
Reference in New Issue
Block a user