VirtualBox

Changeset 41963 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Jun 28, 2012 1:22:08 PM (13 years ago)
Author:
vboxsync
Message:

crOpenGL/wddm: fix flikering on window creation

Location:
trunk/src/VBox/Additions/common/crOpenGL
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/crOpenGL/context.c

    r39631 r41963  
    121121    winInfo->width = size[0];
    122122    winInfo->height = size[1];
    123     winInfo->mapped = 1;
     123#ifdef VBOX_WITH_WDDM
     124    if (stub.bRunningUnderWDDM)
     125        winInfo->mapped = 0;
     126    else
     127#endif
     128    {
     129        winInfo->mapped = 1;
     130    }
    124131
    125132    if (!dpyName)
     
    166173{
    167174#if defined(WINDOWS)
     175# ifdef VBOX_WITH_WDDM
     176    if (stub.bRunningUnderWDDM)
     177        return win->mapped;
     178# endif
    168179    return GL_TRUE;
    169180#elif defined(Darwin)
     
    289300    winInfo->type = UNDECIDED;
    290301    winInfo->spuWindow = -1;
    291     winInfo->mapped = -1; /* don't know */
     302#ifdef VBOX_WITH_WDDM
     303    if (stub.bRunningUnderWDDM)
     304        winInfo->mapped = 0;
     305    else
     306#endif
     307    {
     308        winInfo->mapped = -1; /* don't know */
     309    }
    292310    winInfo->pOwner = NULL;
    293311#ifdef CR_NEWWINTRACK
     
    11461164        window->width = winW;
    11471165        window->height = winH;
    1148         if (stub.trackWindowSize)
    1149             stub.spuDispatch.WindowSize( window->spuWindow, winW, winH );
    1150         if (stub.trackWindowPos)
    1151             stub.spuDispatch.WindowPosition(window->spuWindow, x, y);
    1152         if (winW > 0 && winH > 0)
    1153             stub.spu->dispatch_table.Viewport( 0, 0, winW, winH );
     1166#if defined(WINDOWS) && defined(VBOX_WITH_WDDM)
     1167        if (stubIsWindowVisible(window))
     1168#endif
     1169        {
     1170            if (stub.trackWindowSize)
     1171                stub.spuDispatch.WindowSize( window->spuWindow, winW, winH );
     1172            if (stub.trackWindowPos)
     1173                stub.spuDispatch.WindowPosition(window->spuWindow, x, y);
     1174            if (winW > 0 && winH > 0)
     1175                stub.spu->dispatch_table.Viewport( 0, 0, winW, winH );
     1176        }
    11541177#ifdef VBOX_WITH_WDDM
    11551178        stub.spu->dispatch_table.WindowVisibleRegion(window->spuWindow, 0, NULL);
  • trunk/src/VBox/Additions/common/crOpenGL/load.c

    r41638 r41963  
    831831    PVBOXCR_UPDATEWNDCB pCbData = (PVBOXCR_UPDATEWNDCB) data2;
    832832    VBOXDISPMP_REGIONS *pRegions = &pCbData->Regions;
    833     bool bChanged = false;
     833    bool bChanged = false, bDoMap = false;
    834834    HRGN hNewRgn = INVALID_HANDLE_VALUE;
    835835
     
    847847    }
    848848
    849     if (!pWindow->mapped)
    850     {
    851         pWindow->mapped = GL_TRUE;
    852         bChanged = true;
    853         crDebug("Dispatched: WindowShow(%i, %i)", pWindow->spuWindow, pWindow->mapped);
    854         stub.spu->dispatch_table.WindowShow(pWindow->spuWindow, pWindow->mapped);
    855     }
    856 
    857849    if (pRegions->pRegions->fFlags.bAddVisibleRects || pRegions->pRegions->fFlags.bSetViewRect)
    858850    {
     851        if (!pWindow->mapped)
     852        {
     853            bDoMap = true;
     854        }
     855
    859856        /* ensure data integrity */
    860857        Assert(!pRegions->pRegions->fFlags.bAddHiddenRects);
     
    871868            winH = pRegions->pRegions->RectsInfo.aRects[0].bottom - winY;
    872869
    873             if (stub.trackWindowPos && (winX!=pWindow->x || winY!=pWindow->y))
     870            if (stub.trackWindowPos && (bDoMap || winX!=pWindow->x || winY!=pWindow->y))
    874871            {
    875872                crDebug("Dispatched WindowPosition (%i)", pWindow->spuWindow);
     
    880877            }
    881878
    882             if (stub.trackWindowSize && (winW!=pWindow->width || winH!=pWindow->height))
     879            if (stub.trackWindowSize && (bDoMap || winW!=pWindow->width || winH!=pWindow->height))
    883880            {
    884881                crDebug("Dispatched WindowSize (%i)", pWindow->spuWindow);
     
    962959            }
    963960        }
     961    }
     962
     963    if (bDoMap)
     964    {
     965        pWindow->mapped = GL_TRUE;
     966        bChanged = true;
     967        crDebug("Dispatched: WindowShow(%i, %i)", pWindow->spuWindow, pWindow->mapped);
     968        stub.spu->dispatch_table.WindowShow(pWindow->spuWindow, pWindow->mapped);
    964969    }
    965970
  • trunk/src/VBox/Additions/common/crOpenGL/stub.c

    r39631 r41963  
    249249            if (bForceUpdate || winW != pWindow->width || winH != pWindow->height) {
    250250                crDebug("Dispatched WindowSize (%i)", pWindow->spuWindow);
    251                 stub.spuDispatch.WindowSize(pWindow->spuWindow, winW, winH);
     251#ifdef VBOX_WITH_WDDM
     252                if (!stub.bRunningUnderWDDM || pWindow->mapped)
     253#endif
     254                {
     255                    stub.spuDispatch.WindowSize(pWindow->spuWindow, winW, winH);
     256                }
    252257                pWindow->width = winW;
    253258                pWindow->height = winH;
     
    258263            if (bForceUpdate || winX != pWindow->x || winY != pWindow->y) {
    259264                crDebug("Dispatched WindowPosition (%i)", pWindow->spuWindow);
    260                 stub.spuDispatch.WindowPosition(pWindow->spuWindow, winX, winY);
     265#ifdef VBOX_WITH_WDDM
     266                if (!stub.bRunningUnderWDDM || pWindow->mapped)
     267#endif
     268                {
     269                    stub.spuDispatch.WindowPosition(pWindow->spuWindow, winX, winY);
     270                }
    261271                pWindow->x = winX;
    262272                pWindow->y = winY;
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