Convert driCreateScreen and driDestroyScreen to function pointers.

We avoid leaking the symbols and will be able to replace them with
DRI2 implementation later on.
This commit is contained in:
Kristian Høgsberg 2008-03-08 19:15:50 -05:00
parent 425f9ed44e
commit a1ea6f6198
3 changed files with 23 additions and 19 deletions

View File

@ -657,9 +657,20 @@ CallCreateNewScreen(Display *dpy, int scrn, __GLXscreenConfigs *psc,
return psp;
}
void
driCreateScreen(__GLXscreenConfigs *psc, int screen,
__GLXdisplayPrivate *priv)
static void driDestroyScreen(__GLXscreenConfigs *psc)
{
/* Free the direct rendering per screen data */
if (psc->driScreen.private)
(*psc->driScreen.destroyScreen)(&psc->driScreen);
psc->driScreen.private = NULL;
if (psc->drawHash)
__glxHashDestroy(psc->drawHash);
if (psc->driver)
dlclose(psc->driver);
}
static void driCreateScreen(__GLXscreenConfigs *psc, int screen,
__GLXdisplayPrivate *priv)
{
PFNCREATENEWSCREENFUNC createNewScreen;
__GLXDRIdisplayPrivate *pdp;
@ -685,18 +696,8 @@ driCreateScreen(__GLXscreenConfigs *psc, int screen,
CallCreateNewScreen(psc->dpy, screen, psc, pdp, createNewScreen);
if (psc->driScreen.private != NULL)
__glXScrEnableDRIExtension(psc);
}
void driDestroyScreen(__GLXscreenConfigs *psc)
{
/* Free the direct rendering per screen data */
if (psc->driScreen.private)
(*psc->driScreen.destroyScreen)(&psc->driScreen);
psc->driScreen.private = NULL;
if (psc->drawHash)
__glxHashDestroy(psc->drawHash);
if (psc->driver)
dlclose(psc->driver);
psc->driDestroyScreen = driDestroyScreen;
}
/* Called from __glXFreeDisplayPrivate.
@ -735,6 +736,7 @@ __GLXDRIdisplay *driCreateDisplay(Display *dpy)
pdpyp->driPatch = patch;
pdpyp->base.destroyDisplay = driDestroyDisplay;
pdpyp->base.createScreen = driCreateScreen;
return (void *)pdpyp;
}

View File

@ -98,6 +98,9 @@ struct __GLXDRIdisplayRec {
* Method to destroy the private DRI display data.
*/
void (*destroyDisplay)(__GLXDRIdisplay *display);
void (*createScreen)(__GLXscreenConfigs *psc, int screen,
__GLXdisplayPrivate *priv);
};
/*
@ -105,9 +108,6 @@ struct __GLXDRIdisplayRec {
** dependent methods.
*/
extern __GLXDRIdisplay *driCreateDisplay(Display *dpy);
extern void driCreateScreen(__GLXscreenConfigs *psc, int screen,
__GLXdisplayPrivate *priv);
extern void driDestroyScreen(__GLXscreenConfigs *psc);
extern void DRI_glXUseXFont( Font font, int first, int count, int listbase );
@ -436,6 +436,8 @@ struct __GLXscreenConfigsRec {
int scr;
void *driver;
void (*driDestroyScreen)(__GLXscreenConfigs *psc);
#ifdef __DRI_COPY_SUB_BUFFER
__DRIcopySubBufferExtension *copySubBuffer;
#endif

View File

@ -349,7 +349,7 @@ static void FreeScreenConfigs(__GLXdisplayPrivate *priv)
Xfree((char*) psc->serverGLXexts);
#ifdef GLX_DIRECT_RENDERING
driDestroyScreen(psc);
psc->driDestroyScreen(psc);
#endif
}
XFree((char*) priv->screenConfigs);
@ -772,7 +772,7 @@ static Bool AllocAndFetchScreenConfigs(Display *dpy, __GLXdisplayPrivate *priv)
psc->scr = i;
psc->dpy = dpy;
#ifdef GLX_DIRECT_RENDERING
driCreateScreen(psc, i, priv);
(*priv->driDisplay->createScreen)(psc, i, priv);
#endif
}
SyncHandle();