diff -r 000000000000 -r 15bf7259bb7c uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiSegmentedTexture.h --- /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 + + +/* 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__