summaryrefslogtreecommitdiff
path: root/glx/glxext.c
diff options
context:
space:
mode:
Diffstat (limited to 'glx/glxext.c')
-rw-r--r--glx/glxext.c46
1 files changed, 33 insertions, 13 deletions
diff --git a/glx/glxext.c b/glx/glxext.c
index 85d8debd4..6ba404fb1 100644
--- a/glx/glxext.c
+++ b/glx/glxext.c
@@ -107,6 +107,15 @@ static int ContextGone(__GLXcontext* cx, XID id)
*/
static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid)
{
+ ScreenPtr pScreen = glxPriv->pDraw->pScreen;
+
+ switch (glxPriv->type) {
+ case GLX_DRAWABLE_PIXMAP:
+ case GLX_DRAWABLE_PBUFFER:
+ (*pScreen->DestroyPixmap)((PixmapPtr) glxPriv->pDraw);
+ break;
+ }
+
glxPriv->pDraw = NULL;
glxPriv->drawId = 0;
__glXUnrefDrawable(glxPriv);
@@ -270,6 +279,7 @@ void GlxExtensionInit(void)
ScreenPtr pScreen;
int i;
__GLXprovider *p;
+ Bool glx_provided = False;
__glXContextRes = CreateNewResourceType((DeleteType)ContextGone);
__glXDrawableRes = CreateNewResourceType((DeleteType)DrawableGone);
@@ -280,6 +290,29 @@ void GlxExtensionInit(void)
if (!AddCallback (&ClientStateCallback, glxClientCallback, 0))
return;
+ for (i = 0; i < screenInfo.numScreens; i++) {
+ pScreen = screenInfo.screens[i];
+
+ for (p = __glXProviderStack; p != NULL; p = p->next) {
+ if (p->screenProbe(pScreen) != NULL) {
+ LogMessage(X_INFO,
+ "GLX: Initialized %s GL provider for screen %d\n",
+ p->name, i);
+ break;
+ }
+ }
+
+ if (!p)
+ LogMessage(X_INFO,
+ "GLX: no usable GL providers found for screen %d\n", i);
+ else
+ glx_provided = True;
+ }
+
+ /* don't register extension if GL is not provided on any screen */
+ if (!glx_provided)
+ return;
+
/*
** Add extension to server extensions.
*/
@@ -297,19 +330,6 @@ void GlxExtensionInit(void)
}
__glXErrorBase = extEntry->errorBase;
-
- for (i = 0; i < screenInfo.numScreens; i++) {
- pScreen = screenInfo.screens[i];
-
- for (p = __glXProviderStack; p != NULL; p = p->next) {
- if (p->screenProbe(pScreen) != NULL) {
- LogMessage(X_INFO,
- "GLX: Initialized %s GL provider for screen %d\n",
- p->name, i);
- break;
- }
- }
- }
}
/************************************************************************/