diff -r 000000000000 -r 5d03bc08d59c m3g/m3gcore11/inc/m3g_image.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m3g/m3gcore11/inc/m3g_image.h Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,135 @@ +/* +* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: Image interface +* +*/ + +#ifndef __M3G_IMAGE_H__ +#define __M3G_IMAGE_H__ + +/*! + * \internal + * \file + * \brief Image interface + */ + +#include "m3g_object.h" +#include "m3g_gl.h" + +#if !defined(M3G_NGL_TEXTURE_API) +typedef struct LargeImageImpl LargeImage; +#endif + +/*! + * \internal + * \brief Image object + */ +struct M3GImageImpl +{ + Object object; + + M3Gint width, height; + M3GImageFormat format; + M3GPixelFormat internalFormat; + + Image *powerOfTwo; + + GLenum glFormat; +# if !defined(M3G_NGL_TEXTURE_API) + GLuint texObject; + LargeImage *large; /*! \internal \ */ +# endif + + M3GMemObject data; + M3GMemObject mipData; + M3Gsizei paletteBytes; + + M3Gbitmask flags : 8; /* flags defined in m3g_core.h */ + M3Gbitmask special : 8; /* flags defined below */ + + M3Gbool pinned : 1; /* image can not be deleted */ + M3Gbool dirty : 1; + M3Gbool powerOfTwoDirty : 1; + M3Gbool mipDataMapCount : 4; /* max. 16 concurrent uses */ +# if !defined(M3G_NGL_TEXTURE_API) + M3Gbool mipmapsDirty : 1; /*!< \internal 'dirty' overrides this */ +# endif + + /* For easy cloning of immutable images without replicating the + * data, we must keep a reference to the original so that it isn't + * deleted until we are */ + + Image *copyOf; +}; + +/*! + * \internal \brief "special" flag bits */ +#define IMG_NPOT 0x01 +#define IMG_LARGE 0x02 + +/*---------------------------------------------------------------------- + * Internal functions + *--------------------------------------------------------------------*/ + +static void m3gBindTextureImage(Image *img, M3Genum levelFilter, M3Genum imageFilter); +static void m3gReleaseTextureImage(Image *img); + +static Image *m3gGetPowerOfTwoImage(Image *img); + +static M3GPixelFormat m3gPixelFormat (M3GImageFormat format); +static M3Gint m3gBytesPerPixel(M3GPixelFormat format); + +static void m3gConvertPixels(M3GPixelFormat srcFormat, const M3Gubyte *src, + M3GPixelFormat dstFormat, M3Gubyte *dst, + M3Gsizei count); + +static void m3gConvertPixelRect( + M3GPixelFormat srcFormat, const M3Gubyte *src, M3Gsizei srcStride, + M3Gsizei width, M3Gsizei height, + M3GPixelFormat dstFormat, M3Gubyte *dst, M3Gsizei dstStride); + +static void m3gCopyImagePixels(Image *dst, const Image *src); +#if !defined(M3G_NGL_TEXTURE_API) +static void m3gCopyFrameBufferImage(Image *dst); +static void m3gDrawFrameBufferImage(RenderContext *ctx, const Image *src); +#endif /* !defined(M3G_NGL_TEXTURE_API)*/ + +static void m3gInvalidateImage(Image *img); + +#if defined(M3G_NGL_TEXTURE_API) +static M3Gbool m3gValidateMipmapMemory(Image *img); +#endif + +/*! \internal */ +static M3Gsizei m3gGetImageStride(const Image *img); + +static M3Gint m3gGetAlpha(Image *image, M3Gint x, M3Gint y); + +static M3G_INLINE M3Gbool m3gIsInternallyPaletted(const Image *img) +{ + return (img->paletteBytes > 0); +} + +#if 0 +/*! + * \internal + * \brief Type-safe helper function + */ +static M3G_INLINE void m3gDeleteImage(Image *img) +{ + m3gDeleteObject((Object*) img); +} +#endif + +#endif /*__M3G_IMAGE_H__*/