VirtualBox

Changeset 50280 in vbox for trunk


Ignore:
Timestamp:
Jan 30, 2014 7:57:02 AM (11 years ago)
Author:
vboxsync
Message:

crOpenGL: init/cleanup fixes

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

Legend:

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

    r50277 r50280  
    414414void CrPMgrTerm();
    415415
     416typedef DECLCALLBACKPTR(bool, PFNCR_FRAMEBUFFER_ENTRIES_VISITOR_CB)(HCR_FRAMEBUFFER hFb, HCR_FRAMEBUFFER_ENTRY hEntry, void *pvContext);
     417
     418void CrFbVisitCreatedEntries(HCR_FRAMEBUFFER hFb, PFNCR_FRAMEBUFFER_ENTRIES_VISITOR_CB pfnVisitorCb, void *pvContext);
    416419int CrFbResize(HCR_FRAMEBUFFER hFb, const struct VBVAINFOSCREEN * pScreen, void *pvVRAM);
    417420bool CrFbIsEnabled(HCR_FRAMEBUFFER hFb);
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_presenter.cpp

    r50276 r50280  
    807807}
    808808
     809void CrFbVisitCreatedEntries(HCR_FRAMEBUFFER hFb, PFNCR_FRAMEBUFFER_ENTRIES_VISITOR_CB pfnVisitorCb, void *pvContext)
     810{
     811    HCR_FRAMEBUFFER_ENTRY hEntry, hNext;
     812    RTListForEachSafe(&hFb->EntriesList, hEntry, hNext, CR_FRAMEBUFFER_ENTRY, Node)
     813    {
     814        if (hEntry->Flags.fCreateNotified)
     815        {
     816            if (!pfnVisitorCb(hFb, hEntry, pvContext))
     817                return;
     818        }
     819    }
     820}
     821
     822
    809823CRHTABLE_HANDLE CrFbDDataAllocSlot(CR_FRAMEBUFFER *pFb)
    810824{
     
    815829{
    816830    HCR_FRAMEBUFFER_ENTRY hEntry, hNext;
    817     RTListForEachSafeCpp(&pFb->EntriesList, hEntry, hNext, CR_FRAMEBUFFER_ENTRY, Node)
     831    RTListForEachSafe(&pFb->EntriesList, hEntry, hNext, CR_FRAMEBUFFER_ENTRY, Node)
    818832    {
    819833        if (CrFbDDataEntryGet(hEntry, hSlot))
    820834        {
    821             pfnReleaseCb(pFb, hEntry, pvContext);
     835            if (pfnReleaseCb)
     836                pfnReleaseCb(pFb, hEntry, pvContext);
     837
    822838            CrFbDDataEntryClear(hEntry, hSlot);
    823839        }
     
    10701086    }
    10711087
     1088    static DECLCALLBACK(bool) entriesCreateCb(HCR_FRAMEBUFFER hFb, HCR_FRAMEBUFFER_ENTRY hEntry, void *pvContext)
     1089    {
     1090        int rc = ((ICrFbDisplay*)(pvContext))->EntryCreated(hFb, hEntry);
     1091        if (!RT_SUCCESS(rc))
     1092        {
     1093            WARN(("err"));
     1094        }
     1095        return true;
     1096    }
     1097
     1098    static DECLCALLBACK(bool) entriesDestroyCb(HCR_FRAMEBUFFER hFb, HCR_FRAMEBUFFER_ENTRY hEntry, void *pvContext)
     1099    {
     1100        int rc = ((ICrFbDisplay*)(pvContext))->EntryDestroyed(hFb, hEntry);
     1101        if (!RT_SUCCESS(rc))
     1102        {
     1103            WARN(("err"));
     1104        }
     1105        return true;
     1106    }
     1107
    10721108    int fbSynchAddAllEntries()
    10731109    {
     
    10791115        int rc = VINF_SUCCESS;
    10801116
     1117        CrFbVisitCreatedEntries(mpFb, entriesCreateCb, this);
     1118
    10811119        while ((pEntry = CrVrScrCompositorConstIterNext(&Iter)) != NULL)
    10821120        {
    10831121            HCR_FRAMEBUFFER_ENTRY hEntry = CrFbEntryFromCompositorEntry(pEntry);
    1084             rc = EntryCreated(mpFb, hEntry);
    1085             if (!RT_SUCCESS(rc))
    1086             {
    1087                 WARN(("err"));
    1088                 break;
    1089             }
    10901122
    10911123            rc = EntryAdded(mpFb, hEntry);
     
    11011133    }
    11021134
    1103     int fbCleanupRemoveAllEntries(bool fNotifyDestroy)
     1135    int fbCleanupRemoveAllEntries()
    11041136    {
    11051137        VBOXVR_SCR_COMPOSITOR_CONST_ITERATOR Iter;
     
    11201152            }
    11211153
    1122             if (fNotifyDestroy)
    1123             {
    1124                 rc = EntryDestroyed(mpFb, hEntry);
    1125                 if (!RT_SUCCESS(rc))
    1126                 {
    1127                     WARN(("err"));
    1128                     break;
    1129                 }
    1130             }
     1154            CrFbVisitCreatedEntries(mpFb, entriesDestroyCb, this);
    11311155        }
    11321156
     
    11451169    static DECLCALLBACK(void) slotEntryReleaseCB(HCR_FRAMEBUFFER hFb, HCR_FRAMEBUFFER_ENTRY hEntry, void *pvContext)
    11461170    {
    1147         ((ICrFbDisplay*)pvContext)->EntryDestroyed(hFb, hEntry);
    11481171    }
    11491172
     
    24772500    virtual int clearCompositor()
    24782501    {
    2479         return fbCleanupRemoveAllEntries(false);
     2502        return fbCleanupRemoveAllEntries();
    24802503    }
    24812504
     
    26822705    virtual int fbCleanup()
    26832706    {
    2684         int rc = fbCleanupRemoveAllEntries(false);
     2707        int rc = fbCleanupRemoveAllEntries();
    26852708        if (!RT_SUCCESS(rc))
    26862709        {
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