VirtualBox

Changeset 50250 in vbox for trunk/src/VBox/Main/src-client


Ignore:
Timestamp:
Jan 28, 2014 9:13:59 AM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
91870
Message:

crOpenGL: async notifications

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-client/DisplayImpl.cpp

    r50178 r50250  
    935935                VMMDev *pVMMDev = mParent->getVMMDev();
    936936                if (pVMMDev)
    937                     pVMMDev->hgcmHostCall("VBoxSharedCrOpenGL", SHCRGL_HOST_FN_SCREEN_CHANGED, SHCRGL_CPARMS_SCREEN_CHANGED, &parm);
     937                {
     938                    if (mhCrOglSvc)
     939                        pVMMDev->hgcmHostFastCallAsync(mhCrOglSvc, SHCRGL_HOST_FN_SCREEN_CHANGED, &parm, NULL, NULL);
     940                    else
     941                        AssertMsgFailed(("mhCrOglSvc is NULL\n"));
     942                }
    938943            }
    939944        }
     
    12511256    if (is3denabled && vmmDev)
    12521257    {
    1253         VBOXHGCMSVCPARM parms[2];
    1254 
    1255         parms[0].type = VBOX_HGCM_SVC_PARM_PTR;
    1256         parms[0].u.pointer.addr = pRect;
    1257         parms[0].u.pointer.size = 0;  /* We don't actually care. */
    1258         parms[1].type = VBOX_HGCM_SVC_PARM_32BIT;
    1259         parms[1].u.uint32 = cRect;
    1260 
    1261         vmmDev->hgcmHostCall("VBoxSharedCrOpenGL", SHCRGL_HOST_FN_SET_VISIBLE_REGION, 2, &parms[0]);
     1258        if (mhCrOglSvc)
     1259        {
     1260            RTRECT *pRectsCopy = (RTRECT *)RTMemAlloc(  RT_MAX(cRect, 1)
     1261                                                             * sizeof (RTRECT));
     1262            if (pRectsCopy)
     1263            {
     1264                memcpy(pRectsCopy, pRect, cRect * sizeof (RTRECT));
     1265
     1266                VBOXHGCMSVCPARM parm;
     1267
     1268                parm.type = VBOX_HGCM_SVC_PARM_PTR;
     1269                parm.u.pointer.addr = pRectsCopy;
     1270                parm.u.pointer.size = cRect * sizeof (RTRECT);
     1271
     1272                vmmDev->hgcmHostFastCallAsync(mhCrOglSvc, SHCRGL_HOST_FN_SET_VISIBLE_REGION, &parm, displayCrAsyncCmdCompletion, this);
     1273            }
     1274            else
     1275                AssertMsgFailed(("failed to allocate rects memory\n"));
     1276        }
     1277        else
     1278            AssertMsgFailed(("mhCrOglSvc is NULL\n"));
    12621279    }
    12631280#endif
     
    16741691    if (cbDst >= VBVA_RING_BUFFER_SIZE)
    16751692    {
    1676         AssertMsgFailed (("cbDst = 0x%08X, ring buffer size 0x%08X", cbDst, VBVA_RING_BUFFER_SIZE));
     1693        AssertMsgFailed (("cbDst = 0x%08X, ring buffer size 0x%08X\n", cbDst, VBVA_RING_BUFFER_SIZE));
    16771694        return;
    16781695    }
     
    22142231
    22152232                if (pVMMDev)
    2216                     vrc = pVMMDev->hgcmHostCall("VBoxSharedCrOpenGL", SHCRGL_HOST_FN_SCREEN_CHANGED, SHCRGL_CPARMS_SCREEN_CHANGED, &parm);
     2233                {
     2234                    if (mhCrOglSvc)
     2235                        pVMMDev->hgcmHostFastCallAsync(mhCrOglSvc, SHCRGL_HOST_FN_SCREEN_CHANGED, &parm, NULL, NULL);
     2236                    else
     2237                        AssertMsgFailed(("mhCrOglSvc is NULL\n"));
     2238                }
    22172239                /*ComAssertRCRet (vrc, E_FAIL);*/
    22182240
     
    23452367        if (is3denabled && vmmDev)
    23462368        {
    2347             VBOXHGCMSVCPARM parms[2];
    2348 
    2349             parms[0].type = VBOX_HGCM_SVC_PARM_PTR;
     2369            VBOXHGCMSVCPARM parm;
     2370
     2371            parm.type = VBOX_HGCM_SVC_PARM_PTR;
    23502372            /* NULL means disable */
    2351             parms[0].u.pointer.addr = NULL;
    2352             parms[0].u.pointer.size = 0;  /* We don't actually care. */
    2353             parms[1].type = VBOX_HGCM_SVC_PARM_32BIT;
    2354             parms[1].u.uint32 = 0;
    2355 
    2356             vmmDev->hgcmHostCall("VBoxSharedCrOpenGL", SHCRGL_HOST_FN_SET_VISIBLE_REGION, 2, &parms[0]);
     2373            parm.u.pointer.addr = NULL;
     2374            parm.u.pointer.size = 0;  /* <- means null rects, NULL pRects address and 0 rects means "disable" */
     2375
     2376            if (mhCrOglSvc)
     2377                vmmDev->hgcmHostFastCallAsync(mhCrOglSvc, SHCRGL_HOST_FN_SET_VISIBLE_REGION, &parm, NULL, NULL);
     2378            else
     2379                AssertMsgFailed(("mhCrOglSvc is NULL\n"));
     2380
    23572381        }
    23582382    }
     
    33123336void Display::crViewportNotify(VMMDev *pVMMDev, ULONG aScreenId, ULONG x, ULONG y, ULONG width, ULONG height)
    33133337{
    3314     VBOXHGCMSVCPARM aParms[5];
    3315 
    3316     aParms[0].type = VBOX_HGCM_SVC_PARM_32BIT;
    3317     aParms[0].u.uint32 = aScreenId;
    3318 
    3319     aParms[1].type = VBOX_HGCM_SVC_PARM_32BIT;
    3320     aParms[1].u.uint32 = x;
    3321 
    3322     aParms[2].type = VBOX_HGCM_SVC_PARM_32BIT;
    3323     aParms[2].u.uint32 = y;
    3324 
    3325 
    3326     aParms[3].type = VBOX_HGCM_SVC_PARM_32BIT;
    3327     aParms[3].u.uint32 = width;
    3328 
    3329     aParms[4].type = VBOX_HGCM_SVC_PARM_32BIT;
    3330     aParms[4].u.uint32 = height;
    3331 
    3332     pVMMDev->hgcmHostCall("VBoxSharedCrOpenGL", SHCRGL_HOST_FN_VIEWPORT_CHANGED, SHCRGL_CPARMS_VIEWPORT_CHANGED, aParms);
     3338    VBOXHGCMSVCPARM parm;
     3339
     3340    CRVBOXHGCMVIEWPORT *pViewportInfo = (CRVBOXHGCMVIEWPORT*)RTMemAlloc(sizeof (*pViewportInfo));
     3341    if(!pViewportInfo)
     3342    {
     3343        AssertMsgFailed(("RTMemAlloc failed!\n"));
     3344        return;
     3345    }
     3346
     3347    pViewportInfo->u32Screen = aScreenId;
     3348    pViewportInfo->x = x;
     3349    pViewportInfo->y = y;
     3350    pViewportInfo->width = width;
     3351    pViewportInfo->height = height;
     3352
     3353    parm.type = VBOX_HGCM_SVC_PARM_PTR;
     3354    parm.u.pointer.addr = pViewportInfo;
     3355    parm.u.pointer.size = sizeof (*pViewportInfo);
     3356
     3357    pVMMDev->hgcmHostFastCallAsync(mhCrOglSvc, SHCRGL_HOST_FN_VIEWPORT_CHANGED, &parm, displayCrAsyncCmdCompletion, this);
    33333358
    33343359}
Note: See TracChangeset for help on using the changeset viewer.

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