wined3d: Add IWineD3DDevice_GetBaseVertexIndex to retrieve the base vertex index.
[wine] / include / wine / wined3d_interface.h
1 /*
2  * Direct3D wine internal public interface file
3  *
4  * Copyright 2002-2003 The wine-d3d team
5  * Copyright 2002-2003 Raphael Junqueira
6  * Copyright 2005 Oliver Stieber
7  * Copyright 2006 Stefan Dösinger for CodeWeavers
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22  */
23
24 #ifndef __WINE_WINED3D_INTERFACE_H
25 #define __WINE_WINED3D_INTERFACE_H
26
27 #if !defined( __WINE_CONFIG_H )
28 # error You must include config.h to use this header
29 #endif
30
31 #define COM_NO_WINDOWS_H
32 #include <objbase.h>
33
34 /* Stupid DDraw Struct references surfaces */
35 struct IWineD3DSurface;
36
37 #include "wined3d_types.h"
38 /*****************************************************************
39  * THIS FILE MUST NOT CONTAIN X11 or MESA DEFINES 
40  * PLEASE USE wine/wined3d_gl.h INSTEAD
41  */
42
43 /*****************************************************************************
44  * #defines and error codes
45  */
46 #define _FACWINED3D  0x876
47 #define MAKE_WINED3DHRESULT( code )                 MAKE_HRESULT( 1, _FACWINED3D, code )
48 #define MAKE_WINED3DSTATUS( code )                  MAKE_HRESULT( 0, _FACWINED3D, code )
49
50 /*****************************************************************************
51  * Direct3D Errors
52  */
53 #define WINED3D_OK                                  S_OK
54 #define WINED3DERR_WRONGTEXTUREFORMAT               MAKE_WINED3DHRESULT(2072)
55 #define WINED3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_WINED3DHRESULT(2073)
56 #define WINED3DERR_UNSUPPORTEDCOLORARG              MAKE_WINED3DHRESULT(2074)
57 #define WINED3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_WINED3DHRESULT(2075)
58 #define WINED3DERR_UNSUPPORTEDALPHAARG              MAKE_WINED3DHRESULT(2076)
59 #define WINED3DERR_TOOMANYOPERATIONS                MAKE_WINED3DHRESULT(2077)
60 #define WINED3DERR_CONFLICTINGTEXTUREFILTER         MAKE_WINED3DHRESULT(2078)
61 #define WINED3DERR_UNSUPPORTEDFACTORVALUE           MAKE_WINED3DHRESULT(2079)
62 #define WINED3DERR_CONFLICTINGRENDERSTATE           MAKE_WINED3DHRESULT(2081)
63 #define WINED3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_WINED3DHRESULT(2082)
64 #define WINED3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_WINED3DHRESULT(2086)
65 #define WINED3DERR_DRIVERINTERNALERROR              MAKE_WINED3DHRESULT(2087)
66 #define WINED3DERR_NOTFOUND                         MAKE_WINED3DHRESULT(2150)
67 #define WINED3DERR_MOREDATA                         MAKE_WINED3DHRESULT(2151)
68 #define WINED3DERR_DEVICELOST                       MAKE_WINED3DHRESULT(2152)
69 #define WINED3DERR_DEVICENOTRESET                   MAKE_WINED3DHRESULT(2153)
70 #define WINED3DERR_NOTAVAILABLE                     MAKE_WINED3DHRESULT(2154)
71 #define WINED3DERR_OUTOFVIDEOMEMORY                 MAKE_WINED3DHRESULT(380)
72 #define WINED3DERR_INVALIDDEVICE                    MAKE_WINED3DHRESULT(2155)
73 #define WINED3DERR_INVALIDCALL                      MAKE_WINED3DHRESULT(2156)
74 #define WINED3DERR_DRIVERINVALIDCALL                MAKE_WINED3DHRESULT(2157)
75 #define WINED3DERR_WASSTILLDRAWING                  MAKE_WINED3DHRESULT(540)
76 #define WINEDDERR_NOTAOVERLAYSURFACE                MAKE_WINED3DHRESULT(580)
77 #define WINEDDERR_NODC                              MAKE_WINED3DHRESULT(586)
78 #define WINEDDERR_DCALREADYCREATED                  MAKE_WINED3DHRESULT(620)
79 #define WINEDDERR_NOTFLIPPABLE                      MAKE_WINED3DHRESULT(582)
80 #define WINEDDERR_SURFACEBUSY                       MAKE_WINED3DHRESULT(430)
81 #define WINEDDERR_INVALIDRECT                       MAKE_WINED3DHRESULT(150)
82 #define WINEDDERR_NOCLIPLIST                        MAKE_WINED3DHRESULT(205)
83 #define WINED3DOK_NOAUTOGEN                         MAKE_WINED3DSTATUS(2159)
84
85  /*****************************************************************************
86  * Predeclare the interfaces
87  */
88
89 struct IWineD3D;
90 struct IWineD3DBase;
91 struct IWineD3DDevice;
92 struct IWineD3DPalette;
93 struct IWineD3DResource;
94 struct IWineD3DVertexBuffer;
95 struct IWineD3DIndexBuffer;
96 struct IWineD3DBaseTexture;
97 struct IWineD3DTexture;
98 struct IWineD3DCubeTexture;
99 struct IWineD3DVolumeTexture;
100 struct IWineD3DStateBlock;
101 struct IWineD3DVolume;
102 struct IWineD3DVertexDeclaration;
103 struct IWineD3DBaseShader;
104 struct IWineD3DVertexShader;
105 struct IWineD3DPixelShader;
106 struct IWineD3DQuery;
107 struct IWineD3DSwapChain;
108 struct IWineD3DClipper;
109
110
111 /* {108F9C44-6F30-11d9-C687-00046142C14F} */
112 DEFINE_GUID(IID_IWineD3D, 
113 0x108f9c44, 0x6f30, 0x11d9, 0xc6, 0x87, 0x0, 0x4, 0x61, 0x42, 0xc1, 0x4f);
114
115 DEFINE_GUID(IID_IWineD3DBase,
116 0x46799311, 0x8e0e, 0x40ce, 0xb2, 0xec, 0xdd, 0xb9, 0x9f, 0x18, 0xfc, 0xb4);
117
118 /* {108F9C44-6F30-11d9-C687-00046142C14F} */
119 DEFINE_GUID(IID_IWineD3DDevice, 
120 0x108f9c44, 0x6f30, 0x11d9, 0xc6, 0x87, 0x0, 0x4, 0x61, 0x42, 0xc1, 0x4f);
121
122 /* {f756720c-32b9-4439-b5a3-1d6c97037d9e} */
123 DEFINE_GUID(IID_IWineD3DPalette,
124 0xf756720c, 0x32b9, 0x4439, 0xb5, 0xa3, 0x1d, 0x6c, 0x97, 0x03, 0x7d, 0x9e);
125
126 /* {1F3BFB34-6F30-11d9-C687-00046142C14F} */
127 DEFINE_GUID(IID_IWineD3DResource, 
128 0x1f3bfb34, 0x6f30, 0x11d9, 0xc6, 0x87, 0x0, 0x4, 0x61, 0x42, 0xc1, 0x4f);
129
130 /* {217F671E-6F30-11d9-C687-00046142C14F} */
131 DEFINE_GUID(IID_IWineD3DVertexBuffer, 
132 0x217f671e, 0x6f30, 0x11d9, 0xc6, 0x87, 0x0, 0x4, 0x61, 0x42, 0xc1, 0x4f);
133
134 /* {24769ED8-6F30-11d9-C687-00046142C14F} */
135 DEFINE_GUID(IID_IWineD3DVolume, 
136 0x24769ed8, 0x6f30, 0x11d9, 0xc6, 0x87, 0x0, 0x4, 0x61, 0x42, 0xc1, 0x4f);
137
138
139 /* {34D01B10-6F30-11d9-C687-00046142C14F} */
140 DEFINE_GUID(IID_IWineD3DSwapChain, 
141 0x34d01b10, 0x6f30, 0x11d9, 0xc6, 0x87, 0x0, 0x4, 0x61, 0x42, 0xc1, 0x4f);
142
143 /* {37CD5526-6F30-11d9-C687-00046142C14F} */
144 DEFINE_GUID(IID_IWineD3DSurface, 
145 0x37cd5526, 0x6f30, 0x11d9, 0xc6, 0x87, 0x0, 0x4, 0x61, 0x42, 0xc1, 0x4f);
146
147
148 /* {3A02A54E-6F30-11d9-C687-00046142C14F} */
149 DEFINE_GUID(IID_IWineD3DIndexBuffer, 
150 0x3a02a54e, 0x6f30, 0x11d9, 0xc6, 0x87, 0x0, 0x4, 0x61, 0x42, 0xc1, 0x4f);
151
152 /* {3C2AEBF6-6F30-11d9-C687-00046142C14F} */
153 DEFINE_GUID(IID_IWineD3DBaseTexture, 
154 0x3c2aebf6, 0x6f30, 0x11d9, 0xc6, 0x87, 0x0, 0x4, 0x61, 0x42, 0xc1, 0x4f);
155
156 /* {3E72CC1C-6F30-11d9-C687-00046142C14F} */
157 DEFINE_GUID(IID_IWineD3DTexture, 
158 0x3e72cc1c, 0x6f30, 0x11d9, 0xc6, 0x87, 0x0, 0x4, 0x61, 0x42, 0xc1, 0x4f);
159
160 /* {41752900-6F30-11d9-C687-00046142C14F} */
161 DEFINE_GUID(IID_IWineD3DCubeTexture, 
162 0x41752900, 0x6f30, 0x11d9, 0xc6, 0x87, 0x0, 0x4, 0x61, 0x42, 0xc1, 0x4f);
163
164 /* {7B39470C-6F30-11d9-C687-00046142C14F} */
165 DEFINE_GUID(IID_IWineD3DVolumeTexture, 
166 0x7b39470c, 0x6f30, 0x11d9, 0xc6, 0x87, 0x0, 0x4, 0x61, 0x42, 0xc1, 0x4f);
167
168 /* {7CD55BE6-6F30-11d9-C687-00046142C14F} */
169 DEFINE_GUID(IID_IWineD3DVertexDeclaration, 
170 0x7cd55be6, 0x6f30, 0x11d9, 0xc6, 0x87, 0x0, 0x4, 0x61, 0x42, 0xc1, 0x4f);
171
172 /* {EAC93065-A4DF-446F-86A1-9EF2BCA40A3C} */
173 DEFINE_GUID(IID_IWineD3DBaseShader,
174 0xeac93065, 0xa4df, 0x446f, 0x86, 0xa1, 0x9e, 0xf2, 0xbc, 0xa4, 0x0a, 0x3c);
175
176 /* {7F7A2B60-6F30-11d9-C687-00046142C14F} */
177 DEFINE_GUID(IID_IWineD3DVertexShader, 
178 0x7f7a2b60, 0x6f30, 0x11d9, 0xc6, 0x87, 0x0, 0x4, 0x61, 0x42, 0xc1, 0x4f);
179
180 /* {818503DA-6F30-11d9-C687-00046142C14F} */
181 DEFINE_GUID(IID_IWineD3DPixelShader, 
182 0x818503da, 0x6f30, 0x11d9, 0xc6, 0x87, 0x0, 0x4, 0x61, 0x42, 0xc1, 0x4f);
183
184 /* {83B073CE-6F30-11d9-C687-00046142C14F} */
185 DEFINE_GUID(IID_IWineD3DStateBlock, 
186 0x83b073ce, 0x6f30, 0x11d9, 0xc6, 0x87, 0x0, 0x4, 0x61, 0x42, 0xc1, 0x4f);
187
188 /* {905DDBAC-6F30-11d9-C687-00046142C14F} */
189 DEFINE_GUID(IID_IWineD3DQuery, 
190 0x905ddbac, 0x6f30, 0x11d9, 0xc6, 0x87, 0x0, 0x4, 0x61, 0x42, 0xc1, 0x4f);
191
192 /* {8f2bceb1-d338-488c-ab7f-0ec980bf5d2d} */
193 DEFINE_GUID(IID_IWineD3DClipper,
194 0x8f2bceb1, 0xd338, 0x488c, 0xab, 0x7f, 0x0e, 0xc9, 0x80, 0xbf, 0x5d, 0x2d);
195
196 /*****************************************************************************
197  * Callback functions required for predefining surfaces / stencils
198  */
199 typedef HRESULT WINAPI (*D3DCB_CREATERENDERTARGETFN) (IUnknown *pDevice,
200                                                IUnknown   *pSuperior,
201                                                UINT       Width,
202                                                UINT       Height,
203                                                WINED3DFORMAT  Format,
204                                                WINED3DMULTISAMPLE_TYPE MultiSample, 
205                                                DWORD      MultisampleQuality, 
206                                                BOOL       Lockable, 
207                                                struct IWineD3DSurface **ppSurface,
208                                                HANDLE    *pSharedHandle);
209
210 typedef HRESULT WINAPI (*D3DCB_CREATESURFACEFN) (IUnknown *pDevice,
211                                                IUnknown   *pSuperior,
212                                                UINT       Width,
213                                                UINT       Height,
214                                                WINED3DFORMAT Format,
215                                                DWORD      Usage,
216                                                WINED3DPOOL Pool,            
217                                                UINT       Level,
218                                                WINED3DCUBEMAP_FACES Face,
219                                                struct IWineD3DSurface **ppSurface,
220                                                HANDLE    *pSharedHandle);
221
222 typedef HRESULT WINAPI (*D3DCB_CREATEDEPTHSTENCILSURFACEFN) (IUnknown *pDevice,
223                                                IUnknown   *pSuperior,
224                                                UINT       Width,
225                                                UINT       Height,
226                                                WINED3DFORMAT  Format,
227                                                WINED3DMULTISAMPLE_TYPE MultiSample, 
228                                                DWORD      MultisampleQuality, 
229                                                BOOL       Discard, 
230                                                struct IWineD3DSurface **ppSurface,
231                                                HANDLE    *pSharedHandle);
232
233
234 typedef HRESULT WINAPI (*D3DCB_CREATEVOLUMEFN) (IUnknown *pDevice,
235                                                IUnknown   *pSuperior,
236                                                UINT       Width,
237                                                UINT       Height,
238                                                UINT       Depth,
239                                                WINED3DFORMAT  Format, 
240                                                WINED3DPOOL Pool,
241                                                DWORD      Usage,
242                                                struct IWineD3DVolume **ppVolume,
243                                                HANDLE    *pSharedHandle);
244
245 typedef HRESULT WINAPI (*D3DCB_CREATEADDITIONALSWAPCHAIN) (IUnknown *pDevice,
246                                                WINED3DPRESENT_PARAMETERS *pPresentationParameters,
247                                                struct IWineD3DSwapChain **pSwapChain
248                                                );
249
250 /*****************************************************************************
251  * Callback functions for custom implicit object destruction.
252  */
253 typedef ULONG WINAPI (*D3DCB_DESTROYSWAPCHAINFN) (struct IWineD3DSwapChain *pSwapChain);
254
255 typedef ULONG WINAPI (*D3DCB_DESTROYSURFACEFN) (struct IWineD3DSurface *pSurface);
256
257 typedef ULONG WINAPI (*D3DCB_DESTROYVOLUMEFN) (struct IWineD3DVolume *pVolume);
258
259 /*****************************************************************************
260  * IWineD3DBase interface
261  */
262
263 #define INTERFACE IWineD3DBase
264 DECLARE_INTERFACE_(IWineD3DBase, IUnknown)
265 {
266     /*** IUnknown methods ***/
267     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
268     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
269     STDMETHOD_(ULONG,Release)(THIS) PURE;
270     /*** IWineD3DBase methods ***/
271     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
272 };
273 #undef INTERFACE
274
275 #if !defined(__cplusplus) || defined(CINTERFACE)
276 /*** IUnknown methods ***/
277 #define IWineD3DBase_QueryInterface(p,a,b)                    (p)->lpVtbl->QueryInterface(p,a,b)
278 #define IWineD3DBase_AddRef(p)                                (p)->lpVtbl->AddRef(p)
279 #define IWineD3DBase_Release(p)                               (p)->lpVtbl->Release(p)
280 /*** IWineD3DBase methods ***/
281 #define IWineD3DBase_GetParent(p,a)                           (p)->lpVtbl->GetParent(p,a)
282 #endif
283
284 /*****************************************************************************
285  * IWineD3D interface 
286  */
287
288 #define INTERFACE IWineD3D
289 DECLARE_INTERFACE_(IWineD3D, IWineD3DBase)
290 {
291     /*** IUnknown methods ***/
292     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
293     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
294     STDMETHOD_(ULONG,Release)(THIS) PURE;
295     /*** IWineD3DBase methods ***/
296     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
297     /*** IWineD3D methods ***/
298     STDMETHOD_(UINT,GetAdapterCount)(THIS) PURE;
299     STDMETHOD(RegisterSoftwareDevice)(THIS_ void * pInitializeFunction) PURE;
300     STDMETHOD_(HMONITOR,GetAdapterMonitor)(THIS_ UINT Adapter) PURE;
301     STDMETHOD_(UINT,GetAdapterModeCount)(THIS_ UINT Adapter, WINED3DFORMAT Format) PURE;
302     STDMETHOD(EnumAdapterModes)(THIS_ UINT  Adapter, UINT  Mode, WINED3DFORMAT Format, WINED3DDISPLAYMODE * pMode) PURE;
303     STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT  Adapter, WINED3DDISPLAYMODE *pMode) PURE;
304     STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, WINED3DADAPTER_IDENTIFIER* pIdentifier) PURE;
305     STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT  Adapter, WINED3DDEVTYPE  DeviceType, WINED3DFORMAT  SurfaceFormat, BOOL  Windowed, WINED3DMULTISAMPLE_TYPE  MultiSampleType, DWORD *pQuality) PURE;
306     STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT  Adapter, WINED3DDEVTYPE  DeviceType, WINED3DFORMAT  AdapterFormat, WINED3DFORMAT  RenderTargetFormat, WINED3DFORMAT  DepthStencilFormat) PURE;
307     STDMETHOD(CheckDeviceType)(THIS_ UINT  Adapter, WINED3DDEVTYPE  CheckType, WINED3DFORMAT  DisplayFormat, WINED3DFORMAT  BackBufferFormat, BOOL  Windowed) PURE;
308     STDMETHOD(CheckDeviceFormat)(THIS_ UINT  Adapter, WINED3DDEVTYPE  DeviceType, WINED3DFORMAT  AdapterFormat, DWORD  Usage, WINED3DRESOURCETYPE  RType, WINED3DFORMAT  CheckFormat) PURE;
309     STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, WINED3DDEVTYPE DeviceType, WINED3DFORMAT SourceFormat, WINED3DFORMAT TargetFormat) PURE;
310     STDMETHOD(GetDeviceCaps)(THIS_ UINT  Adapter, WINED3DDEVTYPE  DeviceType, WINED3DCAPS *pCaps) PURE;
311     STDMETHOD(CreateDevice)(THIS_ UINT  Adapter, WINED3DDEVTYPE  DeviceType,HWND  hFocusWindow, DWORD  BehaviorFlags, struct IWineD3DDevice **ppReturnedDeviceInterface, IUnknown *parent) PURE;
312
313 };
314 #undef INTERFACE
315
316 #if !defined(__cplusplus) || defined(CINTERFACE)
317 /*** IUnknown methods ***/
318 #define IWineD3D_QueryInterface(p,a,b)                    (p)->lpVtbl->QueryInterface(p,a,b)
319 #define IWineD3D_AddRef(p)                                (p)->lpVtbl->AddRef(p)
320 #define IWineD3D_Release(p)                               (p)->lpVtbl->Release(p)
321 /*** IWineD3DBase methods ***/
322 #define IWineD3D_GetParent(p,a)                           (p)->lpVtbl->GetParent(p,a)
323 /*** IWineD3D methods ***/
324 #define IWineD3D_GetAdapterCount(p)                       (p)->lpVtbl->GetAdapterCount(p)
325 #define IWineD3D_RegisterSoftwareDevice(p,a)              (p)->lpVtbl->RegisterSoftwareDevice(p,a)
326 #define IWineD3D_GetAdapterMonitor(p,a)                   (p)->lpVtbl->GetAdapterMonitor(p,a)
327 #define IWineD3D_GetAdapterModeCount(p,a,b)               (p)->lpVtbl->GetAdapterModeCount(p,a,b)
328 #define IWineD3D_EnumAdapterModes(p,a,b,c,d)              (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)
329 #define IWineD3D_GetAdapterDisplayMode(p,a,b)             (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)
330 #define IWineD3D_GetAdapterIdentifier(p,a,b,c)            (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
331 #define IWineD3D_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)
332 #define IWineD3D_CheckDepthStencilMatch(p,a,b,c,d,e)      (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)
333 #define IWineD3D_CheckDeviceType(p,a,b,c,d,e)             (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)
334 #define IWineD3D_CheckDeviceFormat(p,a,b,c,d,e,f)         (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)
335 #define IWineD3D_CheckDeviceFormatConversion(p,a,b,c,d)   (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)
336 #define IWineD3D_GetDeviceCaps(p,a,b,c)                   (p)->lpVtbl->GetDeviceCaps(p,a,b,c)
337 #define IWineD3D_CreateDevice(p,a,b,c,d,e,f)              (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)
338 #endif
339
340 /* Define the main WineD3D entrypoint */
341 IWineD3D* WINAPI WineDirect3DCreate(UINT SDKVersion, UINT dxVersion, IUnknown *parent);
342
343 /*****************************************************************************
344  * IWineD3DDevice interface 
345  */
346 #define INTERFACE IWineD3DDevice
347 DECLARE_INTERFACE_(IWineD3DDevice,IWineD3DBase) 
348
349     /*** IUnknown methods ***/
350     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
351     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
352     STDMETHOD_(ULONG,Release)(THIS) PURE;
353     /*** IWineD3DBase methods ***/
354     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
355     /*** IWineD3DDevice methods ***/
356     STDMETHOD(CreateVertexBuffer)(THIS_ UINT  Length,DWORD  Usage,DWORD  FVF,WINED3DPOOL  Pool,struct IWineD3DVertexBuffer **ppVertexBuffer, HANDLE *sharedHandle, IUnknown *parent) PURE;
357     STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, WINED3DFORMAT Format, WINED3DPOOL Pool, struct IWineD3DIndexBuffer** ppIndexBuffer, HANDLE* pSharedHandle, IUnknown *parent) PURE;
358     STDMETHOD(CreateStateBlock)(THIS_ WINED3DSTATEBLOCKTYPE Type, struct IWineD3DStateBlock **ppStateBlock, IUnknown *parent) PURE;
359     STDMETHOD(CreateSurface)(THIS_ UINT Width, UINT Height, WINED3DFORMAT Format,  BOOL Lockable, BOOL Discard, UINT Level,  struct IWineD3DSurface** ppSurface, WINED3DRESOURCETYPE Type, DWORD Usage, WINED3DPOOL Pool, WINED3DMULTISAMPLE_TYPE MultiSample ,DWORD MultisampleQuality,  HANDLE* pSharedHandle, WINED3DSURFTYPE Impl, IUnknown *parent) PURE;    
360     STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, WINED3DFORMAT Format, WINED3DPOOL Pool, struct IWineD3DTexture** ppTexture, HANDLE* pSharedHandle, IUnknown *parent, D3DCB_CREATESURFACEFN pFn) PURE;
361     STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, WINED3DFORMAT Format, WINED3DPOOL Pool, struct IWineD3DVolumeTexture** ppVolumeTexture, HANDLE* pSharedHandle, IUnknown *parent, D3DCB_CREATEVOLUMEFN pFn) PURE;
362     STDMETHOD(CreateVolume)(THIS_ UINT Width, UINT Height, UINT Depth, DWORD Usage, WINED3DFORMAT Format, WINED3DPOOL Pool, struct IWineD3DVolume** ppVolumeTexture, HANDLE* pSharedHandle, IUnknown *parent) PURE;
363     STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, WINED3DFORMAT Format, WINED3DPOOL Pool, struct IWineD3DCubeTexture** ppCubeTexture, HANDLE* pSharedHandle, IUnknown *parent, D3DCB_CREATESURFACEFN pFn) PURE;
364     STDMETHOD(CreateQuery)(THIS_ WINED3DQUERYTYPE Type, struct IWineD3DQuery **ppQuery, IUnknown *pParent);
365     STDMETHOD(CreateAdditionalSwapChain)(THIS_ WINED3DPRESENT_PARAMETERS *pPresentationParameters, struct IWineD3DSwapChain **pSwapChain, IUnknown *pParent, D3DCB_CREATERENDERTARGETFN pFn, D3DCB_CREATEDEPTHSTENCILSURFACEFN pFn2);
366     STDMETHOD(CreateVertexDeclaration)(THIS_ struct IWineD3DVertexDeclaration** ppDecl, IUnknown* pParent, const WINED3DVERTEXELEMENT *elements, size_t element_count) PURE;
367     STDMETHOD(CreateVertexDeclarationFromFVF)(THIS_ struct IWineD3DVertexDeclaration** ppDecl, IUnknown* pParent, DWORD Fvf) PURE;
368     STDMETHOD(CreateVertexShader)(THIS_ struct IWineD3DVertexDeclaration *vertex_declaration, CONST DWORD* pFunction, struct IWineD3DVertexShader** ppShader, IUnknown *pParent) PURE;
369     STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction, struct IWineD3DPixelShader** ppShader, IUnknown *pParent) PURE;
370     STDMETHOD_(HRESULT,CreatePalette)(THIS_ DWORD Flags, PALETTEENTRY *PalEnt, struct IWineD3DPalette **Palette, IUnknown *Parent);
371     STDMETHOD(Init3D)(THIS_ WINED3DPRESENT_PARAMETERS* pPresentationParameters, D3DCB_CREATEADDITIONALSWAPCHAIN D3DCB_CreateAdditionalSwapChain);
372     STDMETHOD(Uninit3D)(THIS, D3DCB_DESTROYSURFACEFN pFn, D3DCB_DESTROYSWAPCHAINFN pFn2);
373     STDMETHOD_(void, SetFullscreen)(THIS_ BOOL fullscreen);
374     STDMETHOD_(void, SetMultithreaded)(THIS);
375     STDMETHOD(EvictManagedResources)(THIS) PURE;
376     STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;
377     STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT BackBuffer, WINED3DBACKBUFFER_TYPE, struct IWineD3DSurface** ppBackBuffer) PURE;
378     STDMETHOD(GetCreationParameters)(THIS_ WINED3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;
379     STDMETHOD(GetDeviceCaps)(THIS_ WINED3DCAPS* pCaps) PURE;
380     STDMETHOD(GetDirect3D)(THIS_ IWineD3D** ppD3D) PURE;
381     STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, WINED3DDISPLAYMODE* pMode) PURE;
382     STDMETHOD(SetDisplayMode)(THIS_ UINT iSwapChain, WINED3DDISPLAYMODE* pMode) PURE;
383     STDMETHOD(GetHWND)(THIS_ HWND *hwnd) PURE;
384     STDMETHOD(SetHWND)(THIS_ HWND hwnd) PURE;
385     STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;
386     STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, WINED3DRASTER_STATUS* pRasterStatus) PURE;
387     STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, struct IWineD3DSwapChain **pSwapChain) PURE;
388     STDMETHOD(Reset)(THIS_ WINED3DPRESENT_PARAMETERS* pPresentationParameters) PURE;
389     STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE;
390     STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, struct IWineD3DSurface* pCursorBitmap) PURE;
391     STDMETHOD_(void, SetCursorPosition)(THIS_ int XScreenSpace, int YScreenSpace, DWORD Flags) PURE;
392     STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;
393     STDMETHOD(TestCooperativeLevel)(THIS) PURE;
394     STDMETHOD(SetClipPlane)(THIS_ DWORD  Index,CONST float * pPlane) PURE;
395     STDMETHOD(GetClipPlane)(THIS_ DWORD  Index,float * pPlane) PURE;
396     STDMETHOD(SetClipStatus)(THIS_ CONST WINED3DCLIPSTATUS * pClipStatus) PURE;
397     STDMETHOD(GetClipStatus)(THIS_ WINED3DCLIPSTATUS * pClipStatus) PURE;
398     STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;
399     STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;
400     STDMETHOD(SetDepthStencilSurface)(THIS_ struct IWineD3DSurface* pNewZStencil) PURE;
401     STDMETHOD(GetDepthStencilSurface)(THIS_ struct IWineD3DSurface** ppZStencilSurface) PURE;
402     STDMETHOD(SetFVF)(THIS_ DWORD  fvf) PURE;
403     STDMETHOD(GetFVF)(THIS_ DWORD * pfvf) PURE;
404     STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain, DWORD Flags, CONST WINED3DGAMMARAMP* pRamp) PURE;
405     STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, WINED3DGAMMARAMP* pRamp) PURE;
406     STDMETHOD(SetIndices)(THIS_ struct IWineD3DIndexBuffer * pIndexData) PURE;
407     STDMETHOD(GetIndices)(THIS_ struct IWineD3DIndexBuffer ** ppIndexData,UINT * pBaseVertexIndex) PURE;
408     STDMETHOD(SetBaseVertexIndex)(THIS_ UINT baseIndex);
409     STDMETHOD(GetBaseVertexIndex)(THIS_ UINT *baseIndex);
410     STDMETHOD(SetLight)(THIS_ DWORD  Index,CONST WINED3DLIGHT * pLight) PURE;
411     STDMETHOD(GetLight)(THIS_ DWORD  Index,WINED3DLIGHT * pLight) PURE;
412     STDMETHOD(SetLightEnable)(THIS_ DWORD  Index,BOOL  Enable) PURE;
413     STDMETHOD(GetLightEnable)(THIS_ DWORD  Index,BOOL * pEnable) PURE;
414     STDMETHOD(SetMaterial)(THIS_ CONST WINED3DMATERIAL * pMaterial) PURE;
415     STDMETHOD(GetMaterial)(THIS_ WINED3DMATERIAL *pMaterial) PURE;
416     STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE;
417     STDMETHOD_(float, GetNPatchMode)(THIS) PURE;
418     STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber, CONST PALETTEENTRY* pEntries) PURE;
419     STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;
420     STDMETHOD(SetPixelShader)(THIS_ struct IWineD3DPixelShader  *pShader) PURE;
421     STDMETHOD(GetPixelShader)(THIS_ struct IWineD3DPixelShader **ppShader) PURE;
422     STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT  BoolCount) PURE;
423     STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
424     STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;
425     STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
426     STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;
427     STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
428     STDMETHOD(SetRenderState)(THIS_ WINED3DRENDERSTATETYPE  State, DWORD  Value) PURE;
429     STDMETHOD(GetRenderState)(THIS_ WINED3DRENDERSTATETYPE  State, DWORD * pValue) PURE;
430     STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, struct IWineD3DSurface* pRenderTarget) PURE;
431     STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, struct IWineD3DSurface** ppRenderTarget) PURE;
432     STDMETHOD(SetFrontBackBuffers)(THIS_ struct IWineD3DSurface *Front, struct IWineD3DSurface *Back) PURE;
433     STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, WINED3DSAMPLERSTATETYPE Type, DWORD Value) PURE;
434     STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, WINED3DSAMPLERSTATETYPE Type, DWORD* Value) PURE;
435     STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE;
436     STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE;
437     STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE;
438     STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;
439     STDMETHOD(SetStreamSource)(THIS_ UINT  StreamNumber,struct IWineD3DVertexBuffer * pStreamData,UINT Offset,UINT  Stride) PURE;
440     STDMETHOD(GetStreamSource)(THIS_ UINT  StreamNumber,struct IWineD3DVertexBuffer ** ppStreamData,UINT *pOffset, UINT * pStride) PURE;
441     STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE;
442     STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE;
443     STDMETHOD(SetTexture)(THIS_ DWORD Stage, struct IWineD3DBaseTexture* pTexture) PURE;
444     STDMETHOD(GetTexture)(THIS_ DWORD Stage, struct IWineD3DBaseTexture** ppTexture) PURE;
445     STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, WINED3DTEXTURESTAGESTATETYPE Type,DWORD Value) PURE;
446     STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, WINED3DTEXTURESTAGESTATETYPE Type,DWORD *pValue) PURE;
447     STDMETHOD(SetTransform)(THIS_ WINED3DTRANSFORMSTATETYPE  State, CONST WINED3DMATRIX * pMatrix) PURE;
448     STDMETHOD(GetTransform)(THIS_ WINED3DTRANSFORMSTATETYPE  State, WINED3DMATRIX * pMatrix) PURE;
449     STDMETHOD(SetVertexDeclaration)(THIS_ struct IWineD3DVertexDeclaration* pDecl) PURE;
450     STDMETHOD(GetVertexDeclaration)(THIS_ struct IWineD3DVertexDeclaration** ppDecl) PURE;
451     STDMETHOD(SetVertexShader)(THIS_ struct IWineD3DVertexShader* pShader) PURE;
452     STDMETHOD(GetVertexShader)(THIS_ struct IWineD3DVertexShader** ppShader) PURE;
453     STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL*  pConstantData, UINT BoolCount) PURE;
454     STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL*        pConstantData, UINT BoolCount) PURE;
455     STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister, CONST int*   pConstantData, UINT Vector4iCount) PURE;
456     STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int*         pConstantData, UINT Vector4iCount) PURE;
457     STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;
458     STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float*       pConstantData, UINT Vector4fCount) PURE;
459     STDMETHOD(SetViewport)(THIS_ CONST WINED3DVIEWPORT * pViewport) PURE;
460     STDMETHOD(GetViewport)(THIS_ WINED3DVIEWPORT * pViewport) PURE;
461     STDMETHOD(MultiplyTransform)(THIS_ WINED3DTRANSFORMSTATETYPE  State, CONST WINED3DMATRIX * pMatrix) PURE;
462     STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;
463     STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, struct IWineD3DVertexBuffer* pDestBuffer, struct IWineD3DVertexDeclaration* pVertexDecl, DWORD Flags) PURE;
464     STDMETHOD(BeginStateBlock)(THIS) PURE;
465     STDMETHOD(EndStateBlock)(THIS_ struct IWineD3DStateBlock** ppStateBlock) PURE;
466     STDMETHOD(BeginScene)(THIS) PURE;
467     STDMETHOD(EndScene)(THIS) PURE;
468     STDMETHOD(Present)(THIS_ CONST RECT * pSourceRect,CONST RECT * pDestRect,HWND  hDestWindowOverride,CONST RGNDATA * pDirtyRegion) PURE;
469     STDMETHOD(Clear)(THIS_ DWORD Count, CONST WINED3DRECT * pRects, DWORD Flags, WINED3DCOLOR Color, float Z, DWORD Stencil) PURE;
470     STDMETHOD(DrawPrimitive)(THIS_ WINED3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE;
471     STDMETHOD(DrawIndexedPrimitive)(THIS_ WINED3DPRIMITIVETYPE PrimitiveType, UINT minIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE;
472     STDMETHOD(DrawPrimitiveUP)(THIS_ WINED3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void * pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;
473     STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ WINED3DPRIMITIVETYPE PrimitiveType, UINT MinVertexIndex, UINT NumVertexIndices, UINT PrimitiveCount, CONST void * pIndexData, WINED3DFORMAT IndexDataFormat, CONST void * pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;
474     STDMETHOD(DrawPrimitiveStrided)(THIS_ WINED3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, WineDirect3DVertexStridedData *DrawPrimStrideData) PURE;
475     STDMETHOD(DrawRectPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST WINED3DRECTPATCH_INFO* pRectPatchInfo) PURE;
476     STDMETHOD(DrawTriPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST WINED3DTRIPATCH_INFO* pTriPatchInfo) PURE;
477     STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;
478     STDMETHOD(ColorFill)(THIS_ struct IWineD3DSurface* pSurface, CONST WINED3DRECT* pRect, WINED3DCOLOR color) PURE;
479     STDMETHOD(UpdateTexture)(THIS_ struct IWineD3DBaseTexture *pSourceTexture, struct IWineD3DBaseTexture *pDestinationTexture) PURE;
480     STDMETHOD(UpdateSurface)(THIS_ struct IWineD3DSurface* pSourceSurface, CONST RECT* pSourceRect, struct IWineD3DSurface* pDestinationSurface, CONST POINT* pDestPoint) PURE;
481     STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain,struct IWineD3DSurface* pSurface) PURE;
482     /*** object tracking ***/
483     STDMETHOD_(void, ResourceReleased)(THIS_ struct IWineD3DResource *resource);
484 };
485 #undef INTERFACE
486
487 #if !defined(__cplusplus) || defined(CINTERFACE)
488 /*** IUnknown methods ***/
489 #define IWineD3DDevice_QueryInterface(p,a,b)             (p)->lpVtbl->QueryInterface(p,a,b)
490 #define IWineD3DDevice_AddRef(p)                         (p)->lpVtbl->AddRef(p)
491 #define IWineD3DDevice_Release(p)                        (p)->lpVtbl->Release(p)
492 /*** IWineD3DBase methods ***/
493 #define IWineD3DDevice_GetParent(p,a)                           (p)->lpVtbl->GetParent(p,a)
494 /*** IWineD3DDevice methods ***/
495 #define IWineD3DDevice_CreateVertexBuffer(p,a,b,c,d,e,f,g)      (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f,g)
496 #define IWineD3DDevice_CreateIndexBuffer(p,a,b,c,d,e,f,g)       (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f,g)
497 #define IWineD3DDevice_CreateStateBlock(p,a,b,c)                (p)->lpVtbl->CreateStateBlock(p,a,b,c)
498 #define IWineD3DDevice_CreateSurface(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)      (p)->lpVtbl->CreateSurface(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)
499 #define IWineD3DDevice_CreateTexture(p,a,b,c,d,e,f,g,h,i,j)     (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h,i,j)
500 #define IWineD3DDevice_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i,j,k)    (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i,j,k)
501 #define IWineD3DDevice_CreateVolume(p,a,b,c,d,e,f,g,h,i)        (p)->lpVtbl->CreateVolume(p,a,b,c,d,e,f,g,h,i)
502 #define IWineD3DDevice_CreateCubeTexture(p,a,b,c,d,e,f,g,h,i)   (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g,h,i)
503 #define IWineD3DDevice_CreateQuery(p,a,b,c)                     (p)->lpVtbl->CreateQuery(p,a,b,c)
504 #define IWineD3DDevice_CreateAdditionalSwapChain(p,a,b,c,d,e)   (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b,c,d,e)
505 #define IWineD3DDevice_CreateVertexDeclaration(p,a,b,c,d)       (p)->lpVtbl->CreateVertexDeclaration(p,a,b,c,d)
506 #define IWineD3DDevice_CreateVertexDeclarationFromFVF(p,a,b,c)  (p)->lpVtbl->CreateVertexDeclarationFromFVF(p,a,b,c)
507 #define IWineD3DDevice_CreateVertexShader(p,a,b,c,d)            (p)->lpVtbl->CreateVertexShader(p,a,b,c,d)
508 #define IWineD3DDevice_CreatePixelShader(p,a,b,c)               (p)->lpVtbl->CreatePixelShader(p,a,b,c)
509 #define IWineD3DDevice_CreatePalette(p, a, b, c, d)             (p)->lpVtbl->CreatePalette(p, a, b, c, d)
510 #define IWineD3DDevice_Init3D(p, a, b)                          (p)->lpVtbl->Init3D(p, a, b)
511 #define IWineD3DDevice_Uninit3D(p, a, b)                        (p)->lpVtbl->Uninit3D(p, a, b)
512 #define IWineD3DDevice_SetFullscreen(p, a)                      (p)->lpVtbl->SetFullscreen(p, a)
513 #define IWineD3DDevice_SetMultithreaded(p)                      (p)->lpVtbl->SetMultithreaded(p)
514 #define IWineD3DDevice_EvictManagedResources(p)                 (p)->lpVtbl->EvictManagedResources(p)
515 #define IWineD3DDevice_GetAvailableTextureMem(p)                (p)->lpVtbl->GetAvailableTextureMem(p)
516 #define IWineD3DDevice_GetBackBuffer(p,a,b,c,d)                 (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)
517 #define IWineD3DDevice_GetCreationParameters(p,a)               (p)->lpVtbl->GetCreationParameters(p,a)
518 #define IWineD3DDevice_GetDeviceCaps(p,a)                       (p)->lpVtbl->GetDeviceCaps(p,a)
519 #define IWineD3DDevice_GetDirect3D(p,a)                         (p)->lpVtbl->GetDirect3D(p,a)
520 #define IWineD3DDevice_GetDisplayMode(p,a,b)                    (p)->lpVtbl->GetDisplayMode(p,a,b)
521 #define IWineD3DDevice_SetDisplayMode(p,a,b)                    (p)->lpVtbl->SetDisplayMode(p,a,b)
522 #define IWineD3DDevice_GetHWND(p, a)                            (p)->lpVtbl->GetHWND(p, a)
523 #define IWineD3DDevice_SetHWND(p, a)                            (p)->lpVtbl->SetHWND(p, a)
524 #define IWineD3DDevice_GetNumberOfSwapChains(p)                 (p)->lpVtbl->GetNumberOfSwapChains(p)
525 #define IWineD3DDevice_Reset(p,a)                               (p)->lpVtbl->Reset(p,a)
526 #define IWineD3DDevice_SetDialogBoxMode(p,a)                    (p)->lpVtbl->SetDialogBoxMode(p,a)
527 #define IWineD3DDevice_SetCursorProperties(p,a,b,c)             (p)->lpVtbl->SetCursorProperties(p,a,b,c)
528 #define IWineD3DDevice_SetCursorPosition(p,a,b,c)               (p)->lpVtbl->SetCursorPosition(p,a,b,c)
529 #define IWineD3DDevice_ShowCursor(p,a)                          (p)->lpVtbl->ShowCursor(p,a)
530 #define IWineD3DDevice_TestCooperativeLevel(p)                  (p)->lpVtbl->TestCooperativeLevel(p)
531 #define IWineD3DDevice_SetFVF(p,a)                              (p)->lpVtbl->SetFVF(p,a)
532 #define IWineD3DDevice_GetFVF(p,a)                              (p)->lpVtbl->GetFVF(p,a)
533 #define IWineD3DDevice_SetClipPlane(p,a,b)                      (p)->lpVtbl->SetClipPlane(p,a,b)
534 #define IWineD3DDevice_GetClipPlane(p,a,b)                      (p)->lpVtbl->GetClipPlane(p,a,b)
535 #define IWineD3DDevice_SetClipStatus(p,a)                       (p)->lpVtbl->SetClipStatus(p,a)
536 #define IWineD3DDevice_GetClipStatus(p,a)                       (p)->lpVtbl->GetClipStatus(p,a)
537 #define IWineD3DDevice_SetCurrentTexturePalette(p,a)            (p)->lpVtbl->SetCurrentTexturePalette(p,a)
538 #define IWineD3DDevice_GetCurrentTexturePalette(p,a)            (p)->lpVtbl->GetCurrentTexturePalette(p,a)
539 #define IWineD3DDevice_SetDepthStencilSurface(p,a)              (p)->lpVtbl->SetDepthStencilSurface(p,a)
540 #define IWineD3DDevice_GetDepthStencilSurface(p,a)              (p)->lpVtbl->GetDepthStencilSurface(p,a)
541 #define IWineD3DDevice_SetGammaRamp(p,a,b,c)                    (p)->lpVtbl->SetGammaRamp(p,a,b,c)
542 #define IWineD3DDevice_GetGammaRamp(p,a,b)                      (p)->lpVtbl->GetGammaRamp(p,a,b)
543 #define IWineD3DDevice_SetIndices(p,a)                          (p)->lpVtbl->SetIndices(p,a)
544 #define IWineD3DDevice_GetIndices(p,a,b)                        (p)->lpVtbl->GetIndices(p,a,b)
545 #define IWineD3DDevice_SetBaseVertexIndex(p, a)                 (p)->lpVtbl->SetBaseVertexIndex(p, a)
546 #define IWineD3DDevice_GetBaseVertexIndex(p,a)                  (p)->lpVtbl->GetBaseVertexIndex(p,a)
547 #define IWineD3DDevice_SetLight(p,a,b)                          (p)->lpVtbl->SetLight(p,a,b)
548 #define IWineD3DDevice_GetLight(p,a,b)                          (p)->lpVtbl->GetLight(p,a,b)
549 #define IWineD3DDevice_SetLightEnable(p,a,b)                    (p)->lpVtbl->SetLightEnable(p,a,b)
550 #define IWineD3DDevice_GetLightEnable(p,a,b)                    (p)->lpVtbl->GetLightEnable(p,a,b)
551 #define IWineD3DDevice_SetMaterial(p,a)                         (p)->lpVtbl->SetMaterial(p,a)
552 #define IWineD3DDevice_GetMaterial(p,a)                         (p)->lpVtbl->GetMaterial(p,a)
553 #define IWineD3DDevice_SetNPatchMode(p,a)                       (p)->lpVtbl->SetNPatchMode(p,a)
554 #define IWineD3DDevice_GetNPatchMode(p)                         (p)->lpVtbl->GetNPatchMode(p)
555 #define IWineD3DDevice_SetPaletteEntries(p,a,b)                 (p)->lpVtbl->SetPaletteEntries(p,a,b)
556 #define IWineD3DDevice_GetPaletteEntries(p,a,b)                 (p)->lpVtbl->GetPaletteEntries(p,a,b)
557 #define IWineD3DDevice_SetPixelShader(p,a)                      (p)->lpVtbl->SetPixelShader(p,a)
558 #define IWineD3DDevice_GetPixelShader(p,a)                      (p)->lpVtbl->GetPixelShader(p,a)
559 #define IWineD3DDevice_SetPixelShaderConstantB(p,a,b,c)         (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)
560 #define IWineD3DDevice_GetPixelShaderConstantB(p,a,b,c)         (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)
561 #define IWineD3DDevice_SetPixelShaderConstantI(p,a,b,c)         (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)
562 #define IWineD3DDevice_GetPixelShaderConstantI(p,a,b,c)         (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)
563 #define IWineD3DDevice_SetPixelShaderConstantF(p,a,b,c)         (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)
564 #define IWineD3DDevice_GetPixelShaderConstantF(p,a,b,c)         (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)
565 #define IWineD3DDevice_GetRasterStatus(p,a,b)                   (p)->lpVtbl->GetRasterStatus(p,a,b)
566 #define IWineD3DDevice_SetRenderState(p,a,b)                    (p)->lpVtbl->SetRenderState(p,a,b)
567 #define IWineD3DDevice_GetRenderState(p,a,b)                    (p)->lpVtbl->GetRenderState(p,a,b)
568 #define IWineD3DDevice_SetRenderTarget(p,a,b)                   (p)->lpVtbl->SetRenderTarget(p,a,b)
569 #define IWineD3DDevice_GetRenderTarget(p,a,b)                   (p)->lpVtbl->GetRenderTarget(p,a,b)
570 #define IWineD3DDevice_SetFrontBackBuffers(p, a, b)             (p)->lpVtbl->SetFrontBackBuffers(p,a,b);
571 #define IWineD3DDevice_SetSamplerState(p,a,b,c)                 (p)->lpVtbl->SetSamplerState(p,a,b,c)
572 #define IWineD3DDevice_GetSamplerState(p,a,b,c)                 (p)->lpVtbl->GetSamplerState(p,a,b,c)
573 #define IWineD3DDevice_SetScissorRect(p,a)                      (p)->lpVtbl->SetScissorRect(p,a)
574 #define IWineD3DDevice_GetScissorRect(p,a)                      (p)->lpVtbl->GetScissorRect(p,a)
575 #define IWineD3DDevice_SetSoftwareVertexProcessing(p,a)         (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)
576 #define IWineD3DDevice_GetSoftwareVertexProcessing(p)           (p)->lpVtbl->GetSoftwareVertexProcessing(p)
577 #define IWineD3DDevice_SetStreamSource(p,a,b,c,d)               (p)->lpVtbl->SetStreamSource(p,a,b,c,d)
578 #define IWineD3DDevice_GetStreamSource(p,a,b,c,d)               (p)->lpVtbl->GetStreamSource(p,a,b,c,d)
579 #define IWineD3DDevice_SetStreamSourceFreq(p,a,b)               (p)->lpVtbl->SetStreamSourceFreq(p,a,b)
580 #define IWineD3DDevice_GetStreamSourceFreq(p,a,b)               (p)->lpVtbl->GetStreamSourceFreq(p,a,b)
581 #define IWineD3DDevice_GetSwapChain(p,a,b)                      (p)->lpVtbl->GetSwapChain(p,a,b)
582 #define IWineD3DDevice_SetTextureStageState(p,a,b,c)            (p)->lpVtbl->SetTextureStageState(p,a,b,c)
583 #define IWineD3DDevice_GetTextureStageState(p,a,b,c)            (p)->lpVtbl->GetTextureStageState(p,a,b,c)
584 #define IWineD3DDevice_SetTexture(p,a,b)                        (p)->lpVtbl->SetTexture(p,a,b)
585 #define IWineD3DDevice_GetTexture(p,a,b)                        (p)->lpVtbl->GetTexture(p,a,b)
586 #define IWineD3DDevice_SetTransform(p,a,b)                      (p)->lpVtbl->SetTransform(p,a,b)
587 #define IWineD3DDevice_GetTransform(p,a,b)                      (p)->lpVtbl->GetTransform(p,a,b)
588 #define IWineD3DDevice_SetVertexDeclaration(p,a)                (p)->lpVtbl->SetVertexDeclaration(p,a)
589 #define IWineD3DDevice_GetVertexDeclaration(p,a)                (p)->lpVtbl->GetVertexDeclaration(p,a)
590 #define IWineD3DDevice_SetVertexShader(p,a)                     (p)->lpVtbl->SetVertexShader(p,a)
591 #define IWineD3DDevice_GetVertexShader(p,a)                     (p)->lpVtbl->GetVertexShader(p,a)
592 #define IWineD3DDevice_SetVertexShaderConstantB(p,a,b,c)        (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)
593 #define IWineD3DDevice_GetVertexShaderConstantB(p,a,b,c)        (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)
594 #define IWineD3DDevice_SetVertexShaderConstantI(p,a,b,c)        (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)
595 #define IWineD3DDevice_GetVertexShaderConstantI(p,a,b,c)        (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)
596 #define IWineD3DDevice_SetVertexShaderConstantF(p,a,b,c)        (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)
597 #define IWineD3DDevice_GetVertexShaderConstantF(p,a,b,c)        (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)
598 #define IWineD3DDevice_SetViewport(p,a)                         (p)->lpVtbl->SetViewport(p,a)
599 #define IWineD3DDevice_GetViewport(p,a)                         (p)->lpVtbl->GetViewport(p,a)
600 #define IWineD3DDevice_MultiplyTransform(p,a,b)                 (p)->lpVtbl->MultiplyTransform(p,a,b)
601 #define IWineD3DDevice_ValidateDevice(p,a)                      (p)->lpVtbl->ValidateDevice(p,a)
602 #define IWineD3DDevice_ProcessVertices(p,a,b,c,d,e,f)           (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)
603 #define IWineD3DDevice_BeginStateBlock(p)                       (p)->lpVtbl->BeginStateBlock(p)
604 #define IWineD3DDevice_EndStateBlock(p,a)                       (p)->lpVtbl->EndStateBlock(p,a)
605 #define IWineD3DDevice_BeginScene(p)                            (p)->lpVtbl->BeginScene(p)
606 #define IWineD3DDevice_EndScene(p)                              (p)->lpVtbl->EndScene(p)
607 #define IWineD3DDevice_Present(p,a,b,c,d)                       (p)->lpVtbl->Present(p,a,b,c,d)
608 #define IWineD3DDevice_Clear(p,a,b,c,d,e,f)                     (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
609 #define IWineD3DDevice_DrawPrimitive(p,a,b,c)                   (p)->lpVtbl->DrawPrimitive(p,a,b,c)
610 #define IWineD3DDevice_DrawIndexedPrimitive(p,a,b,c,d,e)        (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e)
611 #define IWineD3DDevice_DrawPrimitiveUP(p,a,b,c,d)               (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
612 #define IWineD3DDevice_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
613 #define IWineD3DDevice_DrawPrimitiveStrided(p,a,b,c)            (p)->lpVtbl->DrawPrimitiveStrided(p,a,b,c)
614 #define IWineD3DDevice_DrawRectPatch(p,a,b,c)                   (p)->lpVtbl->DrawRectPatch(p,a,b,c)
615 #define IWineD3DDevice_DrawTriPatch(p,a,b,c)                    (p)->lpVtbl->DrawTriPatch(p,a,b,c)
616 #define IWineD3DDevice_DeletePatch(p,a)                         (p)->lpVtbl->DeletePatch(p,a)
617 #define IWineD3DDevice_ColorFill(p,a,b,c)                       (p)->lpVtbl->ColorFill(p,a,b,c)
618 #define IWineD3DDevice_UpdateTexture(p,a,b)                     (p)->lpVtbl->UpdateTexture(p,a,b)
619 #define IWineD3DDevice_UpdateSurface(p,a,b,c,d)                 (p)->lpVtbl->UpdateSurface(p,a,b,c,d)
620 #define IWineD3DDevice_GetFrontBufferData(p,a,b)                (p)->lpVtbl->GetFrontBufferData(p,a,b)
621 #define IWineD3DDevice_ResourceReleased(p,a)                    (p)->lpVtbl->ResourceReleased(p,a)
622 #endif
623
624 /*****************************************************************************
625  * WineD3DResource interface 
626  */
627 #define INTERFACE IWineD3DResource
628 DECLARE_INTERFACE_(IWineD3DResource,IWineD3DBase)
629 {
630     /*** IUnknown methods ***/
631     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
632     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
633     STDMETHOD_(ULONG,Release)(THIS) PURE;
634     /*** IWineD3DBase methods ***/
635     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
636     /*** IWineD3DResource methods ***/
637     STDMETHOD(GetDevice)(THIS_ IWineD3DDevice ** ppDevice) PURE;
638     STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
639     STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
640     STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
641     STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
642     STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
643     STDMETHOD_(void,PreLoad)(THIS) PURE;
644     STDMETHOD_(WINED3DRESOURCETYPE,GetType)(THIS) PURE;
645 };
646 #undef INTERFACE
647
648 #if !defined(__cplusplus) || defined(CINTERFACE)
649 /*** IUnknown methods ***/
650 #define IWineD3DResource_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
651 #define IWineD3DResource_AddRef(p)                    (p)->lpVtbl->AddRef(p)
652 #define IWineD3DResource_Release(p)                   (p)->lpVtbl->Release(p)
653 /*** IWineD3DBase methods ***/
654 #define IWineD3DResource_GetParent(p,a)               (p)->lpVtbl->GetParent(p,a)
655 /*** IWineD3DResource methods ***/
656 #define IWineD3DResource_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
657 #define IWineD3DResource_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
658 #define IWineD3DResource_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
659 #define IWineD3DResource_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
660 #define IWineD3DResource_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
661 #define IWineD3DResource_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
662 #define IWineD3DResource_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
663 #define IWineD3DResource_GetType(p)                   (p)->lpVtbl->GetType(p)
664 #endif
665
666 /*****************************************************************************
667  * WineD3DVertexBuffer interface 
668  */
669 #define INTERFACE IWineD3DVertexBuffer
670 DECLARE_INTERFACE_(IWineD3DVertexBuffer,IWineD3DResource)
671 {
672     /*** IUnknown methods ***/
673     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
674     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
675     STDMETHOD_(ULONG,Release)(THIS) PURE;
676     /*** IWineD3DBase methods ***/
677     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
678     /*** IWineD3DResource methods ***/
679     STDMETHOD(GetDevice)(THIS_ IWineD3DDevice ** ppDevice) PURE;
680     STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
681     STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
682     STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
683     STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
684     STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
685     STDMETHOD_(void,PreLoad)(THIS) PURE;
686     STDMETHOD_(WINED3DRESOURCETYPE,GetType)(THIS) PURE;
687     /*** IWineD3DVertexBuffer methods ***/
688     STDMETHOD(Lock)(THIS_ UINT  OffsetToLock, UINT  SizeToLock, BYTE ** ppbData, DWORD  Flags) PURE;
689     STDMETHOD(Unlock)(THIS) PURE;
690     STDMETHOD(GetDesc)(THIS_ WINED3DVERTEXBUFFER_DESC  * pDesc) PURE;
691 };
692 #undef INTERFACE
693
694 #if !defined(__cplusplus) || defined(CINTERFACE)
695 /*** IUnknown methods ***/
696 #define IWineD3DVertexBuffer_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
697 #define IWineD3DVertexBuffer_AddRef(p)                    (p)->lpVtbl->AddRef(p)
698 #define IWineD3DVertexBuffer_Release(p)                   (p)->lpVtbl->Release(p)
699 /*** IWineD3DBase methods ***/
700 #define IWineD3DVertexBuffer_GetParent(p,a)               (p)->lpVtbl->GetParent(p,a)
701 /*** IWineD3DResource methods ***/
702 #define IWineD3DVertexBuffer_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
703 #define IWineD3DVertexBuffer_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
704 #define IWineD3DVertexBuffer_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
705 #define IWineD3DVertexBuffer_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
706 #define IWineD3DVertexBuffer_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
707 #define IWineD3DVertexBuffer_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
708 #define IWineD3DVertexBuffer_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
709 #define IWineD3DVertexBuffer_GetType(p)                   (p)->lpVtbl->GetType(p)
710 /*** IWineD3DVertexBuffer methods ***/
711 #define IWineD3DVertexBuffer_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
712 #define IWineD3DVertexBuffer_Unlock(p)                    (p)->lpVtbl->Unlock(p)
713 #define IWineD3DVertexBuffer_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
714 #endif
715
716 /*****************************************************************************
717  * WineD3DIndexBuffer interface 
718  */
719 #define INTERFACE IWineD3DIndexBuffer
720 DECLARE_INTERFACE_(IWineD3DIndexBuffer,IWineD3DResource)
721 {
722     /*** IUnknown methods ***/
723     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
724     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
725     STDMETHOD_(ULONG,Release)(THIS) PURE;
726     /*** IWineD3DBase methods ***/
727     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
728     /*** IWineD3DResource methods ***/
729     STDMETHOD(GetDevice)(THIS_ IWineD3DDevice ** ppDevice) PURE;
730     STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
731     STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
732     STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
733     STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
734     STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
735     STDMETHOD_(void,PreLoad)(THIS) PURE;
736     STDMETHOD_(WINED3DRESOURCETYPE,GetType)(THIS) PURE;
737     /*** IWineD3DIndexBuffer methods ***/
738     STDMETHOD(Lock)(THIS_ UINT  OffsetToLock, UINT  SizeToLock, BYTE ** ppbData, DWORD  Flags) PURE;
739     STDMETHOD(Unlock)(THIS) PURE;
740     STDMETHOD(GetDesc)(THIS_ WINED3DINDEXBUFFER_DESC  * pDesc) PURE;
741 };
742 #undef INTERFACE
743
744 #if !defined(__cplusplus) || defined(CINTERFACE)
745 /*** IUnknown methods ***/
746 #define IWineD3DIndexBuffer_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
747 #define IWineD3DIndexBuffer_AddRef(p)                    (p)->lpVtbl->AddRef(p)
748 #define IWineD3DIndexBuffer_Release(p)                   (p)->lpVtbl->Release(p)
749 /*** IWineD3DBase methods ***/
750 #define IWineD3DIndexBuffer_GetParent(p,a)               (p)->lpVtbl->GetParent(p,a)
751 /*** IWineD3DResource methods ***/
752 #define IWineD3DIndexBuffer_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
753 #define IWineD3DIndexBuffer_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
754 #define IWineD3DIndexBuffer_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
755 #define IWineD3DIndexBuffer_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
756 #define IWineD3DIndexBuffer_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
757 #define IWineD3DIndexBuffer_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
758 #define IWineD3DIndexBuffer_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
759 #define IWineD3DIndexBuffer_GetType(p)                   (p)->lpVtbl->GetType(p)
760 /*** IWineD3DIndexBuffer methods ***/
761 #define IWineD3DIndexBuffer_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
762 #define IWineD3DIndexBuffer_Unlock(p)                    (p)->lpVtbl->Unlock(p)
763 #define IWineD3DIndexBuffer_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
764 #endif
765
766 /*****************************************************************************
767  * IWineD3DBaseTexture interface
768  *   Note at d3d8 this does NOT extend Resource, but at d3d9 it does
769  *     since most functions are common anyway, it makes sense to extend it
770  */
771 #define INTERFACE IWineD3DBaseTexture
772 DECLARE_INTERFACE_(IWineD3DBaseTexture,IWineD3DResource)
773 {
774     /*** IUnknown methods ***/
775     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
776     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
777     STDMETHOD_(ULONG,Release)(THIS) PURE;
778     /*** IWineD3DBase methods ***/
779     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
780     /*** IWineD3DResource methods ***/
781     STDMETHOD(GetDevice)(THIS_ IWineD3DDevice ** ppDevice) PURE;
782     STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
783     STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
784     STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
785     STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
786     STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
787     STDMETHOD_(void,PreLoad)(THIS) PURE;
788     STDMETHOD_(WINED3DRESOURCETYPE,GetType)(THIS) PURE;
789     /*** IWineD3DBaseTexture methods ***/
790     STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
791     STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
792     STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
793     STDMETHOD(SetAutoGenFilterType)(THIS_ WINED3DTEXTUREFILTERTYPE FilterType) PURE;
794     STDMETHOD_(WINED3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
795     STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
796     STDMETHOD_(BOOL, SetDirty)(THIS_ BOOL) PURE;
797     STDMETHOD_(BOOL, GetDirty)(THIS) PURE;
798     STDMETHOD(BindTexture)(THIS) PURE;
799     STDMETHOD(UnBindTexture)(THIS) PURE;
800     STDMETHOD_(UINT, GetTextureDimensions)(THIS) PURE;
801     STDMETHOD_(void, ApplyStateChanges)(THIS_ const DWORD textureStates[WINED3D_HIGHEST_TEXTURE_STATE + 1], const DWORD samplerStates[WINED3D_HIGHEST_SAMPLER_STATE + 1]) PURE;
802
803 };
804 #undef INTERFACE
805
806 #if !defined(__cplusplus) || defined(CINTERFACE)
807 /*** IUnknown methods ***/
808 #define IWineD3DBaseTexture_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
809 #define IWineD3DBaseTexture_AddRef(p)                  (p)->lpVtbl->AddRef(p)
810 #define IWineD3DBaseTexture_Release(p)                 (p)->lpVtbl->Release(p)
811 /*** IWineD3DBase methods ***/
812 #define IWineD3DBaseTexture_GetParent(p,a)             (p)->lpVtbl->GetParent(p,a)
813 /*** IWineD3DBaseTexture methods: IWineD3DResource ***/
814 #define IWineD3DBaseTexture_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)
815 #define IWineD3DBaseTexture_SetPrivateData(p,a,b,c,d)  (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
816 #define IWineD3DBaseTexture_GetPrivateData(p,a,b,c)    (p)->lpVtbl->GetPrivateData(p,a,b,c)
817 #define IWineD3DBaseTexture_FreePrivateData(p,a)       (p)->lpVtbl->FreePrivateData(p,a)
818 #define IWineD3DBaseTexture_SetPriority(p,a)           (p)->lpVtbl->SetPriority(p,a)
819 #define IWineD3DBaseTexture_GetPriority(p)             (p)->lpVtbl->GetPriority(p)
820 #define IWineD3DBaseTexture_PreLoad(p)                 (p)->lpVtbl->PreLoad(p)
821 #define IWineD3DBaseTexture_GetType(p)                 (p)->lpVtbl->GetType(p)
822 /*** IWineD3DBaseTexture methods ***/
823 #define IWineD3DBaseTexture_SetLOD(p,a)                (p)->lpVtbl->SetLOD(p,a)
824 #define IWineD3DBaseTexture_GetLOD(p)                  (p)->lpVtbl->GetLOD(p)
825 #define IWineD3DBaseTexture_GetLevelCount(p)           (p)->lpVtbl->GetLevelCount(p)
826 #define IWineD3DBaseTexture_SetAutoGenFilterType(p,a)  (p)->lpVtbl->SetAutoGenFilterType(p,a)
827 #define IWineD3DBaseTexture_GetAutoGenFilterType(p)    (p)->lpVtbl->GetAutoGenFilterType(p)
828 #define IWineD3DBaseTexture_GenerateMipSubLevels(p)    (p)->lpVtbl->GenerateMipSubLevels(p)
829 #define IWineD3DBaseTexture_SetDirty(p,a)              (p)->lpVtbl->SetDirty(p,a)
830 #define IWineD3DBaseTexture_GetDirty(p)                (p)->lpVtbl->GetDirty(p)
831 /*** internal methods ***/
832 #define IWineD3DBaseTexture_BindTexture(p)             (p)->lpVtbl->BindTexture(p)
833 #define IWineD3DBaseTexture_UnBindTexture(p)           (p)->lpVtbl->UnBindTexture(p)
834 #define IWineD3DBaseTexture_GetTextureDimensions(p)    (p)->lpVtbl->GetTextureDimensions(p)
835 #define IWineD3DBaseTexture_ApplyStateChanges(p,a,b)   (p)->lpVtbl->ApplyStateChanges(p,a,b)
836 #endif
837
838 /*****************************************************************************
839  * IWineD3DTexture interface
840  */
841 #define INTERFACE IWineD3DTexture
842 DECLARE_INTERFACE_(IWineD3DTexture,IWineD3DBaseTexture)
843 {
844     /*** IUnknown methods ***/
845     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
846     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
847     STDMETHOD_(ULONG,Release)(THIS) PURE;
848     /*** IWineD3DBase methods ***/
849     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
850     /*** IWineD3DResource methods ***/
851     STDMETHOD(GetDevice)(THIS_ IWineD3DDevice ** ppDevice) PURE;
852     STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
853     STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
854     STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
855     STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
856     STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
857     STDMETHOD_(void,PreLoad)(THIS) PURE;
858     STDMETHOD_(WINED3DRESOURCETYPE,GetType)(THIS) PURE;
859     /*** IWineD3DBaseTexture methods ***/
860     STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
861     STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
862     STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
863     STDMETHOD(SetAutoGenFilterType)(THIS_ WINED3DTEXTUREFILTERTYPE FilterType) PURE;
864     STDMETHOD_(WINED3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
865     STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
866     STDMETHOD_(BOOL, SetDirty)(THIS_ BOOL) PURE;
867     STDMETHOD_(BOOL, GetDirty)(THIS) PURE;
868     STDMETHOD(BindTexture)(THIS) PURE;
869     STDMETHOD(UnBindTexture)(THIS) PURE;
870     STDMETHOD_(UINT, GetTextureDimensions)(THIS) PURE;
871     STDMETHOD_(void, ApplyStateChanges)(THIS_ const DWORD textureStates[WINED3D_HIGHEST_TEXTURE_STATE + 1], const DWORD samplerStates[WINED3D_HIGHEST_SAMPLER_STATE + 1]) PURE;
872     /*** IWineD3DTexture methods ***/
873     STDMETHOD_(void, Destroy)(THIS_ D3DCB_DESTROYSURFACEFN pFn) PURE;
874     STDMETHOD(GetLevelDesc)(THIS_ UINT Level, WINED3DSURFACE_DESC* pDesc) PURE;
875     STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level, struct IWineD3DSurface** ppSurfaceLevel) PURE;
876     STDMETHOD(LockRect)(THIS_ UINT Level, WINED3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags) PURE;
877     STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE;
878     STDMETHOD(AddDirtyRect)(THIS_ CONST RECT* pDirtyRect) PURE;
879 };
880 #undef INTERFACE
881
882 #if !defined(__cplusplus) || defined(CINTERFACE)
883 /*** IUnknown methods ***/
884 #define IWineD3DTexture_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
885 #define IWineD3DTexture_AddRef(p)                  (p)->lpVtbl->AddRef(p)
886 #define IWineD3DTexture_Release(p)                 (p)->lpVtbl->Release(p)
887 /*** IWineD3DBase methods ***/
888 #define IWineD3DTexture_GetParent(p,a)             (p)->lpVtbl->GetParent(p,a)
889 /*** IWineD3DTexture methods: IWineD3DResource ***/
890 #define IWineD3DTexture_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)
891 #define IWineD3DTexture_SetPrivateData(p,a,b,c,d)  (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
892 #define IWineD3DTexture_GetPrivateData(p,a,b,c)    (p)->lpVtbl->GetPrivateData(p,a,b,c)
893 #define IWineD3DTexture_FreePrivateData(p,a)       (p)->lpVtbl->FreePrivateData(p,a)
894 #define IWineD3DTexture_SetPriority(p,a)           (p)->lpVtbl->SetPriority(p,a)
895 #define IWineD3DTexture_GetPriority(p)             (p)->lpVtbl->GetPriority(p)
896 #define IWineD3DTexture_PreLoad(p)                 (p)->lpVtbl->PreLoad(p)
897 #define IWineD3DTexture_GetType(p)                 (p)->lpVtbl->GetType(p)
898 /*** IWineD3DTexture methods: IWineD3DBaseTexture ***/
899 #define IWineD3DTexture_SetLOD(p,a)                (p)->lpVtbl->SetLOD(p,a)
900 #define IWineD3DTexture_GetLOD(p)                  (p)->lpVtbl->GetLOD(p)
901 #define IWineD3DTexture_GetLevelCount(p)           (p)->lpVtbl->GetLevelCount(p)
902 #define IWineD3DTexture_SetAutoGenFilterType(p,a)  (p)->lpVtbl->SetAutoGenFilterType(p,a)
903 #define IWineD3DTexture_GetAutoGenFilterType(p)    (p)->lpVtbl->GetAutoGenFilterType(p)
904 #define IWineD3DTexture_GenerateMipSubLevels(p)    (p)->lpVtbl->GenerateMipSubLevels(p)
905 #define IWineD3DTexture_SetDirty(p,a)              (p)->lpVtbl->SetDirty(p,a)
906 #define IWineD3DTexture_GetDirty(p)                (p)->lpVtbl->GetDirty(p)
907 #define IWineD3DTexture_BindTexture(p)             (p)->lpVtbl->BindTexture(p)
908 #define IWineD3DTexture_UnBindTexture(p)           (p)->lpVtbl->UnBindTexture(p)
909 #define IWineD3DTexture_GetTextureDimensions(p)    (p)->lpVtbl->GetTextureDimensions(p)
910 #define IWineD3DTexture_ApplyStateChanges(p,a,b)   (p)->lpVtbl->ApplyStateChanges(p,a,b)
911 /*** IWineD3DTexture methods ***/
912 #define IWineD3DTexture_Destroy(p,a)               (p)->lpVtbl->Destroy(p,a)
913 #define IWineD3DTexture_GetLevelDesc(p,a,b)        (p)->lpVtbl->GetLevelDesc(p,a,b)
914 #define IWineD3DTexture_GetSurfaceLevel(p,a,b)     (p)->lpVtbl->GetSurfaceLevel(p,a,b)
915 #define IWineD3DTexture_LockRect(p,a,b,c,d)        (p)->lpVtbl->LockRect(p,a,b,c,d)
916 #define IWineD3DTexture_UnlockRect(p,a)            (p)->lpVtbl->UnlockRect(p,a)
917 #define IWineD3DTexture_AddDirtyRect(p,a)          (p)->lpVtbl->AddDirtyRect(p,a)
918 #endif
919
920 /*****************************************************************************
921  * IWineD3DCubeTexture interface
922  */
923 #define INTERFACE IWineD3DCubeTexture
924 DECLARE_INTERFACE_(IWineD3DCubeTexture,IWineD3DBaseTexture)
925 {
926     /*** IUnknown methods ***/
927     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
928     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
929     STDMETHOD_(ULONG,Release)(THIS) PURE;
930     /*** IWineD3DBase methods ***/
931     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
932     /*** IWineD3DResource methods ***/
933     STDMETHOD(GetDevice)(THIS_ IWineD3DDevice ** ppDevice) PURE;
934     STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
935     STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
936     STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
937     STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
938     STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
939     STDMETHOD_(void,PreLoad)(THIS) PURE;
940     STDMETHOD_(WINED3DRESOURCETYPE,GetType)(THIS) PURE;
941     /*** IWineD3DBaseTexture methods ***/
942     STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
943     STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
944     STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
945     STDMETHOD(SetAutoGenFilterType)(THIS_ WINED3DTEXTUREFILTERTYPE FilterType) PURE;
946     STDMETHOD_(WINED3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
947     STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
948     STDMETHOD_(BOOL, SetDirty)(THIS_ BOOL) PURE;
949     STDMETHOD_(BOOL, GetDirty)(THIS) PURE;
950     STDMETHOD(BindTexture)(THIS) PURE;
951     STDMETHOD(UnBindTexture)(THIS) PURE;
952     STDMETHOD_(UINT, GetTextureDimensions)(THIS) PURE;
953     STDMETHOD_(void, ApplyStateChanges)(THIS_ DWORD const textureStates[WINED3D_HIGHEST_TEXTURE_STATE + 1], const DWORD samplerStates[WINED3D_HIGHEST_SAMPLER_STATE + 1]) PURE;
954     /*** IWineD3DCubeTexture methods ***/
955     STDMETHOD_(void, Destroy)(THIS_ D3DCB_DESTROYSURFACEFN pFn) PURE;
956     STDMETHOD(GetLevelDesc)(THIS_ UINT Level,WINED3DSURFACE_DESC* pDesc) PURE;
957     STDMETHOD(GetCubeMapSurface)(THIS_ WINED3DCUBEMAP_FACES FaceType, UINT Level, struct IWineD3DSurface** ppCubeMapSurface) PURE;
958     STDMETHOD(LockRect)(THIS_ WINED3DCUBEMAP_FACES FaceType, UINT Level, WINED3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags) PURE;
959     STDMETHOD(UnlockRect)(THIS_ WINED3DCUBEMAP_FACES FaceType, UINT Level) PURE;
960     STDMETHOD(AddDirtyRect)(THIS_ WINED3DCUBEMAP_FACES FaceType, CONST RECT* pDirtyRect) PURE;
961 };
962 #undef INTERFACE
963
964 #if !defined(__cplusplus) || defined(CINTERFACE)
965 /*** IUnknown methods ***/
966 #define IWineD3DCubeTexture_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
967 #define IWineD3DCubeTexture_AddRef(p)                  (p)->lpVtbl->AddRef(p)
968 #define IWineD3DCubeTexture_Release(p)                 (p)->lpVtbl->Release(p)
969 /*** IWineD3DBase methods ***/
970 #define IWineD3DCubeTexture_GetParent(p,a)             (p)->lpVtbl->GetParent(p,a)
971 /*** IWineD3DCubeTexture methods: IWineD3DResource ***/
972 #define IWineD3DCubeTexture_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)
973 #define IWineD3DCubeTexture_SetPrivateData(p,a,b,c,d)  (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
974 #define IWineD3DCubeTexture_GetPrivateData(p,a,b,c)    (p)->lpVtbl->GetPrivateData(p,a,b,c)
975 #define IWineD3DCubeTexture_FreePrivateData(p,a)       (p)->lpVtbl->FreePrivateData(p,a)
976 #define IWineD3DCubeTexture_SetPriority(p,a)           (p)->lpVtbl->SetPriority(p,a)
977 #define IWineD3DCubeTexture_GetPriority(p)             (p)->lpVtbl->GetPriority(p)
978 #define IWineD3DCubeTexture_PreLoad(p)                 (p)->lpVtbl->PreLoad(p)
979 #define IWineD3DCubeTexture_GetType(p)                 (p)->lpVtbl->GetType(p)
980 /*** IWineD3DCubeTexture methods: IWineD3DBaseTexture ***/
981 #define IWineD3DCubeTexture_SetLOD(p,a)                (p)->lpVtbl->SetLOD(p,a)
982 #define IWineD3DCubeTexture_GetLOD(p)                  (p)->lpVtbl->GetLOD(p)
983 #define IWineD3DCubeTexture_GetLevelCount(p)           (p)->lpVtbl->GetLevelCount(p)
984 #define IWineD3DCubeTexture_SetAutoGenFilterType(p,a)  (p)->lpVtbl->SetAutoGenFilterType(p,a)
985 #define IWineD3DCubeTexture_GetAutoGenFilterType(p)    (p)->lpVtbl->GetAutoGenFilterType(p)
986 #define IWineD3DCubeTexture_GenerateMipSubLevels(p)    (p)->lpVtbl->GenerateMipSubLevels(p)
987 #define IWineD3DCubeTexture_SetDirty(p,a)              (p)->lpVtbl->SetDirty(p,a)
988 #define IWineD3DCubeTexture_GetDirty(p)                (p)->lpVtbl->GetDirty(p)
989 #define IWineD3DCubeTexture_BindTexture(p)              (p)->lpVtbl->BindTexture(p)
990 #define IWineD3DCubeTexture_UnBindTexture(p)            (p)->lpVtbl->UnBindTexture(p)
991 #define IWineD3DCubeTexture_GetTextureDimensions(p)     (p)->lpVtbl->GetTextureDimensions(p)
992 #define IWineD3DCubeTexture_ApplyStateChanges(p,a,b)   (p)->lpVtbl->ApplyStateChanges(p,a,b)
993 /*** IWineD3DCubeTexture methods ***/
994 #define IWineD3DCubeTexture_Destroy(p,a)               (p)->lpVtbl->Destroy(p,a)
995 #define IWineD3DCubeTexture_GetLevelDesc(p,a,b)        (p)->lpVtbl->GetLevelDesc(p,a,b)
996 #define IWineD3DCubeTexture_GetCubeMapSurface(p,a,b,c) (p)->lpVtbl->GetCubeMapSurface(p,a,b,c)
997 #define IWineD3DCubeTexture_LockRect(p,a,b,c,d,e)      (p)->lpVtbl->LockRect(p,a,b,c,d,e)
998 #define IWineD3DCubeTexture_UnlockRect(p,a,b)          (p)->lpVtbl->UnlockRect(p,a,b)
999 #define IWineD3DCubeTexture_AddDirtyRect(p,a,b)        (p)->lpVtbl->AddDirtyRect(p,a,b)
1000 #endif
1001
1002
1003 /*****************************************************************************
1004  * IWineD3DVolumeTexture interface
1005  */
1006 #define INTERFACE IWineD3DVolumeTexture
1007 DECLARE_INTERFACE_(IWineD3DVolumeTexture,IWineD3DBaseTexture)
1008 {
1009     /*** IUnknown methods ***/
1010     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
1011     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1012     STDMETHOD_(ULONG,Release)(THIS) PURE;
1013     /*** IWineD3DBase methods ***/
1014     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
1015     /*** IWineD3DResource methods ***/
1016     STDMETHOD(GetDevice)(THIS_ IWineD3DDevice ** ppDevice) PURE;
1017     STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
1018     STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
1019     STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
1020     STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
1021     STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
1022     STDMETHOD_(void,PreLoad)(THIS) PURE;
1023     STDMETHOD_(WINED3DRESOURCETYPE,GetType)(THIS) PURE;
1024     /*** IWineD3DBaseTexture methods ***/
1025     STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
1026     STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
1027     STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
1028     STDMETHOD(SetAutoGenFilterType)(THIS_ WINED3DTEXTUREFILTERTYPE FilterType) PURE;
1029     STDMETHOD_(WINED3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
1030     STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
1031     STDMETHOD_(BOOL, SetDirty)(THIS_ BOOL) PURE;
1032     STDMETHOD_(BOOL, GetDirty)(THIS) PURE;
1033     STDMETHOD(BindTexture)(THIS) PURE;
1034     STDMETHOD(UnBindTexture)(THIS) PURE;
1035     STDMETHOD_(UINT, GetTextureDimensions)(THIS) PURE;
1036     STDMETHOD_(void, ApplyStateChanges)(THIS_ const DWORD textureStates[WINED3D_HIGHEST_TEXTURE_STATE + 1], const DWORD samplerStates[WINED3D_HIGHEST_SAMPLER_STATE + 1]) PURE;
1037     /*** IWineD3DVolumeTexture methods ***/
1038     STDMETHOD_(void, Destroy)(THIS_ D3DCB_DESTROYVOLUMEFN pFn) PURE;
1039     STDMETHOD(GetLevelDesc)(THIS_ UINT Level, WINED3DVOLUME_DESC *pDesc) PURE;
1040     STDMETHOD(GetVolumeLevel)(THIS_ UINT Level, struct IWineD3DVolume** ppVolumeLevel) PURE;
1041     STDMETHOD(LockBox)(THIS_ UINT Level, WINED3DLOCKED_BOX* pLockedVolume, CONST WINED3DBOX* pBox, DWORD Flags) PURE;
1042     STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE;
1043     STDMETHOD(AddDirtyBox)(THIS_ CONST WINED3DBOX* pDirtyBox) PURE;
1044 };
1045 #undef INTERFACE
1046
1047 #if !defined(__cplusplus) || defined(CINTERFACE)
1048 /*** IUnknown methods ***/
1049 #define IWineD3DVolumeTexture_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
1050 #define IWineD3DVolumeTexture_AddRef(p)                  (p)->lpVtbl->AddRef(p)
1051 #define IWineD3DVolumeTexture_Release(p)                 (p)->lpVtbl->Release(p)
1052 /*** IWineD3DBase methods ***/
1053 #define IWineD3DVolumeTexture_GetParent(p,a)             (p)->lpVtbl->GetParent(p,a)
1054 /*** IWineD3DVolumeTexture methods: IWineD3DResource ***/
1055 #define IWineD3DVolumeTexture_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)
1056 #define IWineD3DVolumeTexture_SetPrivateData(p,a,b,c,d)  (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
1057 #define IWineD3DVolumeTexture_GetPrivateData(p,a,b,c)    (p)->lpVtbl->GetPrivateData(p,a,b,c)
1058 #define IWineD3DVolumeTexture_FreePrivateData(p,a)       (p)->lpVtbl->FreePrivateData(p,a)
1059 #define IWineD3DVolumeTexture_SetPriority(p,a)           (p)->lpVtbl->SetPriority(p,a)
1060 #define IWineD3DVolumeTexture_GetPriority(p)             (p)->lpVtbl->GetPriority(p)
1061 #define IWineD3DVolumeTexture_PreLoad(p)                 (p)->lpVtbl->PreLoad(p)
1062 #define IWineD3DVolumeTexture_GetType(p)                 (p)->lpVtbl->GetType(p)
1063 /*** IWineD3DVolumeTexture methods: IWineD3DBaseTexture ***/
1064 #define IWineD3DVolumeTexture_SetLOD(p,a)                (p)->lpVtbl->SetLOD(p,a)
1065 #define IWineD3DVolumeTexture_GetLOD(p)                  (p)->lpVtbl->GetLOD(p)
1066 #define IWineD3DVolumeTexture_GetLevelCount(p)           (p)->lpVtbl->GetLevelCount(p)
1067 #define IWineD3DVolumeTexture_SetAutoGenFilterType(p,a)  (p)->lpVtbl->SetAutoGenFilterType(p,a)
1068 #define IWineD3DVolumeTexture_GetAutoGenFilterType(p)    (p)->lpVtbl->GetAutoGenFilterType(p)
1069 #define IWineD3DVolumeTexture_GenerateMipSubLevels(p)    (p)->lpVtbl->GenerateMipSubLevels(p)
1070 #define IWineD3DVolumeTexture_SetDirty(p,a)              (p)->lpVtbl->SetDirty(p,a)
1071 #define IWineD3DVolumeTexture_GetDirty(p)                (p)->lpVtbl->GetDirty(p)
1072 #define IWineD3DVolumeTexture_BindTexture(p)              (p)->lpVtbl->BindTexture(p)
1073 #define IWineD3DVolumeTexture_UnBindTexture(p)            (p)->lpVtbl->UnBindTexture(p)
1074 #define IWineD3DVolumeTexture_GetTextureDimensions(p)     (p)->lpVtbl->GetTextureDimensions(p)
1075 #define IWineD3DVolumeTexture_ApplyStateChanges(p,a,b)   (p)->lpVtbl->ApplyStateChanges(p,a,b)
1076 /*** IWineD3DVolumeTexture methods ***/
1077 #define IWineD3DVolumeTexture_Destroy(p,a)               (p)->lpVtbl->Destroy(p,a)
1078 #define IWineD3DVolumeTexture_GetLevelDesc(p,a,b)        (p)->lpVtbl->GetLevelDesc(p,a,b)
1079 #define IWineD3DVolumeTexture_GetVolumeLevel(p,a,b)      (p)->lpVtbl->GetVolumeLevel(p,a,b)
1080 #define IWineD3DVolumeTexture_LockBox(p,a,b,c,d)         (p)->lpVtbl->LockBox(p,a,b,c,d)
1081 #define IWineD3DVolumeTexture_UnlockBox(p,a)             (p)->lpVtbl->UnlockBox(p,a)
1082 #define IWineD3DVolumeTexture_AddDirtyBox(p,a)           (p)->lpVtbl->AddDirtyBox(p,a)
1083 #endif
1084
1085 /*****************************************************************************
1086  * IWineD3DSurface interface
1087  */
1088 #define INTERFACE IWineD3DSurface
1089 DECLARE_INTERFACE_(IWineD3DSurface,IWineD3DResource)
1090 {
1091     /*** IUnknown methods ***/
1092     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
1093     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1094     STDMETHOD_(ULONG,Release)(THIS) PURE;
1095     /*** IWineD3DBase methods ***/
1096     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
1097     /*** IWineD3DResource methods ***/
1098     STDMETHOD(GetDevice)(THIS_ IWineD3DDevice ** ppDevice) PURE;
1099     STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
1100     STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
1101     STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
1102     STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
1103     STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
1104     STDMETHOD_(void,PreLoad)(THIS) PURE;
1105     STDMETHOD_(WINED3DRESOURCETYPE,GetType)(THIS) PURE;
1106     /*** IWineD3DSurface methods ***/
1107     STDMETHOD(GetContainer)(THIS_ REFIID  riid, void ** ppContainer) PURE;
1108     STDMETHOD(GetDesc)(THIS_ WINED3DSURFACE_DESC * pDesc) PURE;
1109     STDMETHOD(LockRect)(THIS_ WINED3DLOCKED_RECT * pLockedRect, CONST RECT * pRect,DWORD  Flags) PURE;
1110     STDMETHOD(UnlockRect)(THIS) PURE;
1111     STDMETHOD(GetDC)(THIS_ HDC *pHdc) PURE;
1112     STDMETHOD(ReleaseDC)(THIS_ HDC hdc) PURE;
1113     STDMETHOD(Flip)(THIS_ IWineD3DSurface *Override, DWORD FLAGS) PURE;
1114     STDMETHOD(Blt)(THIS_ RECT *DestRect, IWineD3DSurface *SrcSurface, RECT *SrcRect, DWORD Flags, WINEDDBLTFX *DDBltFx, WINED3DTEXTUREFILTERTYPE Filter) PURE;
1115     STDMETHOD(GetBltStatus)(THIS_ DWORD Flags) PURE;
1116     STDMETHOD(GetFlipStatus)(THIS_ DWORD Flags) PURE;
1117     STDMETHOD(IsLost)(THIS) PURE;
1118     STDMETHOD(Restore)(THIS) PURE;
1119     STDMETHOD(BltFast)(THIS_ DWORD dstx, DWORD dsty, IWineD3DSurface *src, RECT *rsrc, DWORD trans) PURE;
1120     STDMETHOD(GetPalette)(THIS_ struct IWineD3DPalette **Palette) PURE;
1121     STDMETHOD(SetPalette)(THIS_ struct IWineD3DPalette *Palette) PURE;
1122     STDMETHOD(RealizePalette)(THIS) PURE;
1123     STDMETHOD(SetColorKey)(THIS_ DWORD Flags, WINEDDCOLORKEY *CKey) PURE;
1124     STDMETHOD_(DWORD,GetPitch)(THIS) PURE;
1125     STDMETHOD(SetMem)(THIS_ void *mem) PURE;
1126     STDMETHOD(SetOverlayPosition)(THIS_ LONG X, LONG Y) PURE;
1127     STDMETHOD(GetOverlayPosition)(THIS_ LONG *X, LONG *Y) PURE;
1128     STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD Flags, IWineD3DSurface *Ref) PURE;
1129     STDMETHOD(UpdateOverlay)(THIS_ RECT *SrcRect, IWineD3DSurface *DstSurface, RECT *DstRect, DWORD Flags, WINEDDOVERLAYFX *FX);
1130     STDMETHOD(SetClipper)(THIS_ struct IWineD3DClipper *clipper);
1131     STDMETHOD(GetClipper)(THIS_ struct IWineD3DClipper **clipper);
1132     /* Internally used methods */
1133     STDMETHOD(AddDirtyRect)(THIS_ CONST RECT* pRect) PURE;
1134     STDMETHOD(LoadTexture)(THIS) PURE;
1135     STDMETHOD(SaveSnapshot)(THIS_ const char *filename) PURE;
1136     STDMETHOD(SetContainer)(THIS_ IWineD3DBase *container) PURE;
1137     STDMETHOD_(void,SetGlTextureDesc)(THIS_ UINT textureName, int target) PURE;
1138     STDMETHOD_(void,GetGlDesc)(THIS_ glDescriptor **glDescription) PURE;
1139     STDMETHOD_(CONST void *, GetData)(THIS) PURE;
1140     STDMETHOD(SetFormat)(THIS_ WINED3DFORMAT format) PURE;
1141     STDMETHOD(PrivateSetup)(THIS) PURE;
1142 };
1143 #undef INTERFACE
1144
1145 #if !defined(__cplusplus) || defined(CINTERFACE)
1146 /*** IUnknown methods ***/
1147 #define IWineD3DSurface_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
1148 #define IWineD3DSurface_AddRef(p)                    (p)->lpVtbl->AddRef(p)
1149 #define IWineD3DSurface_Release(p)                   (p)->lpVtbl->Release(p)
1150 /*** IWineD3DBase methods ***/
1151 #define IWineD3DSurface_GetParent(p,a)               (p)->lpVtbl->GetParent(p,a)
1152 /*** IWineD3DResource methods ***/
1153 #define IWineD3DSurface_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
1154 #define IWineD3DSurface_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
1155 #define IWineD3DSurface_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
1156 #define IWineD3DSurface_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
1157 #define IWineD3DSurface_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
1158 #define IWineD3DSurface_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
1159 #define IWineD3DSurface_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
1160 #define IWineD3DSurface_GetType(p)                   (p)->lpVtbl->GetType(p)
1161 /*** IWineD3DSurface methods ***/
1162 #define IWineD3DSurface_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)
1163 #define IWineD3DSurface_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
1164 #define IWineD3DSurface_LockRect(p,a,b,c)            (p)->lpVtbl->LockRect(p,a,b,c)
1165 #define IWineD3DSurface_UnlockRect(p)                (p)->lpVtbl->UnlockRect(p)
1166 #define IWineD3DSurface_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
1167 #define IWineD3DSurface_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
1168 #define IWineD3DSurface_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
1169 #define IWineD3DSurface_Blt(p,a,b,c,d,e,f)           (p)->lpVtbl->Blt(p,a,b,c,d,e,f)
1170 #define IWineD3DSurface_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
1171 #define IWineD3DSurface_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
1172 #define IWineD3DSurface_IsLost(p)                    (p)->lpVtbl->IsLost(p)
1173 #define IWineD3DSurface_Restore(p)                   (p)->lpVtbl->Restore(p)
1174 #define IWineD3DSurface_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
1175 #define IWineD3DSurface_GetPalette(p, a)             (p)->lpVtbl->GetPalette(p, a)
1176 #define IWineD3DSurface_SetPalette(p, a)             (p)->lpVtbl->SetPalette(p, a)
1177 #define IWineD3DSurface_RealizePalette(p)            (p)->lpVtbl->RealizePalette(p)
1178 #define IWineD3DSurface_SetColorKey(p, a, b)         (p)->lpVtbl->SetColorKey(p, a, b)
1179 #define IWineD3DSurface_GetPitch(p)                  (p)->lpVtbl->GetPitch(p)
1180 #define IWineD3DSurface_SetMem(p, a)                 (p)->lpVtbl->SetMem(p, a)
1181 #define IWineD3DSurface_SetOverlayPosition(p, a, b)  (p)->lpVtbl->SetOverlayPosition(p, a, b)
1182 #define IWineD3DSurface_GetOverlayPosition(p, a, b)  (p)->lpVtbl->GetOverlayPosition(p, a, b)
1183 #define IWineD3DSurface_UpdateOverlayZOrder(p, a, b) (p)->lpVtbl->UpdateOverlayZOrder(p, a, b)
1184 #define IWineD3DSurface_UpdateOverlay(p, a, b, c, d, e) (p)->lpVtbl->UpdateOverlay(p, a, b, c, d, e)
1185 #define IWineD3DSurface_SetClipper(p, a)             (p)->lpVtbl->SetClipper(p, a)
1186 #define IWineD3DSurface_GetClipper(p, a)             (p)->lpVtbl->GetClipper(p, a)
1187 /*** IWineD3DSurface (Internal, no d3d mapping) methods ***/
1188 #define IWineD3DSurface_AddDirtyRect(p,a)            (p)->lpVtbl->AddDirtyRect(p,a)
1189 #define IWineD3DSurface_LoadTexture(p)               (p)->lpVtbl->LoadTexture(p)
1190 #define IWineD3DSurface_SaveSnapshot(p,a)            (p)->lpVtbl->SaveSnapshot(p,a)
1191 #define IWineD3DSurface_SetContainer(p,a)            (p)->lpVtbl->SetContainer(p,a)
1192 #define IWineD3DSurface_SetGlTextureDesc(p,a,b)      (p)->lpVtbl->SetGlTextureDesc(p,a,b)
1193 #define IWineD3DSurface_GetGlDesc(p,a)               (p)->lpVtbl->GetGlDesc(p,a)
1194 #define IWineD3DSurface_GetData(p)                   (p)->lpVtbl->GetData(p)
1195 #define IWineD3DSurface_SetFormat(p,a)               (p)->lpVtbl->SetFormat(p,a)
1196 #define IWineD3DSurface_PrivateSetup(p)              (p)->lpVtbl->PrivateSetup(p)
1197 #endif
1198
1199 /*****************************************************************************
1200  * IWineD3DVolume interface
1201  */
1202 #define INTERFACE IWineD3DVolume
1203 DECLARE_INTERFACE_(IWineD3DVolume,IWineD3DResource)
1204 {
1205     /*** IUnknown methods ***/
1206     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
1207     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1208     STDMETHOD_(ULONG,Release)(THIS) PURE;
1209     /*** IWineD3DBase methods ***/
1210     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
1211     /*** IWineD3DResource methods ***/    
1212     STDMETHOD(GetDevice)(THIS_ IWineD3DDevice ** ppDevice) PURE;
1213     STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
1214     STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
1215     STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
1216     STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
1217     STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
1218     STDMETHOD_(void,PreLoad)(THIS) PURE;
1219     STDMETHOD_(WINED3DRESOURCETYPE, GetType)(THIS) PURE;    
1220     /*** IWineD3DVolume methods ***/    
1221     STDMETHOD(GetContainer)(THIS_ REFIID  riid, void ** ppContainer) PURE;
1222     STDMETHOD(GetDesc)(THIS_ WINED3DVOLUME_DESC * pDesc) PURE;
1223     STDMETHOD(LockBox)(THIS_ WINED3DLOCKED_BOX* pLockedVolume, CONST WINED3DBOX* pBox, DWORD Flags) PURE;
1224     STDMETHOD(UnlockBox)(THIS) PURE;
1225     STDMETHOD(AddDirtyBox)(THIS_ CONST WINED3DBOX* pDirtyBox) PURE;
1226     STDMETHOD(CleanDirtyBox)(THIS) PURE;
1227     STDMETHOD(LoadTexture)(THIS_ int gl_level) PURE;
1228     STDMETHOD(SetContainer)(THIS_ IWineD3DBase *container) PURE;
1229 };
1230 #undef INTERFACE
1231
1232 #if !defined(__cplusplus) || defined(CINTERFACE)
1233 /*** IUnknown methods ***/
1234 #define IWineD3DVolume_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
1235 #define IWineD3DVolume_AddRef(p)                  (p)->lpVtbl->AddRef(p)
1236 #define IWineD3DVolume_Release(p)                 (p)->lpVtbl->Release(p)
1237 /*** IWineD3DBase methods ***/
1238 #define IWineD3DVolume_GetParent(p,a)             (p)->lpVtbl->GetParent(p,a)
1239 /*** IWineD3DResource methods ***/
1240 #define IWineD3DVolume_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)
1241 #define IWineD3DVolume_SetPrivateData(p,a,b,c,d)  (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
1242 #define IWineD3DVolume_GetPrivateData(p,a,b,c)    (p)->lpVtbl->GetPrivateData(p,a,b,c)
1243 #define IWineD3DVolume_FreePrivateData(p,a)       (p)->lpVtbl->FreePrivateData(p,a)
1244 #define IWineD3DVolume_SetPriority(p,a)           (p)->lpVtbl->SetPriority(p,a)
1245 #define IWineD3DVolume_GetPriority(p)             (p)->lpVtbl->GetPriority(p)
1246 #define IWineD3DVolume_PreLoad(p)                 (p)->lpVtbl->PreLoad(p)
1247 #define IWineD3DVolume_GetType(p)                 (p)->lpVtbl->GetType(p)
1248 /*** IWineD3DVolume methods ***/
1249 #define IWineD3DVolume_GetContainer(p,a,b)        (p)->lpVtbl->GetContainer(p,a,b)
1250 #define IWineD3DVolume_GetDesc(p,a)               (p)->lpVtbl->GetDesc(p,a)
1251 #define IWineD3DVolume_LockBox(p,a,b,c)           (p)->lpVtbl->LockBox(p,a,b,c)
1252 #define IWineD3DVolume_UnlockBox(p)               (p)->lpVtbl->UnlockBox(p)
1253 #define IWineD3DVolume_AddDirtyBox(p,a)           (p)->lpVtbl->AddDirtyBox(p,a)
1254 #define IWineD3DVolume_CleanDirtyBox(p)           (p)->lpVtbl->CleanDirtyBox(p)
1255 #define IWineD3DVolume_LoadTexture(p,a)           (p)->lpVtbl->LoadTexture(p,a)
1256 #define IWineD3DVolume_SetContainer(p,a)          (p)->lpVtbl->SetContainer(p,a)
1257 #endif
1258
1259 /*****************************************************************************
1260  * IWineD3DVertexDeclaration interface
1261  */
1262 #define INTERFACE IWineD3DVertexDeclaration
1263 DECLARE_INTERFACE_(IWineD3DVertexDeclaration,IWineD3DBase)
1264 {
1265     /*** IUnknown methods ***/
1266     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
1267     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1268     STDMETHOD_(ULONG,Release)(THIS) PURE;
1269     /*** IWineD3DBase methods ***/
1270     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
1271     /*** IWineD3DVertexDeclaration methods ***/
1272     STDMETHOD(GetDevice)(THIS_ IWineD3DDevice **ppDevice) PURE;
1273     STDMETHOD(GetDeclaration)(THIS_ WINED3DVERTEXELEMENT *elements, size_t *elements_count) PURE;
1274     STDMETHOD(SetDeclaration)(THIS_ const WINED3DVERTEXELEMENT *elements, size_t element_count) PURE;
1275 };
1276 #undef INTERFACE
1277
1278 #if !defined(__cplusplus) || defined(CINTERFACE)
1279 /*** IUnknown methods ***/
1280 #define IWineD3DVertexDeclaration_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
1281 #define IWineD3DVertexDeclaration_AddRef(p)                  (p)->lpVtbl->AddRef(p)
1282 #define IWineD3DVertexDeclaration_Release(p)                 (p)->lpVtbl->Release(p)
1283 /*** IWineD3DBase methods ***/
1284 #define IWineD3DVertexDeclaration_GetParent(p,a)             (p)->lpVtbl->GetParent(p,a)
1285 /*** IWineD3DVertexDeclaration methods ***/
1286 #define IWineD3DVertexDeclaration_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)
1287 #define IWineD3DVertexDeclaration_GetDeclaration(p,a,b)      (p)->lpVtbl->GetDeclaration(p,a,b)
1288 #define IWineD3DVertexDeclaration_SetDeclaration(p,a,b)      (p)->lpVtbl->SetDeclaration(p,a,b)
1289 #endif
1290
1291 /*****************************************************************************
1292  * IWineD3DStateBlock interface 
1293  */
1294 #define INTERFACE IWineD3DStateBlock
1295 DECLARE_INTERFACE_(IWineD3DStateBlock,IWineD3DBase)
1296 {
1297     /*** IUnknown methods ***/
1298     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
1299     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1300     STDMETHOD_(ULONG,Release)(THIS) PURE;
1301     /*** IWineD3DBase methods ***/
1302     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
1303     /*** IWineD3DStateBlock methods ***/
1304     STDMETHOD(GetDevice)(THIS_ IWineD3DDevice **pDevice) PURE;
1305     STDMETHOD(Capture)(THIS) PURE;
1306     STDMETHOD(Apply)(THIS) PURE;
1307     STDMETHOD(InitStartupStateBlock)(THIS) PURE;
1308 };
1309 #undef INTERFACE
1310
1311 #if !defined(__cplusplus) || defined(CINTERFACE)
1312 /*** IUnknown methods ***/
1313 #define IWineD3DStateBlock_QueryInterface(p,a,b)                (p)->lpVtbl->QueryInterface(p,a,b)
1314 #define IWineD3DStateBlock_AddRef(p)                            (p)->lpVtbl->AddRef(p)
1315 #define IWineD3DStateBlock_Release(p)                           (p)->lpVtbl->Release(p)
1316 /*** IWineD3DBase methods ***/
1317 #define IWineD3DStateBlock_GetParent(p,a)                       (p)->lpVtbl->GetParent(p,a)
1318 /*** IWineD3DStateBlock methods ***/
1319 #define IWineD3DStateBlock_GetDevice(p,a)                       (p)->lpVtbl->GetDevice(p,a)
1320 #define IWineD3DStateBlock_Capture(p)                           (p)->lpVtbl->Capture(p)
1321 #define IWineD3DStateBlock_Apply(p)                             (p)->lpVtbl->Apply(p)
1322 #define IWineD3DStateBlock_InitStartupStateBlock(p)             (p)->lpVtbl->InitStartupStateBlock(p)
1323 #endif
1324
1325 /*****************************************************************************
1326  * WineD3DQuery interface 
1327  */
1328 #define INTERFACE IWineD3DQuery
1329 DECLARE_INTERFACE_(IWineD3DQuery,IWineD3DBase)
1330 {
1331     /*** IUnknown methods ***/
1332     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
1333     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1334     STDMETHOD_(ULONG,Release)(THIS) PURE;
1335     /*** IWineD3DBase methods ***/
1336     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
1337     /*** IWineD3DQuery methods ***/
1338     STDMETHOD(GetDevice)(THIS_ IWineD3DDevice **ppDevice) PURE;
1339     STDMETHOD(GetData)(THIS_  void *pData, DWORD dwSize, DWORD dwGetDataFlags) PURE;
1340     STDMETHOD_(DWORD,GetDataSize)(THIS) PURE;
1341     STDMETHOD_(WINED3DQUERYTYPE, GetType)(THIS) PURE;
1342     STDMETHOD(Issue)(THIS_ DWORD dwIssueFlags) PURE;
1343     
1344 };
1345 #undef INTERFACE
1346
1347 #if !defined(__cplusplus) || defined(CINTERFACE)
1348 /*** IUnknown methods ***/
1349 #define IWineD3DQuery_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
1350 #define IWineD3DQuery_AddRef(p)                    (p)->lpVtbl->AddRef(p)
1351 #define IWineD3DQuery_Release(p)                   (p)->lpVtbl->Release(p)
1352 /*** IWineD3DBase methods ***/
1353 #define IWineD3DQuery_GetParent(p,a)               (p)->lpVtbl->GetParent(p,a)
1354 /*** IWineD3DQuery methods ***/
1355 #define IWineD3DQuery_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
1356 #define IWineD3DQuery_GetData(p,a,b,c)             (p)->lpVtbl->GetData(p,a,b,c)
1357 #define IWineD3DQuery_GetDataSize(p)               (p)->lpVtbl->GetDataSize(p)
1358 #define IWineD3DQuery_GetType(p)                   (p)->lpVtbl->GetType(p)
1359 #define IWineD3DQuery_Issue(p,a)                   (p)->lpVtbl->Issue(p,a)
1360
1361 #endif
1362
1363 /*****************************************************************************
1364  * IWineD3DSwapChain interface
1365  * TODO: add gamma-ramp setting functions to make life easier
1366  * (There kinda missing from Microsofts DirectX!)
1367  */
1368 #define INTERFACE IWineD3DSwapChain
1369 DECLARE_INTERFACE_(IWineD3DSwapChain,IWineD3DBase)
1370 {
1371     /*** IUnknown methods ***/
1372     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
1373     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1374     STDMETHOD_(ULONG,Release)(THIS) PURE;
1375     /*** IWineD3DBase methods ***/
1376     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
1377     /*** IDirect3DSwapChain9 methods ***/
1378     STDMETHOD_(void, Destroy)(THIS_ D3DCB_DESTROYSURFACEFN pFn) PURE;
1379     STDMETHOD(GetDevice)(THIS_ IWineD3DDevice **ppDevice) PURE;
1380     STDMETHOD(Present)(THIS_ CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion, DWORD dwFlags) PURE;
1381     STDMETHOD(GetFrontBufferData)(THIS_ IWineD3DSurface *pDestSurface) PURE;
1382     STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer, WINED3DBACKBUFFER_TYPE Type, IWineD3DSurface **ppBackBuffer) PURE;
1383     STDMETHOD(GetRasterStatus)(THIS_ WINED3DRASTER_STATUS *pRasterStatus) PURE;
1384     STDMETHOD(GetDisplayMode)(THIS_ WINED3DDISPLAYMODE *pMode) PURE;
1385     STDMETHOD(GetPresentParameters)(THIS_ WINED3DPRESENT_PARAMETERS *pPresentationParameters) PURE;
1386     STDMETHOD(SetGammaRamp)(THIS_ DWORD Flags, const WINED3DGAMMARAMP *pRamp) PURE;
1387     STDMETHOD(GetGammaRamp)(THIS_ WINED3DGAMMARAMP *pRamp) PURE;
1388 };
1389 #undef INTERFACE
1390
1391 #if !defined(__cplusplus) || defined(CINTERFACE)
1392 /*** IUnknown methods ***/
1393 #define IWineD3DSwapChain_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
1394 #define IWineD3DSwapChain_AddRef(p)                    (p)->lpVtbl->AddRef(p)
1395 #define IWineD3DSwapChain_Release(p)                   (p)->lpVtbl->Release(p)
1396 /*** IWineD3DBase methods ***/
1397 #define IWineD3DSwapChain_GetParent(p,a)               (p)->lpVtbl->GetParent(p,a)
1398 /*** IWineD3DSwapChain methods ***/
1399 #define IWineD3DSwapChain_Destroy(p,a)                 (p)->lpVtbl->Destroy(p,a)
1400 #define IWineD3DSwapChain_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
1401 #define IWineD3DSwapChain_Present(p,a,b,c,d,e)         (p)->lpVtbl->Present(p,a,b,c,d,e)
1402 #define IWineD3DSwapChain_GetFrontBufferData(p,a)      (p)->lpVtbl->GetFrontBufferData(p,a)
1403 #define IWineD3DSwapChain_GetBackBuffer(p,a,b,c)       (p)->lpVtbl->GetBackBuffer(p,a,b,c)
1404 #define IWineD3DSwapChain_GetRasterStatus(p,a)         (p)->lpVtbl->GetRasterStatus(p,a)
1405 #define IWineD3DSwapChain_GetDisplayMode(p,a)          (p)->lpVtbl->GetDisplayMode(p,a)
1406 #define IWineD3DSwapChain_GetPresentParameters(p,a)    (p)->lpVtbl->GetPresentParameters(p,a)
1407 #define IWineD3DSwapChain_SetGammaRamp(p,a,b)          (p)->lpVtbl->SetGammaRamp(p,a,b)
1408 #define IWineD3DSwapChain_GetGammaRamp(p,a)            (p)->lpVtbl->GetGammaRamp(p,a)
1409 #endif
1410
1411 /*****************************************************************************
1412  * IWineD3DBaseShader interface
1413  */
1414 #define INTERFACE IWineD3DBaseShader
1415 DECLARE_INTERFACE_(IWineD3DBaseShader,IWineD3DBase)
1416 {
1417     /*** IUnknown methods ***/
1418     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
1419     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1420     STDMETHOD_(ULONG,Release)(THIS) PURE;
1421     /*** IWineD3DBase methods ***/
1422     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
1423     /*** IWineD3DBaseShader methods ***/
1424     STDMETHOD(SetFunction)(THIS_ CONST DWORD *pFunction) PURE;
1425     STDMETHOD(CompileShader)(THIS) PURE;
1426 };
1427 #undef INTERFACE
1428
1429 #if !defined(__cplusplus) || defined(CINTERFACE)
1430 /*** IUnknown methods ***/
1431 #define IWineD3DBaseShader_QueryInterface(p,a,b)     (p)->lpVtbl->QueryInterface(p,a,b)
1432 #define IWineD3DBaseShader_AddRef(p)                 (p)->lpVtbl->AddRef(p)
1433 #define IWineD3DBaseShader_Release(p)                (p)->lpVtbl->Release(p)
1434 /*** IWineD3DBase methods ***/
1435 #define IWineD3DBaseShader_GetParent(p,a)            (p)->lpVtbl->GetParent(p,a)
1436 /*** IWineD3DBaseShader methods ***/
1437 #define IWineD3DBaseShader_SetFunction(p,a)          (p)->lpVtbl->SetFunction(p,a)
1438 #define IWineD3DBaseShader_CompileShader(p)          (p)->lpVtbl->CompileShader(p)
1439 #endif
1440
1441 /*****************************************************************************
1442  * IWineD3DVertexShader interface 
1443  */
1444 #define INTERFACE IWineD3DVertexShader
1445 DECLARE_INTERFACE_(IWineD3DVertexShader,IWineD3DBaseShader)
1446 {
1447     /*** IUnknown methods ***/
1448     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
1449     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1450     STDMETHOD_(ULONG,Release)(THIS) PURE;
1451     /*** IWineD3DBase methods ***/
1452     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
1453     /*** IWineD3DBaseShader methods ***/
1454     STDMETHOD(SetFunction)(THIS_ CONST DWORD *pFunction) PURE;
1455     STDMETHOD(CompileShader)(THIS) PURE;
1456     /*** IWineD3DVertexShader methods ***/
1457     STDMETHOD(GetDevice)(THIS_ IWineD3DDevice** ppDevice) PURE;
1458     STDMETHOD(GetFunction)(THIS_ VOID *pData, UINT *pSizeOfData) PURE;
1459     STDMETHOD_(void, FakeSemantics)(THIS_ struct IWineD3DVertexDeclaration *vertex_declaration) PURE;
1460     STDMETHOD(SetLocalConstantsF)(THIS_ UINT start_idx, const float *src_data, UINT count) PURE;
1461 };
1462 #undef INTERFACE
1463
1464 #if !defined(__cplusplus) || defined(CINTERFACE)
1465 /*** IUnknown methods ***/
1466 #define IWineD3DVertexShader_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)
1467 #define IWineD3DVertexShader_AddRef(p)                      (p)->lpVtbl->AddRef(p)
1468 #define IWineD3DVertexShader_Release(p)                     (p)->lpVtbl->Release(p)
1469 /*** IWineD3DBase methods ***/
1470 #define IWineD3DVertexShader_GetParent(p,a)                 (p)->lpVtbl->GetParent(p,a)
1471 /*** IWineD3DBaseShader methods ***/
1472 #define IWineD3DVertexShader_SetFunction(p,a)               (p)->lpVtbl->SetFunction(p,a)
1473 #define IWineD3DVertexShader_CompileShader(p)               (p)->lpVtbl->CompileShader(p)
1474 /*** IWineD3DVertexShader methods ***/
1475 #define IWineD3DVertexShader_GetDevice(p,a)                 (p)->lpVtbl->GetDevice(p,a)
1476 #define IWineD3DVertexShader_GetFunction(p,a,b)             (p)->lpVtbl->GetFunction(p,a,b)
1477 #define IWineD3DVertexShader_FakeSemantics(p,a)             (p)->lpVtbl->FakeSemantics(p,a)
1478 #define IWineD3DVertexShader_SetLocalConstantsF(p,a,b,c)    (p)->lpVtbl->SetLocalConstantsF(p,a,b,c)
1479 #endif
1480
1481 /*****************************************************************************
1482  * IWineD3DPixelShader interface
1483  */
1484 #define INTERFACE IWineD3DPixelShader
1485 DECLARE_INTERFACE_(IWineD3DPixelShader,IWineD3DBaseShader)
1486 {
1487     /*** IUnknown methods ***/
1488     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
1489     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1490     STDMETHOD_(ULONG,Release)(THIS) PURE;
1491     /*** IWineD3DBase methods ***/
1492     STDMETHOD(GetParent)(THIS_ IUnknown **pParent) PURE;
1493     /*** IWineD3DBaseShader methods ***/
1494     STDMETHOD(SetFunction)(THIS_ CONST DWORD *pFunction) PURE;
1495     STDMETHOD(CompileShader)(THIS) PURE;
1496     /*** IWineD3DPixelShader methods ***/
1497     STDMETHOD(GetDevice)(THIS_ IWineD3DDevice** ppDevice) PURE;
1498     STDMETHOD(GetFunction)(THIS_ VOID* pData, UINT* pSizeOfData) PURE;
1499 };
1500 #undef INTERFACE
1501
1502 #if !defined(__cplusplus) || defined(CINTERFACE)
1503 /*** IUnknown methods ***/
1504 #define IWineD3DPixelShader_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
1505 #define IWineD3DPixelShader_AddRef(p)                  (p)->lpVtbl->AddRef(p)
1506 #define IWineD3DPixelShader_Release(p)                 (p)->lpVtbl->Release(p)
1507 /*** IWineD3DBase methods ***/
1508 #define IWineD3DPixelShader_GetParent(p,a)             (p)->lpVtbl->GetParent(p,a)
1509 /*** IWineD3DBaseShader methods ***/
1510 #define IWineD3DPixelShader_SetFunction(p,a)           (p)->lpVtbl->SetFunction(p,a)
1511 #define IWineD3DPixelShader_CompileShader(p)           (p)->lpVtbl->CompileShader(p)
1512 /*** IWineD3DPixelShader methods ***/
1513 #define IWineD3DPixelShader_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)
1514 #define IWineD3DPixelShader_GetFunction(p,a,b)         (p)->lpVtbl->GetFunction(p,a,b)
1515 #endif
1516
1517 /*****************************************************************************
1518  * IWineD3DPalette interface
1519  */
1520 #define INTERFACE IWineD3DPalette
1521 DECLARE_INTERFACE_(IWineD3DPalette,IUnknown)
1522 {
1523     /*** IUnknown methods ***/
1524     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
1525     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1526     STDMETHOD_(ULONG,Release)(THIS) PURE;
1527     /*** IWineD3DPalette methods ***/
1528     STDMETHOD_(HRESULT,GetParent)(THIS_ IUnknown **Parent);
1529     STDMETHOD_(HRESULT,GetEntries)(THIS_ DWORD Flags, DWORD Start, DWORD Count, PALETTEENTRY *PalEnt);
1530     STDMETHOD_(HRESULT,GetCaps)(THIS_ DWORD *Caps);
1531     STDMETHOD_(HRESULT,SetEntries)(THIS_ DWORD Flags, DWORD Start, DWORD Count, PALETTEENTRY *PalEnt);
1532 };
1533 #undef INTERFACE
1534
1535 #if !defined(__cplusplus) || defined(CINTERFACE)
1536 /*** IUnknown methods ***/
1537 #define IWineD3DPalette_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
1538 #define IWineD3DPalette_AddRef(p)                  (p)->lpVtbl->AddRef(p)
1539 #define IWineD3DPalette_Release(p)                 (p)->lpVtbl->Release(p)
1540 /*** IWineD3DPalette methods ***/
1541 #define IWineD3DPalette_GetParent(p, a)            (p)->lpVtbl->GetParent(p, a)
1542 #define IWineD3DPalette_GetEntries(p, a, b, c, d)  (p)->lpVtbl->GetEntries(p, a, b, c, d)
1543 #define IWineD3DPalette_GetCaps(p, a)              (p)->lpVtbl->GetCaps(p, a)
1544 #define IWineD3DPalette_SetEntries(p, a, b, c, d)  (p)->lpVtbl->SetEntries(p, a, b, c, d)
1545 #endif
1546
1547 /*****************************************************************************
1548  * IDirectDrawClipper interface
1549  */
1550 #define INTERFACE IWineD3DClipper
1551 DECLARE_INTERFACE_(IWineD3DClipper,IUnknown)
1552 {
1553     /*** IUnknown methods ***/
1554     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
1555     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1556     STDMETHOD_(ULONG,Release)(THIS) PURE;
1557     /*** WineD3DBase methods ***/
1558     STDMETHOD_(HRESULT,GetParent)(THIS_ IUnknown **parent) PURE;
1559     /*** IWineD3DClipper methods ***/
1560     STDMETHOD(GetClipList)(THIS_ LPRECT lpRect, LPRGNDATA lpClipList, LPDWORD lpdwSize) PURE;
1561     STDMETHOD(GetHWnd)(THIS_ HWND *lphWnd) PURE;
1562     STDMETHOD(IsClipListChanged)(THIS_ BOOL *lpbChanged) PURE;
1563     STDMETHOD(SetClipList)(THIS_ LPRGNDATA lpClipList, DWORD dwFlags) PURE;
1564     STDMETHOD(SetHWnd)(THIS_ DWORD dwFlags, HWND hWnd) PURE;
1565 };
1566 #undef INTERFACE
1567
1568 #if !defined(__cplusplus) || defined(CINTERFACE)
1569 /*** IUnknown methods ***/
1570 #define IWineD3DClipper_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
1571 #define IWineD3DClipper_AddRef(p)                  (p)->lpVtbl->AddRef(p)
1572 #define IWineD3DClipper_Release(p)                 (p)->lpVtbl->Release(p)
1573 /*** IWineD3DClipper methods ***/
1574 #define IWineD3DClipper_GetClipList(p,a,b,c)       (p)->lpVtbl->GetClipList(p,a,b,c)
1575 #define IWineD3DClipper_GetHWnd(p,a)               (p)->lpVtbl->GetHWnd(p,a)
1576 #define IWineD3DClipper_IsClipListChanged(p,a)     (p)->lpVtbl->IsClipListChanged(p,a)
1577 #define IWineD3DClipper_SetClipList(p,a,b)         (p)->lpVtbl->SetClipList(p,a,b)
1578 #define IWineD3DClipper_SetHWnd(p,a,b)             (p)->lpVtbl->SetHWnd(p,a,b)
1579 #else
1580 /*** IUnknown methods ***/
1581 #define IWineD3DClipper_QueryInterface(p,a,b)      (p)->QueryInterface(a,b)
1582 #define IWineD3DClipper_AddRef(p)                  (p)->AddRef()
1583 #define IWineD3DClipper_Release(p)                 (p)->Release()
1584 /*** IWineD3DClipper methods ***/
1585 #define IWineD3DClipper_GetClipList(p,a,b,c)       (p)->GetClipList(a,b,c)
1586 #define IWineD3DClipper_GetHWnd(p,a)               (p)->GetHWnd(a)
1587 #define IWineD3DClipper_IsClipListChanged(p,a)     (p)->IsClipListChanged(a)
1588 #define IWineD3DClipper_SetClipList(p,a,b)         (p)->SetClipList(a,b)
1589 #define IWineD3DClipper_SetHWnd(p,a,b)             (p)->SetHWnd(a,b)
1590 #endif
1591
1592 /* DDraw Clippers are not created from DDraw objects, they have a seperate creation function */
1593 IWineD3DClipper* WINAPI WineDirect3DCreateClipper(IUnknown *parent);
1594
1595 #if 0 /* FIXME: During porting in from d3d8 - the following will be used */
1596 extern HRESULT WINAPI IDirect3DVertexShaderImpl_ParseProgram(IDirect3DVertexShaderImpl* This, CONST DWORD* pFunction);
1597 /* internal Interfaces */
1598 extern HRESULT WINAPI IDirect3DVertexShaderImpl_ExecuteSW(IDirect3DVertexShaderImpl* This, VSHADERINPUTDATA* input, VSHADEROUTPUTDATA* output);
1599 #endif /* Temporary #if 0 */
1600
1601
1602 #endif