CGLApplication.h
资源名称:g.rar [点击查看]
上传用户:laitongbao
上传日期:2021-02-20
资源大小:8176k
文件大小:5k
源码类别:

射击游戏

开发平台:

Visual C++

  1. #pragma comment(lib, "d3d9.lib")
  2. #pragma comment(lib, "d3dx9.lib")
  3. #pragma comment(lib, "dxguid.lib")
  4. #pragma comment(lib, "winmm.lib")
  5. //dshow 支持文件
  6. #pragma comment(lib, "Strmiids.lib")
  7. #pragma comment(lib, "Quartz.lib")
  8. //普通支持头文件
  9. #include <windows.h>
  10. #include <mmsystem.h>
  11. #include <stdio.h>
  12. #include <assert.h>
  13. #include <tchar.h>
  14. #include <commctrl.h>
  15. //D3D支持头文件
  16. #include<d3d9.h>
  17. #include<d3dx9.h>
  18. #ifndef CGLAPPLICATION_H
  19. #define CGLAPPLICATION_H
  20. class EventLogger;
  21. class CGLApplication;
  22. class Clock;
  23. class Timer;
  24. class AnimationController;
  25. extern IDirect3DDevice9* g_pDevice;//全局设备对象(任何地方可用)
  26. extern D3DPRESENT_PARAMETERS g_d3dpp;
  27. extern CGLApplication* g_pApp;
  28. extern AnimationController* g_pAc; 
  29. extern ID3DXMatrixStack* g_pStack;
  30. extern Clock* g_pClock;
  31. class View;
  32. class Surface;
  33. class SceneTree;
  34. class Camera;
  35. class UIController;
  36. class ShaderController;
  37. class GraphicController;
  38. class CGLApplication{
  39. public:
  40. virtual       ~CGLApplication();              
  41. HRESULT       Create(HINSTANCE hInstance,TCHAR *title=TEXT("Window mode"),TCHAR *icon=NULL,bool windowed=true,int width=640,int height=480);
  42. void          Run();
  43. HRESULT       Restore();
  44. void          CleanUp();
  45. void          Show();
  46. void          Hide();
  47. void          SetWindowTitle(TCHAR* newTitle);
  48. HRESULT       ResetWindow(bool newWindowedState,int newWidth,int newHeight);
  49. void          SetView(View *view){m_view=view;};
  50. View*         GetView()const{return m_view;};
  51. HWND          GetHwnd()const{return m_hWnd;};
  52. void          SetUserMsgProc(void (CALLBACK*newMsgProc)( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)){m_userMsgProc=newMsgProc;};
  53. void          SetPreRenderFunc(void (CALLBACK*newFunc)(void)){m_preRenderFunc=newFunc;};
  54. void          SetPostRenderFunc(void (CALLBACK*newFunc)(void)){m_postRenderFunc=newFunc;};
  55. void          SetGUIFunc(void (CALLBACK*newFunc)(HDC));
  56. void          SetRestoreFunc(void (CALLBACK*newFunc)(void));
  57. void          SetRenderFunc(void (CALLBACK*newFunc)(void));
  58.     LRESULT       MsgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
  59. void          SetInitFunc(void(CALLBACK*newFunc)(void)){m_initFunc=newFunc;};
  60. void          Exit(){DestroyWindow(m_hWnd);};
  61. private:
  62. HWND          m_hWnd;
  63. bool          m_windowed;
  64. int           m_width;
  65. int           m_height;
  66. View*         m_view;
  67. AnimationController* m_AC;
  68. void(CALLBACK*m_userMsgProc)(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
  69. void(CALLBACK*m_preRenderFunc)(void);
  70. void(CALLBACK*m_postRenderFunc)(void);
  71. void(CALLBACK*m_initFunc)(void);
  72.         
  73. };
  74. class View{//视图,一个视图对应一个子窗口,一个程序可有多个视图。一个视图包含一个surface类作为其内容容器
  75. friend class CGLApplication;
  76. public:
  77.                        ~View();
  78.                    View(HWND hwnd);
  79.                    View(HWND hwnd,RECT rect);
  80. void               SetGraphicController(GraphicController* gc){m_GC=gc;};// 每个视图的全局图像表现方式不同
  81. GraphicController* GetGraphicController()const{return this->m_GC;};
  82. void               SetUIController(UIController* UIController){this->m_UC=UIController;};
  83. UIController*      GetUIController()const{return m_UC;};
  84. void               SetCamera(TCHAR* name);//每个视图一个摄像机
  85. Camera*            GetCamera()const{return m_camera;};//得到当前摄像机的对象
  86. void               SetScene(SceneTree*scene){this->m_scene=scene;};
  87. SceneTree*         GetScene()const {return m_scene;};
  88. HWND               GetHWnd()const{return m_hWnd;};
  89. void               SetRect(RECT rect){
  90. if(m_rect!=NULL)
  91. {
  92. delete m_rect;
  93. }
  94. m_rect=new RECT(rect);
  95. };
  96. RECT*              GetRect() const{return m_rect;};
  97. void               SetSurface(Surface* suf){ this->m_surface=suf;};
  98. Surface*           GetSurface()const{ return m_surface;};
  99. HRESULT            Present();//渲染场景(在这里调用渲染处理管线的一系列函数并显示到当前平面)
  100. HRESULT            Restore();//重新设置渲染状态
  101. HRESULT            SetFullScreen(bool full);
  102. void               CleanUp();
  103. private:
  104. HRESULT            OnetimeInit();
  105. private:
  106.         RECT *               m_rect;//视图区域
  107. HWND                 m_hWnd;//视图所在的窗口或子窗口句柄
  108. Camera*  m_camera;//当前摄像机
  109. Surface*  m_surface;//当前渲染平面
  110. UIController*        m_UC;
  111. GraphicController*   m_GC;
  112. SceneTree*           m_scene;
  113. bool m_primaryView;
  114. bool m_windowed;
  115. void(CALLBACK*m_guiFunc)(HDC hdc);
  116. void(CALLBACK*m_restoreFunc)(void);
  117. void(CALLBACK*m_renderFunc)(void);
  118. };
  119. class Surface{//可以存放图像数据的容器,可作为渲染平面,也可作为贴图表面用到UIController中
  120. friend class View;
  121. friend class UIController;
  122. friend class FileController;
  123. public:
  124.              ~Surface();
  125.                  Surface(int width,int height,bool renderTarget=false);//renderTarget=true创建一个渲染表面(用于渲染)renderTarget=false创建一个普通表面(用于存放图像数据)
  126. void         GetSize(int&tagWidth,int&tagHeight)const{tagWidth=m_width;tagHeight=m_height;} ;
  127. void         CleanUp();
  128. private:
  129. int m_width;
  130. int m_height;
  131.     IDirect3DSwapChain9* m_swapChain;//DX表面交换链(用于作为渲染表面)
  132. IDirect3DSurface9* m_dataSurface;//DX表面(用于存放图像数据)
  133. };
  134. #endif