DirectX.h
上传用户:wymy58
上传日期:2007-01-07
资源大小:2086k
文件大小:8k
源码类别:

DirextX编程

开发平台:

Visual C++

  1. // Copyright (C) 1997-1999 DXGuide.  All Rights Reserved.
  2. // File: DirectX.h
  3. #ifndef _DIRECTX__H
  4. #define _DIRECTX__H
  5. #if _MSC_VER >= 1000
  6. #pragma once
  7. #endif // _MSC_VER >= 1000
  8. // turn off warnings for /W4
  9. #pragma warning(disable: 4201)
  10. #include <d3d.h> // for D3DCOLOR
  11. #include <mmsystem.h> // for MMRESULT
  12. #pragma warning(default: 4201)
  13. inline void Swap(int*  a, int*  b)
  14. {
  15. int nTemp = *a;
  16. *a = *b;
  17. *b = nTemp;
  18. }
  19. //**  Macros **
  20. #ifndef max
  21. #define max(a, b) (((a) > (b)) ? (a) : (b))
  22. #endif
  23. #ifndef min
  24. #define min(a, b) (((a) < (b)) ? (a) : (b))
  25. #endif
  26. #ifndef max3
  27. #define max3(a, b, c) (((a) > (b)) ? (((a) > (c)) ? (a) : (c)) : (((b) > (c)) ? (b) : (c)))
  28. #endif
  29. #ifndef min3
  30. #define min3(a, b, c) (((a) < (b)) ? (((a) < (c)) ? (a) : (c)) : (((b) < (c)) ? (b) : (c)))
  31. #endif
  32. #ifndef clamp
  33. #define clamp(L, V, U) (((L) > (V)) ? (L) : (((U) < (V)) ? (U) : (V)))
  34. #endif
  35. // Useful Math constants
  36. const FLOAT g_PI = 3.14159265358979323846f; // Pi
  37. const FLOAT g_2_PI = 6.28318530717958623200f; // 2 * Pi
  38. const FLOAT g_PI_DIV_2 = 1.57079632679489655800f; // Pi / 2
  39. const FLOAT g_PI_DIV_4 = 0.78539816339744827900f; // Pi / 4
  40. const FLOAT g_INV_PI = 0.31830988618379069122f; // 1 / Pi
  41. const FLOAT g_DEGTORAD = 0.01745329251994329547f; // Degrees to Radians
  42. const FLOAT g_RADTODEG = 57.29577951308232286465f; // Radians to Degrees
  43. const FLOAT g_HUGE = 1.0e+38f; // Huge number for FLOAT
  44. const FLOAT g_EPSILON = 1.0e-5f; // Tolerance for FLOATs
  45. #define DEG2RAD(x) (x * (float)g_PI / 180.0f)
  46. const int constSineLookupSize = 90;
  47. class CDirectDraw;
  48. class CDirectSound;
  49. class CDirectMusic;
  50. class CDirectInput;
  51. class CDXGUIManager;
  52. class CDirectXApp;
  53. class CDirectX
  54. {
  55. public:
  56. CDirectX(void);
  57. ~CDirectX();
  58. public:
  59. #ifdef _DEBUG
  60. static CString __stdcall DXErrorMessage(LPCTSTR  lpszFilename,
  61. int  nLine, HRESULT  hr);
  62. static CString __stdcall MMErrorMessage(LPCTSTR  lpszFilename,
  63. int  nLine, MMRESULT  mmr);
  64. #endif // _DEBUG
  65. static CString HRFac2Str(HRESULT  hr);
  66. static CString GUID2Str(const GUID*  pGUID);
  67. static CString PixelFormat2Str(const DDPIXELFORMAT*  pDDPF);
  68. static void AFX_CDECL DirectXMsgBox(LPCTSTR  lpszFormat, ...);
  69. static void GetMCIError(DWORD  dwErr);
  70. static void ExitGame(void);
  71. protected:
  72. // cosine/sine lookup tables
  73. static float m_afSineTable[constSineLookupSize + 1];
  74. static const LPCTSTR m_lpcszGUIDFormat;
  75. static const WORD m_dwLibraryVersion;
  76. static WORD m_wDirectXVersion;
  77. static const LPCTSTR m_lpcszVersionInfoFmt;
  78. static const LPCTSTR m_lpcszLibURL;
  79. static const LPCTSTR m_lpcszLibEmail;
  80. static const LPCTSTR m_lpcszLogFileName;
  81. public:
  82. static DWORD GetLibraryVersion(CString&  strOut, LPCTSTR  lpFmt = _T("%s, %s"));
  83. public:
  84. static float GetSineValue(int  nDegree);
  85. static float GetCosineValue(int  nDegree);
  86. public:
  87. // Fuzzy compares (within tolerance)
  88. static bool IsZero(FLOAT  a, FLOAT  fTol = g_EPSILON);
  89. public:
  90. static DWORD GetBitCount(DWORD  dwBitMask);
  91. static DWORD FLOAT2DWORD(FLOAT  f);
  92. static UINT GetSeed(void);
  93. // Returns a random number (float) in the range [0.0 - 1.0]
  94. static float rnd(void);
  95. static int RandInt(int  nLow, int  nHigh);
  96. static double RandDouble(double  dLow, double  dHigh);
  97. // clips a destination rectange and modifys X,Y coords appropriatly
  98. static void Clip(int&  nDestX, int&  nDestY, LPRECT  lprcSrc, LPCRECT  lprcDest);
  99. static void RGB2HSV(float  fR, float  fG, float  fB,
  100. float&  fH, float&  fS, float&  fV);
  101. static void HSV2RGB(float  fH, float  fS, float  fV, 
  102. float&  fR, float&  fG, float&  fB);
  103. // Converts bits per pixel to a DirectDraw bit depth flag
  104. static DWORD BitDepthToFlags(DWORD  dwBPP);
  105. // Gets Bit Depth from DDPF Flags
  106. static DWORD FlagsToBitDepth(DWORD  dwFlags);
  107. static bool IsPalettized(LPDDPIXELFORMAT  lpddpf);
  108. static D3DCOLOR COLORREF_2_D3DCOLOR(COLORREF  clrref);
  109. static COLORREF D3DCOLOR_2_COLORREF(D3DCOLOR  d3dclr);
  110. static void DelayMM(DWORD  dwMS);
  111. protected:
  112. static void AFX_CDECL WriteLogFile(LPCTSTR  lpszFormat, ...);
  113. static void CloseLogFile(void);
  114. #ifdef _DEBUG
  115. public:
  116. static HRESULT m_hrFlipToGDISurface;
  117. #endif // _DEBUG
  118. #ifdef _LOG_HTML
  119. public:
  120. static void SetLog(bool  bLog);
  121. static void LogAppInitFlags(CDirectXApp*  pDirectXApp);
  122. static void LogDDCaps(void const*  pv);
  123. static void LogDSCaps(void const*  pv);
  124. static void LogDMusPortCaps(void const*  pv);
  125. static void LogDDPFFlags(void const*  pv);
  126. static void LogDSBCapsFlags(void const*  pv);
  127. static void LogD3DDeviceDescInfo(void const*  pv);
  128. static void LogDIDeviceInfo(void const*  pDIDeviceInstance, void const*  pDIDevCaps);
  129. protected:
  130. static void LogSysInfo(void);
  131. static void LogCaps(void const*  pcd, void const*  pv, bool  bIntegrity = true);
  132. protected:
  133. static const LPCTSTR m_lpcszHTMLHeadFmt;
  134. static const LPCTSTR m_lpcszHTMLTail;
  135. static const LPCTSTR m_lpcszHTMLBreakLine;
  136. static const LPCTSTR m_lpcszHTMLBreak;
  137. static const LPCTSTR m_lpcszHTMLBoldFmt;
  138. static const LPCTSTR m_lpcszHTMLNormalFmt;
  139. static const LPCTSTR m_lpcszHTMLColorTextFmt;
  140. static const LPCTSTR m_lpcszHTMLTableHeadFmt;
  141. static const LPCTSTR m_lpcszHTMLTableTail;
  142. static const LPCTSTR m_lpcszHTMLTableRowHead;
  143. static const LPCTSTR m_lpcszHTMLTableRowTail;
  144. static const LPCTSTR m_lpcszHTMLTableCellFmt;
  145. static const LPCTSTR m_lpcszHTMLCenterHead;
  146. static const LPCTSTR m_lpcszHTMLCenterTail;
  147. static const LPCTSTR m_lpcszHTMLHyperLinkRefFmt;
  148. static const LPCTSTR m_lpcszHTMLAnchorNameFmt;
  149. static const LPCTSTR m_lpcszHTMLCommentHead;
  150. static const LPCTSTR m_lpcszHTMLCommentTail;
  151. protected:
  152. static const LPCTSTR m_lpcszSysInfoAnchorName;
  153. static const LPCTSTR m_lpcszAppInitFlagsInfoAnchorName;
  154. public:
  155. static const LPCTSTR m_lpcszCPUInfoAnchorName;
  156. static const LPCTSTR m_lpcszDDrawInfoAnchorName;
  157. static const LPCTSTR m_lpcszD3DInfoAnchorName;
  158. static const LPCTSTR m_lpcszDInputInfoAnchorName;
  159. static const LPCTSTR m_lpcszDSoundInfoAnchorName;
  160. static const LPCTSTR m_lpcszDMusicInfoAnchorName;
  161. static const LPCTSTR m_lpcszDDModeInfoAnchorName;
  162. static const LPCTSTR m_lpcszRunningInfoAnchorName;
  163. protected:
  164. static void LogHTMLHead(LPCTSTR  lpszTitle);
  165. static void LogHTMLTail(void);
  166. public:
  167. static void LogHTMLBreakLine(void);
  168. static void LogHTMLBreak(void);
  169. static void LogHTMLBoldText(LPCTSTR  lpszText, int  nSize);
  170. static void LogHTMLNormalText(LPCTSTR  lpszText, int  nSize);
  171. static void LogHTMLColorText(LPCTSTR  lpszText, COLORREF  clrText, int  nSize);
  172. static void LogHTMLTableHead(LPCTSTR  lpszCaption, int  nSize);
  173. static void LogHTMLTableTail(void);
  174. static void LogHTMLTableRowHead(void);
  175. static void LogHTMLTableRowTail(void);
  176. static void LogHTMLTableCell(LPCTSTR  lpszText,
  177. COLORREF  clrText, COLORREF  clrBack, int  nSize);
  178. static void LogHTMLCenterHead(void);
  179. static void LogHTMLCenterTail(void);
  180. static CString HyperLinkRef2Str(LPCTSTR  lpszURL,
  181. LPCTSTR  lpszText);
  182. static void LogHTMLAnchorName(LPCTSTR  lpszAnchorName,
  183. LPCTSTR  lpszText, int  nSize);
  184. static void LogHTMLCommentHead(void);
  185. static void LogHTMLCommentTail(void);
  186. protected:
  187. static bool m_bLog;
  188. #endif // _LOG_HTML
  189. public:
  190. static HANDLE m_hLogFile;
  191. protected:
  192. static CDirectDraw* m_pDirectDraw;
  193. static CDirectSound* m_pDirectSound;
  194. static CDirectMusic* m_pDirectMusic;
  195. static CDirectInput* m_pDirectInput;
  196. static CDXGUIManager* m_pDXGUIManager;
  197. public:
  198. static void SetDirectDraw(CDirectDraw*  pDirectDraw);
  199. static void SetDirectSound(CDirectSound*  pDirectSound);
  200. static void SetDirectMusic(CDirectMusic*  pDirectMusic);
  201. static void SetDirectInput(CDirectInput*  pDirectInput);
  202. static void SetDXGUIManager(CDXGUIManager*  pDXGUIManager);
  203. static CDirectDraw* GetDirectDraw(void);
  204. static CDirectSound* GetDirectSound(void);
  205. static CDirectMusic* GetDirectMusic(void);
  206. static CDirectInput* GetDirectInput(void);
  207. static CDXGUIManager* GetDXGUIManager(void);
  208. };
  209. #include "DirectX.inl"
  210. extern CDirectX directX;
  211. #ifdef _DEBUG
  212. #define DXCHECK(x) CDirectX::DXErrorMessage(__FILE__, __LINE__, x)
  213. #define REPORTDXERROR(x) {if (FAILED(x)) CDirectX::DirectXMsgBox(DXCHECK(x)), ::DebugBreak();}
  214. #define MMCHECK(x) CDirectX::MMErrorMessage(__FILE__, __LINE__, x)
  215. #define REPORTMMERROR(x) {if (x != MMSYSERR_NOERROR) CDirectX::DirectXMsgBox(MMCHECK(x)), ::DebugBreak();}
  216. #else
  217. #define DXCHECK(x)
  218. #define REPORTDXERROR(x)
  219. #define MMCHECK(x)
  220. #define REPORTMMERROR(x)
  221. #endif // _DEBUG
  222. #endif // _DIRECTX__H