uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiSegmentedTexture.h
changeset 0 15bf7259bb7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiSegmentedTexture.h	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2006-2007 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:   Declares MHuiSegmentedTexture interface class for texture image objects.
+*
+*/
+
+
+
+#ifndef __HUISEGMENTEDTEXTURE_H__
+#define __HUISEGMENTEDTEXTURE_H__
+
+
+#include <e32base.h>
+
+
+/* Forward declarations. */
+class THuiTextureHandle;
+
+
+/**
+ * MHuiSegmentedTexture is an abstract base class for texture image objects.
+ * It specifies one or more texture images that comprise a larger (virtual) image.
+ * THuiImage refers to objects that implement MHuiSegmentedTexture.
+ *
+ * A segmented texture is a texture that is composed of one or more segments.
+ * Each segment has a position, dimensions, and a name that identifies the texture
+ * image of the segment. The purpose is that it is possible to compose large images
+ * out of smaller segments. The segments can overlap.
+ *
+ * One use case is where the OpenGL texture size is limited (e.g., 256x256). A class
+ * implementing MHuiSegmentedTexture would in this case split the uploaded source
+ * image to multiple segments and create a different OpenGL texture for each. All
+ * of the segments would still be hidden inside the implementing
+ * MHuiSegmentedTexture-derived class, though, so it could be treated as a single entity.
+ *
+ * When an object implements the MHuiSegmentedTexture interface, it can be drawn using
+ * the DrawImage() methods in CHuiGc (since THuiImage specifies the image as
+ * MHuiSegmentedTexture).
+ *
+ * @note CHuiGc and CHuiTexture only support single-segment textures at the moment.
+ * @see CHuiGles10Texture
+ * @see CHuiTexture
+ * @see CHuiGc
+ * @see THuiImage
+ *
+ */
+class MHuiSegmentedTexture
+    {
+public:
+
+    /** @beginAPI */
+
+    /** Construction / Destruction */
+
+    /**
+     * Virtual destructor, needed because we have a couple of implemented
+     * methods.
+     */
+    IMPORT_C virtual ~MHuiSegmentedTexture();
+
+
+    /* Methods. */
+
+    /**
+     * Returns the logical size of this texture. Ie. the original size of the
+     * image represented with this texture. This size is independent of the
+     * possible segmentation of this texture.
+     *
+     * On the other hand the actual texture size may
+     * vary across segments and typically has some driver/hw limitations.
+     *
+     * Note that all the segments must be contained inside the logical
+     * area defined with this function.
+     *
+     * @see SegmentSize() To return logical size for a particular texture segment.
+     * @see SegmentOffset() To return logical position for a particular texture segment.
+     * @see SegmentTextureSize() To return texture size for a segment.
+     */
+    virtual TSize Size() const = 0;
+
+    /**
+     * Determines how many segments the texture has. Will return 1 if
+     * the texture is not segmented.
+     *
+     * @return  Number of segments in this texture.
+     */
+    virtual TInt SegmentCount() const = 0;
+
+    /**
+     * Determines the texture name of a segment. For example with
+     * OpenGL ES renderer, this will be the texture id generated
+     * with glGenTextures().
+     *
+     * @param aSegment Segment index to access.
+     */
+    virtual TUint SegmentName(TInt aSegment) const = 0;
+
+    /**
+     * Determines the logical size of a texture segment.
+     * Can be non-power-of-two (NPOT) and may be different
+     * from the actual texture size.
+     *
+     * @param aSegment Valid segment index for this texture.
+     * @see Size() to return logical size of the whole texture.
+     * @see SegmentTextureSize() to determine the actual resolution of
+     * the texture.
+     */
+    virtual TSize SegmentSize(TInt aSegment) const = 0;
+
+    /**
+     * Determines the actual resolution of the texture used
+     * by the segment. Most likely only Power-of-Two, unless NPOT
+     * supported by the graphics library.
+     *
+     * @param aSegment Valid segment index for this texture.
+     */
+    virtual TSize SegmentTextureSize(TInt aSegment) const = 0;
+
+    /**
+     * Determines the logical offset for a texture segment.
+     *
+     * @param aSegment Valid segment index for this texture.
+     */
+    virtual TPoint SegmentOffset(TInt aSegment) const = 0;
+
+    /**
+     * Returns a handle to given texture segment. Defaults to first segment.
+     */
+    IMPORT_C THuiTextureHandle Handle(TInt aSegment = 0) const;
+
+    /**
+     * Binds given texture segment to the texture target. Binding makes
+     * the texture segment active.
+     *
+     * @param aSegment Index of a segment. Defaults to the first segment.
+     * @param aTextureUnit  Which (multi-)texture unit to bind to. The default
+     * value binds to the first texture unit (single-texturing mode).
+     * @see SegmentCount() to get the number of available segments.
+     */
+    IMPORT_C void Bind(TInt aSegment = 0, TInt aTextureUnit = 0) const;
+
+    /** @endAPI */
+    
+    };
+
+
+#endif // __HUISEGMENTEDTEXTURE_H__