AIGLX: Refactor code common between __glXDRI{drawableDestroy,releaseTexImage}.
This commit is contained in:
parent
cd78f0d0fc
commit
005e31d3de
107
GL/glx/glxdri.c
107
GL/glx/glxdri.c
|
@ -180,6 +180,41 @@ __glXDRIenterServer(GLboolean rendering)
|
||||||
DRIWakeupHandler(NULL, 0, NULL);
|
DRIWakeupHandler(NULL, 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
__glXDRIdoReleaseTexImage(__GLXDRIscreen *screen, __GLXDRIdrawable *drawable)
|
||||||
|
{
|
||||||
|
GLuint lastOverride = screen->lastTexOffsetOverride;
|
||||||
|
|
||||||
|
if (lastOverride) {
|
||||||
|
__GLXDRIdrawable **texOffsetOverride = screen->texOffsetOverride;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < lastOverride; i++) {
|
||||||
|
if (texOffsetOverride[i] == drawable) {
|
||||||
|
|
||||||
|
texOffsetOverride[i] = NULL;
|
||||||
|
|
||||||
|
if (i + 1 == lastOverride) {
|
||||||
|
lastOverride = 0;
|
||||||
|
|
||||||
|
while (i--) {
|
||||||
|
if (texOffsetOverride[i]) {
|
||||||
|
lastOverride = i + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
screen->lastTexOffsetOverride = lastOverride;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
__glXDRIdrawableDestroy(__GLXdrawable *drawable)
|
__glXDRIdrawableDestroy(__GLXdrawable *drawable)
|
||||||
{
|
{
|
||||||
|
@ -188,37 +223,9 @@ __glXDRIdrawableDestroy(__GLXdrawable *drawable)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < screenInfo.numScreens; i++) {
|
for (i = 0; i < screenInfo.numScreens; i++) {
|
||||||
__GLXDRIscreen * const screen = (__GLXDRIscreen *)
|
__glXDRIdoReleaseTexImage((__GLXDRIscreen *)
|
||||||
glxGetScreen(screenInfo.screens[i]);
|
glxGetScreen(screenInfo.screens[i]),
|
||||||
|
private);
|
||||||
GLuint lastOverride = screen->lastTexOffsetOverride;
|
|
||||||
|
|
||||||
if (lastOverride) {
|
|
||||||
__GLXDRIdrawable **texOffsetOverride = screen->texOffsetOverride;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < lastOverride; i++) {
|
|
||||||
if (texOffsetOverride[i] == private) {
|
|
||||||
|
|
||||||
texOffsetOverride[i] = NULL;
|
|
||||||
|
|
||||||
if (i + 1 == lastOverride) {
|
|
||||||
lastOverride = 0;
|
|
||||||
|
|
||||||
while (i--) {
|
|
||||||
if (texOffsetOverride[i]) {
|
|
||||||
lastOverride = i + 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
screen->lastTexOffsetOverride = lastOverride;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
(*private->driDrawable.destroyDrawable)(&private->driDrawable);
|
(*private->driDrawable.destroyDrawable)(&private->driDrawable);
|
||||||
|
@ -561,41 +568,9 @@ __glXDRIreleaseTexImage(__GLXcontext *baseContext,
|
||||||
int buffer,
|
int buffer,
|
||||||
__GLXdrawable *pixmap)
|
__GLXdrawable *pixmap)
|
||||||
{
|
{
|
||||||
ScreenPtr pScreen = pixmap->pDraw->pScreen;
|
__glXDRIdoReleaseTexImage((__GLXDRIscreen *)
|
||||||
__GLXDRIdrawable *driDraw =
|
glxGetScreen(pixmap->pDraw->pScreen),
|
||||||
containerOf(pixmap, __GLXDRIdrawable, base);
|
containerOf(pixmap, __GLXDRIdrawable, base));
|
||||||
__GLXDRIscreen * const screen =
|
|
||||||
(__GLXDRIscreen *) glxGetScreen(pScreen);
|
|
||||||
GLuint lastOverride = screen->lastTexOffsetOverride;
|
|
||||||
|
|
||||||
if (lastOverride) {
|
|
||||||
__GLXDRIdrawable **texOffsetOverride = screen->texOffsetOverride;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < lastOverride; i++) {
|
|
||||||
if (texOffsetOverride[i] == driDraw) {
|
|
||||||
if (screen->texOffsetFinish)
|
|
||||||
screen->texOffsetFinish((PixmapPtr)pixmap->pDraw);
|
|
||||||
|
|
||||||
texOffsetOverride[i] = NULL;
|
|
||||||
|
|
||||||
if (i + 1 == lastOverride) {
|
|
||||||
lastOverride = 0;
|
|
||||||
|
|
||||||
while (i--) {
|
|
||||||
if (texOffsetOverride[i]) {
|
|
||||||
lastOverride = i + 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
screen->lastTexOffsetOverride = lastOverride;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user