//DirectDraw.h
#define image_max 400//максимальное колличество поверхностей
extern DWORD TRANSCOLOR;//Переменная задания прозрачного цвета
extern WORD BIT_MODE;//Переменная задания битового режима
// basic unsigned types
typedef unsigned short USHORT;
typedef unsigned short WORD;
typedef unsigned char  UCHAR;
typedef unsigned char  BYTE;

#define DD_PIXEL_FORMAT555      15
#define DD_PIXEL_FORMAT565      16
//-----------------------------------------------------------------------
//////////////////////////////////////////////////////////////
#define BITMAP_ID            0x4D42 // universal id for a bitmap
// this builds a 16 bit color value in 5.5.5 format (1-bit alpha mode)
#define _RGB16BIT555(r,g,b) ((b & 31) + ((g & 31) << 5) + ((r & 31) << 10))
// this builds a 16 bit color value in 5.6.5 format (green dominate mode)
#define _RGB16BIT565(r,g,b) ((b & 31) + ((g & 63) << 5) + ((r & 31) << 11))
// this builds a 24 bit color value in 8.8.8 format 
#define _RGB24BIT(a,r,g,b) ((b) + ((g) << 8) + ((r) << 16) )
// this builds a 32 bit color value in A.8.8.8 format (8-bit alpha mode)
#define _RGB32BIT(a,r,g,b) ((b) + ((g) << 8) + ((r) << 16) + ((a) << 24))
//////////////////////////////////////////////////////////////
//-----------------------------------------------------------------------
#include <ddraw.h>

extern LPDIRECTDRAW7 pDD;
extern LPDIRECTDRAWPALETTE pDDPal;
extern LPDIRECTDRAWPALETTE pDirectDrawPal;
extern PALETTEENTRY palEntries[256];
extern LPDDSURFACEDESC2 lpDDSurfaceDesc;
//------------------------------------------------------
//	   первичная поверхность
extern LPDIRECTDRAWSURFACE7 pPrimarySurface;
//	   своя вторичная поверхность
extern LPDIRECTDRAWSURFACE7 buffer;
//маленький буфер
extern LPDIRECTDRAWSURFACE7 buf;
//------------------------------------------------------
bool CreateMainSurfaces();
//Функции инициализации и удаления объектов,
//связанных с DirectDraw
bool InitDirectDraw (HWND hwnd,int color_depth);
void RemoveDirectDraw (void);
//проверка на потерю поверхности с востановлением
bool CheckLost();
//------------------------------------------------------
//Создание палитры
LPDIRECTDRAWPALETTE CreateDirectDrawPalette(LPDIRECTDRAW7 pDD,char* filename);
//------------------------------------------------------
// Создаёт поверхность с выбранной шириной и высотой
enum   SurfaceLocation { SYSTEM = 1, VIDEO, BOTH };
extern SurfaceLocation fSurfLoc;
LPDIRECTDRAWSURFACE7 CreateSurface(int x, int y);
//------------------------------------------------------
//очищение заданной поверхности
bool ClearSurface(LPDIRECTDRAWSURFACE7 pSurface);
//------------------------------------------------------
//Функция устанавливает прозрачные цвета для 16 битной поверхностей.
bool SetTransparentColors(LPDIRECTDRAWSURFACE7 pointer);
//------------------------------------------------------
//функция определяющая адрес поверхности
char* SurfacePointers(LPDIRECTDRAWSURFACE7 pSurface);
//------------------------------------------------------
//Переключение со своего вторичного буфера на первичную поверхность
void Flip();
//------------------------------------------------------
//Загрузка изображения из BMP-файла 8 и 24 бит
//попутно создает заданную поверхность
//если поверхность существует, уничтожает ее, создает заново
//по размерам растра и загружает в нее данные рисунка
//передает указателю поверхности номер поверхности
//пример загрузки - load_bmp(&background,"data\\menu\\background.bmp");
LPDIRECTDRAWSURFACE7 load_bmp(char *filename);
//------------------------------------------------------
