VirtualBox

Changeset 50243 in vbox for trunk/src/VBox/HostServices


Ignore:
Timestamp:
Jan 27, 2014 12:23:48 PM (11 years ago)
Author:
vboxsync
Message:

crOpenGL: bugfixes for seamless and other

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_presenter.cpp

    r50225 r50243  
    257257    struct {
    258258        uint32_t fCreateNotified : 1;
    259         uint32_t Reserved : 31;
     259        uint32_t fInList         : 1;
     260        uint32_t Reserved        : 30;
    260261    };
    261262    uint32_t Value;
     
    497498        /* 2. mark the replaced entry is destroyed */
    498499        Assert(pFbEntry->Flags.fCreateNotified);
     500        Assert(pFbEntry->Flags.fInList);
    499501        pFbEntry->Flags.fCreateNotified = 0;
     502        pFbEntry->Flags.fInList = 0;
    500503        pFbReplacingEntry->Flags.fCreateNotified = 1;
     504        pFbReplacingEntry->Flags.fInList = 1;
    501505    }
    502506    else
    503507    {
    504         if (pFb->pDisplay)
    505             pFb->pDisplay->EntryRemoved(pFb, pFbEntry);
     508        if (pFbEntry->Flags.fInList)
     509        {
     510            pFbEntry->Flags.fInList = 0;
     511            if (pFb->pDisplay)
     512                pFb->pDisplay->EntryRemoved(pFb, pFbEntry);
     513        }
    506514    }
    507515
     
    634642        pNewEntry = &hEntry->Entry;
    635643        fEntryWasInList = CrVrScrCompositorEntryIsUsed(pNewEntry);
     644
     645        Assert(!hEntry->Flags.fInList == !fEntryWasInList);
    636646    }
    637647    else
     
    656666                }
    657667
     668                Assert(!hEntry->Flags.fInList);
     669                hEntry->Flags.fInList = 1;
     670
    658671                if (pFb->pDisplay)
    659672                    pFb->pDisplay->EntryAdded(pFb, hEntry);
     
    709722        pNewEntry = &hEntry->Entry;
    710723        fEntryWasInList = CrVrScrCompositorEntryIsUsed(pNewEntry);
     724        Assert(!hEntry->Flags.fInList == !fEntryWasInList);
    711725    }
    712726    else
     
    732746                            pFb->pDisplay->EntryCreated(pFb, hEntry);
    733747                    }
     748
     749                    Assert(!hEntry->Flags.fInList);
     750                    hEntry->Flags.fInList = 1;
    734751
    735752                    if (pFb->pDisplay)
     
    18661883    }
    18671884
     1885    const RTRECT* getViewportRect()
     1886    {
     1887        return &mViewportRect;
     1888    }
     1889
    18681890    virtual int setViewportRect(const RTRECT *pViewportRect)
    18691891    {
     
    21302152    {
    21312153        CrVrScrCompositorInit(&mCompositor, NULL);
    2132         memset(&mPos, 0, sizeof (mPos));
    21332154    }
    21342155
     
    24112432    void rootVrTranslateForPos()
    24122433    {
    2413         int32_t dx = cr_server.RootVrCurPoint.x - mPos.x;
    2414         int32_t dy = cr_server.RootVrCurPoint.y - mPos.y;
    2415 
    2416         cr_server.RootVrCurPoint.x = mPos.x;
    2417         cr_server.RootVrCurPoint.y = mPos.y;
     2434        const RTRECT *pRect = getViewportRect();
     2435        const struct VBVAINFOSCREEN* pScreen = CrFbGetScreenInfo(getFramebuffer());
     2436        int32_t x = pScreen->i32OriginX;
     2437        int32_t y = pScreen->i32OriginY;
     2438        int32_t dx = cr_server.RootVrCurPoint.x - x;
     2439        int32_t dy = cr_server.RootVrCurPoint.y - y;
     2440
     2441        cr_server.RootVrCurPoint.x = x;
     2442        cr_server.RootVrCurPoint.y = y;
    24182443
    24192444        VBoxVrListTranslate(&cr_server.RootVr, dx, dy);
     
    24312456private:
    24322457    VBOXVR_SCR_COMPOSITOR mCompositor;
    2433     RTPOINT mPos;
    24342458};
    24352459
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