示例#1
0
文件: glxext.c 项目: Agnesa/xserver
/*
** Free a context.
*/
GLboolean
__glXFreeContext(__GLXcontext * cx)
{
    if (cx->idExists || cx->isCurrent)
        return GL_FALSE;

    free(cx->feedbackBuf);
    free(cx->selectBuf);
    free(cx->real_ids);
    free(cx->real_vids);

    if (cx->pGlxPixmap) {
        /*
         ** The previous drawable was a glx pixmap, release it.
         */
        cx->pGlxPixmap->refcnt--;
        __glXFreeGLXPixmap(cx->pGlxPixmap);
        cx->pGlxPixmap = 0;
    }

    if (cx->pGlxReadPixmap) {
        /*
         ** The previous drawable was a glx pixmap, release it.
         */
        cx->pGlxReadPixmap->refcnt--;
        __glXFreeGLXPixmap(cx->pGlxReadPixmap);
        cx->pGlxReadPixmap = 0;
    }

    if (cx->pGlxWindow) {
        /*
         ** The previous drawable was a glx window, release it.
         */
        cx->pGlxWindow->refcnt--;
        __glXFreeGLXWindow(cx->pGlxWindow);
        cx->pGlxWindow = 0;
    }

    if (cx->pGlxReadWindow) {
        /*
         ** The previous drawable was a glx window, release it.
         */
        cx->pGlxReadWindow->refcnt--;
        __glXFreeGLXWindow(cx->pGlxReadWindow);
        cx->pGlxReadWindow = 0;
    }

    free(cx);

    if (cx == __glXLastContext) {
        __glXFlushContextCache();
    }

    return GL_TRUE;
}
static int PixmapGone(__GLXpixmap *pGlxPixmap, XID id)
{

    pGlxPixmap->idExists = False;
    __glXFreeGLXPixmap( pGlxPixmap );

    return True;
}