Changeset 23185 in vbox for trunk/src/VBox/Main/DisplayImpl.cpp
- Timestamp:
- Sep 21, 2009 12:23:57 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 52609
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/DisplayImpl.cpp
r23015 r23185 208 208 #ifdef VBOX_WITH_HGSMI 209 209 maFramebuffers[ul].fVBVAEnabled = false; 210 maFramebuffers[ul].cVBVASkipUpdate = 0; 211 memset (&maFramebuffers[ul].vbvaSkippedRect, 0, sizeof (maFramebuffers[ul].vbvaSkippedRect)); 210 212 #endif /* VBOX_WITH_HGSMI */ 211 213 } … … 2403 2405 PDRVMAINDISPLAY pDrv = PDMIDISPLAYCONNECTOR_2_MAINDISPLAY(pInterface); 2404 2406 Display *pThis = pDrv->pDisplay; 2405 2406 NOREF(uScreenId); 2407 DISPLAYFBINFO *pFBInfo = &pThis->maFramebuffers[uScreenId]; 2408 2409 if (RT_LIKELY(pFBInfo->u32ResizeStatus == ResizeStatus_Void)) 2410 { 2411 if (RT_UNLIKELY(pFBInfo->cVBVASkipUpdate != 0)) 2412 { 2413 /* Some updates were skipped. Note: displayVBVAUpdate* callbacks are called 2414 * under display device lock, so thread safe. 2415 */ 2416 pFBInfo->cVBVASkipUpdate = 0; 2417 pThis->handleDisplayUpdate(pFBInfo->vbvaSkippedRect.xLeft, 2418 pFBInfo->vbvaSkippedRect.yTop, 2419 pFBInfo->vbvaSkippedRect.xRight - pFBInfo->vbvaSkippedRect.xLeft, 2420 pFBInfo->vbvaSkippedRect.yBottom - pFBInfo->vbvaSkippedRect.yTop); 2421 } 2422 } 2423 else 2424 { 2425 /* The framebuffer is being resized. */ 2426 pFBInfo->cVBVASkipUpdate++; 2427 } 2407 2428 } 2408 2429 … … 2413 2434 PDRVMAINDISPLAY pDrv = PDMIDISPLAYCONNECTOR_2_MAINDISPLAY(pInterface); 2414 2435 Display *pThis = pDrv->pDisplay; 2415 2416 pThis->mParent->consoleVRDPServer()->SendUpdate (uScreenId, pCmd, cbCmd); 2417 } 2418 2419 DECLCALLBACK(void) Display::displayVBVAUpdateEnd(PPDMIDISPLAYCONNECTOR pInterface, unsigned uScreenId, uint32_t x, uint32_t y, uint32_t cx, uint32_t cy) 2436 DISPLAYFBINFO *pFBInfo = &pThis->maFramebuffers[uScreenId]; 2437 2438 if (RT_LIKELY(pFBInfo->cVBVASkipUpdate == 0)) 2439 { 2440 pThis->mParent->consoleVRDPServer()->SendUpdate (uScreenId, pCmd, cbCmd); 2441 } 2442 } 2443 2444 DECLCALLBACK(void) Display::displayVBVAUpdateEnd(PPDMIDISPLAYCONNECTOR pInterface, unsigned uScreenId, int32_t x, int32_t y, uint32_t cx, uint32_t cy) 2420 2445 { 2421 2446 LogFlowFunc(("uScreenId %d %d,%d %dx%d\n", uScreenId, x, y, cx, cy)); … … 2423 2448 PDRVMAINDISPLAY pDrv = PDMIDISPLAYCONNECTOR_2_MAINDISPLAY(pInterface); 2424 2449 Display *pThis = pDrv->pDisplay; 2450 DISPLAYFBINFO *pFBInfo = &pThis->maFramebuffers[uScreenId]; 2425 2451 2426 2452 /* @todo handleFramebufferUpdate (uScreenId, … … 2429 2455 * cx, cy); 2430 2456 */ 2431 pThis->handleDisplayUpdate(x, y, cx, cy); 2457 if (RT_LIKELY(pFBInfo->cVBVASkipUpdate == 0)) 2458 { 2459 pThis->handleDisplayUpdate(x, y, cx, cy); 2460 } 2461 else 2462 { 2463 /* Save the updated rectangle. */ 2464 int32_t xRight = x + cx; 2465 int32_t yBottom = y + cy; 2466 2467 if (pFBInfo->cVBVASkipUpdate == 1) 2468 { 2469 pFBInfo->vbvaSkippedRect.xLeft = x; 2470 pFBInfo->vbvaSkippedRect.yTop = y; 2471 pFBInfo->vbvaSkippedRect.xRight = xRight; 2472 pFBInfo->vbvaSkippedRect.yBottom = yBottom; 2473 } 2474 else 2475 { 2476 if (pFBInfo->vbvaSkippedRect.xLeft > x) 2477 { 2478 pFBInfo->vbvaSkippedRect.xLeft = x; 2479 } 2480 if (pFBInfo->vbvaSkippedRect.yTop > y) 2481 { 2482 pFBInfo->vbvaSkippedRect.yTop = y; 2483 } 2484 if (pFBInfo->vbvaSkippedRect.xRight < xRight) 2485 { 2486 pFBInfo->vbvaSkippedRect.xRight = xRight; 2487 } 2488 if (pFBInfo->vbvaSkippedRect.yBottom < yBottom) 2489 { 2490 pFBInfo->vbvaSkippedRect.yBottom = yBottom; 2491 } 2492 } 2493 } 2432 2494 } 2433 2495
Note:
See TracChangeset
for help on using the changeset viewer.