VirtualBox

Ignore:
Timestamp:
Dec 16, 2009 4:55:45 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
56090
Message:

2d: more FBO impl

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

Legend:

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

    r25385 r25440  
    51585158}
    51595159
     5160uint32_t VBoxVHWATextureImage::calcProgramType(VBoxVHWATextureImage *pDst, const VBoxVHWAColorKey * pDstCKey, const VBoxVHWAColorKey * pSrcCKey, bool bNotIntersected)
     5161{
     5162    uint32_t type = 0;
     5163
     5164    if(pDstCKey != NULL)
     5165        type |= VBOXVHWA_PROGRAM_DSTCOLORKEY;
     5166    if(pSrcCKey)
     5167        type |= VBOXVHWA_PROGRAM_SRCCOLORKEY;
     5168    if((pDstCKey || pSrcCKey) && bNotIntersected)
     5169        type |= VBOXVHWA_PROGRAM_COLORKEYNODISCARD;
     5170
     5171    return type;
     5172}
     5173
    51605174class VBoxVHWAGlProgramVHWA * VBoxVHWATextureImage::calcProgram(VBoxVHWATextureImage *pDst, const VBoxVHWAColorKey * pDstCKey, const VBoxVHWAColorKey * pSrcCKey, bool bNotIntersected)
    51615175{
    5162     uint32_t type = 0;
     5176    uint32_t type = calcProgramType(pDst, pDstCKey, pSrcCKey, bNotIntersected);
    51635177
    51645178    if(pDstCKey != NULL)
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.h

    r25423 r25440  
    482482    }
    483483
    484     void draw(VBoxVHWATextureImage *pDst, const QRect * pDstRect, const QRect * pSrcRect);
    485 
    486     uint32_t texCoord(GLenum tex, int x, int y)
     484    virtual void draw(VBoxVHWATextureImage *pDst, const QRect * pDstRect, const QRect * pSrcRect);
     485
     486    virtual uint32_t texCoord(GLenum tex, int x, int y)
    487487    {
    488488        uint32_t c = 1;
     
    498498    }
    499499
    500     void bind(VBoxVHWATextureImage * pPrimary);
    501 
    502     class VBoxVHWAGlProgramVHWA * calcProgram(VBoxVHWATextureImage *pDst, const VBoxVHWAColorKey * pDstCKey, const VBoxVHWAColorKey * pSrcCKey, bool bNotIntersected);
    503 
    504     int createDisplay(VBoxVHWATextureImage *pDst, const QRect * pDstRect, const QRect * pSrcRect,
     500    virtual void bind(VBoxVHWATextureImage * pPrimary);
     501
     502    virtual uint32_t calcProgramType(VBoxVHWATextureImage *pDst, const VBoxVHWAColorKey * pDstCKey, const VBoxVHWAColorKey * pSrcCKey, bool bNotIntersected);
     503
     504    virtual class VBoxVHWAGlProgramVHWA * calcProgram(VBoxVHWATextureImage *pDst, const VBoxVHWAColorKey * pDstCKey, const VBoxVHWAColorKey * pSrcCKey, bool bNotIntersected);
     505
     506    virtual int createDisplay(VBoxVHWATextureImage *pDst, const QRect * pDstRect, const QRect * pSrcRect,
    505507            const VBoxVHWAColorKey * pDstCKey, const VBoxVHWAColorKey * pSrcCKey, bool bNotIntersected,
    506508            GLuint *pDisplay, class VBoxVHWAGlProgramVHWA ** ppProgram);
     
    678680    }
    679681
    680     void bind(VBoxVHWATexture *pTex)
     682    void bind()
    681683    {
    682684        VBOXQGL_CHECKERR(
    683685            vboxglBindFramebuffer(GL_FRAMEBUFFER, mFBO);
    684686        );
     687    }
     688
     689    void unbind(VBoxVHWATexture *pTex)
     690    {
     691        VBOXQGL_CHECKERR(
     692            vboxglBindFramebuffer(GL_FRAMEBUFFER, 0);
     693        );
     694    }
     695
     696    void attachBound(VBoxVHWATexture *pTex)
     697    {
    685698        VBOXQGL_CHECKERR(
    686699                vboxglFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, pTex->texTarget(), pTex->texture(), 0);
    687700        );
    688701    }
     702
    689703private:
    690704    GLuint mFBO;
     705};
     706
     707template <class T>
     708class VBoxVHWATextureImageFBO : public T
     709{
     710public:
     711    VBoxVHWATextureImageFBO(const QRect &size, const VBoxVHWAColorFormat &format, class VBoxVHWAGlProgramMngr * aMgr) :
     712            T(size, format, aMgr),
     713            mFBOTex(size, VBoxVHWAColorFormat(32, 0xff0000, 0xff00, 0xff), aMgr)
     714    {
     715    }
     716
     717    virtual void init(uchar *pvMem)
     718    {
     719        mFBO.init();
     720        mFBOTex.init(NULL);
     721        T:init(pvMem);
     722        mFBO.bind();
     723        mFBO.attachBound(mFBOTex.mpTex[0]);
     724        mFBO.unbind();
     725    }
     726
     727    virtual int createDisplay(VBoxVHWATextureImage *pDst, const QRect * pDstRect, const QRect * pSrcRect,
     728            const VBoxVHWAColorKey * pDstCKey, const VBoxVHWAColorKey * pSrcCKey, bool bNotIntersected,
     729            GLuint *pDisplay, class VBoxVHWAGlProgramVHWA ** ppProgram)
     730    {
     731        T::createDisplay(&mFBOTex, &mFBOTex.rect(), &rect(),
     732                NULL, NULL, false,
     733                pDisplay, ppProgram);
     734
     735        return mFBOTex.createDisplay(pDst, pDstRect, pSrcRect,
     736                pDstCKey, pSrcCKey, bNotIntersected,
     737                pDisplay, ppProgram);
     738    }
     739
     740    virtual void update(const QRect * pRect)
     741    {
     742        mFBO.bind();
     743        T:update(pRect);
     744
     745        VBoxGLWidget::pushSettingsAndSetupViewport(rect(), rect());
     746        mFBO.bind();
     747        mFBOTex.draw();
     748        mFBO.unbind();
     749        VBoxGLWidget::popSettingsAfterSetupViewport();
     750    }
     751
     752    virtual void display(VBoxVHWATextureImage *pDst, const QRect * pDstRect, const QRect * pSrcRect,
     753            const VBoxVHWAColorKey * pDstCKey, const VBoxVHWAColorKey * pSrcCKey, bool bNotIntersected)
     754    {
     755        mFBOTex.display(pDst, pDstRect, pSrcRect, pDstCKey, pSrcCKey, bNotIntersected);
     756    }
     757
     758    virtual void display()
     759    {
     760        mFBOTex.display();
     761    }
     762private:
     763    VBoxVHWAFBO mFBO;
     764    VBoxVHWATextureImage mFBOTex;
    691765};
    692766
     
    14301504
    14311505    VHWACommandList &onResizeCmdList() { return mOnResizeCmdList; }
     1506
     1507    static void pushSettingsAndSetupViewport(const QSize &display, const QRect &viewport)
     1508    {
     1509        glPushAttrib(GL_ALL_ATTRIB_BITS);
     1510        glMatrixMode(GL_PROJECTION);
     1511        glPushMatrix();
     1512//        glMatrixMode(GL_MODELVIEW);
     1513        setupMatricies(display);
     1514        adjustViewport(display, viewport);
     1515    }
     1516
     1517    static void popSettingsAfterSetupViewport()
     1518    {
     1519        glPopAttrib();
     1520        glMatrixMode(GL_PROJECTION);
     1521        glPopMatrix();
     1522        glMatrixMode(GL_MODELVIEW);
     1523    }
     1524
    14321525protected:
    14331526
     
    17101803                             ULONG aW, ULONG aH)
    17111804    {
    1712         if(mOverlay.onNotifyUpdate(aX, aY, aW, aH))
     1805        if(mOverlay.onNotifyUpdate (aX, aY, aW, aH))
    17131806            return S_OK;
    1714         return T::NotifyUpdate(aX, aY, aW, aH);
     1807        return T::NotifyUpdate (aX, aY, aW, aH);
    17151808    }
    17161809
    17171810    void resizeEvent (VBoxResizeEvent *re)
    17181811    {
    1719         mOverlay.onResizeEvent(re);
    1720         T::resizeEvent(re);
    1721         mOverlay.onResizeEventPostprocess(re);
    1722     }
    1723 
    1724     void viewportResized(QResizeEvent * re)
     1812        mOverlay.onResizeEvent (re);
     1813        T::resizeEvent (re);
     1814        mOverlay.onResizeEventPostprocess (re);
     1815    }
     1816
     1817    void viewportResized (QResizeEvent * re)
    17251818    {
    17261819        mOverlay.onViewportResized(re);
     
    17281821    }
    17291822
    1730     void viewportScrolled(int dx, int dy)
    1731     {
    1732         mOverlay.onViewportScrolled(dx, dy);
    1733         T::viewportScrolled(dx, dy);
     1823    void viewportScrolled (int dx, int dy)
     1824    {
     1825        mOverlay.onViewportScrolled (dx, dy);
     1826        T::viewportScrolled (dx, dy);
    17341827    }
    17351828private:
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