VirtualBox

Ignore:
Timestamp:
Sep 27, 2013 10:19:54 AM (11 years ago)
Author:
vboxsync
Message:

crOpenGL: seamless fixes

Location:
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server.h

    r48719 r48726  
    119119void crServerMuralVisibleRegion( CRMuralInfo *mural, GLint cRects, const GLint *pRects );
    120120void crServerMuralShow( CRMuralInfo *mural, GLint state );
    121 int crServerMuralSynchRootVr(CRMuralInfo *mural);
     121int crServerMuralSynchRootVr(CRMuralInfo *mural, bool *pfChanged);
    122122
    123123GLint crServerGenerateID(GLint *pCounter);
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c

    r48719 r48726  
    332332#endif
    333333
    334     cr_server.bUseMultipleContexts = (crGetenv( "CR_SERVER_ENABLE_MULTIPLE_CONTEXTS" ) != NULL);
     334//    cr_server.bUseMultipleContexts = (crGetenv( "CR_SERVER_ENABLE_MULTIPLE_CONTEXTS" ) != NULL);
    335335
    336336    if (cr_server.bUseMultipleContexts)
     
    443443#endif
    444444
    445     cr_server.bUseMultipleContexts = (crGetenv( "CR_SERVER_ENABLE_MULTIPLE_CONTEXTS" ) != NULL);
     445//    cr_server.bUseMultipleContexts = (crGetenv( "CR_SERVER_ENABLE_MULTIPLE_CONTEXTS" ) != NULL);
    446446
    447447    if (cr_server.bUseMultipleContexts)
     
    28492849        }
    28502850
    2851         rc = crServerMuralSynchRootVr(pMI);
     2851        rc = crServerMuralSynchRootVr(pMI, NULL);
    28522852        if (!RT_SUCCESS(rc))
    28532853        {
     
    29132913
    29142914    crHashtableWalk(cr_server.muralTable, crVBoxServerSetRootVisibleRegionCB, NULL);
    2915 #if 0
     2915
    29162916    for (i = 0; i < cr_server.screenCount; ++i)
    29172917    {
     
    29222922        CrDpRootUpdate(pDisplay);
    29232923    }
    2924 #endif
     2924
    29252925    return VINF_SUCCESS;
    29262926}
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_presenter.cpp

    r48719 r48726  
    4747    }
    4848
    49     crServerMuralVisibleRegion(&pDisplay->Mural, 0, NULL);
     49    crServerWindowVisibleRegion(&pDisplay->Mural);
     50    crServerDEntryAllVibleRegions(&pDisplay->Mural);
     51
    5052    crServerMuralShow(&pDisplay->Mural, GL_TRUE);
    5153
     
    226228            uint32_t cRects;
    227229            const RTRECT *pRects;
    228             rc = CrVrScrCompositorRegionsGet(&pDisplay->Mural.Compositor, &cRects, NULL, &pRects, NULL);
    229             if (RT_SUCCESS(rc))
    230                 crServerMuralVisibleRegion(&pDisplay->Mural, cRects, (GLint *)pRects);
     230            bool fChanged = true;
     231            if (pDisplay->Mural.fRootVrOn)
     232            {
     233                int rc = crServerMuralSynchRootVr(&pDisplay->Mural, &fChanged);
     234                if (!RT_SUCCESS(rc))
     235                {
     236                    crWarning("crServerMuralSynchRootVr failed, rc %d", rc);
     237                    fChanged = false;
     238                }
     239            }
     240
     241            if (fChanged)
     242                crServerWindowVisibleRegion(&pDisplay->Mural);
     243
     244            crServerDEntryAllVibleRegions(&pDisplay->Mural);
     245
     246            Assert(!pReplacedScrEntry);
     247        }
     248        else if (fChangeFlags & VBOXVR_COMPOSITOR_CF_ENTRY_REGIONS_CHANGED)
     249        {
     250            if (fChangeFlags & VBOXVR_COMPOSITOR_CF_ENTRY_REPLACED)
     251            {
     252                Assert(pReplacedScrEntry);
     253                Assert(pEntry);
     254                if (pDisplay->Mural.fRootVrOn)
     255                {
     256                    CR_DISPLAY_ENTRY *pReplacedDEntry = CR_DENTRY_FROM_CENTRY(pReplacedScrEntry);
     257                    Assert(CrVrScrCompositorEntryIsUsed(&pReplacedDEntry->RootVrCEntry));
     258                    Assert(!CrVrScrCompositorEntryIsUsed(&pEntry->RootVrCEntry));
     259                    CrVrScrCompositorEntryInit(&pEntry->RootVrCEntry, CrVrScrCompositorEntryTexGet(&pEntry->CEntry), NULL);
     260                    CrVrScrCompositorEntryFlagsSet(&pEntry->RootVrCEntry, CrVrScrCompositorEntryFlagsGet(&pEntry->CEntry));
     261                    CrVrScrCompositorEntryReplace(&pDisplay->Mural.RootVrCompositor, &pReplacedDEntry->RootVrCEntry, &pEntry->RootVrCEntry);
     262                }
     263            }
    231264            else
    232                 crWarning("CrVrScrCompositorRegionsGet failed, rc %d", rc);
    233 
    234             Assert(!pReplacedScrEntry);
    235         }
    236         else if (fChangeFlags & VBOXVR_COMPOSITOR_CF_ENTRY_REPLACED)
    237         {
    238             Assert(pReplacedScrEntry);
     265            {
     266                Assert(!pReplacedScrEntry);
     267                if (pDisplay->Mural.fRootVrOn)
     268                {
     269                    bool fChanged = false;
     270                    int rc = crServerMuralSynchRootVr(&pDisplay->Mural, &fChanged);
     271                    if (RT_SUCCESS(rc))
     272                    {
     273                        if (fChanged)
     274                            crServerWindowVisibleRegion(&pDisplay->Mural);
     275                    }
     276                    else
     277                        crWarning("crServerMuralSynchRootVr failed, rc %d", rc);
     278                }
     279            }
    239280        }
    240281        else
    241282        {
     283            Assert(!(fChangeFlags & VBOXVR_COMPOSITOR_CF_ENTRY_REPLACED));
    242284            Assert(!pReplacedScrEntry);
    243285        }
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_window.c

    r48095 r48726  
    216216        uint32_t cRects;
    217217        const RTRECT *pRects;
    218         int rc = crServerMuralSynchRootVr(mural);
     218        int rc = crServerMuralSynchRootVr(mural, NULL);
    219219        if (RT_SUCCESS(rc))
    220220        {
     
    504504    Assert(!CrVrScrCompositorEntryIsUsed(&pDEntry->RootVrCEntry));
    505505    CrVrScrCompositorEntryInit(&pDEntry->RootVrCEntry, CrVrScrCompositorEntryTexGet(pEntry), NULL);
     506    CrVrScrCompositorEntryFlagsSet(&pDEntry->RootVrCEntry, CrVrScrCompositorEntryFlagsGet(pEntry));
    506507    return &pDEntry->RootVrCEntry;
    507508}
    508509
    509 int crServerMuralSynchRootVr(CRMuralInfo *mural)
     510int crServerMuralSynchRootVr(CRMuralInfo *mural, bool *pfChanged)
    510511{
    511512    int rc;
     
    517518    CrVrScrCompositorClear(&mural->RootVrCompositor);
    518519
    519     rc = CrVrScrCompositorIntersectedList(&mural->Compositor, &cr_server.RootVr, &mural->RootVrCompositor, crServerMuralGetRootVrCEntry, NULL, NULL);
     520    rc = CrVrScrCompositorIntersectedList(&mural->Compositor, &cr_server.RootVr, &mural->RootVrCompositor, crServerMuralGetRootVrCEntry, NULL, pfChanged);
    520521    if (!RT_SUCCESS(rc))
    521522    {
     
    609610    if (mural->fRootVrOn)
    610611    {
    611         rc = crServerMuralSynchRootVr(mural);
     612        rc = crServerMuralSynchRootVr(mural, NULL);
    612613        if (!RT_SUCCESS(rc))
    613614        {
     
    693694            if (mural->fRootVrOn)
    694695            {
    695                 int rc = crServerMuralSynchRootVr(mural);
     696                int rc = crServerMuralSynchRootVr(mural, NULL);
    696697                if (RT_SUCCESS(rc))
    697698                {
     
    764765    }
    765766
    766     if (mural->fUseDefaultDEntry)
    767     {
    768         /* NOTE: we can do it even if !(mural->fPresentMode & CR_SERVER_REDIR_F_DISPLAY) to make sure the compositor data is always up to date */
    769         /* the compositor lock is not needed actually since we have prevented renderspu from using the compositor */
    770         /* CrVrScrCompositorLock(&mural->Compositor); */
    771         rc = CrVrScrCompositorEntryRegionsSet(&mural->Compositor, &mural->DefaultDEntry.CEntry, NULL, cRects, (const RTRECT *)pRects, false, &fRegionsChanged);
    772         /*CrVrScrCompositorUnlock(&mural->Compositor);*/
    773         if (!RT_SUCCESS(rc))
    774         {
    775             crWarning("CrVrScrCompositorEntryRegionsSet failed, rc %d", rc);
    776             goto end;
    777         }
    778     }
    779     else
    780     {
    781         fRegionsChanged = true;
     767    Assert(mural->fUseDefaultDEntry);
     768    /* NOTE: we can do it even if !(mural->fPresentMode & CR_SERVER_REDIR_F_DISPLAY) to make sure the compositor data is always up to date */
     769    /* the compositor lock is not needed actually since we have prevented renderspu from using the compositor */
     770    /* CrVrScrCompositorLock(&mural->Compositor); */
     771    rc = CrVrScrCompositorEntryRegionsSet(&mural->Compositor, &mural->DefaultDEntry.CEntry, NULL, cRects, (const RTRECT *)pRects, false, &fRegionsChanged);
     772    /*CrVrScrCompositorUnlock(&mural->Compositor);*/
     773    if (!RT_SUCCESS(rc))
     774    {
     775        crWarning("CrVrScrCompositorEntryRegionsSet failed, rc %d", rc);
     776        goto end;
    782777    }
    783778
     
    786781        if (mural->fRootVrOn)
    787782        {
    788             rc = crServerMuralSynchRootVr(mural);
     783            rc = crServerMuralSynchRootVr(mural, NULL);
    789784            if (!RT_SUCCESS(rc))
    790785            {
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