VirtualBox

Ignore:
Timestamp:
Mar 29, 2013 5:23:18 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
84635
Message:

crOpenGL: visible regions fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_window.c

    r45248 r45251  
    467467    /* the compositor lock is not needed actually since we have prevented renderspu from using the compositor */
    468468    /* CrVrScrCompositorLock(&mural->Compositor); */
    469     rc = CrVrScrCompositorEntryRemove(&mural->Compositor, &mural->CEntry);
    470     if (!RT_SUCCESS(rc))
    471     {
    472         crWarning("CrVrScrCompositorEntryRemove failed, rc %d", rc);
    473         goto end;
    474     }
    475     CrVrScrCompositorEntryInit(&mural->CEntry, &Tex);
    476     /* initially set regions to all visible since this is what some guest assume
    477      * and will not post any more visible regions command */
    478     Rect.xLeft = 0;
    479     Rect.xRight = width;
    480     Rect.yTop = 0;
    481     Rect.yBottom = height;
    482     rc = CrVrScrCompositorEntryRegionsSet(&mural->Compositor, &mural->CEntry, NULL, 1, &Rect, NULL);
    483     if (!RT_SUCCESS(rc))
    484     {
    485         crWarning("CrVrScrCompositorEntryRegionsSet failed, rc %d", rc);
    486         goto end;
    487     }
    488     /* CrVrScrCompositorUnlock(&mural->Compositor); */
    489     mural->width = width;
    490     mural->height = height;
    491 
    492     mural->fDataPresented = GL_FALSE;
    493 
    494     if (cr_server.currentMural == mural)
    495     {
    496         crStateGetCurrent()->buffer.width = mural->width;
    497         crStateGetCurrent()->buffer.height = mural->height;
    498     }
    499 
    500     if (mural->fRootVrOn)
    501     {
    502         rc = CrVrScrCompositorEntryRemove(&mural->RootVrCompositor, &mural->RootVrCEntry);
     469    if (!mural->bReceivedRects)
     470    {
     471        rc = CrVrScrCompositorEntryRemove(&mural->Compositor, &mural->CEntry);
    503472        if (!RT_SUCCESS(rc))
    504473        {
     
    506475            goto end;
    507476        }
    508         CrVrScrCompositorEntryInit(&mural->RootVrCEntry, &Tex);
     477        CrVrScrCompositorEntryInit(&mural->CEntry, &Tex);
    509478        /* initially set regions to all visible since this is what some guest assume
    510479         * and will not post any more visible regions command */
     
    513482        Rect.yTop = 0;
    514483        Rect.yBottom = height;
    515         rc = CrVrScrCompositorEntryRegionsSet(&mural->RootVrCompositor, &mural->RootVrCEntry, NULL, 1, &Rect, NULL);
     484        rc = CrVrScrCompositorEntryRegionsSet(&mural->Compositor, &mural->CEntry, NULL, 1, &Rect, NULL);
     485        if (!RT_SUCCESS(rc))
     486        {
     487            crWarning("CrVrScrCompositorEntryRegionsSet failed, rc %d", rc);
     488            goto end;
     489        }
     490    }
     491    else
     492    {
     493        rc = CrVrScrCompositorEntryTexUpdate(&mural->Compositor, &mural->CEntry, &Tex);
     494        if (!RT_SUCCESS(rc))
     495        {
     496            crWarning("CrVrScrCompositorEntryTexUpdate failed, rc %d", rc);
     497            goto end;
     498        }
     499    }
     500
     501    /* CrVrScrCompositorUnlock(&mural->Compositor); */
     502    mural->width = width;
     503    mural->height = height;
     504
     505    mural->fDataPresented = GL_FALSE;
     506
     507    if (cr_server.curClient && cr_server.curClient->currentMural == mural)
     508    {
     509        crStateGetCurrent()->buffer.width = mural->width;
     510        crStateGetCurrent()->buffer.height = mural->height;
     511    }
     512
     513    rc = CrVrScrCompositorEntryRegionsGet(&mural->Compositor, &mural->CEntry, &cRects, NULL, &pRects);
     514    if (!RT_SUCCESS(rc))
     515    {
     516        crWarning("CrVrScrCompositorEntryRegionsGet failed, rc %d", rc);
     517        goto end;
     518    }
     519
     520    if (mural->fRootVrOn)
     521    {
     522        rc = CrVrScrCompositorEntryRemove(&mural->RootVrCompositor, &mural->RootVrCEntry);
     523        if (!RT_SUCCESS(rc))
     524        {
     525            crWarning("CrVrScrCompositorEntryRemove failed, rc %d", rc);
     526            goto end;
     527        }
     528        CrVrScrCompositorEntryInit(&mural->RootVrCEntry, &Tex);
     529
     530        rc = CrVrScrCompositorEntryRegionsSet(&mural->RootVrCompositor, &mural->RootVrCEntry, NULL, cRects, pRects, NULL);
    516531        if (!RT_SUCCESS(rc))
    517532        {
     
    537552    else
    538553    {
    539         rc = CrVrScrCompositorEntryRegionsGet(&mural->Compositor, &mural->CEntry, &cRects, NULL, &pRects);
    540         if (!RT_SUCCESS(rc))
    541         {
    542             crWarning("CrVrScrCompositorEntryRegionsGet failed, rc %d", rc);
    543             goto end;
    544         }
    545554    }
    546555
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