⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gesurface.h

📁 游戏是我在3月5日离职后花3周时间做的。主要目的是验证自己在游戏上相关的编程能力
💻 H
字号:
#if !defined(__AFX_GESURFACE_H__)
#define __AFX_GESURFACE_H__

#if _MSC_VER > 1000
#pragma once
#endif

#include <windows.h>
#include <d3d8.h>
#pragma comment (lib, "d3d8.lib")
#include <d3dx8.h>
#pragma comment (lib, "d3dx8.lib")
#pragma comment (lib, "dxguid.lib")

typedef enum _GEBLTMODE
{
	GESUR_DISABLE	=0,			//关闭所有效果
	GESUR_EXTERIOR	=1,			//使用外部定义的效果
	GESUR_INTERIOR	=2,			//使用内部定义的效果
}GEBLTMODE;

typedef enum _GEMEMMODE
{
	GEVIEMEM = 1,				//显卡内存
	GEMANMEM = 2,				//管理内存
	GESYSMEM = 3				//系统内存
}GEMEMMODE;

//-----------------
//功能:虚拟D3D表面缓冲使其成为2D里面的表面
//备注:将表面建立在显卡缓存是提供给显示缓冲使用的
//      (主表面/屏后缓冲),平常的图形都应建立在系统缓存
//-----------------
class GESurface
{
private:
	bool C_bAnimate;//表面是否建立
	DWORD C_dwBasicColor;//表面基础颜色值
	DWORD C_dwColorKey;//表面颜色键值
	int C_iWidth,C_iHeight;//表面宽高
	D3DFORMAT C_d3dFormat;//表面数据模式
	GEMEMMODE C_geMemoryMode;//表面存储器模式
	LPDIRECT3DDEVICE8 C_pd3dDev;//D3D设备指针
	LPDIRECT3DTEXTURE8 C_pd3dTexture;//D3D纹理指针
	LPDIRECT3DSURFACE8 C_pd3dSurface;//D3D表面指针

	struct GEVertex
	{
		float x,y,z,rhw;
		DWORD color;
		float u, v;
	};
	enum {GEFVF = D3DFVF_XYZRHW | D3DFVF_TEX1 | D3DFVF_DIFFUSE};
	typedef enum _GESURSTATE
	{
		GESUR_STATIC  = 0,
		GESUR_DYNAMIC = 1
	}GESURSTATE;
	GESURSTATE C_SurfaceState;//表面状态(动态或静态)

	//初始化
	Init(LPDIRECT3DDEVICE8 fpd3dDev,int fiw,int fih,D3DFORMAT fd3dFormat,GEMEMMODE fgeMemoryMode);

public:
	GESurface();
	~GESurface();

	//数据操作
	LockRect(RECT *fprLockRect,UCHAR **fppucData, INT *fpiPitch);//矩形锁定
	UnlockRect();//矩形解锁

	//ALPHA
	SetBasicColor(DWORD fdwBasicColor);
	GetBasicColor(DWORD *fdwBasicColor);

	//颜色键
	SetColorKey(DWORD fdwColorKey);
	GetColorKey(DWORD *fdwColorKey);

	//宽高
	int GetWidth(){return C_iWidth;};
	int GetHeight(){return C_iHeight;};

	//表面数据品质模式(ARGB8888/RGB888/RGB565/ARGB4444...)
	SetQualityFormat(D3DFORMAT fd3dFormat);
	GetQualityFormat(D3DFORMAT *fd3dFormat);

	//表面指针
	GetSurToTex(LPDIRECT3DTEXTURE8 *fppd3dTex);//取静态表面指针
	GetSurToSur(LPDIRECT3DSURFACE8 *fppd3dSur);//取动态表面指针

	//建立表面
	CreFileToTex(LPDIRECT3DDEVICE8 fpd3dDev,char fpcFileName[],RECT *fprDestRect,D3DFORMAT fd3dFormat,GEMEMMODE fgeMemoryMode,DWORD fdwColorKey);
	CreFileToSur(LPDIRECT3DDEVICE8 fpd3dDev,char fpcFileName[],RECT *fprDestRect,D3DFORMAT fd3dFormat,GEMEMMODE fgeMemoryMode,DWORD fdwColorKey);
	CreSur(LPDIRECT3DDEVICE8 fpd3dDev,int fiw,int fih,D3DFORMAT fd3dFormat,GEMEMMODE fgeMemoryMode);

	//BLT
	Blt(RECT *fprSrcRect,RECT *fprDestRect,GEBLTMODE fgeFlags=GESUR_INTERIOR);
	BltSurToSur(RECT *fprSrcRect,RECT *fprDestRect,DWORD fdwColorKey,GESurface *fpgeSur);
	ClearSur();//用于将动态表面数据清零

	//动态指针要求:修改了表面数据之后应Updata,要不然,不能更新
	//可以多次更新数据,再于最后要显示的时候Updata,这样能提高利用率
	Updata();

	//释放
	Release();
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -