📄 gsengine.h
字号:
// GsEngine.h: interface for the CGsEngine class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_GSENGINE_H__96E2A6AA_E292_4482_A719_A0CB7AE21B16__INCLUDED_)
#define AFX_GSENGINE_H__96E2A6AA_E292_4482_A719_A0CB7AE21B16__INCLUDED_
#include "GsUI.h" // Added by ClassView
#include "GsSource.h" // Added by ClassView
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
enum _RENDER_STYLE
{
RS_STRETCH = 0,
RS_UP_LEFT,
RS_UP_RIGHT,
RS_DOWN_LEFT,
RS_DOWN_RIGHT,
RS_CENTER,
RS_STRETCH_CENTER
};
typedef _RENDER_STYLE RSTYLE;
struct GSLIB_API SPaintInfo
{
DWORD dwWidth;
DWORD dwHeight;
CGsTexture* pTexture;
GPOINT BasePoint;
FLOAT fZValue;
FLOAT fScaleW;
FLOAT fScaleH;
FLOAT fAlpha;
FLOAT fAngle;
D3DCOLOR cMix;
};
typedef SDxDeviceInfo PAINTINFO;
typedef SDxDeviceInfo *LPPAINTINFO;
class GSLIB_API CGsEngine
{
friend CDxSurface;
friend CGsApp;
friend CGsAppEx;
friend CGsSound;
friend CGsMedia;
friend CGsUIPanel;
friend CGsGame;
protected:
SDxDeviceInfo* m_pDeviceInfo;
int m_ID;
BOOL m_isActive;
BOOL m_isReady;
BOOL m_isDismiss;
BOOL m_isCanRenderGDI;
BOOL m_isChanged;
HWND m_fsWnd; // 全屏模式下显示GDI窗口
HBITMAP m_FsWindowBMP;
DWORD m_dwDeviceMemType;
LPDIRECTDRAW7 m_pDD; // DirectDraw对象
LPDIRECT3D7 m_pD3D; // Direct3D对象
BOOL m_isFullscreen; // Fullscreen vs. windowed
BOOL m_isUseZBuffer;
BOOL m_isStereo; // Stereo view mode
LPDIRECT3DDEVICE7 m_pd3dDevice; // The D3D device
LPDIRECTDRAWSURFACE7 m_pddsFrontBuffer; // The primary surface
LPDIRECTDRAWSURFACE7 m_pddsBackBuffer; // The backbuffer surface
LPDIRECTDRAWSURFACE7 m_pddsBackBufferLeft; // For stereo modes
LPDIRECTDRAWSURFACE7 m_pddsZBuffer; // The zbuffer surface
CGsSurface* m_pFrontSurface;
CGsSurface* m_pBackSurface;
CGsSurface* m_pBackSurfaceLeft;
CGsSurface* m_pZBufferSurface;
DWORD m_dwRenderWidth; // Dimensions of the render target
DWORD m_dwRenderHeight;
HWND m_hWnd; // The window object
HMENU m_popupMenu, m_hMainMenu;
GRECT m_rcScreenRect; // Screen rect for window
GRECT m_rcRenderRect;
GRECT m_rcSourceRect;
BOOL m_isPreClear;
DDSURFACEDESC2 m_ddsdCurrentMode; //当前的显示模式
DWORD m_dwRefreshRate;
DWORD m_dwStepTime;
DWORD m_dwBaseTime;
DWORD m_dwStopTime;
DWORD m_dwPausedCount;
DWORD m_dwLastUpdateTime;
DWORD m_dwLastUpdateSecondTime;
DWORD m_dwLastUpdateMinuteTime;
CGsMedia* m_ptr_video;
CGsSource* m_ptr_source;
CGsGame* m_ptr_game;
D3DTLVERTEX m_apPaintVertex[4];
WORD m_apPaintIndices[6];
WORD m_apRectIndices[5];
//for sound system
LPDIRECTSOUND8 m_pDS;
LPDIRECTSOUND3DLISTENER m_pDSListener;
LONG m_sound_volume;
LONG m_media_volume;
// cache manager
std::map<KEY, CGsTextureGroup*> m_animation_cache;
std::map<KEY, CGsTexture*> m_texture_cache;
std::vector<CGsTexture*> m_texture_particles;
std::map<KEY, std::set<CGsSound*> > m_sound_cache;
std::map<ID, CGsMedia*> m_media_cache;
struct _SHARE_TEX {
CGsTexture* pTexture;
CGsTexture* pLastShareTo;
DWORD tickLastUse;
};
std::list<_SHARE_TEX> m_share_texture_cache;
std::list<CGsTexture*> m_public_texture_cache;
typedef std::map<ID, CGsUIPanel*> UI_MAP;
UI_MAP m_ui_map;
public:
//创建共享纹理,pTexture是需要获得共享的对象,如果上次共享已经是pTexture,或者失败,就返回FALSE,
BOOL CreateShareTexture(CGsTexture* pTexture, DWORD width, DWORD height, DXSF dxsf);
//创建公有纹理,pTexture是需要获得公有的对象,如果上次共享已经是pTexture,或者失败,就返回FALSE,
BOOL CreatePublicTexture(CGsTexture* pTexture, DWORD width, DWORD height, DXSF dxsf);
VOID ReclaimCache();
HRESULT SnapScreen(CGsTexture* pTexture);
virtual CGsTexture* Register_texture();
virtual CGsTextureGroup* Register_texture_group();
FLOAT ValueCycle(FLOAT fStart=0.0f, FLOAT fEnd=1.0f, DWORD ref=0, LONG cyc=1000, LONG step=1);
FLOAT ValueLoop(FLOAT fStart=0.0f, FLOAT fEnd=1.0f, DWORD ref=0, LONG cyc=1000, LONG step=1);
VOID SetMediaVolume(LONG lVolume);
LONG GetMediaVolume() {return m_media_volume;}
HRESULT RestoreEngine();
// HFONT CreateFont(const char* strKey, LOGFONT log_font);
CGsUIPanel* FindUIFromName(const char* strName);
BOOL LoadConfig(CConfig& config, const char* strSource);
VOID RePaint();
VOID SetPlayVideo(CGsMedia* pVideo = NULL);
CGsMedia* GetPlayVideo() {return m_ptr_video;}
VOID FreeTextureGroup(const char* key);
GSFILE_INFO* FindSource(const char* key);
CGsUIPanel* FindUIFromID( ID id );
virtual CGsUIPanel* UI_New_Register(CGsUIPanel* pParent, KEY strUIStyle );
VOID CleanupSoundCache();
CGsSound* FindSound(const char* key);
CGsTexture* FindParticle(ID idParticle);
CGsTexture* FindTexture(const char* key);
CGsTextureGroup* FindTextureGroup(const char* key);
void SetActive(BOOL bActive);
HRESULT Resize(int width=0, int height=0);
UINT GetMouseState() {return m_mouse_state;}
BOOL TestMouseState(UINT flag) {return m_mouse_state&flag;}
DWORD m_dwEngineTime;
DWORD m_dwPassTime;
GPOINT m_Pos;
UINT m_mouse_state;
// Access functions for DirectX objects
LPDIRECTDRAW7 GetDirectDraw() { return m_pDD; }
LPDIRECT3D7 GetDirect3D() { return m_pD3D; }
LPDIRECT3DDEVICE7 GetD3dDevice() { return m_pd3dDevice; }
LPDIRECTDRAWSURFACE7 GetFrontBuffer() { return m_pddsFrontBuffer; }
LPDIRECTDRAWSURFACE7 GetBackBuffer() { return m_pddsBackBuffer; }
CGsSurface* GetBackSurface() { return m_pBackSurface; }
CGsSurface* GetZBufferSurface() { return m_pZBufferSurface; }
LPDIRECTDRAWSURFACE7 GetRenderSurface() { return m_pddsBackBuffer; }
LPDIRECTDRAWSURFACE7 GetRenderSurfaceLeft() { return m_pddsBackBufferLeft; }
INT GetSurfaceCount() { return 0; }
DWORD GetRenderWidth() { return m_dwRenderWidth; }
DWORD GetRenderHeight() { return m_dwRenderHeight; }
HWND GetEngineWnd() { return m_hWnd; }
LPDIRECTSOUND8 GetDirectSound() { return m_pDS; }
LPDIRECTSOUND3DLISTENER GetDirectSoundListener(){ return m_pDSListener; }
LONG GetSoundVolume() { return m_sound_volume; }
VOID SetSoundVolume(LONG lVolume);
//LONG { return m_sound_volume = lVolume; }
CGsSource* GetSourcePtr() { return m_ptr_source; }
VOID SetSource(CGsSource* pSource) { m_ptr_source = pSource;}
CGsGame* GetGamePtr() { return m_ptr_game; }
VOID SetGame(CGsGame* pGame) { m_ptr_game = pGame;}
BOOL IsFullscreen() { return m_isFullscreen; }
BOOL IsUseZBuffer() { return m_isUseZBuffer; }
BOOL IsStereo() { return m_isStereo; }
BOOL IsChanged() { return m_isChanged && m_isActive; }
BOOL IsValid() { return !m_isDismiss; }
BOOL Resume();
// Functions to aid rendering
HRESULT RestoreSurfaces();
VOID UpdateBounds();
HRESULT Present();
HRESULT FlipToGDISurface( BOOL bDrawFrame = FALSE );
HRESULT SetFsWindow(HWND hwnd, BOOL bStaticContent = false );
VOID EndFsWindow();
// user custom operation
HRESULT Lock(BYTE* pDes, LONG lPitch);
HRESULT Unlock();
// Function to Render
HRESULT Clear( DWORD dwColor ) ;//{ return IsValid()? m_pBackSurface->Clear(dwColor) : E_FAIL; }
HRESULT RGBClear( COLORREF dwColor ) ;//{ return IsValid()? m_pBackSurface->RGBClear(dwColor) : E_FAIL; }
HRESULT SetRenderState(D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState);
HRESULT SetTextureStageState( DWORD dwStage, D3DTEXTURESTAGESTATETYPE dwState, DWORD dwValue );
VOID PreparePaint(DWORD dwSrcBlend = D3DBLEND_SRCALPHA, DWORD dwDestBlend = D3DBLEND_INVSRCALPHA, DWORD dwColorOp = D3DTOP_MODULATE2X, DWORD dwAlphaOP = D3DTOP_MODULATE);
HRESULT Render_DrawLine(LONG x1, LONG y1,
LONG x2, LONG y2,
D3DCOLOR color = D3DRGBA(1.0f,1.0f,1.0f,1.0f));
HRESULT Render_DrawRect( GRECT* pRect,
BOOL bSolid,
D3DCOLOR color = D3DRGBA(1.0f, 1.0f, 1.0f, 1.0f),
FLOAT fZValue = 1.0f
);
HRESULT Render_LightRect( GRECT* pRect,
FLOAT fLight = 1.0f
);
HRESULT Render_DrawRectEx( GRECT* pRect,
BOOL bSolid,
D3DCOLOR crTopLeft = D3DRGBA(1.0f, 1.0f, 1.0f, 1.0f),
D3DCOLOR crTopRight = D3DRGBA(1.0f, 1.0f, 1.0f, 1.0f),
D3DCOLOR crBottomLeft = D3DRGBA(1.0f, 1.0f, 1.0f, 1.0f),
D3DCOLOR crBottomRight = D3DRGBA(1.0f, 1.0f, 1.0f, 1.0f),
FLOAT fZValue = 1.0f
);
////基准点//比例//透明度//偏转角度//颜色增强
HRESULT Render_Paint(int xDest, int yDest,
CGsTexture* pTexture,
FLOAT fZValue = 1.0f,
FLOAT fScaleW = 1.0f,
FLOAT fScaleH = 1.0f,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -