uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiVg10RenderSurface.h
changeset 0 15bf7259bb7c
child 3 d8a3531bc6b8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiVg10RenderSurface.h	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,188 @@
+/*
+* 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:   OpenVG 1.0 render surface.
+*
+*/
+
+
+
+#ifndef __HUIVG10RENDERSURFACE_H__
+#define __HUIVG10RENDERSURFACE_H__
+
+
+#include <e32base.h>
+
+#include <EGL/egl.h>
+
+#include "HuiRenderSurface.h"
+#include "uiacceltk/HuiSessionObject.h"
+
+
+/* Forward declarations. */
+class CHuiDisplay;
+
+
+/**
+ * The render surface is a destination where rendered graphics will ultimately
+ * end up. This may be, e.g., the display frame buffer or a bitmap in memory.
+ */
+NONSHARABLE_CLASS(CHuiVg10RenderSurface) : public CBase, public MHuiRenderSurface,
+                                           public MHuiSessionObject
+    {
+public:
+
+    /* Constructors and destructor. */
+
+    static CHuiVg10RenderSurface* NewL(CHuiDisplay& aDisplay);
+
+    static CHuiVg10RenderSurface* NewLC(CHuiDisplay& aDisplay);
+
+    virtual ~CHuiVg10RenderSurface();
+
+
+    /* Methods, implemets MHuiRenderSurface interface. */
+
+    TUint Flags() const;
+    
+    TBool GetScreenOrigin(TPoint& aOrigin) const;
+
+    TSize Size() const;
+
+    void SetSizeL(const TSize& aSize);
+
+    virtual void MakeCurrent();
+
+    virtual void SwapBuffers();
+
+    virtual void BindTexture(TInt aTextureUnit,
+                             const MHuiSegmentedTexture& aTexture,
+                             TInt aSegment);
+
+    /**
+     * Handles change in surface visibility. This method is called if surface is either
+     * hidden or shown. This default implementation ignores visibility events.
+     *
+     * @param aIsVisible ETrue if surface becomes visible. EFalse if surface is hidden.
+     */
+    virtual void HandleVisibilityEvent(TBool aIsVisible);
+
+    virtual void Release();
+
+    virtual void RestoreL();
+
+    virtual 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);
+
+    /**
+     * Static method for returning verbose error message strings according to the given
+     * EGL error value. This can be used to create meaningful error messages in
+     * HUIToolkit environments that use OpenVG rendering.
+     *
+     * @param aErrorCode EGL Error code retrieved by eglGetError - method.
+     * @return Verbose error message as a TDesC reference object.
+     */
+    static const TDesC& EglErrorMessage(TInt aErrorCode);
+
+    // Implementation of MHuiSessionObject
+    
+    /**
+     * Gets the object type.
+     */
+    TType Type() const;
+
+    /**
+     * Gets the session id for object.
+     */
+    TInt SessionId() const;
+
+    /**
+     * Sets the session id for object.
+     */
+    void SetSessionId(TInt aSessionId);
+    
+    /**
+     *  @return the currently bound texture image.
+     */
+    const MHuiSegmentedTexture* BoundTexture() const;
+
+protected:
+
+    /* Constructors. */
+
+    CHuiVg10RenderSurface(CHuiDisplay& aDisplay);
+
+    void ConstructL();
+
+    /**
+     * Determines the display to which this rendering surface is attached.
+     *
+     * @return  Display.
+     */
+    CHuiDisplay& Display() const;
+
+    /**
+     * Determine config for the owner display.
+     */
+    EGLConfig DetermineConfig();
+
+    /**
+     * Create an EGL rendering surface.
+     */
+    EGLSurface CreateSurface(EGLConfig aConfig);
+
+
+protected:
+
+    /** Display that owns the surface. */
+    CHuiDisplay* iDisplay;
+
+    /** The display. */
+    EGLDisplay iEglDisplay;
+
+    /** The rendering context. */
+    EGLContext iEglContext;
+
+    /** The window where the graphics are drawn. */
+    EGLSurface iEglSurface;
+
+    /** Size of the rendering surface. */
+    TSize iSize;
+    
+    /** The currently bound texture */
+    const MHuiSegmentedTexture* iBoundTexture;
+
+private:
+    /** Session id */
+    TInt iSessionId;
+    
+    };
+
+
+#endif // __HUIVG10RENDERSURFACE_H__