d3d9.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. #define WIN32_LEAN_AND_MEAN
  2. #include <windows.h>
  3. #include "d3d9.h"
  4. #include <stdlib.h>
  5. extern "C" {
  6. IDirect3D9 * bmx_directx_d3d9_Direct3DCreate9(int SDKVersion);
  7. int bmx_directx_d3d9_IDirect3D9_CreateDevice(IDirect3D9 * id, int Adapter, int DeviceType, HWND hFocusWindow,
  8. int BehaviorFlags, D3DPRESENT_PARAMETERS * pPresentationParameters, IDirect3DDevice9 ** ppReturnedDeviceInterface);
  9. int bmx_directx_d3d9_IDirect3D9_GetDeviceCaps(IDirect3D9 * id, int Adapter, int DeviceType, D3DCAPS9 * pCaps);
  10. int bmx_directx_d3d9_IDirect3D9_GetAdapterModeCount(IDirect3D9 * id, int Adapter, int Format);
  11. int bmx_directx_d3d9_IDirect3D9_EnumAdapterModes(IDirect3D9 * id, int Adapter, int Format, int Mode, D3DDISPLAYMODE * pMode);
  12. int bmx_directx_d3d9_IDirect3D9_CheckDeviceFormat(IDirect3D9 * id, int Adapter, int DeviceType, int AdapterFormat, int Usage, int RType, int CheckFormat);
  13. int bmx_directx_d3d9_IDirect3DDevice9_CreateQuery(IDirect3DDevice9 * id, int type, IDirect3DQuery9 ** ppQuery);
  14. int bmx_directx_d3d9_IDirect3DDevice9_TestCooperativeLevel(IDirect3DDevice9 * id);
  15. int bmx_directx_d3d9_IDirect3DDevice9_Reset(IDirect3DDevice9 * id, D3DPRESENT_PARAMETERS * pPresentationParameters);
  16. int bmx_directx_d3d9_IDirect3DDevice9_Present(IDirect3DDevice9 * id, RECT * pSourceRect, RECT * pDestRect, HWND hDestWindowOverride, RGNDATA * pDirtyRegion);
  17. int bmx_directx_d3d9_IDirect3DDevice9_CreateTexture(IDirect3DDevice9 * id, int Width, int Height, int Levels, int Usage, int Format, int Pool, IDirect3DTexture9 ** ppTexture, HANDLE * pSharedHandle);
  18. int bmx_directx_d3d9_IDirect3DDevice9_CreateOffscreenPlainSurface(IDirect3DDevice9 * id, int Width, int Height, int Format, int Pool, IDirect3DSurface9 ** ppSurface, HANDLE * pSharedHandle);
  19. int bmx_directx_d3d9_IDirect3DDevice9_GetRenderTarget(IDirect3DDevice9 * id, int RenderTargetIndex, IDirect3DSurface9 ** ppRenderTarget);
  20. int bmx_directx_d3d9_IDirect3DDevice9_BeginScene(IDirect3DDevice9 * id);
  21. int bmx_directx_d3d9_IDirect3DDevice9_EndScene(IDirect3DDevice9 * id);
  22. int bmx_directx_d3d9_IDirect3DDevice9_Clear(IDirect3DDevice9 * id, int Count, D3DRECT * pRects, int Flags, int Color, float Z, int Stencil);
  23. int bmx_directx_d3d9_IDirect3DDevice9_SetTransform(IDirect3DDevice9 * id, int State, D3DMATRIX * pMatrix);
  24. int bmx_directx_d3d9_IDirect3DDevice9_SetViewport(IDirect3DDevice9 * id, D3DVIEWPORT9 * pViewport);
  25. int bmx_directx_d3d9_IDirect3DDevice9_SetRenderState(IDirect3DDevice9 * id, int State, int Value);
  26. int bmx_directx_d3d9_IDirect3DDevice9_SetTexture(IDirect3DDevice9 * id, int Stage, IDirect3DBaseTexture9 * pTexture);
  27. int bmx_directx_d3d9_IDirect3DDevice9_SetTextureStageState(IDirect3DDevice9 * id, int Stage, int Type, int Value);
  28. int bmx_directx_d3d9_IDirect3DDevice9_SetScissorRect(IDirect3DDevice9 * id, RECT * pRect);
  29. int bmx_directx_d3d9_IDirect3DDevice9_DrawPrimitiveUP(IDirect3DDevice9 * id, int PrimitiveType, int PrimitiveCount, void * pVertexStreamZeroData, int VertexStreamZeroStride);
  30. int bmx_directx_d3d9_IDirect3DDevice9_SetFVF(IDirect3DDevice9 * id, int FVF);
  31. int bmx_directx_d3d9_IDirect3DQuery9_Issue(IDirect3DQuery9 * id, int dwIssueFlags);
  32. int bmx_directx_d3d9_IDirect3DQuery9_GetData(IDirect3DQuery9 * id, void * pData, int dwSize, int dwGetDataFlags);
  33. D3DCAPS9 * bmx_directx_d3d9_D3DCAPS9_new();
  34. void bmx_directx_d3d9_D3DCAPS9_free(D3DCAPS9 * caps);
  35. D3DVIEWPORT9 * bmx_directx_d3d9_D3DVIEWPORT9_new();
  36. void bmx_directx_d3d9_D3DVIEWPORT9_free(D3DVIEWPORT9 * vp);
  37. void bmx_directx_d3d9_D3DVIEWPORT9_SetX(D3DVIEWPORT9 * vp, int X);
  38. void bmx_directx_d3d9_D3DVIEWPORT9_SetY(D3DVIEWPORT9 * vp, int Y);
  39. void bmx_directx_d3d9_D3DVIEWPORT9_SetWidth(D3DVIEWPORT9 * vp, int Width);
  40. void bmx_directx_d3d9_D3DVIEWPORT9_SetHeight(D3DVIEWPORT9 * vp, int Height);
  41. void bmx_directx_d3d9_D3DVIEWPORT9_SetMinZ(D3DVIEWPORT9 * vp, float MinZ);
  42. void bmx_directx_d3d9_D3DVIEWPORT9_SetMaxZ(D3DVIEWPORT9 * vp, float MaxZ);
  43. int bmx_directx_d3d9_IDirect3DTexture9_GetSurfaceLevel(IDirect3DTexture9 * tex, int Level, IDirect3DSurface9 ** ppSurfaceLevel);
  44. int bmx_directx_d3d9_IDirect3DTexture9_LockRect(IDirect3DTexture9 * tex, int Level, D3DLOCKED_RECT * pLockedRect, RECT * pRect, int Flags);
  45. int bmx_directx_d3d9_IDirect3DSurface9_LockRect(IDirect3DSurface9 * surf, D3DLOCKED_RECT * pLockedRect, RECT * pRect, int Flags);
  46. int bmx_directx_d3d9_IDirect3DSurface9_UnlockRect(IDirect3DSurface9 * surf);
  47. int bmx_directx_d3d9_IDirect3DSurface9_GetDC(IDirect3DSurface9 * surf, HDC * phdc);
  48. int bmx_directx_d3d9_IDirect3DSurface9_ReleaseDC(IDirect3DSurface9 * surf, HDC hdc);
  49. int bmx_directx_d3d9_IDirect3DSurface9_GetDesc(IDirect3DSurface9 * surf, D3DSURFACE_DESC * pDesc);
  50. }
  51. // ********************************************************
  52. typedef IDirect3D9 * (WINAPI *_Direct3DCreate9)(UINT);
  53. IDirect3D9 * bmx_directx_d3d9_Direct3DCreate9(int SDKVersion) {
  54. HINSTANCE inst = LoadLibrary("d3d9");
  55. if (inst != NULL) {
  56. _Direct3DCreate9 create = (_Direct3DCreate9)GetProcAddress( inst, "Direct3DCreate9" );
  57. if (create != NULL) {
  58. return create(SDKVersion);
  59. }
  60. }
  61. return NULL;
  62. }
  63. // ********************************************************
  64. int bmx_directx_d3d9_IDirect3D9_CreateDevice(IDirect3D9 * id, int Adapter, int DeviceType, HWND hFocusWindow,
  65. int BehaviorFlags, D3DPRESENT_PARAMETERS * pPresentationParameters, IDirect3DDevice9 ** ppReturnedDeviceInterface) {
  66. return id->CreateDevice(Adapter, static_cast<D3DDEVTYPE>(DeviceType), hFocusWindow, BehaviorFlags, pPresentationParameters, ppReturnedDeviceInterface);
  67. }
  68. int bmx_directx_d3d9_IDirect3D9_GetDeviceCaps(IDirect3D9 * id, int Adapter, int DeviceType, D3DCAPS9 * pCaps) {
  69. return id->GetDeviceCaps(Adapter, static_cast<D3DDEVTYPE>(DeviceType), pCaps);
  70. }
  71. int bmx_directx_d3d9_IDirect3D9_GetAdapterModeCount(IDirect3D9 * id, int Adapter, int Format) {
  72. return id->GetAdapterModeCount(Adapter, static_cast<D3DFORMAT>(Format));
  73. }
  74. int bmx_directx_d3d9_IDirect3D9_EnumAdapterModes(IDirect3D9 * id, int Adapter, int Format, int Mode, D3DDISPLAYMODE * pMode) {
  75. return id->EnumAdapterModes(Adapter, static_cast<D3DFORMAT>(Format), Mode, pMode);
  76. }
  77. int bmx_directx_d3d9_IDirect3D9_CheckDeviceFormat(IDirect3D9 * id, int Adapter, int DeviceType, int AdapterFormat, int Usage, int RType, int CheckFormat) {
  78. return id->CheckDeviceFormat(Adapter, static_cast<D3DDEVTYPE>(DeviceType), static_cast<D3DFORMAT>(AdapterFormat), Usage, static_cast<D3DRESOURCETYPE>(RType), static_cast<D3DFORMAT>(CheckFormat));
  79. }
  80. // ********************************************************
  81. int bmx_directx_d3d9_IDirect3DDevice9_CreateQuery(IDirect3DDevice9 * id, int type, IDirect3DQuery9 ** ppQuery) {
  82. return id->CreateQuery(static_cast<D3DQUERYTYPE>(type), ppQuery);
  83. }
  84. int bmx_directx_d3d9_IDirect3DDevice9_TestCooperativeLevel(IDirect3DDevice9 * id) {
  85. return id->TestCooperativeLevel();
  86. }
  87. int bmx_directx_d3d9_IDirect3DDevice9_Reset(IDirect3DDevice9 * id, D3DPRESENT_PARAMETERS * pPresentationParameters) {
  88. return id->Reset(pPresentationParameters);
  89. }
  90. int bmx_directx_d3d9_IDirect3DDevice9_Present(IDirect3DDevice9 * id, RECT * pSourceRect, RECT * pDestRect, HWND hDestWindowOverride, RGNDATA * pDirtyRegion) {
  91. return id->Present(pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion);
  92. }
  93. int bmx_directx_d3d9_IDirect3DDevice9_CreateTexture(IDirect3DDevice9 * id, int Width, int Height, int Levels, int Usage, int Format,
  94. int Pool, IDirect3DTexture9 ** ppTexture, HANDLE * pSharedHandle) {
  95. return id->CreateTexture(Width, Height, Levels, Usage, static_cast<D3DFORMAT>(Format), static_cast<D3DPOOL>(Pool), ppTexture, pSharedHandle);
  96. }
  97. int bmx_directx_d3d9_IDirect3DDevice9_CreateOffscreenPlainSurface(IDirect3DDevice9 * id, int Width, int Height, int Format, int Pool,
  98. IDirect3DSurface9 ** ppSurface, HANDLE * pSharedHandle) {
  99. return id->CreateOffscreenPlainSurface(Width, Height, static_cast<D3DFORMAT>(Format), static_cast<D3DPOOL>(Pool), ppSurface, pSharedHandle);
  100. }
  101. int bmx_directx_d3d9_IDirect3DDevice9_GetRenderTarget(IDirect3DDevice9 * id, int RenderTargetIndex, IDirect3DSurface9 ** ppRenderTarget) {
  102. return id->GetRenderTarget(RenderTargetIndex, ppRenderTarget);
  103. }
  104. int bmx_directx_d3d9_IDirect3DDevice9_BeginScene(IDirect3DDevice9 * id) {
  105. return id->BeginScene();
  106. }
  107. int bmx_directx_d3d9_IDirect3DDevice9_EndScene(IDirect3DDevice9 * id) {
  108. return id->EndScene();
  109. }
  110. int bmx_directx_d3d9_IDirect3DDevice9_Clear(IDirect3DDevice9 * id, int Count, D3DRECT * pRects, int Flags, int Color, float Z, int Stencil) {
  111. return id->Clear(Count, pRects, Flags, Color, Z, Stencil);
  112. }
  113. int bmx_directx_d3d9_IDirect3DDevice9_SetTransform(IDirect3DDevice9 * id, int State, D3DMATRIX * pMatrix) {
  114. return id->SetTransform(static_cast<D3DTRANSFORMSTATETYPE>(State), pMatrix);
  115. }
  116. int bmx_directx_d3d9_IDirect3DDevice9_SetViewport(IDirect3DDevice9 * id, D3DVIEWPORT9 * pViewport) {
  117. return id->SetViewport(pViewport);
  118. }
  119. int bmx_directx_d3d9_IDirect3DDevice9_SetRenderState(IDirect3DDevice9 * id, int State, int Value) {
  120. return id->SetRenderState(static_cast<D3DRENDERSTATETYPE>(State), Value);
  121. }
  122. int bmx_directx_d3d9_IDirect3DDevice9_SetTexture(IDirect3DDevice9 * id, int Stage, IDirect3DBaseTexture9 * pTexture) {
  123. return id->SetTexture(Stage, pTexture);
  124. }
  125. int bmx_directx_d3d9_IDirect3DDevice9_SetTextureStageState(IDirect3DDevice9 * id, int Stage, int Type, int Value) {
  126. return id->SetTextureStageState(Stage, static_cast<D3DTEXTURESTAGESTATETYPE>(Type), Value);
  127. }
  128. int bmx_directx_d3d9_IDirect3DDevice9_SetScissorRect(IDirect3DDevice9 * id, RECT * pRect) {
  129. return id->SetScissorRect(pRect);
  130. }
  131. int bmx_directx_d3d9_IDirect3DDevice9_DrawPrimitiveUP(IDirect3DDevice9 * id, int PrimitiveType, int PrimitiveCount, void * pVertexStreamZeroData, int VertexStreamZeroStride) {
  132. return id->DrawPrimitiveUP(static_cast<D3DPRIMITIVETYPE>(PrimitiveType), PrimitiveCount, pVertexStreamZeroData, VertexStreamZeroStride);
  133. }
  134. int bmx_directx_d3d9_IDirect3DDevice9_SetFVF(IDirect3DDevice9 * id, int FVF) {
  135. return id->SetFVF(FVF);
  136. }
  137. // ********************************************************
  138. int bmx_directx_d3d9_IDirect3DQuery9_Issue(IDirect3DQuery9 * id, int dwIssueFlags) {
  139. return id->Issue(dwIssueFlags);
  140. }
  141. int bmx_directx_d3d9_IDirect3DQuery9_GetData(IDirect3DQuery9 * id, void * pData, int dwSize, int dwGetDataFlags) {
  142. return id->GetData(pData, dwSize, dwGetDataFlags);
  143. }
  144. // ********************************************************
  145. D3DCAPS9 * bmx_directx_d3d9_D3DCAPS9_new() {
  146. return (D3DCAPS9*)malloc(sizeof(D3DCAPS9));
  147. }
  148. void bmx_directx_d3d9_D3DCAPS9_free(D3DCAPS9 * caps) {
  149. free(caps);
  150. }
  151. // ********************************************************
  152. D3DVIEWPORT9 * bmx_directx_d3d9_D3DVIEWPORT9_new() {
  153. return (D3DVIEWPORT9*)malloc(sizeof(D3DVIEWPORT9));
  154. }
  155. void bmx_directx_d3d9_D3DVIEWPORT9_free(D3DVIEWPORT9 * vp) {
  156. free(vp);
  157. }
  158. void bmx_directx_d3d9_D3DVIEWPORT9_SetX(D3DVIEWPORT9 * vp, int X) {
  159. vp->X = X;
  160. }
  161. void bmx_directx_d3d9_D3DVIEWPORT9_SetY(D3DVIEWPORT9 * vp, int Y) {
  162. vp->Y = Y;
  163. }
  164. void bmx_directx_d3d9_D3DVIEWPORT9_SetWidth(D3DVIEWPORT9 * vp, int Width) {
  165. vp->Width = Width;
  166. }
  167. void bmx_directx_d3d9_D3DVIEWPORT9_SetHeight(D3DVIEWPORT9 * vp, int Height) {
  168. vp->Height = Height;
  169. }
  170. void bmx_directx_d3d9_D3DVIEWPORT9_SetMinZ(D3DVIEWPORT9 * vp, float MinZ) {
  171. vp->MinZ = MinZ;
  172. }
  173. void bmx_directx_d3d9_D3DVIEWPORT9_SetMaxZ(D3DVIEWPORT9 * vp, float MaxZ) {
  174. vp->MaxZ = MaxZ;
  175. }
  176. // ********************************************************
  177. int bmx_directx_d3d9_IDirect3DTexture9_GetSurfaceLevel(IDirect3DTexture9 * tex, int Level, IDirect3DSurface9 ** ppSurfaceLevel) {
  178. return tex->GetSurfaceLevel(Level, ppSurfaceLevel);
  179. }
  180. int bmx_directx_d3d9_IDirect3DTexture9_LockRect(IDirect3DTexture9 * tex, int Level, D3DLOCKED_RECT * pLockedRect, RECT * pRect, int Flags) {
  181. return tex->LockRect(Level, pLockedRect, pRect, Flags);
  182. }
  183. // ********************************************************
  184. int bmx_directx_d3d9_IDirect3DSurface9_LockRect(IDirect3DSurface9 * surf, D3DLOCKED_RECT * pLockedRect, RECT * pRect, int Flags) {
  185. return surf->LockRect(pLockedRect, pRect, Flags);
  186. }
  187. int bmx_directx_d3d9_IDirect3DSurface9_UnlockRect(IDirect3DSurface9 * surf) {
  188. return surf->UnlockRect();
  189. }
  190. int bmx_directx_d3d9_IDirect3DSurface9_GetDC(IDirect3DSurface9 * surf, HDC * phdc) {
  191. return surf->GetDC(phdc);
  192. }
  193. int bmx_directx_d3d9_IDirect3DSurface9_ReleaseDC(IDirect3DSurface9 * surf, HDC hdc) {
  194. return surf->ReleaseDC(hdc);
  195. }
  196. int bmx_directx_d3d9_IDirect3DSurface9_GetDesc(IDirect3DSurface9 * surf, D3DSURFACE_DESC * pDesc) {
  197. return surf->GetDesc(pDesc);
  198. }