VirtualBox

儲存庫 vbox 的更動 50137


忽略:
時間撮記:
2014-1-21 上午10:23:54 (11 年 以前)
作者:
vboxsync
訊息:

crOpenGL: bugfixes

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_presenter.cpp

    r50123 r50137  
    276276
    277277#define CR_PMGR_MODE_WINDOW 0x1
    278 /* CR_PMGR_MODE_WINDOW gets automatically set with it */
     278/* mutually exclusive with CR_PMGR_MODE_WINDOW */
    279279#define CR_PMGR_MODE_ROOTVR 0x2
    280280#define CR_PMGR_MODE_VRDP   0x4
     
    516516    CrVrScrCompositorEntryFlagsSet(&pEntry->Entry, fFlags);
    517517    pEntry->cRefs = 1;
     518    pEntry->Flags.Value = 0;
    518519    CrHTableCreate(&pEntry->HTable, 0);
    519520
     
    959960        {
    960961            HCR_FRAMEBUFFER_ENTRY hEntry = CrFbEntryFromCompositorEntry(pEntry);
     962            rc = EntryCreated(mpFb, hEntry);
     963            if (!RT_SUCCESS(rc))
     964            {
     965                WARN(("err"));
     966                break;
     967            }
     968
    961969            rc = EntryAdded(mpFb, hEntry);
    962970            if (!RT_SUCCESS(rc))
    963971            {
    964972                WARN(("err"));
     973                EntryDestroyed(mpFb, hEntry);
    965974                break;
    966975            }
     
    14051414        }
    14061415
     1416        uint64_t oldParentId = mParentId;
     1417
    14071418        mParentId = parentId;
    14081419
    1409         if (!parentId)
    1410             cr_server.head_spu->dispatch_table.WindowShow(mSpuWindow, false);
    1411 
    14121420        if (mSpuWindow)
    14131421        {
     1422            if (oldParentId && !parentId && mFlags.fVisible)
     1423                cr_server.head_spu->dispatch_table.WindowShow(mSpuWindow, false);
     1424
    14141425            renderspuSetWindowId(mParentId);
    14151426            renderspuReparentWindow(mSpuWindow);
    14161427            renderspuSetWindowId(cr_server.screen[0].winID);
     1428
     1429            if (parentId)
     1430                cr_server.head_spu->dispatch_table.WindowPosition(mSpuWindow, mxPos, myPos);
     1431
     1432            if (!oldParentId && parentId && mFlags.fVisible)
     1433                cr_server.head_spu->dispatch_table.WindowShow(mSpuWindow, true);
    14171434        }
    14181435
     
    29282945    u32Mode = CR_PMGR_MODE_ALL & u32Mode;
    29292946    if (CR_PMGR_MODE_ROOTVR & u32Mode)
    2930         u32Mode |= CR_PMGR_MODE_WINDOW;
     2947        u32Mode &= ~CR_PMGR_MODE_WINDOW;
    29312948    return u32Mode;
    29322949}
     
    30003017
    30013018    CR_FBDISPLAY_INFO *pInfo = &g_CrPresenter.aDisplayInfos[idScreen];
    3002     u32ModeRemove = crPMgrModeAdjustVal(u32ModeRemove);
     3019    u32ModeRemove = ((u32ModeRemove | crPMgrModeAdjustVal(u32ModeRemove)) & CR_PMGR_MODE_ALL);
    30033020    u32ModeAdd = crPMgrModeAdjustVal(u32ModeAdd);
    30043021    u32ModeRemove &= pInfo->u32Mode;
    30053022    u32ModeAdd &= ~(u32ModeRemove | pInfo->u32Mode);
     3023    uint32_t u32ModeResulting = ((pInfo->u32Mode | u32ModeAdd) & ~u32ModeRemove);
     3024    uint32_t u32Tmp = crPMgrModeAdjustVal(u32ModeResulting);
     3025    if (u32Tmp != u32ModeResulting)
     3026    {
     3027        u32ModeAdd |= (u32Tmp & ~u32ModeResulting);
     3028        u32ModeRemove |= (~u32Tmp & u32ModeResulting);
     3029        u32ModeResulting = u32Tmp;
     3030        Assert(u32ModeResulting == ((pInfo->u32Mode | u32ModeAdd) & ~u32ModeRemove));
     3031    }
    30063032    if (!u32ModeRemove && !u32ModeAdd)
    30073033        return VINF_SUCCESS;
     
    30253051        pInfo->pDpWinRootVr = NULL;
    30263052        pInfo->pDpWin = NULL;
    3027 
    3028         if (!(u32ModeRemove & CR_PMGR_MODE_WINDOW))
    3029         {
    3030             /* ensure the window is re-created */
    3031             u32ModeAdd |= CR_PMGR_MODE_WINDOW;
    3032         }
    30333053    }
    30343054    else if (u32ModeRemove & CR_PMGR_MODE_WINDOW)
     
    31073127        delete pOldWin;
    31083128
    3109     pInfo->u32Mode = ((pInfo->u32Mode | u32ModeAdd) & ~u32ModeRemove);
     3129    pInfo->u32Mode = u32ModeResulting;
    31103130
    31113131    return VINF_SUCCESS;
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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