儲存庫 vbox 的更動 50217
- 時間撮記:
- 2014-1-24 上午11:37:07 (11 年 以前)
- 位置:
- trunk/src/VBox
- 檔案:
-
- 修改 5 筆資料
圖例:
- 未更動
- 新增
- 刪除
-
trunk/src/VBox/GuestHost/OpenGL/include/cr_server.h
r50178 r50217 334 334 RTRECT Rect; 335 335 } CRScreenViewportInfo; 336 337 typedef struct CRWinVisibilityInfo338 {339 uint32_t cVisibleWindows : 30;340 uint32_t fLastReportedVisible : 1;341 uint32_t fVisibleChanged : 1;342 } CRWinVisibilityInfo;343 336 344 337 /* BFB (BlitFramebuffer Blitter) flags … … 485 478 uint32_t u32Caps; 486 479 487 uint32_t cDisableEvents;488 CRWinVisibilityInfo aWinVisibilityInfos[CR_MAX_GUEST_MONITORS];489 490 480 PFNCRSERVERNOTIFYEVENT pfnNotifyEventCB; 491 481 -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server.h
r50123 r50217 139 139 140 140 void crVBoxServerNotifyEvent(int32_t idScreen, uint32_t uEvent, void*pvData); 141 void crVBoxServerCheckVisibilityEvent(int32_t idScreen);142 141 143 142 void crServerRedirMuralFbClear(CRMuralInfo *mural); -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_config.c
r50095 r50217 54 54 cr_server.bUsePBOForReadback = GL_FALSE; 55 55 cr_server.bWindowsInitiallyHidden = GL_FALSE; 56 57 cr_server.cDisableEvents = 0;58 memset(cr_server.aWinVisibilityInfos, 0, sizeof (cr_server.aWinVisibilityInfos));59 56 60 57 cr_server.pfnNotifyEventCB = NULL; -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c
r50095 r50217 2634 2634 } 2635 2635 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].fVisibleChanged2654 && !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 2664 2636 void crServerWindowReparent(CRMuralInfo *pMural) 2665 2637 { … … 2725 2697 2726 2698 renderspuSetWindowId(SCREEN(0).winID); 2727 2728 /* crVBoxServerNotifyEvent(sIndex, VBOX3D_NOTIFY_EVENT_TYPE_VISIBLE_3DDATA, NULL); */2729 2699 2730 2700 return VINF_SUCCESS; … … 2790 2760 2791 2761 CrPMgrScreenChanged((uint32_t)sIndex); 2792 2793 crVBoxServerNotifyEvent(sIndex, VBOX3D_NOTIFY_EVENT_TYPE_VISIBLE_3DDATA,2794 cr_server.aWinVisibilityInfos[sIndex].cVisibleWindows ? (void*)1 : NULL);2795 2762 2796 2763 return VINF_SUCCESS; -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_presenter.cpp
r50184 r50217 1737 1737 }; 1738 1738 1739 typedef 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; 1739 1748 class CrFbDisplayWindow : public CrFbDisplayBase 1740 1749 { … … 1742 1751 CrFbDisplayWindow(CrFbWindow *pWindow, const RTRECT *pViewportRect) : 1743 1752 mpWindow(pWindow), 1744 mViewportRect(*pViewportRect) 1745 { 1753 mViewportRect(*pViewportRect), 1754 mu32Screen(~0) 1755 { 1756 mFlags.u32Value = 0; 1746 1757 CRASSERT(pWindow); 1747 1758 } … … 1927 1938 WARN(("window reparent failed")); 1928 1939 1940 mFlags.fNeForce = 1; 1941 1929 1942 return rc; 1930 1943 } 1931 1944 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 1932 1954 protected: 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 1933 1967 virtual void ueRegions() 1934 1968 { … … 2070 2104 } 2071 2105 2106 mu32Screen = CrFbGetScreenInfo(getFramebuffer())->u32ViewIndex; 2107 2072 2108 return windowSync(); 2073 2109 } … … 2083 2119 CrFbWindow *mpWindow; 2084 2120 RTRECT mViewportRect; 2121 CR_FBDISPWINDOW_FLAGS mFlags; 2122 uint32_t mu32Screen; 2085 2123 }; 2086 2124
注意:
瀏覽 TracChangeset
來幫助您使用更動檢視器