📄 gl.h
字号:
inline virtual int MakeColor( RGB color ){
return color & 0xffffff;
};
inline virtual int GetR( int pixel ){
return (( pixel >> 16 ) & 0xff );
};
inline virtual int GetG( int pixel ){
return (( pixel >> 8 ) & 0xff );
};
inline virtual int GetB( int pixel ){
return ( pixel & 0xff );
};
virtual void SetColor( int color );
virtual void SetColorKey( int color );
};
/////////////////////////////////////////////////////////////////////
// 简单精灵显示例程
typedef void (*SpriteBlitAlphaFunc)( Bitmap*, int, int, Bitmap* );
typedef void (*SpriteBlitBetaFunc)( Bitmap*, int, int, Bitmap* );
extern SpriteBlitAlphaFunc SpriteBlitAlpha;
extern SpriteBlitBetaFunc SpriteBlitBeta;
int InitSprite( void );
void SpriteSetDrawMode( int mode, DWORD degree );
/*class Sprite;
class Sprite : public BitmapHi{
public:
static SpriteBlitAlphaFunc BlitAlpha;
static SpriteBlitBetaFunc BlitBeta;
void SetDrawMode( int mode, int degree );
};
*/
extern SpriteBlitAlphaFunc spriteBlitAlpha[9];
extern SpriteBlitBetaFunc spriteBlitBeta[9];
// 带有Alpha混合的精灵拷贝函数
void SpriteBlitAlpha0MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitAlpha1MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitAlpha2MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitAlpha3MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitAlpha4MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitAlpha5MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitAlpha6MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitAlpha7MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitAlpha8MMX( Bitmap* dest, int x, int y, Bitmap* src );
// 带有明暗处理的精灵拷贝函数
void SpriteBlitBeta0MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta1MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta2MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta3MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta4MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta5MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta6MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta7MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta8MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta9MMX( Bitmap* dest, int x, int y, Bitmap* src, int brightness );
void SpriteBlitBeta10MMX( Bitmap* dest, int x, int y, Bitmap* src, int b1, int b2, short* buf );
int testSprite( void );
/////////////////////////////////////////////////////////////////////
// 文本显示例程,使用前先调用InitHanzi(int)
class Hanzi{
public:
static short *hzk12, *hzk16;
static char* asc12, *asc16;
static char hzk12name[9], hzk16name[9], asc12name[9], asc16name[9];
static int count;
static int capabilities;
enum{
SmallFont = 0x1,
MiddleFont = 0x2,
AllFont = 0x3
};
static int size; // 12 or 16
enum{
Small = 12,
Middle = 16
};
static short* hzAddr; // current hzk dots data area
static char* ascAddr; // current ascii dots data area
public:
Hanzi();
~Hanzi();
static int SetFontSize( int fsize );
void TextOut( Bitmap* bmp, int x, int y, char* str,
int color );
void PutHanzi( Bitmap* bmp, int x, int y, char hz[2] );
void PutAscii( Bitmap* bmp, int x, int y, char *asc );
void Printf( Bitmap* bmp, int x, int y, int color, char *format, ... );
};
extern Hanzi hz;
extern int hanziInstalled;
// initialize hanzi display class
int InitHanzi( int fonts );
/////////////////////////////////////////////////////////////////////
// see what type the CPU is
typedef struct CPUInfo {
char vendor[16];
int family;
int model;
int fpu;
int mmx;
int _3dnow;
int cpuid;
} CPUInfo;
extern CPUInfo cpu;
void CheckCPU( void );
/////////////////////////////////////////////////////////////////////
// package file
#define MAX_PATH_LEN 80
#define MAX_CFILE_NUM 15
#define CFILE_APPEND 0
#define CFILE_DELETE 1
struct File{
DWORD address;
DWORD length;
DWORD count;
FILE *fp;
File();
~File();
int Close( void );
inline int Getc( void )
{
if( length - count - 1 < 0 )
return EOF;
count ++;
return fgetc( fp );
};
char *Gets( char* buf, int size );
int Getw( void );
int Getdw( void );
int Read( void* buffer, DWORD size );
int Seek( DWORD d, int mode );
};
typedef struct DirItem{
BYTE type;
char filename[13];
DWORD address;
DWORD length;
} DirItem;
typedef struct Directory{
long cur;
long num;
DirItem *items;
Directory(){
items = NULL;
};
~Directory();
int ReadDisk( FILE *fp );
int SearchDir( char dname[13], int type );
} Directory;
struct PackageFile{
char fname[MAX_PATH_LEN];
Directory *root;
Directory *currentDir;
char currentPath[MAX_PATH_LEN];
// FILE *fp;
};
struct PackFile{
PackageFile file[MAX_CFILE_NUM];
// int count[MAX_CFILE_NUM];
PackFile();
~PackFile();
File* Open( char *fname ); // open file as read-only
int Close( char *fname );
int Close( int id );
int OpenCfile( int id, char *filename );
File* OpenSubfile( int id, char *subname );
File* OpenNormalFile( char *filename );
void FixFname( char *newfname, char *fname );
};
extern PackFile cfile;
/////////////////////////////////////////////////////////////////////
// 配置文件操作函数
int InitConfig( void );
void ConfigExit( void );
int ConfigSetFile( char *filename );
char* ConfigGetString( char *section, char *name, char *deft );
int ConfigGetInt( char *section, char *name, int deft );
float ConfigGetFloat( char *section, char *name, float deft );
void ConfigSetString( char *section, char *name, char *value );
void ConfigSetInt( char *section, char *name, int value );
void ConfigSetFloat( char *section, char *name, float value );
/////////////////////////////////////////////////////////////////////
//行压缩位图
class RleBitmap{
public:
int colorDepth;
int x, y; //位置矫正
int width, height; //压缩后的大小
DWORD size; //像素数据量
char **line;
RleBitmap();
~RleBitmap();
void ConvertFormat( int format );
};
RleBitmap* CreateRleBitmap( Bitmap* src, int genOl ); // genOl是否产生轮廓
int SaveRleBitmap( char* filename, RleBitmap* src );
RleBitmap* LoadRleBitmap( char *fname );
void RleBitmapBlit( Bitmap* dest, int x, int y, RleBitmap* src );
void initRleBitmap( void );
void testRleBitmap( void );
/////////////////////////////////////////////////////////////////////
//行压缩位图序列
class Animate{
public:
RleBitmap** pic;
int totalFrames, currentFrame;
int x, y; //坐标矫正
DWORD size; //数据长度
void* data; //数据
int dir; //播放的方向0:正向
int autoReverse;
Animate();
~Animate();
int Draw( Bitmap* dest, int x, int y );
int DrawCurrentFrame( Bitmap* dest, int x, int y );
int GetNextFrame( RleBitmap** rbm );
void Restart( void );
void SetXY( int x, int y );
};
int SaveAnimate( char* filename );
Animate* LoadAnimate( char* filename );
int MakeAnimateFile( char* filename, RleBitmap** src, int num );
int InitAni( void );
void testAni( void );
#endif // GRAPHIC_LIB
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -