code cleanup: make header defines more consistent, JOYSENSOR header guard had a typo...
[blender-staging.git] / source / blender / imbuf / IMB_imbuf_types.h
index cb5d6721566111d07633bedd40f83c34af4ad40f..76c247b219507a73cd05713a5fea49a6c3f72335 100644 (file)
@@ -1,17 +1,4 @@
 /*
- * IMB_imbuf_types.h (mar-2001 nzc)
- *
- * Types needed for using the image buffer.
- *
- * Imbuf is external code, slightly adapted to live in the Blender
- * context. It requires an external jpeg module, and the avi-module
- * (also external code) in order to function correctly.
- *
- * This file contains types and some constants that go with them. Most
- * are self-explanatory (e.g. IS_amiga tests whether the buffer
- * contains an Amiga-format file).
- *
- *
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
  *
  * ***** END GPL LICENSE BLOCK *****
  */
+
+#ifndef __IMB_IMBUF_TYPES_H__
+#define __IMB_IMBUF_TYPES_H__
+
 /**
  * \file IMB_imbuf_types.h
  * \ingroup imbuf
  * \brief Contains defines and structs used throughout the imbuf module.
  * \todo Clean up includes.
+ *
+ * Types needed for using the image buffer.
+ *
+ * Imbuf is external code, slightly adapted to live in the Blender
+ * context. It requires an external jpeg module, and the avi-module
+ * (also external code) in order to function correctly.
+ *
+ * This file contains types and some constants that go with them. Most
+ * are self-explanatory (e.g. IS_amiga tests whether the buffer
+ * contains an Amiga-format file).
  */
 
-#ifndef IMB_IMBUF_TYPES_H
-#define IMB_IMBUF_TYPES_H
-
 struct ImMetaData;
 
 #define IB_MIPMAP_LEVELS       20
 #define IB_FILENAME_SIZE       1024
 
+typedef struct DDSData {
+       unsigned int fourcc; /* DDS fourcc info */
+       unsigned int nummipmaps; /* The number of mipmaps in the dds file */
+       unsigned char *data; /* The compressed image data */
+       unsigned int size; /* The size of the compressed data */
+} DDSData;
+
 /**
  * \ingroup imbuf
  * This is the abstraction of an image.  ImBuf is the basic type used for all
  * imbuf operations.
  *
- * REMINDER: if any changes take place, they need to be carried over
- * to source/blender/blenpluginapi/iff.h too, OTHERWISE PLUGINS WON'T
- * WORK CORRECTLY!
- *
  * Also; add new variables to the end to save pain!
  *
- * Also, that iff.h needs to be in the final release "plugins/include" dir, too!
  */
 typedef struct ImBuf {
        struct ImBuf *next, *prev;      /**< allow lists of ImBufs, for caches or flipbooks */
@@ -84,8 +84,8 @@ typedef struct ImBuf {
        /* pixels */
        unsigned int *rect;             /* pixel values stored here */
        float *rect_float;              /* floating point Rect equivalent
-                                                       Linear RGB color space - may need gamma correction to 
-                                                       sRGB when generating 8bit representations */
+                                * Linear RGB color space - may need gamma correction to
+                                * sRGB when generating 8bit representations */
 
        /* resolution - pixels per meter */
        double ppm[2];
@@ -101,7 +101,6 @@ typedef struct ImBuf {
 
        /* parameters used by conversion between byte and float */
        float dither;                           /* random dither value, for conversion from float -> byte rect */
-       short profile;                          /* color space/profile preset that the byte rect buffer represents */
 
        /* mipmapping */
        struct ImBuf *mipmap[IB_MIPMAP_LEVELS]; /* MipMap levels, a series of halved images */
@@ -126,6 +125,16 @@ typedef struct ImBuf {
        unsigned char *encodedbuffer;     /* Compressed image only used with png currently */
        unsigned int   encodedsize;       /* Size of data written to encodedbuffer */
        unsigned int   encodedbuffersize; /* Size of encodedbuffer */
+
+       /* color management */
+       struct ColorSpace *rect_colorspace;          /* color space of byte buffer */
+       struct ColorSpace *float_colorspace;         /* color space of float buffer, used by sequencer only */
+       unsigned int *display_buffer_flags;          /* array of per-display display buffers dirty flags */
+       struct ColormanageCache *colormanage_cache;  /* cache used by color management */
+       int colormanage_flag;
+
+       /* information for compressed textures */
+       struct DDSData dds_data;
 } ImBuf;
 
 /* Moved from BKE_bmfont_types.h because it is a userflag bit mask. */
@@ -133,10 +142,11 @@ typedef struct ImBuf {
  * \brief userflags: Flags used internally by blender for imagebuffers
  */
 
-#define IB_BITMAPFONT          (1 << 0)        /* this image is a font */
-#define IB_BITMAPDIRTY         (1 << 1)        /* image needs to be saved is not the same as filename */
-#define IB_MIPMAP_INVALID      (1 << 2)        /* image mipmaps are invalid, need recreate */
-#define IB_RECT_INVALID                (1 << 3)    /* float buffer changed, needs recreation of byte rect */
+#define IB_BITMAPFONT                  (1 << 0)        /* this image is a font */
+#define IB_BITMAPDIRTY                 (1 << 1)        /* image needs to be saved is not the same as filename */
+#define IB_MIPMAP_INVALID              (1 << 2)        /* image mipmaps are invalid, need recreate */
+#define IB_RECT_INVALID                        (1 << 3)        /* float buffer changed, needs recreation of byte rect */
+#define IB_DISPLAY_BUFFER_INVALID      (1 << 4)        /* either float or byte buffer changed, need to re-calculate display buffers */
 
 /**
  * \name Imbuf Component flags
@@ -162,8 +172,10 @@ typedef struct ImBuf {
 
 /*
  * The bit flag is stored in the ImBuf.ftype variable.
- * Note that the lower 10 bits is used for storing custom flags 
+ * Note that the lower 10 bits is used for storing custom flags
  */
+#define IB_CUSTOM_FLAGS_MASK 0x3ff
+
 #define PNG                            (1 << 30)
 #define TGA                            (1 << 28)
 #define JPG                            (1 << 27)
@@ -222,9 +234,35 @@ typedef struct ImBuf {
 #define IB_PROFILE_SRGB                        2
 #define IB_PROFILE_CUSTOM              3
 
+/* dds */
+#ifdef WITH_DDS
+#ifndef MAKEFOURCC
+#define MAKEFOURCC(ch0, ch1, ch2, ch3)\
+       ((unsigned long)(unsigned char)(ch0) | \
+       ((unsigned long)(unsigned char)(ch1) << 8) | \
+       ((unsigned long)(unsigned char)(ch2) << 16) | \
+       ((unsigned long)(unsigned char)(ch3) << 24))
+#endif  /* MAKEFOURCC */
+
+/*
+ * FOURCC codes for DX compressed-texture pixel formats
+ */
+
+#define FOURCC_DDS   (MAKEFOURCC('D','D','S',' '))
+#define FOURCC_DXT1  (MAKEFOURCC('D','X','T','1'))
+#define FOURCC_DXT2  (MAKEFOURCC('D','X','T','2'))
+#define FOURCC_DXT3  (MAKEFOURCC('D','X','T','3'))
+#define FOURCC_DXT4  (MAKEFOURCC('D','X','T','4'))
+#define FOURCC_DXT5  (MAKEFOURCC('D','X','T','5'))
+
+#endif  /* DDS */
 extern const char *imb_ext_image[];
 extern const char *imb_ext_image_qt[];
 extern const char *imb_ext_movie[];
 extern const char *imb_ext_audio[];
 
+enum {
+       IMB_COLORMANAGE_IS_DATA = (1 << 0)
+};
+
 #endif