VirtualBox

Changeset 50394 in vbox


Ignore:
Timestamp:
Feb 10, 2014 3:33:47 PM (11 years ago)
Author:
vboxsync
Message:

crOpenGL: greyed-out 3D image on VM pause

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/HostServices/VBoxCrOpenGLSvc.h

    r50364 r50394  
    4949#define SHCRGL_HOST_FN_VIEWPORT_CHANGED2 (23)
    5050#define SHCRGL_HOST_FN_TAKE_SCREENSHOT (24)
     51#define SHCRGL_HOST_FN_WINDOWS_SHOW (25)
    5152/* crOpenGL guest functions */
    5253#define SHCRGL_GUEST_FN_WRITE       (2)
  • trunk/src/VBox/GuestHost/OpenGL/include/cr_server.h

    r50364 r50394  
    526526} CR_SCREENSHOT;
    527527
     528extern DECLEXPORT(int) crServerVBoxWindowsShow(bool fShow);
    528529extern DECLEXPORT(int) crServerVBoxScreenshotGet(uint32_t u32Screen, uint32_t width, uint32_t height, uint32_t pitch, void *pvBuffer, CR_SCREENSHOT *pScreenshot);
    529530extern DECLEXPORT(void) crServerVBoxScreenshotRelease(CR_SCREENSHOT *pScreenshot);
  • trunk/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp

    r50364 r50394  
    14451445            break;
    14461446        }
     1447        case SHCRGL_HOST_FN_WINDOWS_SHOW:
     1448        {
     1449            /* Verify parameter count and types. */
     1450            if (cParms != 1)
     1451            {
     1452                WARN(("invalid parameter"));
     1453                rc = VERR_INVALID_PARAMETER;
     1454                break;
     1455            }
     1456
     1457            if (paParms[0].type != VBOX_HGCM_SVC_PARM_32BIT)
     1458            {
     1459                WARN(("invalid parameter"));
     1460                rc = VERR_INVALID_PARAMETER;
     1461                break;
     1462            }
     1463
     1464            rc = crServerVBoxWindowsShow(paParms[0].u.uint32);
     1465            if (!RT_SUCCESS(rc))
     1466                WARN(("crServerVBoxWindowsShow failed rc %d", rc));
     1467
     1468            break;
     1469        }
    14471470        default:
    14481471            rc = VERR_NOT_IMPLEMENTED;
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server.h

    r50364 r50394  
    408408int CrPMgrModeVrdp(bool fEnable);
    409409int CrPMgrModeRootVr(bool fEnable);
     410int CrPMgrModeWinVisible(bool fEnable);
    410411int CrPMgrRootVrUpdate();
    411412int CrPMgrViewportUpdate(uint32_t idScreen);
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_muralfbo.cpp

    r50364 r50394  
    746746
    747747    return VINF_SUCCESS;
     748}
     749
     750extern DECLEXPORT(int) crServerVBoxWindowsShow(bool fShow)
     751{
     752    return CrPMgrModeWinVisible(fShow);
    748753}
    749754
     
    829834    Assert(mural->aidColorTexs[CR_SERVER_FBO_FB_IDX(mural)]);
    830835}
     836
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_presenter.cpp

    r50378 r50394  
    136136    CR_FBMAP FramebufferInitMap;
    137137    CR_FRAMEBUFFER aFramebuffers[CR_MAX_GUEST_MONITORS];
     138    bool fWindowsForceHidden;
    138139    uint32_t cbTmpBuf;
    139140    void *pvTmpBuf;
     
    24342435    }
    24352436
     2437    int winVisibilityChanged()
     2438    {
     2439        int rc = mpWindow->UpdateBegin();
     2440        if (RT_SUCCESS(rc))
     2441        {
     2442            rc = mpWindow->SetVisible(!g_CrPresenter.fWindowsForceHidden);
     2443            if (!RT_SUCCESS(rc))
     2444                WARN(("SetVisible failed, rc %d", rc));
     2445
     2446            mpWindow->UpdateEnd();
     2447        }
     2448        else
     2449            WARN(("UpdateBegin failed, rc %d", rc));
     2450
     2451        return rc;
     2452    }
     2453
    24362454protected:
    24372455    virtual void onUpdateEnd()
     
    25642582        }
    25652583
    2566         rc = mpWindow->SetVisible(true);
     2584        rc = mpWindow->SetVisible(!g_CrPresenter.fWindowsForceHidden);
    25672585        if (!RT_SUCCESS(rc))
    25682586        {
     
    38203838}
    38213839
     3840int CrPMgrModeWinVisible(bool fEnable)
     3841{
     3842    if (!g_CrPresenter.fWindowsForceHidden == !!fEnable)
     3843        return VINF_SUCCESS;
     3844
     3845    g_CrPresenter.fWindowsForceHidden = !fEnable;
     3846
     3847    for (HCR_FRAMEBUFFER hFb = CrPMgrFbGetFirstEnabled();
     3848            hFb;
     3849            hFb = CrPMgrFbGetNextEnabled(hFb))
     3850    {
     3851        uint32_t idScreen = CrFbGetScreenInfo(hFb)->u32ViewIndex;
     3852
     3853        CR_FBDISPLAY_INFO *pInfo = &g_CrPresenter.aDisplayInfos[idScreen];
     3854
     3855        if (pInfo->pDpWin)
     3856            pInfo->pDpWin->winVisibilityChanged();
     3857    }
     3858
     3859    return VINF_SUCCESS;
     3860}
     3861
    38223862int CrPMgrRootVrUpdate()
    38233863{
  • trunk/src/VBox/Main/include/DisplayImpl.h

    r50364 r50394  
    331331    bool        mfPendingVideoAccelEnable;
    332332    bool        mfMachineRunning;
     333#ifdef VBOX_WITH_CROGL
     334    bool        mfCrOglDataHidden;
     335#endif
    333336
    334337    uint8_t    *mpu8VbvaPartial;
     
    377380    void videoAccelFlush(void);
    378381
     382#ifdef VBOX_WITH_CROGL
     383    int crOglWindowsShow(bool fShow);
     384#endif
     385
    379386#ifdef VBOX_WITH_HGSMI
    380387    volatile uint32_t mu32UpdateVBVAFlags;
  • trunk/src/VBox/Main/src-client/DisplayImpl.cpp

    r50364 r50394  
    116116
    117117    mfMachineRunning = false;
     118#ifdef VBOX_WITH_CROGL
     119    mfCrOglDataHidden = false;
     120#endif
    118121
    119122    mpu8VbvaPartial = NULL;
     
    617620}
    618621
     622#ifdef VBOX_WITH_CROGL
     623int Display::crOglWindowsShow(bool fShow)
     624{
     625    if (!mfCrOglDataHidden == !!fShow)
     626        return VINF_SUCCESS;
     627
     628    VMMDev *pVMMDev = mParent->getVMMDev();
     629    if (!pVMMDev)
     630    {
     631        AssertMsgFailed(("no vmmdev\n"));
     632        return VERR_INVALID_STATE;
     633    }
     634
     635    if (!mhCrOglSvc)
     636    {
     637        AssertMsgFailed(("no mhCrOglSvc\n"));
     638        return VERR_INVALID_STATE;
     639    }
     640
     641    VBOXHGCMSVCPARM parm;
     642
     643    parm.type = VBOX_HGCM_SVC_PARM_32BIT;
     644    parm.u.uint32 = (uint32_t)fShow;
     645
     646    int rc = pVMMDev->hgcmHostFastCallAsync(mhCrOglSvc, SHCRGL_HOST_FN_WINDOWS_SHOW, &parm, NULL, NULL);
     647    if (RT_SUCCESS(rc))
     648        mfCrOglDataHidden = !fShow;
     649    else
     650        AssertMsgFailed(("hgcmHostFastCallAsync failed rc %n", rc));
     651
     652    return rc;
     653}
     654#endif
     655
     656
    619657// IEventListener method
    620658STDMETHODIMP Display::HandleEvent(IEvent * aEvent)
     
    639677
    640678                mfMachineRunning = true;
     679
     680#ifdef VBOX_WITH_CROGL
     681                crOglWindowsShow(true);
     682#endif
    641683            }
    642684            else
     685            {
    643686                mfMachineRunning = false;
     687
     688#ifdef VBOX_WITH_CROGL
     689                if (machineState == MachineState_Paused)
     690                    crOglWindowsShow(false);
     691#endif
     692            }
    644693            break;
    645694        }
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