VirtualBox

Ignore:
Timestamp:
Nov 29, 2010 1:13:03 PM (14 years ago)
Author:
vboxsync
Message:

2d: fix & optimize RGB data playback

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp

    r34276 r34461  
    322322static VBoxVHWATextureImage* vboxVHWAImageCreate(const QRect & aRect, const VBoxVHWAColorFormat & aFormat, class VBoxVHWAGlProgramMngr * pMgr, VBOXVHWAIMG_TYPE flags)
    323323{
     324    bool bCanLinearNonFBO = false;
     325    if (!aFormat.fourcc())
     326    {
     327        flags &= ~VBOXVHWAIMG_FBO;
     328        bCanLinearNonFBO = true;
     329    }
     330
    324331    const VBoxVHWAInfo & info = vboxVHWAGetSupportInfo(NULL);
    325332    if((flags & VBOXVHWAIMG_PBO) && !info.getGlInfo().isPBOSupported())
     
    337344        flags &= ~VBOXVHWAIMG_PBO;
    338345
    339     if(flags & VBOXVHWAIMG_PBOIMG)
    340     {
    341         if(flags & VBOXVHWAIMG_FBO)
     346    if(flags & VBOXVHWAIMG_FBO)
     347    {
     348        if(flags & VBOXVHWAIMG_PBOIMG)
    342349        {
    343350            VBOXQGLLOG(("FBO PBO Image\n"));
    344351            return new VBoxVHWATextureImageFBO<VBoxVHWATextureImagePBO>(aRect, aFormat, pMgr, flags);
    345352        }
     353        VBOXQGLLOG(("FBO Generic Image\n"));
     354        return new VBoxVHWATextureImageFBO<VBoxVHWATextureImage>(aRect, aFormat, pMgr, flags);
     355    }
     356
     357    if (!bCanLinearNonFBO)
     358    {
     359        VBOXQGLLOG(("Disabling Linear stretching\n"));
     360        flags &= ~VBOXVHWAIMG_LINEAR;
     361    }
     362
     363    if(flags & VBOXVHWAIMG_PBOIMG)
     364    {
    346365        VBOXQGLLOG(("PBO Image\n"));
    347366        return new VBoxVHWATextureImagePBO(aRect, aFormat, pMgr, flags);
    348367    }
    349     if(flags & VBOXVHWAIMG_FBO)
    350     {
    351         VBOXQGLLOG(("FBO Generic Image\n"));
    352         return new VBoxVHWATextureImageFBO<VBoxVHWATextureImage>(aRect, aFormat, pMgr, flags);
    353     }
     368
    354369    VBOXQGLLOG(("Generic Image\n"));
    355370    return new VBoxVHWATextureImage(aRect, aFormat, pMgr, flags);
     
    14691484}
    14701485
     1486#ifdef DEBUG_misha
     1487void VBoxVHWATexture::dbgDump()
     1488{
     1489#if 0
     1490    bind();
     1491    GLvoid *pvBuf = malloc(4 * mRect.width() * mRect.height());
     1492    VBOXQGL_CHECKERR(
     1493        glGetTexImage(texTarget(),
     1494            0, /*GLint level*/
     1495            mColorFormat.format(),
     1496            mColorFormat.type(),
     1497            pvBuf);
     1498    );
     1499    VBOXQGLDBGPRINT(("<?dml?><exec cmd=\"!vbvdbg.ms 0x%p 0n%d 0n%d\">texture info</exec>\n",
     1500            pvBuf, mRect.width(), mRect.height()));
     1501    Assert(0);
     1502
     1503    free(pvBuf);
     1504#endif
     1505}
     1506#endif
     1507
     1508
    14711509void VBoxVHWATexture::initParams()
    14721510{
     
    23012339        if(!bNoPBO)
    23022340        {
    2303             fFlags |= VBOXVHWAIMG_PBO | VBOXVHWAIMG_PBOIMG;
     2341            fFlags |= VBOXVHWAIMG_PBO | VBOXVHWAIMG_PBOIMG | VBOXVHWAIMG_LINEAR;
    23042342            if(mSettings->isStretchLinearEnabled())
    23052343                fFlags |= VBOXVHWAIMG_FBO;
     
    38123850            0,
    38133851#endif
    3814             0);
     3852            0 /* VBOXVHWAIMG_TYPE fFlags */);
    38153853    pDisplay->init(NULL, bUsesGuestVram ? size.VRAM() : NULL);
    38163854    mDisplay.setVGA(pDisplay);
     
    54685506            || *pDstRect != mDstRect
    54695507            || *pSrcRect != mSrcRect
    5470             || !!(pDstRect) != !!(mpDstCKey)
     5508            || !!(pDstCKey) != !!(mpDstCKey)
    54715509            || !!(pSrcCKey) != !!(mpSrcCKey)
    5472             || mbNotIntersected != bNotIntersected)
     5510            || mbNotIntersected != bNotIntersected
     5511            || mpProgram != calcProgram(pDst, pDstCKey, pSrcCKey, bNotIntersected))
    54735512    {
    54745513        return createSetDisplay(pDst, pDstRect, pSrcRect,
     
    54765515
    54775516    }
    5478     else if((pDstCKey && mpDstCKey && *pDstCKey == *mpDstCKey)
    5479             || (pSrcCKey && mpSrcCKey && *pSrcCKey == *mpSrcCKey))
     5517    else if((pDstCKey && mpDstCKey && *pDstCKey != *mpDstCKey)
     5518            || (pSrcCKey && mpSrcCKey && *pSrcCKey != *mpSrcCKey))
    54805519    {
    54815520        Assert(mpProgram);
     
    54835522        return VINF_SUCCESS;
    54845523    }
    5485     mVisibleDisplay = 0;
    5486     mpProgram = 0;
    54875524    return VINF_SUCCESS;
    54885525}
     
    56815718void VBoxVHWATextureImage::display()
    56825719{
     5720#ifdef DEBUG_misha
     5721    if (mpDst)
     5722    {
     5723        dbgDump();
     5724    }
     5725
     5726    static bool bDisplayOn = true;
     5727#endif
    56835728    Assert(mVisibleDisplay);
    5684     if(mVisibleDisplay)
     5729    if(mVisibleDisplay
     5730#ifdef DEBUG_misha
     5731            && bDisplayOn
     5732#endif
     5733            )
    56855734    {
    56865735        if(mpProgram)
     
    57005749    }
    57015750}
     5751
     5752#ifdef DEBUG_misha
     5753void VBoxVHWATextureImage::dbgDump()
     5754{
     5755    for (uint32_t i = 0; i < mcTex; ++i)
     5756    {
     5757        mpTex[i]->dbgDump();
     5758    }
     5759}
     5760#endif
    57025761
    57035762int VBoxVHWATextureImage::setCKey (VBoxVHWAGlProgramVHWA * pProgram, const VBoxVHWAColorFormat * pFormat, const VBoxVHWAColorKey * pCKey, bool bDst)
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.h

    r34140 r34461  
    186186
    187187    bool operator==(const VBoxVHWAColorKey & other) const { return mUpper == other.mUpper && mLower == other.mLower; }
     188    bool operator!=(const VBoxVHWAColorKey & other) const { return !(*this == other); }
    188189private:
    189190    uint32_t mUpper;
     
    318319    ulong memSize(){ return mBytesPerLine * mRect.height(); }
    319320    uint32_t bytesPerLine() {return mBytesPerLine; }
     321#ifdef DEBUG_misha
     322    void dbgDump();
     323#endif
    320324
    321325protected:
     
    525529    const VBoxVHWAColorKey* srcCKey() { return mpSrcCKey; }
    526530    bool notIntersectedMode() { return mbNotIntersected; }
     531
     532#ifdef DEBUG_misha
     533    void dbgDump();
     534#endif
     535
    527536protected:
    528537    static int setCKey(class VBoxVHWAGlProgramVHWA * pProgram, const VBoxVHWAColorFormat * pFormat, const VBoxVHWAColorKey * pCKey, bool bDst);
     
    17141723public:
    17151724    VBoxVHWATextureImageFBO(const QRect &size, const VBoxVHWAColorFormat &format, class VBoxVHWAGlProgramMngr * aMgr, VBOXVHWAIMG_TYPE flags) :
    1716             T(size, format, aMgr, flags & (~VBOXVHWAIMG_FBO)),
    1717             mFBOTex(size, VBoxVHWAColorFormat(32, 0xff0000, 0xff00, 0xff), aMgr, (flags & (~VBOXVHWAIMG_FBO)) | VBOXVHWAIMG_LINEAR),
     1725            T(size, format, aMgr, flags & (~(VBOXVHWAIMG_FBO | VBOXVHWAIMG_LINEAR))),
     1726            mFBOTex(size, VBoxVHWAColorFormat(32, 0xff0000, 0xff00, 0xff), aMgr, (flags & (~VBOXVHWAIMG_FBO))),
    17181727            mpvFBOTexMem(NULL)
    17191728    {
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlayCommon.h

    r33540 r34461  
    2020
    2121#if defined(DEBUG_misha)
     22DECLINLINE(VOID) vboxDbgPrintF(LPCSTR szString, ...)
     23{
     24    char szBuffer[4096] = {0};
     25    va_list pArgList;
     26    va_start(pArgList, szString);
     27    _vsnprintf(szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0]), szString, pArgList);
     28    va_end(pArgList);
     29
     30    OutputDebugStringA(szBuffer);
     31}
     32
    2233# include "iprt/stream.h"
    2334# define VBOXQGLLOG(_m) RTPrintf _m
    2435# define VBOXQGLLOGREL(_m) do { RTPrintf _m ; LogRel( _m ); } while(0)
     36# define VBOXQGLDBGPRINT(_m) vboxDbgPrintF _m
    2537#else
    2638# define VBOXQGLLOG(_m)    do {}while(0)
    2739# define VBOXQGLLOGREL(_m) LogRel( _m )
     40# define VBOXQGLDBGPRINT(_m) do {}while(0)
    2841#endif
    2942#define VBOXQGLLOG_ENTER(_m) do {}while(0)
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