VirtualBox

Changeset 26545 in vbox


Ignore:
Timestamp:
Feb 15, 2010 2:26:57 PM (15 years ago)
Author:
vboxsync
Message:

crOpenGL: fix assertion when application uses several windows with single opengl context (#4598)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/crOpenGL/context.c

    r16718 r26545  
    3232#include "stub.h"
    3333
     34typedef struct {
     35    WindowInfo *window;
     36    GLboolean   windowInUse;
     37} CtxCheckCurrentDrawableParams_t;
    3438
    3539/**
     
    786790}
    787791
     792static void stubCtxCheckCurrentDrawableCB(unsigned long key, void *data1, void *data2)
     793{
     794    ContextInfo *pCtx = (ContextInfo *) data1;
     795    CtxCheckCurrentDrawableParams_t *pParams = (CtxCheckCurrentDrawableParams_t *) data2;
     796
     797    if (pCtx->currentDrawable == pParams->window)
     798    {
     799        pParams->windowInUse = GL_TRUE;
     800    }
     801}
    788802
    789803GLboolean
     
    835849            if (window->spuWindow == -1)
    836850            {
     851                /*crDebug("(1)stubMakeCurrent ctx=%p(%i) window=%p(%i)", context, context->spuContext, window, window->spuWindow);*/
    837852                window->spuWindow = stub.spu->dispatch_table.WindowCreate( window->dpyName, context->visBits );
    838853                CRASSERT(!context->pOwnWindow);
     
    891906            if (window->spuWindow == -1)
    892907            {
     908                /*crDebug("(2)stubMakeCurrent ctx=%p(%i) window=%p(%i)", context, context->spuContext, window, window->spuWindow);*/
    893909                window->spuWindow = stub.spu->dispatch_table.WindowCreate( window->dpyName, context->visBits );
    894                 CRASSERT(!context->pOwnWindow);
     910                if (context->pOwnWindow)
     911                {
     912                    WindowInfo *pOwnWindow = context->pOwnWindow;
     913                    CtxCheckCurrentDrawableParams_t params;
     914
     915                    context->pOwnWindow = NULL;
     916                    context->currentDrawable=NULL;
     917
     918                    params.window = pOwnWindow;
     919                    params.windowInUse = GL_FALSE;
     920
     921                    crHashtableWalk(stub.contextTable, stubCtxCheckCurrentDrawableCB, &params);
     922
     923                    if (!params.windowInUse)
     924                    {
     925#ifdef WINDOWS
     926                        crWindowDestroy((GLint)pOwnWindow->hWnd);
     927#else
     928                        crWindowDestroy((GLint)pOwnWindow->drawable);
     929#endif
     930                    }
     931                }
    895932                context->pOwnWindow = window;
    896933            }
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette