m3g/m3gcore11/inc/m3g_image.h
changeset 0 5d03bc08d59c
--- /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__*/