VirtualBox

Changeset 22795 in vbox


Ignore:
Timestamp:
Sep 5, 2009 9:11:47 PM (15 years ago)
Author:
vboxsync
Message:

video 2d accel: update only visible parts of surfaces

Location:
trunk/src/VBox/Frontends/VirtualBox
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/include/VBoxFrameBuffer.h

    r22794 r22795  
    14401440    void vboxShowOverlay(bool show);
    14411441    void vboxUpdateOverlayPosition(const QPoint & pos);
    1442     void vboxUpdateOverlay(const QPoint & pos, const QRect & rect, bool show);
     1442    void vboxUpdateOverlay(const QRect & rect, bool show);
    14431443    VBoxGLWidget *mpOverlayWidget;
    14441444    bool mGlOn;
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBQGL.cpp

    r22794 r22795  
    26792679        vsy2 = sy2 + int(dy2*stretchY);
    26802680        mVisibleSrcRect.setCoords(vsx1, vsy1, vsx2, vsy2);
     2681        Assert(!mVisibleSrcRect.isEmpty());
    26812682        Assert(mSrcRect.contains(mVisibleSrcRect));
    26822683    }
     
    27772778    if(bInvokeMultiTex2)
    27782779    {
    2779         doMultiTex2FB(&mTargRect, pPrimary->mpTex[0], &mSrcRect,
     2780        doMultiTex2FB(&mVisibleTargRect, pPrimary->mpTex[0], &mVisibleSrcRect,
    27802781                (fourcc() == FOURCC_YV12) ? 3 : 1);
    27812782    }
     
    27842785        if(fourcc() == FOURCC_YV12)
    27852786        {
    2786             doMultiTex2FB(&mTargRect, &mSrcRect, 3 );
     2787            doMultiTex2FB(&mVisibleTargRect, &mVisibleSrcRect, 3 );
    27872788        }
    27882789        else
    27892790        {
    2790             VBOXQGLLOG_QRECT("mTargRect: ", &mTargRect, "\n");
    2791             VBOXQGLLOG_QRECT("mSrcRect: ", &mSrcRect, "\n");
    2792             doTex2FB(&mTargRect, &mSrcRect);
     2791            VBOXQGLLOG_QRECT("mVisibleTargRect: ", &mVisibleTargRect, "\n");
     2792            VBOXQGLLOG_QRECT("mVisibleSrcRect: ", &mVisibleSrcRect, "\n");
     2793            doTex2FB(&mVisibleTargRect, &mVisibleSrcRect);
    27932794        }
    27942795    }
     
    28022803GLuint VBoxVHWASurfaceBase::createDisplay(VBoxVHWASurfaceBase *pPrimary)
    28032804{
     2805    if(mVisibleTargRect.isEmpty())
     2806    {
     2807        Assert(mVisibleSrcRect.isEmpty());
     2808        return 0;
     2809    }
     2810    Assert(!mVisibleSrcRect.isEmpty());
     2811    /* just for the fallback */
     2812    if(mVisibleSrcRect.isEmpty())
     2813    {
     2814        return 0;
     2815    }
     2816
    28042817    VBoxVHWAGlProgramVHWA * pProgram = NULL;
    28052818    const VBoxVHWAColorKey * pSrcCKey = NULL, *pDstCKey = NULL;
     
    28352848    deleteDisplay();
    28362849
    2837 
    2838     {
    2839         mVisibleDisplay = createDisplay(pPrimary);
    2840         mVisibleDisplayInitialized = true;
    2841     }
     2850    mVisibleDisplay = createDisplay(pPrimary);
     2851    mVisibleDisplayInitialized = true;
    28422852}
    28432853
     
    28602870{
    28612871    Assert(mVisibleDisplayInitialized);
    2862 
    2863     synchTexMem(&mSrcRect);
     2872    if(mVisibleDisplay == 0)
     2873    {
     2874        /* nothing to display, i.e. the surface is not visible,
     2875         * in the sense that it's located behind the viewport ranges */
     2876        Assert(mVisibleSrcRect.isEmpty());
     2877        Assert(mVisibleTargRect.isEmpty());
     2878        return;
     2879    }
     2880    else
     2881    {
     2882        Assert(!mVisibleSrcRect.isEmpty());
     2883        Assert(!mVisibleTargRect.isEmpty());
     2884    }
     2885
     2886    synchTexMem(&mVisibleSrcRect);
    28642887    if(pPrimary && getActiveDstOverlayCKey(pPrimary))
    28652888    {
    2866         pPrimary->synchTexMem(&mTargRect);
     2889        pPrimary->synchTexMem(&mVisibleTargRect);
    28672890    }
    28682891
     
    33753398    if(pCmd->SurfInfo.surfCaps & VBOXVHWA_SCAPS_OFFSCREENPLAIN)
    33763399    {
     3400        Assert(0);
    33773401        pCmd->u.out.ErrInfo = 1;
    33783402        return VINF_SUCCESS;
    33793403    }
    33803404
    3381     Assert(pCmd->SurfInfo.surfCaps & VBOXVHWA_SCAPS_OFFSCREENPLAIN
    3382             || pCmd->SurfInfo.surfCaps & VBOXVHWA_SCAPS_OVERLAY);
     3405    Assert(/*pCmd->SurfInfo.surfCaps & VBOXVHWA_SCAPS_OFFSCREENPLAIN
     3406            || */ pCmd->SurfInfo.surfCaps & VBOXVHWA_SCAPS_OVERLAY);
    33833407
    33843408    if(pCmd->u.in.bIsDifferentPixelFormat)
     
    53515375void VBoxQGLOverlayFrameBuffer::vboxShowOverlay(bool show)
    53525376{
    5353     /** @todo */
    5354     Assert(0);
     5377    mpOverlayWidget->setVisible(show);
    53555378}
    53565379
    53575380void VBoxQGLOverlayFrameBuffer::vboxUpdateOverlayPosition(const QPoint & pos)
    53585381{
    5359     /** @todo */
    5360     Assert(0);
    5361 }
    5362 
    5363 void VBoxQGLOverlayFrameBuffer::vboxUpdateOverlay(const QPoint & pos, const QRect & rect, bool show)
    5364 {
    5365     /** @todo */
    5366     Assert(0);
     5382    mpOverlayWidget->move(pos);
     5383}
     5384
     5385void VBoxQGLOverlayFrameBuffer::vboxUpdateOverlay(const QRect & rect, bool show)
     5386{
     5387    mpOverlayWidget->move(rect.x(), rect.y());
     5388    mpOverlayWidget->resize(rect.width(), rect.height());
     5389    mpOverlayWidget->setVisible(show);
    53675390}
    53685391
     
    53895412            {
    53905413                QRect overRect = mpOverlayWidget->overlaysRectUnion();
    5391                 vboxUpdateOverlay(QPoint(overRect.x(), overRect.y()), overRect, true);
     5414                vboxUpdateOverlay(overRect, true);
    53925415            }
    53935416        } break;
     
    54285451            {
    54295452                QRect overRect = mpOverlayWidget->overlaysRectUnion();
    5430                 vboxUpdateOverlay(QPoint(overRect.x(), overRect.y()), overRect, true);
     5453                vboxUpdateOverlay(overRect, true);
    54315454            }
    54325455        } break;
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