Code:
#include "MemoryDLL\MemoryDLL.au3"
#include<Timers.au3>
DllOpen("d3d9.dll")
DllOpen("D3DX9_39.dll")
; Definitions from:
; --> http://source.winehq.org/source/include/d3d8types.h
; --> http://source.winehq.org/source/include/d3d9.h
; --> freebasic: d3d9.bi, d3d9types.bi, d3d9caps.bi
; --> http://www.math.uni-leipzig.de/pool/tuts/S...raphics/dg.html
; --> MSDN (IMG:http://www.autoitscript.com/forum/style_emoticons/autoit/tongue.gif)
Func MAKE_HRESULT($sev,$fac,$code)
Return BitOR(BitShift($sev,-31) , BitOR(BitShift($fac,-16), $code))
EndFunc
Func MAKE_D3DSTATUS($code)
Return MAKE_HRESULT(0,0x876,$code)
EndFunc
Func MAKE_D3DHRESULT($code)
Return MAKE_HRESULT(1,0x876,$code)
EndFunc
Global COnst $D3D_SDK_VERSION = 32
Global Const $D3DCREATE_FPU_PRESERVE = 0x02
Global Const $D3DCREATE_MULTITHREADED = 0x04
Global Const $D3DCREATE_PUREDEVICE = 0x10
Global Const $D3DCREATE_SOFTWARE_VERTEXPROCESSING = 0x20
Global Const $D3DCREATE_HARDWARE_VERTEXPROCESSING = 0x40
Global Const $D3DCREATE_MIXED_VERTEXPROCESSING = 0x80
Global Const $D3DSPD_IUNKNOWN = 1
Global Const $D3DSGR_NO_CALIBRATION = 0
Global Const $D3DSGR_CALIBRATE = 1
Global Const $D3D_OK = 0
Global Const $D3DOK_NOAUTOGEN = MAKE_D3DSTATUS(2159)
Global Const $D3DERR_WRONGTEXTUREFORMAT = MAKE_D3DHRESULT(2072)
Global Const $D3DERR_UNSUPPORTEDCOLOROPERATION = MAKE_D3DHRESULT(2073)
Global Const $D3DERR_UNSUPPORTEDCOLORARG = MAKE_D3DHRESULT(2074)
Global Const $D3DERR_UNSUPPORTEDALPHAOPERATION = MAKE_D3DHRESULT(2075)
Global Const $D3DERR_UNSUPPORTEDALPHAARG = MAKE_D3DHRESULT(2076)
Global Const $D3DERR_TOOMANYOPERATIONS = MAKE_D3DHRESULT(2077)
Global Const $D3DERR_CONFLICTINGTEXTUREFILTER = MAKE_D3DHRESULT(2078)
Global Const $D3DERR_UNSUPPORTEDFACTORVALUE = MAKE_D3DHRESULT(2079)
Global Const $D3DERR_CONFLICTINGRENDERSTATE = MAKE_D3DHRESULT(2081)
Global Const $D3DERR_UNSUPPORTEDTEXTUREFILTER = MAKE_D3DHRESULT(2082)
Global Const $D3DERR_CONFLICTINGTEXTUREPALETTE = MAKE_D3DHRESULT(2086)
Global Const $D3DERR_DRIVERINTERNALERROR = MAKE_D3DHRESULT(2087)
Global Const $D3DERR_NOTFOUND = MAKE_D3DHRESULT(2150)
Global Const $D3DERR_MOREDATA = MAKE_D3DHRESULT(2151)
Global Const $D3DERR_DEVICELOST = MAKE_D3DHRESULT(2152)
Global Const $D3DERR_DEVICENOTRESET = MAKE_D3DHRESULT(2153)
Global Const $D3DERR_NOTAVAILABLE = MAKE_D3DHRESULT(2154)
Global Const $D3DERR_OUTOFVIDEOMEMORY = MAKE_D3DHRESULT(380)
Global Const $D3DERR_INVALIDDEVICE = MAKE_D3DHRESULT(2155)
Global Const $D3DERR_INVALIDCALL = MAKE_D3DHRESULT(2156)
Global Const $D3DERR_DRIVERINVALIDCALL = MAKE_D3DHRESULT(2157)
Global Const $D3DERR_WASSTILLDRAWING = MAKE_D3DHRESULT(540)
Global Const $D3DADAPTER_DEFAULT = 0
Global Const $D3DCURSOR_IMMEDIATE_UPDATE = 1
Global Const $D3DENUM_HOST_ADAPTER = 1
Global Const $D3DENUM_NO_WHQL_LEVEL = 2
Global Const $D3DPRESENT_BACK_BUFFERS_MAX = 3
Global Const $VALID_D3DENUM_FLAGS = 3
Global Const $D3DMAXNUMPRIMITIVES = 0xFFFF
Global Const $D3DMAXNUMVERTICES = 0xFFFF
Global Const $D3DCURRENT_DISPLAY_MODE = 0xEFFFFF
Global COnst $D3DDEVTYPE_HAL = 1
Global COnst $D3DDEVTYPE_REF = 2
Global COnst $D3DDEVTYPE_SW = 3
Global Const $D3DADPATER_DEFAULT = 0
Global Const $D3DRECT = "long x1; long y1; long x2; long y2;"
Global Const $D3DPRESENT_PARAMETERS = _
"UINT BackBufferWidth;" & _ ;
"UINT BackBufferHeight;" & _ ;
"dword BackBufferFormat;" & _ ; D3DFORMAT
"UINT BackBufferCount;" & _ ;
"dword MultiSampleType;" & _ ; D3DMULTISAMPLE_TYPE
"DWORD MultiSampleQuality;" & _ ;
"dword SwapEffect;" & _ ; D3DSWAPEFFECT
"HWND hDeviceWindow;" & _ ;
"int Windowed;" & _ ; BOOL
"int EnableAutoDepthStencil;" & _ ; BOOL
"dword AutoDepthStencilFormat;" & _ ; D3DFORMAT
"DWORD Flags;" & _ ;
"UINT FullScreenRefreshRateInHz;" & _ ;
"UINT PresentationInterval;"
; The IUnknown-Interface
Global Const $IUnknown_vTable = "ptr QueryInterface; ptr AddRef; ptr Release;"
Global Const $IUnknown = "ptr IUnknown;"
#Region IDirect3D9Ex and IDirect3D9 Interfaces
#cs D3D9-EX-Interface
DECLARE_INTERFACE_(IDirect3D9Ex,IDirect3D9)
/*** IUnknown methods ***/
STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
/*** IDirect3D9 methods ***/
STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;
STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;
STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;
STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter, D3DFORMAT Format) PURE;
STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) PURE;
STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE* pMode) PURE;
STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) PURE;
STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE;
STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels) PURE;
STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE;
STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) PURE;
STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) PURE;
STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;
STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, struct IDirect3DDevice9** ppReturnedDeviceInterface) PURE;
/*** IDirect3D9Ex methods ***/
STDMETHOD_(UINT, GetAdapterModeCountEx)(THIS_ UINT Adapter, CONST D3DDISPLAYMODEFILTER *pFilter) PURE;
STDMETHOD(EnumAdapterModesEx)(THIS_ UINT Adapter, CONST D3DDISPLAYMODEFILTER *pFilter, UINT Mode, D3DDISPLAYMODEEX* pMode) PURE;
STDMETHOD(GetAdapterDisplayModeEx)(THIS_ UINT Adapter, D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation);
STDMETHOD(CreateDeviceEx)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, D3DDISPLAYMODEEX* pFullscreenDisplayMode, struct IDirect3DDevice9Ex **ppReturnedDeviceInterface) PURE;
STDMETHOD(GetAdapterLUID)(THIS_ UINT Adatper, LUID *pLUID) PURE;
};
#ce
Global Const $IDirect3D9_vTable = $IUnknown_vTable & "ptr RegisterSoftwareDevice; ptr GetAdapterCount; ptr GetAdapterIdentifier; ptr GetAdapterModeCount; " & _
"ptr EnumAdapterModes; ptr GetAdapterDisplayMode; ptr CheckDeviceType; ptr CheckDeviceFormat; ptr CheckDeviceMultiSampleType; ptr CheckDepthStencilMatch; " & _
"ptr CheckDeviceFormatConversion; ptr GetDeviceCaps; ptr GetAdapterMonitor; ptr CreateDevice;"
Global Const $IDirect3D9Ex_vTable = $IDirect3D9_vTable & "ptr GetAdapterModeCountEx; ptr EnumAdapterModesEx; ptr GetAdapterDisplayModeEx; ptr CreateDeviceEx; GetAdapterLUID;"
Global Const $IDirect3D9 = "ptr IDirect3D9;"
Global Const $IDirect3D9Ex = "ptr IDirect3D9Ex;"
#EndRegion
#Region IDirect3DDevice9 interface
#cs
/*****************************************************************************
* IDirect3DDevice9 interface
*/
#define INTERFACE IDirect3DDevice9
DECLARE_INTERFACE_(IDirect3DDevice9,IUnknown)
{
/*** IUnknown methods ***/
STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
/*** IDirect3DDevice9 methods ***/
STDMETHOD(TestCooperativeLevel)(THIS) PURE;
STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;
STDMETHOD(EvictManagedResources)(THIS) PURE;
STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE;
STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE;
STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, D3DDISPLAYMODE* pMode) PURE;
STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;
STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) PURE;
STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y, DWORD Flags) PURE;
STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;
STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain) PURE;
STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) PURE;
STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;
STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;
STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion) PURE;
STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) PURE;
STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) PURE;
STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE;
STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain, DWORD Flags, CONST D3DGAMMARAMP* pRamp) PURE;
STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, D3DGAMMARAMP* pRamp) PURE;
STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle) PURE;
STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle) PURE;
STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle) PURE;
STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) PURE;
STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) PURE;
STDMETHOD(CreateRenderTarget)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestinationSurface, CONST POINT* pDestPoint) PURE;
STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) PURE;
STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) PURE;
STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain, IDirect3DSurface9* pDestSurface) PURE;
STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestSurface, CONST RECT* pDestRect, D3DTEXTUREFILTERTYPE Filter) PURE;
STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface, CONST RECT* pRect, D3DCOLOR color) PURE;
STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) PURE;
STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) PURE;
STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE;
STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE;
STDMETHOD(BeginScene)(THIS) PURE;
STDMETHOD(EndScene)(THIS) PURE;
STDMETHOD(Clear)(THIS_ DWORD Count, CONST D3DRECT* pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil) PURE;
STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX* pMatrix) PURE;
STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) PURE;
STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE, CONST D3DMATRIX*) PURE;
STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport) PURE;
STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE;
STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial) PURE;
STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE;
STDMETHOD(SetLight)(THIS_ DWORD Index, CONST D3DLIGHT9*) PURE;
STDMETHOD(GetLight)(THIS_ DWORD Index, D3DLIGHT9*) PURE;
STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE;
STDMETHOD(GetLightEnable)(THIS_ DWORD Index, BOOL* pEnable) PURE;
STDMETHOD(SetClipPlane)(THIS_ DWORD Index, CONST float* pPlane) PURE;
STDMETHOD(GetClipPlane)(THIS_ DWORD Index, float* pPlane) PURE;
STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE;
STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD* pValue) PURE;
STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB) PURE;
STDMETHOD(BeginStateBlock)(THIS) PURE;
STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE;
STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus) PURE;
STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE;
STDMETHOD(GetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9** ppTexture) PURE;
STDMETHOD(SetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9* pTexture) PURE;
STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) PURE;
STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE;
STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) PURE;
STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE;
STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;
STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber, CONST PALETTEENTRY* pEntries) PURE;
STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;
STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;
STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;
STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE;
STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE;
STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE;
STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;
STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE;
STDMETHOD_(float, GetNPatchMode)(THIS) PURE;
STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE;
STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE;
STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;
STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT MinVertexIndex, UINT NumVertices, UINT PrimitiveCount, CONST void* pIndexData, D3DFORMAT IndexDataFormat, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;
STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) PURE;
STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements, IDirect3DVertexDeclaration9** ppDecl) PURE;
STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE;
STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE;
STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;
STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE;
STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction, IDirect3DVertexShader9** ppShader) PURE;
STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE;
STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE;
STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;
STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;
STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT BoolCount) PURE;
STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) PURE;
STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9** ppStreamData, UINT* OffsetInBytes, UINT* pStride) PURE;
STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE;
STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE;
STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE;
STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE;
STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction, IDirect3DPixelShader9** ppShader) PURE;
STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE;
STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE;
STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;
STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;
STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT BoolCount) PURE;
STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
STDMETHOD(DrawRectPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE;
STDMETHOD(DrawTriPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE;
STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;
STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) PURE;
#ce
Global Const $IDirect3DDevice9_vTable = $IUnknown_vTable & _
"ptr TestCooperativeLevel;" & _
"ptr GetAvailableTextureMem;" & _
"ptr EvictManagedResources;" & _
"ptr GetDirect3D;" & _
"ptr GetDeviceCaps;" & _
"ptr GetDisplayMode;" & _
"ptr GetCreationParameters;" & _
"ptr SetCursorProperties;" & _
"ptr SetCursorPosition;" & _
"ptr ShowCursor;" & _
"ptr CreateAdditionalSwapChain;" & _
"ptr GetSwapChain;" & _
"ptr GetNumberOfSwapChains;" & _
"ptr Reset;" & _
"ptr Present;" & _
"ptr GetBackBuffer;" & _
"ptr GetRasterStatus;" & _
"ptr SetDialogBoxMode;" & _
"ptr SetGammaRamp;" & _
"ptr GetGammaRamp;" & _
"ptr CreateTexture;" & _
"ptr CreateVolumeTexture;" & _
"ptr CreateCubeTexture;" & _
"ptr CreateVertexBuffer;" & _
"ptr CreateIndexBuffer;" & _
"ptr CreateRenderTarget;" & _
"ptr CreateDepthStencilSurface;" & _
"ptr UpdateSurface;" & _
"ptr UpdateTexture;" & _
"ptr GetRenderTargetData;" & _
"ptr GetFrontBufferData;" & _
"ptr StretchRect;" & _
"ptr ColorFill;" & _
"ptr CreateOffscreenPlainSurface;" & _
"ptr SetRenderTarget;" & _
"ptr GetRenderTarget;" & _
"ptr SetDepthStencilSurface;" & _
"ptr GetDepthStencilSurface;" & _
"ptr BeginScene;" & _
"ptr EndScene;" & _
"ptr Clear;" & _
"ptr SetTransform;" & _
"ptr GetTransform;" & _
"ptr MultiplyTransform;" & _
"ptr SetViewport;" & _
"ptr GetViewport;" & _
"ptr SetMaterial;" & _
"ptr GetMaterial;" & _
"ptr SetLight;" & _
"ptr GetLight;" & _
"ptr LightEnable;" & _
"ptr GetLightEnable;" & _
"ptr SetClipPlane;" & _
"ptr GetClipPlane;" & _
"ptr SetRenderState;" & _
"ptr GetRenderState;" & _
"ptr CreateStateBlock;" & _
"ptr BeginStateBlock;" & _
"ptr EndStateBlock;" & _
"ptr SetClipStatus;" & _
"ptr GetClipStatus;" & _
"ptr GetTexture;" & _
"ptr SetTexture;" & _
"ptr GetTextureStageState;" & _
"ptr SetTextureStageState;" & _
"ptr GetSamplerState;" & _
"ptr SetSamplerState;" & _
"ptr ValidateDevice;" & _
"ptr SetPaletteEntries;" & _
"ptr GetPaletteEntries;" & _
"ptr SetCurrentTexturePalette;" & _
"ptr GetCurrentTexturePalette;" & _
"ptr SetScissorRect;" & _
"ptr GetScissorRect;" & _
"ptr SetSoftwareVertexProcessing;" & _
"ptr GetSoftwareVertexProcessing;" & _
"ptr SetNPatchMode;" & _
"ptr GetNPatchMode;" & _
"ptr DrawPrimitive;" & _
"ptr DrawIndexedPrimitive;" & _
"ptr DrawPrimitiveUP;" & _
"ptr DrawIndexedPrimitiveUP;" & _
"ptr ProcessVertices;" & _
"ptr CreateVertexDeclaration;" & _
"ptr SetVertexDeclaration;" & _
"ptr GetVertexDeclaration;" & _
"ptr SetFVF;" & _
"ptr GetFVF;" & _
"ptr CreateVertexShader;" & _
"ptr SetVertexShader;" & _
"ptr GetVertexShader;" & _
"ptr SetVertexShaderConstantF;" & _
"ptr GetVertexShaderConstantF;" & _
"ptr SetVertexShaderConstantI;" & _
"ptr GetVertexShaderConstantI;" & _
"ptr SetVertexShaderConstantB;" & _
"ptr GetVertexShaderConstantB;" & _
"ptr SetStreamSource;" & _
"ptr GetStreamSource;" & _
"ptr SetStreamSourceFreq;" & _
"ptr GetStreamSourceFreq;" & _
"ptr SetIndices;" & _
"ptr GetIndices;" & _
"ptr CreatePixelShader;" & _
"ptr SetPixelShader;" & _
"ptr GetPixelShader;" & _
"ptr SetPixelShaderConstantF;" & _
"ptr GetPixelShaderConstantF;" & _
"ptr SetPixelShaderConstantI;" & _
"ptr GetPixelShaderConstantI;" & _
"ptr SetPixelShaderConstantB;" & _
"ptr GetPixelShaderConstantB;" & _
"ptr DrawRectPatch;" & _
"ptr DrawTriPatch;" & _
"ptr DeletePatch;" & _
"ptr CreateQuery;"
Global Const $IDirect3DDevice9 = "ptr IDirect3DDevice9;"
#EndRegion
;Prog@ndy
Func _CreateIDirect3D9($SDKVersion=$D3D_SDK_VERSION)
Local $D3D9_Pointer = DllCall("d3d9.dll","ptr","Direct3DCreate9","uint",$SDKVersion)
Select
Case @error
Return SetError(1,0,0)
Case $D3D9_Pointer[0] = 0
Return SetError(2,0,0)
EndSelect
Local $RetArr[3]
$RetArr[0] = $D3D9_Pointer[0]
$RetArr[1] = DllStructCreate($IDirect3D9,$RetArr[0])
$RetArr[2] = DllStructCreate($IDirect3D9_vTable,DllStructGetData($RetArr[1],1))
Return $RetArr
EndFunc
;Prog@ndy
Func _IDirect3D9_Release(ByRef $D3D9Arr)
If UBound($D3D9Arr) <> 3 Then Return SetError(1,0,-1)
Local $Func_Release = DllStructGetData($D3D9Arr[2],"Release")
Local $ret = MemoryFuncCall("lresult",$Func_Release,"ptr",$D3D9Arr[0])
Return $ret[0]
EndFunc
;Prog@ndy
Func _IDirect3D9_CreateDevice(ByRef $D3D9Arr,$Adapter,$DeviceType,$hFocusWindow,$BehaviorFlags,$pPresentationParameters)
If UBound($D3D9Arr) <> 3 Then Return SetError(1,0,-1)
Local $Func_CreateDevice = DllStructGetData($D3D9Arr[2],"CreateDevice")
Local $ret = MemoryFuncCall("lresult",$Func_CreateDevice,"ptr",$D3D9Arr[0],"uint",$Adapter,"dword",$DeviceType,"hwnd",$hFocusWindow,"dword",$BehaviorFlags, "ptr", $pPresentationParameters,"ptr*",0)
Return SetError($ret[0],0,$ret[7])
EndFunc
;Prog@ndy
Func _IDirect3DDevice9_FromPointer($D3D9Device_ptr)
if $D3D9Device_ptr = 0 Then Return SetError(1,0,0)
Local $RetArr[3]
$RetArr[0] = $D3D9Device_ptr
$RetArr[1] = DllStructCreate($IDirect3DDevice9,$RetArr[0])
$RetArr[2] = DllStructCreate($IDirect3DDevice9_vTable,DllStructGetData($RetArr[1],1))
Return $RetArr
EndFunc
;Prog@ndy
Func _IDirect3DDevice9_Release(ByRef $D3D9Arr)
If UBound($D3D9Arr) <> 3 Then Return SetError(1,0,-1)
Local $Func_Release = DllStructGetData($D3D9Arr[2],"Release")
Local $ret = MemoryFuncCall("lresult",$Func_Release,"ptr",$D3D9Arr[0])
Return $ret[0]
EndFunc
;Prog@ndy
Func _IDirect3DDevice9_BeginScene(ByRef $D3D9Arr)
If UBound($D3D9Arr) <> 3 Then Return SetError(1,0,-1)
Local $DeviceFunc_BeginScene = DllStructGetData($D3D9Arr[2],"BeginScene")
Local $BeginScene = MemoryFuncCall("lresult",$DeviceFunc_BeginScene,"ptr",$D3D9Arr[0])
Return $BeginScene[0]
EndFunc
;Prog@ndy
Func _IDirect3DDevice9_Present(ByRef $D3D9Arr,$pSourceRect,$pDestRect,$hDestWindowOverride,$pDirtyRegion)
If UBound($D3D9Arr) <> 3 Then Return SetError(1,0,-1)
Local $DeviceFunc_Present = DllStructGetData($D3D9Arr[2],"Present")
Local $Present = MemoryFuncCall("lresult",$DeviceFunc_Present,"ptr",$D3D9Arr[0],"ptr",$pSourceRect,"ptr",$pDestRect,"hwnd",$hDestWindowOverride,"ptr",$pDirtyRegion)
Return $Present[0]
EndFunc
;Prog@ndy
Func _IDirect3DDevice9_EndScene(ByRef $D3D9Arr)
If UBound($D3D9Arr) <> 3 Then Return SetError(1,0,-1)
Local $DeviceFunc_EndScene = DllStructGetData($D3D9Arr[2],"EndScene")
Local $EndScene = MemoryFuncCall("lresult",$DeviceFunc_EndScene,"ptr",$D3D9Arr[0])
Return $EndScene[0]
EndFunc
;Prog@ndy
Func _IDirect3DDevice9_Clear(ByRef $D3D9Arr,$Count,$pRects,$Flags,$Color,$Z,$Stencil)
If UBound($D3D9Arr) <> 3 Then Return SetError(1,0,-1)
Local $DeviceFunc_Clear = DllStructGetData($D3D9Arr[2],"Clear")
Local $Clear = MemoryFuncCall("lresult",$DeviceFunc_Clear,"ptr",$D3D9Arr[0],"dword",$Count,"ptr",$pRects,"DWORD",$Flags,"dword",$Color,"float",$Z,"dword",$Stencil)
Return $Clear[0]
EndFunc
Global $FocusWindow = GUICreate("test",400,400)
GUISetState(@SW_SHOW)
Global $structD3DPRESENT_PARAMETERS = DllStructCreate($D3DPRESENT_PARAMETERS)
DllStructSetData($structD3DPRESENT_PARAMETERS,"SwapEffect",3)
DllStructSetData($structD3DPRESENT_PARAMETERS,"BackBufferWidth",400)
DllStructSetData($structD3DPRESENT_PARAMETERS,"BackBufferWidth",400)
DllStructSetData($structD3DPRESENT_PARAMETERS,"hDeviceWindow",$FocusWindow)
DllStructSetData($structD3DPRESENT_PARAMETERS,"Windowed",1)
Global $pD3DPRESENT_PARAMETERS = DllStructGetPtr($structD3DPRESENT_PARAMETERS)
$MY_IDirect3D9 = _CreateIDirect3D9()
; Get Device Interface
$BehaviorFlags = $D3DCREATE_SOFTWARE_VERTEXPROCESSING
;~ $BehaviorFlags = $D3DCREATE_MIXED_VERTEXPROCESSING
;~ $BehaviorFlags = $D3DCREATE_HARDWARE_VERTEXPROCESSING
$ret = _IDirect3D9_CreateDevice($MY_IDirect3D9,$D3DADPATER_DEFAULT,$D3DDEVTYPE_HAL,$FocusWindow,$BehaviorFlags, $pD3DPRESENT_PARAMETERS)
If @error Then Exit MsgBox(0, "",@error=$D3DERR_INVALIDCALL)
$MY_D3D9Device = _IDirect3DDevice9_FromPointer($ret)
; Create Rect struct for drawing
Global $structD3DRECT = DllStructCreate($D3DRECT)
; start scene drawing
_Timer_SetTimer($FocusWindow,250,"_Timer_RedrawScene")
While GUIGetMsg()<>-3
WEnd
; stop it
_Timer_KillAllTimers($FocusWindow)
; Release Device
;~ $Func_ReleaseDevice = DllStructGetData($D3D9Device_FuncPtrs,3)
;~ $ret = MemoryFuncCall("dword",$Func_ReleaseDevice,"ptr",$D3D9Device_ptr)
$ret = _IDirect3DDevice9_Release($MY_D3D9Device)
MsgBox(0, 'Release Device', $ret=0)
; Release D3D9
;~ $Func_Release = DllStructGetData($D3D9_FuncPointers,"Release")
;~ $ret = MemoryFuncCall("dword",$Func_Release,"ptr",$D3D9_Pointer)
$ret = _IDirect3D9_Release($MY_IDirect3D9)
MsgBox(0, 'Release D3D9', $ret=0)
; Draw Scenes
Func _Timer_RedrawScene($hWnd, $Msg, $iIDTimer, $dwTime)
; Begin a new scene
Local $BeginScene = _IDirect3DDevice9_BeginScene($MY_D3D9Device)
; clear backgrounf to blue
Local $Clear = _IDirect3DDevice9_Clear($MY_D3D9Device,0,0,1,0x000000FF,0,0)
; draw a red rect
DllStructSetData($structD3DRECT,"x1",Random(10,100,1))
DllStructSetData($structD3DRECT,"y1",Random(10,200,1))
DllStructSetData($structD3DRECT,"x2",DllStructgetData($structD3DRECT,"x1")+Random(40,200,1))
DllStructSetData($structD3DRECT,"y2",DllStructgetData($structD3DRECT,"y1")+Random(40,200,1))
Local $Clear2 = _IDirect3DDevice9_Clear($MY_D3D9Device,1,DllStructGetPtr($structD3DRECT),1,0x00FF0000,0,0)
;end the scene
Local $EndScene = _IDirect3DDevice9_EndScene($MY_D3D9Device)
; draw it
Local $Present = _IDirect3DDevice9_Present($MY_D3D9Device,0,0,0,0)
EndFunc