t3dlib1.h
资源名称:Source.rar [点击查看]
上传用户:husern
上传日期:2018-01-20
资源大小:42486k
文件大小:25k
源码类别:
游戏
开发平台:
Visual C++
- // T3DLIB1.H - Header file for T3DLIB1.CPP game engine library
- // watch for multiple inclusions
- #ifndef T3DLIB1
- #define T3DLIB1
- // DEFINES ////////////////////////////////////////////////
- // default screen values, these are all overriden by the
- // call to DDraw_Init() and are just here to have something
- // to set the globals to instead of constant values
- #define SCREEN_WIDTH 640 // size of screen
- #define SCREEN_HEIGHT 480
- #define SCREEN_BPP 8 // bits per pixel
- #define MAX_COLORS_PALETTE 256
- #define DEFAULT_PALETTE_FILE "PALDATA2.PAL"
- // used for selecting full screen/windowed mode
- #define SCREEN_FULLSCREEN 0
- #define SCREEN_WINDOWED 1
- // bitmap defines
- #define BITMAP_ID 0x4D42 // universal id for a bitmap
- #define BITMAP_STATE_DEAD 0
- #define BITMAP_STATE_ALIVE 1
- #define BITMAP_STATE_DYING 2
- #define BITMAP_ATTR_LOADED 128
- #define BITMAP_EXTRACT_MODE_CELL 0
- #define BITMAP_EXTRACT_MODE_ABS 1
- // directdraw pixel format defines, used to help
- // bitmap loader put data in proper format
- #define DD_PIXEL_FORMAT8 8
- #define DD_PIXEL_FORMAT555 15
- #define DD_PIXEL_FORMAT565 16
- #define DD_PIXEL_FORMAT888 24
- #define DD_PIXEL_FORMATALPHA888 32
- // defines for BOBs
- #define BOB_STATE_DEAD 0 // this is a dead bob
- #define BOB_STATE_ALIVE 1 // this is a live bob
- #define BOB_STATE_DYING 2 // this bob is dying
- #define BOB_STATE_ANIM_DONE 1 // done animation state
- #define MAX_BOB_FRAMES 64 // maximum number of bob frames
- #define MAX_BOB_ANIMATIONS 16 // maximum number of animation sequeces
- #define BOB_ATTR_SINGLE_FRAME 1 // bob has single frame
- #define BOB_ATTR_MULTI_FRAME 2 // bob has multiple frames
- #define BOB_ATTR_MULTI_ANIM 4 // bob has multiple animations
- #define BOB_ATTR_ANIM_ONE_SHOT 8 // bob will perform the animation once
- #define BOB_ATTR_VISIBLE 16 // bob is visible
- #define BOB_ATTR_BOUNCE 32 // bob bounces off edges
- #define BOB_ATTR_WRAPAROUND 64 // bob wraps around edges
- #define BOB_ATTR_LOADED 128 // the bob has been loaded
- #define BOB_ATTR_CLONE 256 // the bob is a clone
- // screen transition commands
- #define SCREEN_DARKNESS 0 // fade to black
- #define SCREEN_WHITENESS 1 // fade to white
- #define SCREEN_SWIPE_X 2 // do a horizontal swipe
- #define SCREEN_SWIPE_Y 3 // do a vertical swipe
- #define SCREEN_DISOLVE 4 // a pixel disolve
- #define SCREEN_SCRUNCH 5 // a square compression
- #define SCREEN_BLUENESS 6 // fade to blue
- #define SCREEN_REDNESS 7 // fade to red
- #define SCREEN_GREENNESS 8 // fade to green
- // defines for Blink_Colors
- #define BLINKER_ADD 0 // add a light to database
- #define BLINKER_DELETE 1 // delete a light from database
- #define BLINKER_UPDATE 2 // update a light
- #define BLINKER_RUN 3 // run normal
- // pi defines
- #define PI ((float)3.141592654f)
- #define PI2 ((float)6.283185307f)
- #define PI_DIV_2 ((float)1.570796327f)
- #define PI_DIV_4 ((float)0.785398163f)
- #define PI_INV ((float)0.318309886f)
- // fixed point mathematics constants
- #define FIXP16_SHIFT 16
- #define FIXP16_MAG 65536
- #define FIXP16_DP_MASK 0x0000ffff
- #define FIXP16_WP_MASK 0xffff0000
- #define FIXP16_ROUND_UP 0x00008000
- // MACROS /////////////////////////////////////////////////
- // these read the keyboard asynchronously
- #define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
- #define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
- // 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))
- // bit manipulation macros
- #define SET_BIT(word,bit_flag) ((word)=((word) | (bit_flag)))
- #define RESET_BIT(word,bit_flag) ((word)=((word) & (~bit_flag)))
- // initializes a direct draw struct, basically zeros it and sets the dwSize field
- #define DDRAW_INIT_STRUCT(ddstruct) { memset(&ddstruct,0,sizeof(ddstruct)); ddstruct.dwSize=sizeof(ddstruct); }
- // used to compute the min and max of two expresions
- #define MIN(a, b) (((a) < (b)) ? (a) : (b))
- #define MAX(a, b) (((a) > (b)) ? (a) : (b))
- // used for swapping algorithm
- #define SWAP(a,b,t) {t=a; a=b; b=t;}
- // some math macros
- #define DEG_TO_RAD(ang) ((ang)*PI/180.0)
- #define RAD_TO_DEG(rads) ((rads)*180.0/PI)
- #define RAND_RANGE(x,y) ( (x) + (rand()%((y)-(x)+1)))
- // TYPES //////////////////////////////////////////////////
- // basic unsigned types
- typedef unsigned short USHORT;
- typedef unsigned short WORD;
- typedef unsigned char UCHAR;
- typedef unsigned char BYTE;
- typedef unsigned int QUAD;
- typedef unsigned int UINT;
- // container structure for bitmaps .BMP file
- typedef struct BITMAP_FILE_TAG
- {
- BITMAPFILEHEADER bitmapfileheader; // this contains the bitmapfile header
- BITMAPINFOHEADER bitmapinfoheader; // this is all the info including the palette
- PALETTEENTRY palette[256]; // we will store the palette here
- UCHAR *buffer; // this is a pointer to the data
- } BITMAP_FILE, *BITMAP_FILE_PTR;
- // the blitter object structure BOB
- typedef struct BOB_TYP
- {
- int state; // the state of the object (general)
- int anim_state; // an animation state variable, up to you
- int attr; // attributes pertaining to the object (general)
- float x,y; // position bitmap will be displayed at
- float xv,yv; // velocity of object
- int width, height; // the width and height of the bob
- int width_fill; // internal, used to force 8*x wide surfaces
- int bpp; // bits per pixel
- int counter_1; // general counters
- int counter_2;
- int max_count_1; // general threshold values;
- int max_count_2;
- int varsI[16]; // stack of 16 integers
- float varsF[16]; // stack of 16 floats
- int curr_frame; // current animation frame
- int num_frames; // total number of animation frames
- int curr_animation; // index of current animation
- int anim_counter; // used to time animation transitions
- int anim_index; // animation element index
- int anim_count_max; // number of cycles before animation
- int *animations[MAX_BOB_ANIMATIONS]; // animation sequences
- LPDIRECTDRAWSURFACE7 images[MAX_BOB_FRAMES]; // the bitmap images DD surfaces
- } BOB, *BOB_PTR;
- // the simple bitmap image
- typedef struct BITMAP_IMAGE_TYP
- {
- int state; // state of bitmap
- int attr; // attributes of bitmap
- int x,y; // position of bitmap
- int width, height; // size of bitmap
- int num_bytes; // total bytes of bitmap
- int bpp; // bits per pixel
- UCHAR *buffer; // pixels of bitmap
- } BITMAP_IMAGE, *BITMAP_IMAGE_PTR;
- // blinking light structure
- typedef struct BLINKER_TYP
- {
- // user sets these
- int color_index; // index of color to blink
- PALETTEENTRY on_color; // RGB value of "on" color
- PALETTEENTRY off_color; // RGB value of "off" color
- int on_time; // number of frames to keep "on"
- int off_time; // number of frames to keep "off"
- // internal member
- int counter; // counter for state transitions
- int state; // state of light, -1 off, 1 on, 0 dead
- } BLINKER, *BLINKER_PTR;
- // a 2D vertex
- typedef struct VERTEX2DI_TYP
- {
- int x,y; // the vertex
- } VERTEX2DI, *VERTEX2DI_PTR;
- // a 2D vertex
- typedef struct VERTEX2DF_TYP
- {
- float x,y; // the vertex
- } VERTEX2DF, *VERTEX2DF_PTR;
- // a 2D polygon
- typedef struct POLYGON2D_TYP
- {
- int state; // state of polygon
- int num_verts; // number of vertices
- int x0,y0; // position of center of polygon
- int xv,yv; // initial velocity
- DWORD color; // could be index or PALETTENTRY
- VERTEX2DF *vlist; // pointer to vertex list
- } POLYGON2D, *POLYGON2D_PTR;
- // matrix defines
- // 3x3 matrix /////////////////////////////////////////////
- typedef struct MATRIX3X3_TYP
- {
- union
- {
- float M[3][3]; // array indexed data storage
- // storage in row major form with explicit names
- struct
- {
- float M00, M01, M02;
- float M10, M11, M12;
- float M20, M21, M22;
- }; // end explicit names
- }; // end union
- } MATRIX3X3, *MATRIX3X3_PTR;
- // 1x3 matrix /////////////////////////////////////////////
- typedef struct MATRIX1X3_TYP
- {
- union
- {
- float M[3]; // array indexed data storage
- // storage in row major form with explicit names
- struct
- {
- float M00, M01, M02;
- }; // end explicit names
- }; // end union
- } MATRIX1X3, *MATRIX1X3_PTR;
- // 3x2 matrix /////////////////////////////////////////////
- typedef struct MATRIX3X2_TYP
- {
- union
- {
- float M[3][2]; // array indexed data storage
- // storage in row major form with explicit names
- struct
- {
- float M00, M01;
- float M10, M11;
- float M20, M21;
- }; // end explicit names
- }; // end union
- } MATRIX3X2, *MATRIX3X2_PTR;
- // 1x2 matrix /////////////////////////////////////////////
- typedef struct MATRIX1X2_TYP
- {
- union
- {
- float M[2]; // array indexed data storage
- // storage in row major form with explicit names
- struct
- {
- float M00, M01;
- }; // end explicit names
- }; // end union
- } MATRIX1X2, *MATRIX1X2_PTR;
- // PROTOTYPES /////////////////////////////////////////////
- // DirectDraw functions
- int DDraw_Init(int width, int height, int bpp, int windowed=0);
- int DDraw_Shutdown(void);
- LPDIRECTDRAWCLIPPER DDraw_Attach_Clipper(LPDIRECTDRAWSURFACE7 lpdds, int num_rects, LPRECT clip_list);
- LPDIRECTDRAWSURFACE7 DDraw_Create_Surface(int width, int height, int mem_flags=0, USHORT color_key_value=0);
- int DDraw_Flip(void);
- int DDraw_Wait_For_Vsync(void);
- int DDraw_Fill_Surface(LPDIRECTDRAWSURFACE7 lpdds, USHORT color, RECT *client=NULL);
- UCHAR *DDraw_Lock_Surface(LPDIRECTDRAWSURFACE7 lpdds,int *lpitch);
- int DDraw_Unlock_Surface(LPDIRECTDRAWSURFACE7 lpdds);
- UCHAR *DDraw_Lock_Primary_Surface(void);
- int DDraw_Unlock_Primary_Surface(void);
- UCHAR *DDraw_Lock_Back_Surface(void);
- int DDraw_Unlock_Back_Surface(void);
- // BOB functions
- int Create_BOB(BOB_PTR bob,int x, int y,int width, int height,int num_frames,int attr,
- int mem_flags=0, USHORT color_key_value=0, int bpp=8);
- int Clone_BOB(BOB_PTR source, BOB_PTR dest);
- int Destroy_BOB(BOB_PTR bob);
- int Draw_BOB(BOB_PTR bob, LPDIRECTDRAWSURFACE7 dest);
- int Draw_Scaled_BOB(BOB_PTR bob, int swidth, int sheight,LPDIRECTDRAWSURFACE7 dest);
- int Draw_BOB16(BOB_PTR bob, LPDIRECTDRAWSURFACE7 dest);
- int Draw_Scaled_BOB16(BOB_PTR bob, int swidth, int sheight,LPDIRECTDRAWSURFACE7 dest);
- int Load_Frame_BOB(BOB_PTR bob, BITMAP_FILE_PTR bitmap, int frame, int cx,int cy,int mode);
- int Load_Frame_BOB16(BOB_PTR bob, BITMAP_FILE_PTR bitmap, int frame, int cx,int cy,int mode);
- int Animate_BOB(BOB_PTR bob);
- int Move_BOB(BOB_PTR bob);
- int Load_Animation_BOB(BOB_PTR bob, int anim_index, int num_frames, int *sequence);
- int Set_Pos_BOB(BOB_PTR bob, int x, int y);
- int Set_Vel_BOB(BOB_PTR bob,int xv, int yv);
- int Set_Anim_Speed_BOB(BOB_PTR bob,int speed);
- int Set_Animation_BOB(BOB_PTR bob, int anim_index);
- int Hide_BOB(BOB_PTR bob);
- int Show_BOB(BOB_PTR bob);
- int Collision_BOBS(BOB_PTR bob1, BOB_PTR bob2);
- // general utility functions
- DWORD Get_Clock(void);
- DWORD Start_Clock(void);
- DWORD Wait_Clock(DWORD count);
- int Collision_Test(int x1, int y1, int w1, int h1,
- int x2, int y2, int w2, int h2);
- int Color_Scan(int x1, int y1, int x2, int y2,
- UCHAR scan_start, UCHAR scan_end,
- UCHAR *scan_buffer, int scan_lpitch);
- int Color_Scan16(int x1, int y1, int x2, int y2,
- USHORT scan_start, USHORT scan_end,
- UCHAR *scan_buffer, int scan_lpitch);
- // graphics functions
- int Draw_Clip_Line(int x0,int y0, int x1, int y1, int color,UCHAR *dest_buffer, int lpitch);
- int Draw_Clip_Line16(int x0,int y0, int x1, int y1, int color,UCHAR *dest_buffer, int lpitch);
- int Clip_Line(int &x1,int &y1,int &x2, int &y2);
- int Draw_Line(int xo, int yo, int x1,int y1, int color,UCHAR *vb_start,int lpitch);
- int Draw_Line16(int xo, int yo, int x1,int y1, int color,UCHAR *vb_start,int lpitch);
- int Draw_Pixel(int x, int y,int color,UCHAR *video_buffer, int lpitch);
- int Draw_Rectangle(int x1, int y1, int x2, int y2, int color,LPDIRECTDRAWSURFACE7 lpdds);
- void HLine(int x1,int x2,int y,int color, UCHAR *vbuffer, int lpitch);
- void VLine(int y1,int y2,int x,int color, UCHAR *vbuffer, int lpitch);
- void HLine16(int x1,int x2,int y,int color, UCHAR *vbuffer, int lpitch);
- void VLine16(int y1,int y2,int x,int color, UCHAR *vbuffer, int lpitch);
- void Screen_Transitions(int effect, UCHAR *vbuffer, int lpitch);
- int Draw_Pixel(int x, int y,int color,UCHAR *video_buffer, int lpitch);
- int Draw_Pixel16(int x, int y,int color,UCHAR *video_buffer, int lpitch);
- // palette functions
- int Set_Palette_Entry(int color_index, LPPALETTEENTRY color);
- int Get_Palette_Entry(int color_index, LPPALETTEENTRY color);
- int Load_Palette_From_File(char *filename, LPPALETTEENTRY palette);
- int Save_Palette_To_File(char *filename, LPPALETTEENTRY palette);
- int Save_Palette(LPPALETTEENTRY sav_palette);
- int Set_Palette(LPPALETTEENTRY set_palette);
- int Rotate_Colors(int start_index, int end_index);
- int Blink_Colors(int command, BLINKER_PTR new_light, int id);
- // simple bitmap image functions
- int Create_Bitmap(BITMAP_IMAGE_PTR image, int x, int y, int width, int height, int bpp=8);
- int Destroy_Bitmap(BITMAP_IMAGE_PTR image);
- int Draw_Bitmap(BITMAP_IMAGE_PTR source_bitmap,UCHAR *dest_buffer, int lpitch, int transparent);
- int Draw_Bitmap16(BITMAP_IMAGE_PTR source_bitmap,UCHAR *dest_buffer, int lpitch, int transparent);
- int Load_Image_Bitmap(BITMAP_IMAGE_PTR image,BITMAP_FILE_PTR bitmap,int cx,int cy,int mode);
- int Load_Image_Bitmap16(BITMAP_IMAGE_PTR image,BITMAP_FILE_PTR bitmap,int cx,int cy,int mode);
- int Scroll_Bitmap(BITMAP_IMAGE_PTR image, int dx, int dy=0);
- int Copy_Bitmap(BITMAP_IMAGE_PTR dest_bitmap, int dest_x, int dest_y,
- BITMAP_IMAGE_PTR source_bitmap, int source_x, int source_y,
- int width, int height);
- int Flip_Bitmap(UCHAR *image, int bytes_per_line, int height);
- // bitmap file functions
- int Load_Bitmap_File(BITMAP_FILE_PTR bitmap, char *filename);
- int Unload_Bitmap_File(BITMAP_FILE_PTR bitmap);
- // gdi functions
- int Draw_Text_GDI(char *text, int x,int y,COLORREF color, LPDIRECTDRAWSURFACE7 lpdds);
- int Draw_Text_GDI(char *text, int x,int y,int color, LPDIRECTDRAWSURFACE7 lpdds);
- // error functions
- int Open_Error_File(char *filename, FILE *fp_override=NULL);
- int Close_Error_File(void);
- int Write_Error(char *string, ...);
- // 2d 8-bit, 16-bit triangle rendering
- void Draw_Top_Tri(int x1,int y1,int x2,int y2, int x3,int y3,int color,UCHAR *dest_buffer, int mempitch);
- void Draw_Bottom_Tri(int x1,int y1, int x2,int y2, int x3,int y3,int color,UCHAR *dest_buffer, int mempitch);
- void Draw_Top_Tri16(int x1,int y1,int x2,int y2, int x3,int y3,int color,UCHAR *dest_buffer, int mempitch);
- void Draw_Bottom_Tri16(int x1,int y1, int x2,int y2, int x3,int y3,int color,UCHAR *dest_buffer, int mempitch);
- void Draw_Top_TriFP(int x1,int y1,int x2,int y2, int x3,int y3,int color,UCHAR *dest_buffer, int mempitch);
- void Draw_Bottom_TriFP(int x1,int y1, int x2,int y2, int x3,int y3,int color,UCHAR *dest_buffer, int mempitch);
- void Draw_Triangle_2D(int x1,int y1,int x2,int y2,int x3,int y3,
- int color,UCHAR *dest_buffer, int mempitch);
- void Draw_Triangle_2D16(int x1,int y1,int x2,int y2,int x3,int y3,
- int color,UCHAR *dest_buffer, int mempitch);
- void Draw_TriangleFP_2D(int x1,int y1,int x2,int y2,int x3,int y3,
- int color,UCHAR *dest_buffer, int mempitch);
- inline void Draw_QuadFP_2D(int x0,int y0,int x1,int y1,
- int x2,int y2,int x3, int y3,
- int color,UCHAR *dest_buffer, int mempitch);
- // general 2D 8-bit, 16-bit polygon rendering and transforming functions
- void Draw_Filled_Polygon2D(POLYGON2D_PTR poly, UCHAR *vbuffer, int mempitch);
- void Draw_Filled_Polygon2D16(POLYGON2D_PTR poly, UCHAR *vbuffer, int mempitch);
- int Translate_Polygon2D(POLYGON2D_PTR poly, int dx, int dy);
- int Rotate_Polygon2D(POLYGON2D_PTR poly, int theta);
- int Scale_Polygon2D(POLYGON2D_PTR poly, float sx, float sy);
- void Build_Sin_Cos_Tables(void);
- int Translate_Polygon2D_Mat(POLYGON2D_PTR poly, int dx, int dy);
- int Rotate_Polygon2D_Mat(POLYGON2D_PTR poly, int theta);
- int Scale_Polygon2D_Mat(POLYGON2D_PTR poly, float sx, float sy);
- int Draw_Polygon2D(POLYGON2D_PTR poly, UCHAR *vbuffer, int lpitch);
- int Draw_Polygon2D16(POLYGON2D_PTR poly, UCHAR *vbuffer, int lpitch);
- // math functions
- int Fast_Distance_2D(int x, int y);
- float Fast_Distance_3D(float x, float y, float z);
- // collision detection functions
- int Find_Bounding_Box_Poly2D(POLYGON2D_PTR poly,
- float &min_x, float &max_x,
- float &min_y, float &max_y);
- int Mat_Mul_1X2_3X2(MATRIX1X2_PTR ma,
- MATRIX3X2_PTR mb,
- MATRIX1X2_PTR mprod);
- int Mat_Mul_1X3_3X3(MATRIX1X3_PTR ma,
- MATRIX3X3_PTR mb,
- MATRIX1X3_PTR mprod);
- int Mat_Mul_3X3(MATRIX3X3_PTR ma,
- MATRIX3X3_PTR mb,
- MATRIX3X3_PTR mprod);
- inline int Mat_Init_3X2(MATRIX3X2_PTR ma,
- float m00, float m01,
- float m10, float m11,
- float m20, float m21);
- // memory manipulation functions
- inline void Mem_Set_WORD(void *dest, USHORT data, int count);
- inline void Mem_Set_QUAD(void *dest, UINT data, int count);
- // INLINE FUNCTIONS //////////////////////////////////////////
- inline void Mem_Set_WORD(void *dest, USHORT data, int count)
- {
- // this function fills or sets unsigned 16-bit aligned memory
- // count is number of words
- //Write_Error("{");
- _asm
- {
- mov edi, dest ; edi points to destination memory
- mov ecx, count ; number of 16-bit words to move
- mov ax, data ; 16-bit data
- rep stosw ; move data
- } // end asm
- //Write_Error("}");
- } // end Mem_Set_WORD
- ///////////////////////////////////////////////////////////
- inline void Mem_Set_QUAD(void *dest, UINT data, int count)
- {
- // this function fills or sets unsigned 32-bit aligned memory
- // count is number of quads
- _asm
- {
- mov edi, dest ; edi points to destination memory
- mov ecx, count ; number of 32-bit words to move
- mov eax, data ; 32-bit data
- rep stosd ; move data
- } // end asm
- } // end Mem_Set_QUAD
- //////////////////////////////////////////////////////////
- inline void Draw_QuadFP_2D(int x0,int y0,
- int x1,int y1,
- int x2,int y2,
- int x3, int y3,
- int color,
- UCHAR *dest_buffer, int mempitch)
- {
- // this function draws a 2D quadrilateral
- // simply call the triangle function 2x, let it do all the work
- Draw_TriangleFP_2D(x0,y0,x1,y1,x3,y3,color,dest_buffer,mempitch);
- Draw_TriangleFP_2D(x1,y1,x2,y2,x3,y3,color,dest_buffer,mempitch);
- } // end Draw_QuadFP_2D
- ////////////////////////////////////////////////////////////
- inline int Mat_Init_3X2(MATRIX3X2_PTR ma,
- float m00, float m01,
- float m10, float m11,
- float m20, float m21)
- {
- // this function fills a 3x2 matrix with the sent data in row major form
- ma->M[0][0] = m00; ma->M[0][1] = m01;
- ma->M[1][0] = m10; ma->M[1][1] = m11;
- ma->M[2][0] = m20; ma->M[2][1] = m21;
- // return success
- return(1);
- } // end Mat_Init_3X2
- // GLOBALS ////////////////////////////////////////////////
- extern FILE *fp_error; // general error file
- extern char error_filename[80]; // error file name
- // notice that interface 4.0 is used on a number of interfaces
- extern LPDIRECTDRAW7 lpdd; // dd object
- extern LPDIRECTDRAWSURFACE7 lpddsprimary; // dd primary surface
- extern LPDIRECTDRAWSURFACE7 lpddsback; // dd back surface
- extern LPDIRECTDRAWPALETTE lpddpal; // a pointer to the created dd palette
- extern LPDIRECTDRAWCLIPPER lpddclipper; // dd clipper for back surface
- extern LPDIRECTDRAWCLIPPER lpddclipperwin; // dd clipper for window
- extern PALETTEENTRY palette[256]; // color palette
- extern PALETTEENTRY save_palette[256]; // used to save palettes
- extern DDSURFACEDESC2 ddsd; // a direct draw surface description struct
- extern DDBLTFX ddbltfx; // used to fill
- extern DDSCAPS2 ddscaps; // a direct draw surface capabilities struct
- extern HRESULT ddrval; // result back from dd calls
- extern UCHAR *primary_buffer; // primary video buffer
- extern UCHAR *back_buffer; // secondary back buffer
- extern int primary_lpitch; // memory line pitch
- extern int back_lpitch; // memory line pitch
- extern BITMAP_FILE bitmap8bit; // a 8 bit bitmap file
- extern BITMAP_FILE bitmap16bit; // a 16 bit bitmap file
- extern BITMAP_FILE bitmap24bit; // a 24 bit bitmap file
- extern DWORD start_clock_count; // used for timing
- extern int windowed_mode; // tracks if dd is windowed or not
- // these defined the general clipping rectangle for software clipping
- extern int min_clip_x, // clipping rectangle
- max_clip_x,
- min_clip_y,
- max_clip_y;
- // these are overwritten globally by DD_Init()
- extern int screen_width, // width of screen
- screen_height, // height of screen
- screen_bpp, // bits per pixel
- screen_windowed; // is this a windowed app?
- extern int dd_pixel_format; // default pixel format
- extern int window_client_x0; // used to track the starting (x,y) client area for
- extern int window_client_y0; // for windowed mode directdraw operations
- // storage for our lookup tables
- extern float cos_look[361]; // 1 extra so we can store 0-360 inclusive
- extern float sin_look[361]; // 1 extra so we can store 0-360 inclusive
- // function ptr to RGB16 builder
- extern USHORT (*RGB16Bit)(int r, int g, int b);
- // root functions
- extern USHORT RGB16Bit565(int r, int g, int b);
- extern USHORT RGB16Bit555(int r, int g, int b);
- // conditionally compilation for engine stats
- extern int debug_total_polys_per_frame;
- extern int debug_polys_lit_per_frame;
- extern int debug_polys_clipped_per_frame;
- extern int debug_polys_rendered_per_frame;
- extern int debug_backfaces_removed_per_frame;
- extern int debug_objects_removed_per_frame;
- extern int debug_total_transformations_per_frame;
- #endif