d3d9.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  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 = LoadLibraryA("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. int res = id->CreateDevice(Adapter, static_cast<D3DDEVTYPE>(DeviceType), hFocusWindow, BehaviorFlags, pPresentationParameters, ppReturnedDeviceInterface);
  67. return res;
  68. }
  69. int bmx_directx_d3d9_IDirect3D9_GetDeviceCaps(IDirect3D9 * id, int Adapter, int DeviceType, D3DCAPS9 * pCaps) {
  70. return id->GetDeviceCaps(Adapter, static_cast<D3DDEVTYPE>(DeviceType), pCaps);
  71. }
  72. int bmx_directx_d3d9_IDirect3D9_GetAdapterModeCount(IDirect3D9 * id, int Adapter, int Format) {
  73. return id->GetAdapterModeCount(Adapter, static_cast<D3DFORMAT>(Format));
  74. }
  75. int bmx_directx_d3d9_IDirect3D9_EnumAdapterModes(IDirect3D9 * id, int Adapter, int Format, int Mode, D3DDISPLAYMODE * pMode) {
  76. return id->EnumAdapterModes(Adapter, static_cast<D3DFORMAT>(Format), Mode, pMode);
  77. }
  78. int bmx_directx_d3d9_IDirect3D9_CheckDeviceFormat(IDirect3D9 * id, int Adapter, int DeviceType, int AdapterFormat, int Usage, int RType, int CheckFormat) {
  79. return id->CheckDeviceFormat(Adapter, static_cast<D3DDEVTYPE>(DeviceType), static_cast<D3DFORMAT>(AdapterFormat), Usage, static_cast<D3DRESOURCETYPE>(RType), static_cast<D3DFORMAT>(CheckFormat));
  80. }
  81. // ********************************************************
  82. int bmx_directx_d3d9_IDirect3DDevice9_CreateQuery(IDirect3DDevice9 * id, int type, IDirect3DQuery9 ** ppQuery) {
  83. return id->CreateQuery(static_cast<D3DQUERYTYPE>(type), ppQuery);
  84. }
  85. int bmx_directx_d3d9_IDirect3DDevice9_TestCooperativeLevel(IDirect3DDevice9 * id) {
  86. return id->TestCooperativeLevel();
  87. }
  88. int bmx_directx_d3d9_IDirect3DDevice9_Reset(IDirect3DDevice9 * id, D3DPRESENT_PARAMETERS * pPresentationParameters) {
  89. return id->Reset(pPresentationParameters);
  90. }
  91. int bmx_directx_d3d9_IDirect3DDevice9_Present(IDirect3DDevice9 * id, RECT * pSourceRect, RECT * pDestRect, HWND hDestWindowOverride, RGNDATA * pDirtyRegion) {
  92. return id->Present(pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion);
  93. }
  94. int bmx_directx_d3d9_IDirect3DDevice9_CreateTexture(IDirect3DDevice9 * id, int Width, int Height, int Levels, int Usage, int Format,
  95. int Pool, IDirect3DTexture9 ** ppTexture, HANDLE * pSharedHandle) {
  96. return id->CreateTexture(Width, Height, Levels, Usage, static_cast<D3DFORMAT>(Format), static_cast<D3DPOOL>(Pool), ppTexture, pSharedHandle);
  97. }
  98. int bmx_directx_d3d9_IDirect3DDevice9_CreateOffscreenPlainSurface(IDirect3DDevice9 * id, int Width, int Height, int Format, int Pool,
  99. IDirect3DSurface9 ** ppSurface, HANDLE * pSharedHandle) {
  100. return id->CreateOffscreenPlainSurface(Width, Height, static_cast<D3DFORMAT>(Format), static_cast<D3DPOOL>(Pool), ppSurface, pSharedHandle);
  101. }
  102. int bmx_directx_d3d9_IDirect3DDevice9_GetRenderTarget(IDirect3DDevice9 * id, int RenderTargetIndex, IDirect3DSurface9 ** ppRenderTarget) {
  103. return id->GetRenderTarget(RenderTargetIndex, ppRenderTarget);
  104. }
  105. int bmx_directx_d3d9_IDirect3DDevice9_BeginScene(IDirect3DDevice9 * id) {
  106. return id->BeginScene();
  107. }
  108. int bmx_directx_d3d9_IDirect3DDevice9_EndScene(IDirect3DDevice9 * id) {
  109. return id->EndScene();
  110. }
  111. int bmx_directx_d3d9_IDirect3DDevice9_Clear(IDirect3DDevice9 * id, int Count, D3DRECT * pRects, int Flags, int Color, float Z, int Stencil) {
  112. return id->Clear(Count, pRects, Flags, Color, Z, Stencil);
  113. }
  114. int bmx_directx_d3d9_IDirect3DDevice9_SetTransform(IDirect3DDevice9 * id, int State, D3DMATRIX * pMatrix) {
  115. return id->SetTransform(static_cast<D3DTRANSFORMSTATETYPE>(State), pMatrix);
  116. }
  117. int bmx_directx_d3d9_IDirect3DDevice9_SetViewport(IDirect3DDevice9 * id, D3DVIEWPORT9 * pViewport) {
  118. return id->SetViewport(pViewport);
  119. }
  120. int bmx_directx_d3d9_IDirect3DDevice9_SetRenderState(IDirect3DDevice9 * id, int State, int Value) {
  121. return id->SetRenderState(static_cast<D3DRENDERSTATETYPE>(State), Value);
  122. }
  123. int bmx_directx_d3d9_IDirect3DDevice9_SetTexture(IDirect3DDevice9 * id, int Stage, IDirect3DBaseTexture9 * pTexture) {
  124. return id->SetTexture(Stage, pTexture);
  125. }
  126. int bmx_directx_d3d9_IDirect3DDevice9_SetTextureStageState(IDirect3DDevice9 * id, int Stage, int Type, int Value) {
  127. return id->SetTextureStageState(Stage, static_cast<D3DTEXTURESTAGESTATETYPE>(Type), Value);
  128. }
  129. int bmx_directx_d3d9_IDirect3DDevice9_SetScissorRect(IDirect3DDevice9 * id, RECT * pRect) {
  130. return id->SetScissorRect(pRect);
  131. }
  132. int bmx_directx_d3d9_IDirect3DDevice9_DrawPrimitiveUP(IDirect3DDevice9 * id, int PrimitiveType, int PrimitiveCount, void * pVertexStreamZeroData, int VertexStreamZeroStride) {
  133. return id->DrawPrimitiveUP(static_cast<D3DPRIMITIVETYPE>(PrimitiveType), PrimitiveCount, pVertexStreamZeroData, VertexStreamZeroStride);
  134. }
  135. int bmx_directx_d3d9_IDirect3DDevice9_SetFVF(IDirect3DDevice9 * id, int FVF) {
  136. return id->SetFVF(FVF);
  137. }
  138. // ********************************************************
  139. int bmx_directx_d3d9_IDirect3DQuery9_Issue(IDirect3DQuery9 * id, int dwIssueFlags) {
  140. return id->Issue(dwIssueFlags);
  141. }
  142. int bmx_directx_d3d9_IDirect3DQuery9_GetData(IDirect3DQuery9 * id, void * pData, int dwSize, int dwGetDataFlags) {
  143. return id->GetData(pData, dwSize, dwGetDataFlags);
  144. }
  145. // ********************************************************
  146. D3DCAPS9 * bmx_directx_d3d9_D3DCAPS9_new() {
  147. return (D3DCAPS9*)calloc(1,sizeof(D3DCAPS9));
  148. }
  149. void bmx_directx_d3d9_D3DCAPS9_free(D3DCAPS9 * caps) {
  150. free(caps);
  151. }
  152. // ********************************************************
  153. D3DVIEWPORT9 * bmx_directx_d3d9_D3DVIEWPORT9_new() {
  154. return (D3DVIEWPORT9*)calloc(1,sizeof(D3DVIEWPORT9));
  155. }
  156. void bmx_directx_d3d9_D3DVIEWPORT9_free(D3DVIEWPORT9 * vp) {
  157. free(vp);
  158. }
  159. void bmx_directx_d3d9_D3DVIEWPORT9_SetX(D3DVIEWPORT9 * vp, int X) {
  160. vp->X = X;
  161. }
  162. void bmx_directx_d3d9_D3DVIEWPORT9_SetY(D3DVIEWPORT9 * vp, int Y) {
  163. vp->Y = Y;
  164. }
  165. void bmx_directx_d3d9_D3DVIEWPORT9_SetWidth(D3DVIEWPORT9 * vp, int Width) {
  166. vp->Width = Width;
  167. }
  168. void bmx_directx_d3d9_D3DVIEWPORT9_SetHeight(D3DVIEWPORT9 * vp, int Height) {
  169. vp->Height = Height;
  170. }
  171. void bmx_directx_d3d9_D3DVIEWPORT9_SetMinZ(D3DVIEWPORT9 * vp, float MinZ) {
  172. vp->MinZ = MinZ;
  173. }
  174. void bmx_directx_d3d9_D3DVIEWPORT9_SetMaxZ(D3DVIEWPORT9 * vp, float MaxZ) {
  175. vp->MaxZ = MaxZ;
  176. }
  177. // ********************************************************
  178. int bmx_directx_d3d9_IDirect3DTexture9_GetSurfaceLevel(IDirect3DTexture9 * tex, int Level, IDirect3DSurface9 ** ppSurfaceLevel) {
  179. return tex->GetSurfaceLevel(Level, ppSurfaceLevel);
  180. }
  181. int bmx_directx_d3d9_IDirect3DTexture9_LockRect(IDirect3DTexture9 * tex, int Level, D3DLOCKED_RECT * pLockedRect, RECT * pRect, int Flags) {
  182. return tex->LockRect(Level, pLockedRect, pRect, Flags);
  183. }
  184. // ********************************************************
  185. int bmx_directx_d3d9_IDirect3DSurface9_LockRect(IDirect3DSurface9 * surf, D3DLOCKED_RECT * pLockedRect, RECT * pRect, int Flags) {
  186. return surf->LockRect(pLockedRect, pRect, Flags);
  187. }
  188. int bmx_directx_d3d9_IDirect3DSurface9_UnlockRect(IDirect3DSurface9 * surf) {
  189. return surf->UnlockRect();
  190. }
  191. int bmx_directx_d3d9_IDirect3DSurface9_GetDC(IDirect3DSurface9 * surf, HDC * phdc) {
  192. return surf->GetDC(phdc);
  193. }
  194. int bmx_directx_d3d9_IDirect3DSurface9_ReleaseDC(IDirect3DSurface9 * surf, HDC hdc) {
  195. return surf->ReleaseDC(hdc);
  196. }
  197. int bmx_directx_d3d9_IDirect3DSurface9_GetDesc(IDirect3DSurface9 * surf, D3DSURFACE_DESC * pDesc) {
  198. return surf->GetDesc(pDesc);
  199. }