diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiVg10PBufferSurface.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiVg10PBufferSurface.h Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,251 @@ +/* +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Definition of CHuiVg10PBufferSurface class. +* CHuiVg10PBufferSurface is an OpenVG PBuffer surface +* object that implements the MHuiRenderSurface interface. +* +*/ + + + +#ifndef __HUIVG10PBUFFERSURFACE_H__ +#define __HUIVG10PBUFFERSURFACE_H__ + + +#include "HuiVg10RenderSurface.h" + +class CHuiVg10RenderPlugin; +class CFbsBitmap; + +/** + * Off-screen rendering surface for OpenGL ES content. A pbuffer (pixel buffer) + * surface can be used for instance for rendering temporary graphical content + * onto. This content can then be reused in the current application. Because + * the class has been inherited from MHuiRenderSurface, it can also be used + * for rendering from displays. Doesn't output rendered content on the + * framebuffer. + * + * @lib hitchcock.lib + */ +NONSHARABLE_CLASS(CHuiVg10PBufferSurface) : public CBase, public MHuiRenderSurface + { +public: // Constructors and destructor + + /** + * \todo + */ + static CHuiVg10PBufferSurface* NewLC(CHuiVg10RenderPlugin& aRenderer, const TSize& aSize, TInt aAlphaBits, TInt aEglBufferType, TInt aBufferColorMode); + + /** + * Constructs a new example CHuiVg10PBufferSurface instance. A static factory method that + * leaves the object to the cleanup stack. + * @param aRenderer CHuiVg10RenderPlugin object that is used to access the shared context + * and determine surface configurations. + * @param aSize Size in pixels of the created PBuffer surface object. + * @return Newly created instance of CHuiVg10PBufferSurface. + */ + static CHuiVg10PBufferSurface* NewLC(CHuiVg10RenderPlugin& aRenderer, const TSize& aSize, TInt aAlphaBits = 0); + + /** + * Constructs a new example CHuiVg10PBufferSurface instance. A static factory method. + * @param aSize Size in pixels of the created PBuffer surface object. + * @return Newly created instance of CHuiVg10PBufferSurface. + */ + static CHuiVg10PBufferSurface* NewL(const TSize& aSize, TInt aAlphaBits = 0); + + /** + * Constructs a new CHuiVg10PBufferSurface class instance and leaves it + * on the cleanup stack. + * @param aSize Size in pixels of the created PBuffer surface object. + * @return Newly created instance of CHuiVg10PBufferSurface. + */ + static CHuiVg10PBufferSurface* NewLC(const TSize& aSize, TInt aAlphaBits = 0); + + /** + * Destructor. + */ + virtual ~CHuiVg10PBufferSurface(); + +public: // From MHuiRenderSurface + + TUint Flags() const; + + /** + * Determines the location of the rendering surface on the screen. But since + * this is an off-screen surface, will return EFalse and will not set the + * origin. + * + * @return If location successfully determined, returns ETrue. + * If the surface is an off-screen surface, returns EFalse. + */ + TBool GetScreenOrigin(TPoint& aOrigin) const; + + /** + * Determines the size of the surface. + * + * @return Size of the surface in pixels. + */ + TSize Size() const; + + /** + * Changes the size of the surface. + * + * @param aSize Size of surface in pixels. + */ + void SetSizeL(const TSize& aSize); + + /** + * Makes this the current rendering surface for any drawing operations. + * Call CHuiStatic::SetCurrentRenderSurface(). + */ + void MakeCurrent(); + + /** + * Swaps the front and back buffers of the surface. + * Pbuffers consist of a single buffer only, so swapping has no effect. + */ + void SwapBuffers(); + + /** + * Binds a texture to the surface to be used during subsequent drawing + * operations. + */ + void BindTexture(TInt aTextureUnit, + const MHuiSegmentedTexture& aTexture, + TInt activeTextureSegment); + + /** + * Handles change in surface visibility. This method is called if surface is either + * hidden or shown. + * + * @param aIsVisible ETrue if surface becomes visible. EFalse if surface is hidden. + */ + void HandleVisibilityEvent(TBool aIsVisible); + + void Release(); + + void RestoreL(); + + void HandleDisplayUsageChangeL(); + + // These methods are not really used, since opengles renderer doesn't + // support dirty region handling or symbian graphics context! + virtual void SetDirtyRect(const TRect& aRect); + virtual MHuiTargetBitmap* BackBuffer(); + virtual CFbsBitGc* Gc(); + + /** + * Provides expandability, helps keeping the binary compatibility. Since virtual + * table is now exported and this class is dll derivable and the implementation + * is more difficult to change, hence this method, which can provide additional + * extension APIs. + * + * @param aExtensionUid UID, which is being used for recognizing the extension + * @param aExtensionParams Return pointer to the extension API, once recognized from the extension uid + */ + virtual void RenderSurfaceExtension(const TUid& aExtensionUid, TAny** aExtensionParams); + +public: // New methods + + /** + * Returns the associated EGL surface object. + */ + EGLSurface EglSurface(); + + void BindToM3G(); + + void ReleaseFromM3G(); + + /** + * \todo + */ + CFbsBitmap* Buffer(); + + /** + * \todo + */ + TInt BufferColorMode() const; + + +protected: + + /** + * Creates a new PBuffer surface object. + */ + EGLSurface CreateSurface(EGLConfig aConfig); + + /** + * Determine config for the owner display. + */ + EGLConfig DetermineConfig(); + + +private: + + /* Constructors. */ + + /** + * Constructs an instance of CHuiClassName. + * @param aRenderer CHuiVg10RenderPlugin object that is used to access + * the shared context and determine surface configurations. + * @param aSize Size of the created PBuffer surface. + * @note Protected because this constructor only needs to be + * called by derived classes. Use the provided static + * factory methods instead. + * @see NewL() + * @see NewLC() + */ + CHuiVg10PBufferSurface(CHuiVg10RenderPlugin& aRenderer, const TSize& aSize, TInt aAlphaBits, TInt aEglBufferType, TInt aBufferColorMode); + + /** + * Second-phase constructor. + */ + void ConstructL(); + + +private: + + /** The display. */ + EGLDisplay iEglDisplay; + + /** The rendering context. */ + EGLContext iEglContext; + + /** The pbuffer surface where the graphics are drawn. */ + EGLSurface iEglSurface; + + /** Current surface size. */ + TSize iSize; + + /** \todo */ + TInt iEglBufferType; + + /** \todo */ + TInt iBufferColorMode; + + /** Alpha channel bits to allocate. */ + TInt iAlphaBits; + + CFbsBitmap* iBuffer; + + /** OpenGL ES Render plugin that provides the display configurations and the display + for this pbuffer surface. */ + CHuiVg10RenderPlugin& iRenderer; + + TBool iIsHardwareAccelerated; + }; + + +#endif // __HUIVG10PBUFFERSURFACE_H__ +