fixed re-initialization of textures after change of renderer
[rocksndiamonds.git] / src / libgame / image.h
index 89f4f7c41d36ac7029fc9d39d05e6d792d18ad3b..76ff3509fa583b24f60229d15f3644cb09387d74 100644 (file)
@@ -1,15 +1,13 @@
-/***********************************************************
-* Artsoft Retro-Game Library                               *
-*----------------------------------------------------------*
-* (c) 1994-2006 Artsoft Entertainment                      *
-*               Holger Schemel                             *
-*               Detmolder Strasse 189                      *
-*               33604 Bielefeld                            *
-*               Germany                                    *
-*               e-mail: info@artsoft.org                   *
-*----------------------------------------------------------*
-* image.h                                                  *
-***********************************************************/
+// ============================================================================
+// Artsoft Retro-Game Library
+// ----------------------------------------------------------------------------
+// (c) 1995-2014 by Artsoft Entertainment
+//                         Holger Schemel
+//                 info@artsoft.org
+//                 http://www.artsoft.org/
+// ----------------------------------------------------------------------------
+// image.h
+// ============================================================================
 
 #ifndef IMAGE_H
 #define IMAGE_H
 #include "system.h"
 
 
-#if defined(TARGET_X11)
+// these bitmap pointers either point to allocated bitmaps or are NULL
+#define IMG_BITMAP_32x32       0
+#define IMG_BITMAP_16x16       1
+#define IMG_BITMAP_8x8         2
+#define IMG_BITMAP_4x4         3
+#define IMG_BITMAP_2x2         4
+#define IMG_BITMAP_1x1         5
+#define IMG_BITMAP_CUSTOM      6
 
-#define MAX_COLORS     256     /* maximal number of colors for each image */
+#define NUM_IMG_BITMAPS                7
 
-typedef unsigned short Intensity;      /* RGB intensity for X11 */
+// this bitmap pointer points to one of the above bitmaps (do not free it)
+#define IMG_BITMAP_GAME                7
 
-typedef struct
-{
-  Display  *display;           /* destination display             */
-  int       depth;             /* depth of destination drawable   */
-  Pixel     index[MAX_COLORS]; /* array of pixel values           */
-  int       no;                        /* number of pixels in the array   */
-  Colormap  cmap;              /* colormap used for image         */
-  Pixmap   pixmap;             /* final pixmap                    */
-  Pixmap   pixmap_mask;                /* final pixmap of mask            */
-} XImageInfo;
+#define NUM_IMG_BITMAP_POINTERS        8
 
-struct RGBMap
-{
-  unsigned int used;                   /* number of colors used in RGB map */
-  Intensity    red[MAX_COLORS];                /* color values in X style          */
-  Intensity    green[MAX_COLORS];
-  Intensity    blue[MAX_COLORS];
-  boolean      color_used[MAX_COLORS]; /* flag if color cell is used       */
-};
+// this bitmap pointer points to the bitmap with default image size
+#define IMG_BITMAP_STANDARD    IMG_BITMAP_32x32
 
-typedef struct
-{
-  unsigned int  type;          /* type of image (True-Color etc.)     */
-  struct RGBMap rgb;           /* RGB map of image if IRGB type       */
-  unsigned int  width;         /* width of image in pixels            */
-  unsigned int  height;                /* height of image in pixels           */
-  unsigned int  depth;         /* depth of image in bits if IRGB type */
-  unsigned int  bytes_per_pixel;/* (depth + 7) / 8                     */
-  unsigned int  bytes_per_row; /* width * bytes_per_pixel             */
-  byte         *data;          /* image data                          */
-} Image;
 
-#define IMAGETYPE_BITMAP       0       /* monochrome bitmap       */
-#define IMAGETYPE_RGB          1       /* RGB image with colormap */
-#define IMAGETYPE_TRUECOLOR    2       /* true-color image        */
+#define GET_BITMAP_ID_FROM_TILESIZE(x) ((x) ==  1 ? IMG_BITMAP_1x1   : \
+                                        (x) ==  2 ? IMG_BITMAP_2x2   : \
+                                        (x) ==  4 ? IMG_BITMAP_4x4   : \
+                                        (x) ==  8 ? IMG_BITMAP_8x8   : \
+                                        (x) == 16 ? IMG_BITMAP_16x16 : \
+                                        (x) == 32 ? IMG_BITMAP_32x32 : \
+                                        IMG_BITMAP_CUSTOM)
 
-#define TRUECOLOR_RED(pixel)   (((unsigned long)((pixel) & 0xff0000)) >> 16)
-#define TRUECOLOR_GREEN(pixel) (((unsigned long)((pixel) & 0xff00)) >> 8)
-#define TRUECOLOR_BLUE(pixel)  ( (unsigned long)((pixel) & 0xff))
-#define RGB_TO_TRUECOLOR(r,g,b)        ((((unsigned long)((r) & 0xff00)) << 8) | ((g) & 0xff00) | (((unsigned short)(b)) >> 8))
+#define GET_TILESIZE_FROM_BITMAP_ID(x) ((x) == IMG_BITMAP_1x1   ? 1  : \
+                                        (x) == IMG_BITMAP_2x2   ? 2  : \
+                                        (x) == IMG_BITMAP_4x4   ? 4  : \
+                                        (x) == IMG_BITMAP_8x8   ? 8  : \
+                                        (x) == IMG_BITMAP_16x16 ? 16 : \
+                                        (x) == IMG_BITMAP_32x32 ? 32 : \
+                                        0)
 
-Image *newImage(unsigned int, unsigned int, unsigned int);
-void freeImage(Image *);
-void freeXImage(Image *, XImageInfo *);
-
-Pixmap Pixmap_to_Mask(Pixmap, int, int);
-
-void ZoomPixmap(Display *, GC, Pixmap, Pixmap, int, int, int, int);
-
-int Read_PCX_to_Pixmap(Display *, Window, GC, char *, Pixmap *, Pixmap *);
-
-#endif /* TARGET_X11 */
 
 int getImageListSize();
 struct FileInfo *getImageListEntryFromImageID(int);
-Bitmap *getBitmapFromImageID(int);
+Bitmap **getBitmapsFromImageID(int);
 int getOriginalImageWidthFromImageID(int);
 int getOriginalImageHeightFromImageID(int);
 char *getTokenFromImageID(int);
@@ -90,7 +66,9 @@ void InitImageList(struct ConfigInfo *, int, struct ConfigTypeInfo *,
                   char **, char **, char **, char **, char **);
 
 void ReloadCustomImages();
-void CreateImageWithSmallImages(int, int);
+void CreateImageWithSmallImages(int, int, int);
+void CreateImageTextures(int);
+void FreeAllImageTextures();
 void ScaleImage(int, int);
 
 void FreeAllImages();