VirtualBox

Ignore:
Timestamp:
Jun 24, 2009 10:32:18 PM (15 years ago)
Author:
vboxsync
Message:

video hw accel: color keying & color conversion basics impl for QGL Framebuffer

File:
1 edited

Legend:

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

    r20701 r20906  
    386386};
    387387
     388class VBoxVHWAColorKey
     389{
     390public:
     391    VBoxVHWAColorKey() :
     392        mUpper(0),
     393        mLower(0)
     394    {}
     395
     396    VBoxVHWAColorKey(uint32_t aUpper, uint32_t aLower) :
     397        mUpper(aUpper),
     398        mLower(aLower)
     399    {}
     400
     401    uint32_t upper() {return mUpper; }
     402    uint32_t lower() {return mLower; }
     403private:
     404    uint32_t mUpper;
     405    uint32_t mLower;
     406};
     407
     408class VBoxVHWAColorFormat
     409{
     410public:
     411
     412    VBoxVHWAColorFormat(GLint aInternalFormat, GLenum aFormat, GLenum aType, uint32_t aDataFormat) :
     413        mInternalFormat(aInternalFormat),
     414        mFormat(aFormat),
     415        mType(aType),
     416        mDataFormat(aDataFormat)
     417    {}
     418
     419    GLint internalFormat() const {return mInternalFormat; }
     420    GLenum format() const {return mFormat; }
     421    GLenum type() const {return mType; }
     422    uint32_t dataFormat() const {return mDataFormat;}
     423
     424    void pixel2Normalized(uint32_t pix, float &r, float &g, float &b);
     425    uint32_t r(uint32_t pix);
     426    uint32_t g(uint32_t pix);
     427    uint32_t b(uint32_t pix);
     428
     429private:
     430    GLint mInternalFormat;
     431    GLenum mFormat;
     432    GLenum mType;
     433    uint32_t mDataFormat;
     434
     435    uint32_t mRMask;
     436    uint32_t mGMask;
     437    uint32_t mBMask;
     438    uint32_t mRRange;
     439    uint32_t mGRange;
     440    uint32_t mBRange;
     441
     442};
     443
    388444class VBoxVHWASurfaceBase
    389445{
    390446public:
    391447    VBoxVHWASurfaceBase(GLsizei aWidth, GLsizei aHeight,
    392             GLint aInternalFormat, GLenum aFormat, GLenum aType);
     448            VBoxVHWAColorFormat & aColorFormat,
     449            VBoxVHWAColorKey * pSrcBltCKey, VBoxVHWAColorKey * pDstBltCKey,
     450            VBoxVHWAColorKey * pSrcOverlayCKey, VBoxVHWAColorKey * pDstOverlayCKey);
    393451
    394452    virtual ~VBoxVHWASurfaceBase();
     
    400458    static void globalInit();
    401459
    402     int blt(const QRect * aDstRect, VBoxVHWASurfaceBase * aSrtSurface, const QRect * aSrcRect);
    403 
    404     int lock(const QRect * pRect, uint32_t flags);
    405 
    406     int unlock();
    407 
    408     virtual void makeCurrent() = 0;
     460    int blt(const QRect * aDstRect, VBoxVHWASurfaceBase * aSrtSurface, const QRect * aSrcRect, uint32_t flags, struct _VBOXVHWA_BLTDESC * pBltInfo);
     461
     462    virtual int lock(const QRect * pRect, uint32_t flags);
     463
     464    virtual int unlock();
    409465
    410466    void paint(const QRect * aRect);
    411467
    412     void performDisplay() { Assert(mDisplayInitialized); glCallList(mDisplay); }
     468    void performDisplay();
    413469
    414470    static ulong calcBytesPerPixel(GLenum format, GLenum type);
     
    424480    ulong height() { return mRect.height(); }
    425481
    426     GLenum format() {return mFormat; }
    427     GLint  internalFormat() { return mInternalFormat; }
    428     GLenum type() { return mType; }
     482    GLenum format() {return mColorFormat.format(); }
     483    GLint  internalFormat() { return mColorFormat.internalFormat(); }
     484    GLenum type() { return mColorFormat.type(); }
     485    uint32_t dataFormat() {return mColorFormat.dataFormat(); }
     486
    429487    ulong  bytesPerPixel() { return mBytesPerPixel; }
    430488    ulong  bytesPerLine() { return mBytesPerLine; }
    431489
     490    const VBoxVHWAColorKey * dstBltCKey() { return mDstBltCKeyValid ? &mDstBltCKey : NULL; }
     491    const VBoxVHWAColorKey * srcBltCKey() { return mSrcBltCKeyValid ? &mSrcBltCKey : NULL; }
     492    const VBoxVHWAColorKey * dstOverlayCKey() { return mDstOverlayCKeyValid ? &mDstOverlayCKey : NULL; }
     493    const VBoxVHWAColorKey * srcOverlayCKey() { return mSrcOverlayCKeyValid ? &mSrcOverlayCKey : NULL; }
     494    const VBoxVHWAColorFormat & colorFormat() {return mColorFormat; }
     495
    432496    /* clients should treat the returned texture as read-only */
    433497    GLuint textureSynched(const QRect * aRect) { synchTexture(aRect); return mTexture; }
     
    437501    const QRect& rect() {return mRect;}
    438502
    439     virtual bool isPrimary() = 0;
     503//    /* surface currently being displayed in a flip chain */
     504//    virtual bool isPrimary() = 0;
     505//    /* surface representing the main framebuffer. */
     506//    virtual bool isMainFramebuffer() = 0;
     507    virtual void makeCurrent() = 0;
     508#ifdef VBOX_WITH_VIDEOHWACCEL
     509    virtual class VBoxVHWAGlProgramMngr * getGlProgramMngr() = 0;
     510#endif
    440511private:
    441512    void initDisplay();
     
    453524    GLuint mTexture;
    454525
     526    VBoxVHWAColorFormat mColorFormat;
     527    VBoxVHWAColorKey mSrcBltCKey;
     528    VBoxVHWAColorKey mDstBltCKey;
     529    VBoxVHWAColorKey mSrcOverlayCKey;
     530    VBoxVHWAColorKey mDstOverlayCKey;
     531    bool mSrcBltCKeyValid;
     532    bool mDstBltCKeyValid;
     533    bool mSrcOverlayCKeyValid;
     534    bool mDstOverlayCKeyValid;
    455535    GLenum mFormat;
    456536    GLint  mInternalFormat;
     
    472552};
    473553
    474 class VBoxVHWASurfacePrimary : public VBoxVHWASurfaceBase
    475 {
    476 public:
    477     VBoxVHWASurfacePrimary(GLsizei aWidth, GLsizei aHeight,
    478             GLint aInternalFormat, GLenum aFormat, GLenum aType,
    479             class VBoxGLWidget *pWidget) :
     554class VBoxVHWASurfaceQGL : public VBoxVHWASurfaceBase
     555{
     556public:
     557    VBoxVHWASurfaceQGL(GLsizei aWidth, GLsizei aHeight,
     558            VBoxVHWAColorFormat & aColorFormat,
     559            VBoxVHWAColorKey * pSrcBltCKey, VBoxVHWAColorKey * pDstBltCKey,
     560            VBoxVHWAColorKey * pSrcOverlayCKey, VBoxVHWAColorKey * pDstOverlayCKey,
     561            class VBoxGLWidget *pWidget,
     562            bool bBackBuffer) :
    480563                VBoxVHWASurfaceBase(aWidth, aHeight,
    481                         aInternalFormat, aFormat, aType),
    482                 mWidget(pWidget)
     564                        aColorFormat,
     565                        pSrcBltCKey, pDstBltCKey, pSrcOverlayCKey, pDstOverlayCKey),
     566                mWidget(pWidget),
     567                mCreateBuf(bBackBuffer)
    483568    {}
    484569
    485     bool isPrimary() {return true;}
    486570    void makeCurrent();
     571
     572    void init(uchar *pvMem);
     573
     574    int unlock()
     575    {
     576        int rc = VBoxVHWASurfaceBase::unlock();
     577        if(!mBuffer)
     578            performDisplay();
     579        return rc;
     580    }
     581#ifdef VBOX_WITH_VIDEOHWACCEL
     582    class VBoxVHWAGlProgramMngr * getGlProgramMngr();
     583#endif
    487584private:
    488585    class VBoxGLWidget *mWidget;
     586    class QGLPixelBuffer *mBuffer;
     587    bool mCreateBuf;
    489588};
    490589
     
    492591{
    493592public:
    494     VBoxGLWidget (QWidget *aParent)
    495         : QGLWidget (aParent),
    496         pDisplay(NULL),
    497         mBitsPerPixel(0),
    498         mPixelFormat(0),
    499         mUsesGuestVRAM(false)
    500     {
    501 //        /* No need for background drawing */
    502 //        setAttribute (Qt::WA_OpaquePaintEvent);
    503     }
     593    VBoxGLWidget (QWidget *aParent);
     594    ~VBoxGLWidget();
    504595
    505596    ulong vboxPixelFormat() { return mPixelFormat; }
     
    518609#ifdef VBOX_WITH_VIDEOHWACCEL
    519610    void vboxVHWACmd (struct _VBOXVHWACMD * pCmd) {vboxPerformGLOp(&VBoxGLWidget::vboxDoVHWACmd, pCmd);}
    520 #endif
    521 
    522     VBoxVHWASurfacePrimary * vboxGetSurface() { return pDisplay; }
     611    class VBoxVHWAGlProgramMngr * vboxVHWAGetGlProgramMngr();
     612#endif
     613
     614    VBoxVHWASurfaceQGL * vboxGetSurface() { return pDisplay; }
    523615protected:
    524616//    void resizeGL (int height, int width);
     
    557649#endif
    558650
    559     VBoxVHWASurfacePrimary * pDisplay;
     651    VBoxVHWASurfaceQGL * pDisplay;
    560652    /* we need to do all opengl stuff in the paintGL context,
    561653     * submit the operation to be performed */
     
    568660    ulong  mPixelFormat;
    569661    bool   mUsesGuestVRAM;
     662
     663#ifdef VBOX_WITH_VIDEOHWACCEL
     664    class VBoxVHWAGlProgramMngr *mpMngr;
     665#endif
    570666};
    571667
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