📄 gesurface.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 + -