/* * Copyright © 2006-2013 SplinterGU (Fenix/Bennugd) * Copyright © 2002-2006 Fenix Team (Fenix) * Copyright © 1999-2002 José Luis Cebrián Pagüe (Fenix) * * This file is part of Bennu - Game Development * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * * 3. This notice may not be removed or altered from any source * distribution. * */ #ifndef __BITMAP_H #define __BITMAP_H #include "g_pal.h" /* --------------------------------------------------------------------------- */ #define GI_NOCOLORKEY 0x00000001 /* info_flags bits */ #define GI_CLEAN 0x40000000 /* the graphic is clean (no data) */ #define GI_EXTERNAL_DATA 0x80000000 /* data area is external, it don't belong to bitmap */ #define GI_ANALIZE_MASK GI_NOCOLORKEY #define CPOINT_UNDEFINED 32767 /* It's enough if X is set to this value */ /* --------------------------------------------------------------------------- */ typedef struct _cpoint { short int x; short int y; } CPOINT; typedef struct _pixel_format { PALETTE * palette; /* Palette for 8 bits graphics */ uint8_t depth; /* bits per pixel */ uint8_t depthb; /* bytes per pixel */ uint8_t Rloss; uint8_t Gloss; uint8_t Bloss; uint8_t Aloss; uint8_t Rshift; uint8_t Gshift; uint8_t Bshift; uint8_t Ashift; uint32_t Rmask; uint32_t Gmask; uint32_t Bmask; uint32_t Amask; } PIXEL_FORMAT; typedef struct _bitmap { int code; /* Identifier of the graphic (in the graphic library) */ char name[ 64 ]; /* Name of the graphic */ uint32_t width; /* Width of a bitmap frame in pixels */ uint32_t height; /* Height of a bitmap frame in pixels */ uint32_t pitch; /* Bytes of distance between bitmap lines */ uint32_t widthb; /* Width of a bitmap frame in bytes */ PIXEL_FORMAT * format; /* Pixel format */ /* Runtime use */ int modified; /* 0 - bitmap not modified 1 - bitmap is modified 2 - bitmap is modified and needs analysis */ int info_flags; /* Analysis result (see bitmap_analize) */ void * data; /* Pointer to the bitmap data at current frame */ uint32_t ncpoints; /* Number of control points */ CPOINT * cpoints; /* Pointer to the control points ([0] = center) */ /* Blend Ops */ int16_t * blend_table; /* Pointer to 16 bits blend table if any */ /* Linked list of all bitmaps in memory */ /* struct _bitmap * next; struct _bitmap * prev; */ } GRAPH; /* --------------------------------------------------------------------------- */ extern GRAPH * bitmap_new( int code, int w, int h, int depth ); extern GRAPH * bitmap_new_ex( int code, int w, int h, int depth, void * data, int pitch ); extern GRAPH * bitmap_clone( GRAPH * t ); extern GRAPH * bitmap_new_syslib( int w, int h, int depth ); extern void bitmap_destroy( GRAPH * map ); extern void bitmap_destroy_fake( GRAPH * map ); extern void bitmap_add_cpoint( GRAPH *map, int x, int y ); extern void bitmap_set_cpoint( GRAPH * map, uint32_t point, int x, int y ); extern void bitmap_analize( GRAPH * bitmap ); extern PIXEL_FORMAT * bitmap_create_format( int bpp ); extern int bitmap_next_code(); /* --------------------------------------------------------------------------- */ #endif