VirtualBox

儲存庫 vbox 的更動 50217


忽略:
時間撮記:
2014-1-24 上午11:37:07 (11 年 以前)
作者:
vboxsync
訊息:

crOpenGL: notification mechanism fixes

位置:
trunk/src/VBox
檔案:
修改 5 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/GuestHost/OpenGL/include/cr_server.h

    r50178 r50217  
    334334    RTRECT Rect;
    335335} CRScreenViewportInfo;
    336 
    337 typedef struct CRWinVisibilityInfo
    338 {
    339     uint32_t cVisibleWindows        : 30;
    340     uint32_t fLastReportedVisible   : 1;
    341     uint32_t fVisibleChanged        : 1;
    342 } CRWinVisibilityInfo;
    343336
    344337/* BFB (BlitFramebuffer Blitter) flags
     
    485478    uint32_t              u32Caps;
    486479
    487     uint32_t cDisableEvents;
    488     CRWinVisibilityInfo  aWinVisibilityInfos[CR_MAX_GUEST_MONITORS];
    489 
    490480    PFNCRSERVERNOTIFYEVENT pfnNotifyEventCB;
    491481
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server.h

    r50123 r50217  
    139139
    140140void crVBoxServerNotifyEvent(int32_t idScreen, uint32_t uEvent, void*pvData);
    141 void crVBoxServerCheckVisibilityEvent(int32_t idScreen);
    142141
    143142void crServerRedirMuralFbClear(CRMuralInfo *mural);
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_config.c

    r50095 r50217  
    5454    cr_server.bUsePBOForReadback = GL_FALSE;
    5555    cr_server.bWindowsInitiallyHidden = GL_FALSE;
    56 
    57     cr_server.cDisableEvents = 0;
    58     memset(cr_server.aWinVisibilityInfos, 0, sizeof (cr_server.aWinVisibilityInfos));
    5956
    6057    cr_server.pfnNotifyEventCB = NULL;
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c

    r50095 r50217  
    26342634}
    26352635
    2636 void crVBoxServerCheckVisibilityEvent(int32_t idScreen)
    2637 {
    2638     if (cr_server.cDisableEvents)
    2639         return;
    2640 
    2641     if (idScreen < 0)
    2642     {
    2643         int32_t i = 0;
    2644         for (; i < cr_server.screenCount; ++i)
    2645         {
    2646             crVBoxServerCheckVisibilityEvent(i);
    2647         }
    2648         return;
    2649     }
    2650 
    2651     CRASSERT(idScreen < cr_server.screenCount);
    2652 
    2653     if (!cr_server.aWinVisibilityInfos[idScreen].fVisibleChanged
    2654             && !cr_server.aWinVisibilityInfos[idScreen].cVisibleWindows == !cr_server.aWinVisibilityInfos[idScreen].fLastReportedVisible)
    2655         return;
    2656 
    2657     crVBoxServerNotifyEvent(idScreen, VBOX3D_NOTIFY_EVENT_TYPE_VISIBLE_3DDATA,
    2658             cr_server.aWinVisibilityInfos[idScreen].cVisibleWindows ? (void*)1 : NULL);
    2659 
    2660     cr_server.aWinVisibilityInfos[idScreen].fLastReportedVisible = cr_server.aWinVisibilityInfos[idScreen].cVisibleWindows ? 1 : 0;
    2661     cr_server.aWinVisibilityInfos[idScreen].fVisibleChanged = 0;
    2662 }
    2663 
    26642636void crServerWindowReparent(CRMuralInfo *pMural)
    26652637{
     
    27252697
    27262698    renderspuSetWindowId(SCREEN(0).winID);
    2727 
    2728 /*    crVBoxServerNotifyEvent(sIndex, VBOX3D_NOTIFY_EVENT_TYPE_VISIBLE_3DDATA, NULL); */
    27292699
    27302700    return VINF_SUCCESS;
     
    27902760
    27912761    CrPMgrScreenChanged((uint32_t)sIndex);
    2792 
    2793     crVBoxServerNotifyEvent(sIndex, VBOX3D_NOTIFY_EVENT_TYPE_VISIBLE_3DDATA,
    2794             cr_server.aWinVisibilityInfos[sIndex].cVisibleWindows ? (void*)1 : NULL);
    27952762
    27962763    return VINF_SUCCESS;
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_presenter.cpp

    r50184 r50217  
    17371737};
    17381738
     1739typedef union CR_FBDISPWINDOW_FLAGS
     1740{
     1741    struct {
     1742        uint32_t fNeVisible : 1;
     1743        uint32_t fNeForce   : 1;
     1744        uint32_t Reserved   : 30;
     1745    };
     1746    uint32_t u32Value;
     1747} CR_FBDISPWINDOW_FLAGS;
    17391748class CrFbDisplayWindow : public CrFbDisplayBase
    17401749{
     
    17421751    CrFbDisplayWindow(CrFbWindow *pWindow, const RTRECT *pViewportRect) :
    17431752        mpWindow(pWindow),
    1744         mViewportRect(*pViewportRect)
    1745     {
     1753        mViewportRect(*pViewportRect),
     1754        mu32Screen(~0)
     1755    {
     1756        mFlags.u32Value = 0;
    17461757        CRASSERT(pWindow);
    17471758    }
     
    19271938            WARN(("window reparent failed"));
    19281939
     1940        mFlags.fNeForce = 1;
     1941
    19291942        return rc;
    19301943    }
    19311944
     1945    virtual bool isVisible()
     1946    {
     1947        HCR_FRAMEBUFFER hFb = getFramebuffer();
     1948        if (!hFb)
     1949            return false;
     1950        const struct VBOXVR_SCR_COMPOSITOR* pCompositor = CrFbGetCompositor(hFb);
     1951        return CrVrScrCompositorIsEmpty(pCompositor);
     1952    }
     1953
    19321954protected:
     1955    virtual void onUpdateEnd()
     1956    {
     1957        CrFbDisplayBase::onUpdateEnd();
     1958        bool fVisible = isVisible();
     1959        if (mFlags.fNeVisible != fVisible || mFlags.fNeForce)
     1960        {
     1961            crVBoxServerNotifyEvent(mu32Screen, VBOX3D_NOTIFY_EVENT_TYPE_VISIBLE_3DDATA, fVisible ? (void*)1 : NULL);
     1962            mFlags.fNeVisible = fVisible;
     1963            mFlags.fNeForce = 0;
     1964        }
     1965    }
     1966
    19331967    virtual void ueRegions()
    19341968    {
     
    20702104        }
    20712105
     2106        mu32Screen = CrFbGetScreenInfo(getFramebuffer())->u32ViewIndex;
     2107
    20722108        return windowSync();
    20732109    }
     
    20832119    CrFbWindow *mpWindow;
    20842120    RTRECT mViewportRect;
     2121    CR_FBDISPWINDOW_FLAGS mFlags;
     2122    uint32_t mu32Screen;
    20852123};
    20862124
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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