1 module directx.d3d8;
2 
3 import directx.win32;
4 import directx.com;
5 import directx.d3dcommon;
6 
7 extern (C++) interface IDirect3D8 : IUnknown {
8     HRESULT RegisterSoftwareDevice(void* pInitializeFunction);
9     UINT GetAdapterCount();
10     HRESULT GetAdapterIdentifier(UINT Adapter,DWORD Flags,D3DADAPTER_IDENTIFIER8* pIdentifier);
11     UINT GetAdapterModeCount(UINT Adapter);
12     HRESULT EnumAdapterModes(UINT Adapter,UINT Mode,D3DDISPLAYMODE* pMode);
13     HRESULT GetAdapterDisplayMode(UINT Adapter,D3DDISPLAYMODE* pMode);
14     HRESULT CheckDeviceType(UINT Adapter,D3DDEVTYPE CheckType,D3DFORMAT DisplayFormat,D3DFORMAT BackBufferFormat,BOOL Windowed);
15     HRESULT CheckDeviceFormat(UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,DWORD Usage,D3DRESOURCETYPE RType,D3DFORMAT CheckFormat);
16     HRESULT CheckDeviceMultiSampleType(UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SurfaceFormat,BOOL Windowed,D3DMULTISAMPLE_TYPE MultiSampleType);
17     HRESULT CheckDepthStencilMatch(UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,D3DFORMAT RenderTargetFormat,D3DFORMAT DepthStencilFormat);
18     HRESULT GetDeviceCaps(UINT Adapter,D3DDEVTYPE DeviceType,D3DCAPS8* pCaps);
19     HMONITOR GetAdapterMonitor(UINT Adapter);
20     HRESULT CreateDevice(UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DDevice8* ppReturnedDeviceInterface);
21 }
22 
23 extern (C++) interface IDirect3DDevice8 : IUnknown {
24     HRESULT TestCooperativeLevel();
25     UINT GetAvailableTextureMem();
26     HRESULT ResourceManagerDiscardBytes(DWORD Bytes);
27     HRESULT GetDirect3D(IDirect3D8* ppD3D8);
28     HRESULT GetDeviceCaps(D3DCAPS8* pCaps);
29     HRESULT GetDisplayMode(D3DDISPLAYMODE* pMode);
30     HRESULT GetCreationParameters(D3DDEVICE_CREATION_PARAMETERS *pParameters);
31     HRESULT SetCursorProperties(UINT XHotSpot,UINT YHotSpot,IDirect3DSurface8 pCursorBitmap);
32     void SetCursorPosition(int X,int Y,DWORD Flags);
33     BOOL ShowCursor(BOOL bShow);
34     HRESULT CreateAdditionalSwapChain(D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DSwapChain8* pSwapChain);
35     HRESULT Reset(D3DPRESENT_PARAMETERS* pPresentationParameters);
36     HRESULT Present(const(RECT)* pSourceRect,const(RECT)* pDestRect,HWND hDestWindowOverride,const(RGNDATA)* pDirtyRegion);
37     HRESULT GetBackBuffer(UINT BackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface8* ppBackBuffer);
38     HRESULT GetRasterStatus(D3DRASTER_STATUS* pRasterStatus);
39     void SetGammaRamp(DWORD Flags,const(D3DGAMMARAMP)* pRamp);
40     void GetGammaRamp(D3DGAMMARAMP* pRamp);
41     HRESULT CreateTexture(UINT Width,UINT Height,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DTexture8* ppTexture);
42     HRESULT CreateVolumeTexture(UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DVolumeTexture8* ppVolumeTexture);
43     HRESULT CreateCubeTexture(UINT EdgeLength,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DCubeTexture8* ppCubeTexture);
44     HRESULT CreateVertexBuffer(UINT Length,DWORD Usage,DWORD FVF,D3DPOOL Pool,IDirect3DVertexBuffer8* ppVertexBuffer);
45     HRESULT CreateIndexBuffer(UINT Length,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DIndexBuffer8* ppIndexBuffer);
46     HRESULT CreateRenderTarget(UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,BOOL Lockable,IDirect3DSurface8* ppSurface);
47     HRESULT CreateDepthStencilSurface(UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,IDirect3DSurface8* ppSurface);
48     HRESULT CreateImageSurface(UINT Width,UINT Height,D3DFORMAT Format,IDirect3DSurface8* ppSurface);
49     HRESULT CopyRects(IDirect3DSurface8 pSourceSurface,const(RECT)* pSourceRectsArray,UINT cRects,IDirect3DSurface8 pDestinationSurface,const(POINT)* pDestPointsArray);
50     HRESULT UpdateTexture(IDirect3DBaseTexture8 pSourceTexture,IDirect3DBaseTexture8 pDestinationTexture);
51     HRESULT GetFrontBuffer(IDirect3DSurface8 pDestSurface);
52     HRESULT SetRenderTarget(IDirect3DSurface8 pRenderTarget,IDirect3DSurface8 pNewZStencil);
53     HRESULT GetRenderTarget(IDirect3DSurface8* ppRenderTarget);
54     HRESULT GetDepthStencilSurface(IDirect3DSurface8* ppZStencilSurface);
55     HRESULT BeginScene();
56     HRESULT EndScene();
57     HRESULT Clear(DWORD Count,const(D3DRECT)* pRects,DWORD Flags,D3DCOLOR Color,float Z,DWORD Stencil);
58     HRESULT SetTransform(D3DTRANSFORMSTATETYPE State,const(D3DMATRIX)* pMatrix);
59     HRESULT GetTransform(D3DTRANSFORMSTATETYPE State,D3DMATRIX* pMatrix);
60     HRESULT MultiplyTransform(D3DTRANSFORMSTATETYPE,const(D3DMATRIX)*);
61     HRESULT SetViewport(const(D3DVIEWPORT8)* pViewport);
62     HRESULT GetViewport(D3DVIEWPORT8* pViewport);
63     HRESULT SetMaterial(const(D3DMATERIAL8)* pMaterial);
64     HRESULT GetMaterial(D3DMATERIAL8* pMaterial);
65     HRESULT SetLight(DWORD Index,const(D3DLIGHT8)*);
66     HRESULT GetLight(DWORD Index,D3DLIGHT8*);
67     HRESULT LightEnable(DWORD Index,BOOL Enable);
68     HRESULT GetLightEnable(DWORD Index,BOOL* pEnable);
69     HRESULT SetClipPlane(DWORD Index,const(float)* pPlane);
70     HRESULT GetClipPlane(DWORD Index,float* pPlane);
71     HRESULT SetRenderState(D3DRENDERSTATETYPE State,DWORD Value);
72     HRESULT GetRenderState(D3DRENDERSTATETYPE State,DWORD* pValue);
73     HRESULT BeginStateBlock();
74     HRESULT EndStateBlock(DWORD* pToken);
75     HRESULT ApplyStateBlock(DWORD Token);
76     HRESULT CaptureStateBlock(DWORD Token);
77     HRESULT DeleteStateBlock(DWORD Token);
78     HRESULT CreateStateBlock(D3DSTATEBLOCKTYPE Type,DWORD* pToken);
79     HRESULT SetClipStatus(const(D3DCLIPSTATUS8)* pClipStatus);
80     HRESULT GetClipStatus(D3DCLIPSTATUS8* pClipStatus);
81     HRESULT GetTexture(DWORD Stage,IDirect3DBaseTexture8* ppTexture);
82     HRESULT SetTexture(DWORD Stage,IDirect3DBaseTexture8 pTexture);
83     HRESULT GetTextureStageState(DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD* pValue);
84     HRESULT SetTextureStageState(DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD Value);
85     HRESULT ValidateDevice(DWORD* pNumPasses);
86     HRESULT GetInfo(DWORD DevInfoID,void* pDevInfoStruct,DWORD DevInfoStructSize);
87     HRESULT SetPaletteEntries(UINT PaletteNumber,const(PALETTEENTRY)* pEntries);
88     HRESULT GetPaletteEntries(UINT PaletteNumber,PALETTEENTRY* pEntries);
89     HRESULT SetCurrentTexturePalette(UINT PaletteNumber);
90     HRESULT GetCurrentTexturePalette(UINT *PaletteNumber);
91     HRESULT DrawPrimitive(D3DPRIMITIVETYPE PrimitiveType,UINT StartVertex,UINT PrimitiveCount);
92     HRESULT DrawIndexedPrimitive(D3DPRIMITIVETYPE,UINT minIndex,UINT NumVertices,UINT startIndex,UINT primCount);
93     HRESULT DrawPrimitiveUP(D3DPRIMITIVETYPE PrimitiveType,UINT PrimitiveCount,const(void)* pVertexStreamZeroData,UINT VertexStreamZeroStride);
94     HRESULT DrawIndexedPrimitiveUP(D3DPRIMITIVETYPE PrimitiveType,UINT MinVertexIndex,UINT NumVertexIndices,UINT PrimitiveCount,const(void)* pIndexData,D3DFORMAT IndexDataFormat,const(void)* pVertexStreamZeroData,UINT VertexStreamZeroStride);
95     HRESULT ProcessVertices(UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,IDirect3DVertexBuffer8 pDestBuffer,DWORD Flags);
96     HRESULT CreateVertexShader(const(DWORD)* pDeclaration,const(DWORD)* pFunction,DWORD* pHandle,DWORD Usage);
97     HRESULT SetVertexShader(DWORD Handle);
98     HRESULT GetVertexShader(DWORD* pHandle);
99     HRESULT DeleteVertexShader(DWORD Handle);
100     HRESULT SetVertexShaderConstant(DWORD Register,const(void)* pConstantData,DWORD ConstantCount);
101     HRESULT GetVertexShaderConstant(DWORD Register,void* pConstantData,DWORD ConstantCount);
102     HRESULT GetVertexShaderDeclaration(DWORD Handle,void* pData,DWORD* pSizeOfData);
103     HRESULT GetVertexShaderFunction(DWORD Handle,void* pData,DWORD* pSizeOfData);
104     HRESULT SetStreamSource(UINT StreamNumber,IDirect3DVertexBuffer8 pStreamData,UINT Stride);
105     HRESULT GetStreamSource(UINT StreamNumber,IDirect3DVertexBuffer8* ppStreamData,UINT* pStride);
106     HRESULT SetIndices(IDirect3DIndexBuffer8 pIndexData,UINT BaseVertexIndex);
107     HRESULT GetIndices(IDirect3DIndexBuffer8* ppIndexData,UINT* pBaseVertexIndex);
108     HRESULT CreatePixelShader(const(DWORD)* pFunction,DWORD* pHandle);
109     HRESULT SetPixelShader(DWORD Handle);
110     HRESULT GetPixelShader(DWORD* pHandle);
111     HRESULT DeletePixelShader(DWORD Handle);
112     HRESULT SetPixelShaderConstant(DWORD Register,const(void)* pConstantData,DWORD ConstantCount);
113     HRESULT GetPixelShaderConstant(DWORD Register,void* pConstantData,DWORD ConstantCount);
114     HRESULT GetPixelShaderFunction(DWORD Handle,void* pData,DWORD* pSizeOfData);
115     HRESULT DrawRectPatch(UINT Handle,const(float)* pNumSegs,const(D3DRECTPATCH_INFO)* pRectPatchInfo);
116     HRESULT DrawTriPatch(UINT Handle,const(float)* pNumSegs,const(D3DTRIPATCH_INFO)* pTriPatchInfo);
117     HRESULT DeletePatch(UINT Handle);
118 }
119 
120 extern (C++) interface IDirect3DSwapChain8 : IUnknown {
121     HRESULT Present(const(RECT)* pSourceRect,const(RECT)* pDestRect,HWND hDestWindowOverride,const(RGNDATA)* pDirtyRegion);
122     HRESULT GetBackBuffer(UINT BackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface8* ppBackBuffer);
123 }
124 
125 extern (C++) interface IDirect3DResource8 : IUnknown {
126     HRESULT GetDevice(IDirect3DDevice8* ppDevice);
127     HRESULT SetPrivateData(REFGUID refguid,const(void)* pData,DWORD SizeOfData,DWORD Flags);
128     HRESULT GetPrivateData(REFGUID refguid,void* pData,DWORD* pSizeOfData);
129     HRESULT FreePrivateData(REFGUID refguid);
130     DWORD SetPriority(DWORD PriorityNew);
131     DWORD GetPriority();
132     void PreLoad();
133     D3DRESOURCETYPE GetType();
134 }
135 
136 extern (C++) interface IDirect3DBaseTexture8 : IDirect3DResource8 {
137     DWORD SetLOD(DWORD LODNew);
138     DWORD GetLOD();
139     DWORD GetLevelCount();
140 }
141 
142 extern (C++) interface IDirect3DTexture8 : IDirect3DBaseTexture8 {
143     HRESULT GetLevelDesc(UINT Level,D3DSURFACE_DESC *pDesc);
144     HRESULT GetSurfaceLevel(UINT Level,IDirect3DSurface8* ppSurfaceLevel);
145     HRESULT LockRect(UINT Level,D3DLOCKED_RECT* pLockedRect,const(RECT)* pRect,DWORD Flags);
146     HRESULT UnlockRect(UINT Level);
147     HRESULT AddDirtyRect(const(RECT)* pDirtyRect);
148 }
149 
150 extern (C++) interface IDirect3DVolumeTexture8 : IDirect3DBaseTexture8 {
151     HRESULT GetLevelDesc(UINT Level,D3DVOLUME_DESC *pDesc);
152     HRESULT GetVolumeLevel(UINT Level,IDirect3DVolume8* ppVolumeLevel);
153     HRESULT LockBox(UINT Level,D3DLOCKED_BOX* pLockedVolume,const(D3DBOX)* pBox,DWORD Flags);
154     HRESULT UnlockBox(UINT Level);
155     HRESULT AddDirtyBox(const(D3DBOX)* pDirtyBox);
156 }
157 
158 extern (C++) interface IDirect3DCubeTexture8 : IDirect3DBaseTexture8 {
159     HRESULT GetLevelDesc(UINT Level,D3DSURFACE_DESC *pDesc);
160     HRESULT GetCubeMapSurface(D3DCUBEMAP_FACES FaceType,UINT Level,IDirect3DSurface8* ppCubeMapSurface);
161     HRESULT LockRect(D3DCUBEMAP_FACES FaceType,UINT Level,D3DLOCKED_RECT* pLockedRect,const(RECT)* pRect,DWORD Flags);
162     HRESULT UnlockRect(D3DCUBEMAP_FACES FaceType,UINT Level);
163     HRESULT AddDirtyRect(D3DCUBEMAP_FACES FaceType,const(RECT)* pDirtyRect);
164 }
165 
166 extern (C++) interface IDirect3DVertexBuffer8 : IDirect3DResource8 {}
167 extern (C++) interface IDirect3DIndexBuffer8  : IDirect3DResource8 {}
168 
169 extern (C++) interface IDirect3DSurface8 : IUnknown {
170     HRESULT GetDevice(IDirect3DDevice8* ppDevice);
171     HRESULT SetPrivateData(REFGUID refguid,const(void)* pData,DWORD SizeOfData,DWORD Flags);
172     HRESULT GetPrivateData(REFGUID refguid,void* pData,DWORD* pSizeOfData);
173     HRESULT FreePrivateData(REFGUID refguid);
174     HRESULT GetContainer(REFIID riid,void** ppContainer);
175     HRESULT GetDesc(D3DSURFACE_DESC *pDesc);
176     HRESULT LockRect(D3DLOCKED_RECT* pLockedRect,const(RECT)* pRect,DWORD Flags);
177     HRESULT UnlockRect();
178 }
179 
180 extern (C++) interface IDirect3DVolume8 : IUnknown {
181     HRESULT GetDevice(IDirect3DDevice8* ppDevice);
182     HRESULT SetPrivateData(REFGUID refguid,const(void)* pData,DWORD SizeOfData,DWORD Flags);
183     HRESULT GetPrivateData(REFGUID refguid,void* pData,DWORD* pSizeOfData);
184     HRESULT FreePrivateData(REFGUID refguid);
185     HRESULT GetContainer(REFIID riid,void** ppContainer);
186     HRESULT GetDesc(D3DVOLUME_DESC *pDesc);
187     HRESULT LockBox(D3DLOCKED_BOX * pLockedVolume,const(D3DBOX)* pBox,DWORD Flags);
188     HRESULT UnlockBox();
189 }
190 
191 struct D3DVIEWPORT8 {
192     DWORD       X;
193     DWORD       Y;            /* Viewport Top left */
194     DWORD       Width;
195     DWORD       Height;       /* Viewport Dimensions */
196     float       MinZ;         /* Min/max of clip Volume */
197     float       MaxZ;
198 }
199 
200 struct D3DCLIPSTATUS8 {
201     DWORD ClipUnion;
202     DWORD ClipIntersection;
203 }
204 
205 struct D3DMATERIAL8 {
206     D3DCOLORVALUE   Diffuse;        /* Diffuse color RGBA */
207     D3DCOLORVALUE   Ambient;        /* Ambient color RGB */
208     D3DCOLORVALUE   Specular;       /* Specular 'shininess' */
209     D3DCOLORVALUE   Emissive;       /* Emissive color RGB */
210     float           Power;          /* Sharpness if specular highlight */
211 }
212 
213 struct D3DLIGHT8 {
214     D3DLIGHTTYPE    Type;            /* Type of light source */
215     D3DCOLORVALUE   Diffuse;         /* Diffuse color of light */
216     D3DCOLORVALUE   Specular;        /* Specular color of light */
217     D3DCOLORVALUE   Ambient;         /* Ambient color of light */
218     D3DVECTOR       Position;         /* Position in world space */
219     D3DVECTOR       Direction;        /* Direction in world space */
220     float           Range;            /* Cutoff range */
221     float           Falloff;          /* Falloff */
222     float           Attenuation0;     /* Constant attenuation */
223     float           Attenuation1;     /* Linear attenuation */
224     float           Attenuation2;     /* Quadratic attenuation */
225     float           Theta;            /* Inner angle of spotlight cone */
226     float           Phi;              /* Outer angle of spotlight cone */
227 }
228 
229 __gshared LPDIRECT3DCREATE8 Direct3DCreate8;
230 
231 extern (Windows) {
232     alias LPDIRECT3DCREATE8 = IDirect3D8 function(UINT SDKVersion);
233 }
234 
235 enum D3D_SDK_VERSION = 220;