]> git.cworth.org Git - apitrace/blob - d3d.py
D3D7 corrections.
[apitrace] / d3d.py
1 ##########################################################################
2 #
3 # Copyright 2008-2009 VMware, Inc.
4 # All Rights Reserved.
5 #
6 # Permission is hereby granted, free of charge, to any person obtaining a copy
7 # of this software and associated documentation files (the "Software"), to deal
8 # in the Software without restriction, including without limitation the rights
9 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 # copies of the Software, and to permit persons to whom the Software is
11 # furnished to do so, subject to the following conditions:
12 #
13 # The above copyright notice and this permission notice shall be included in
14 # all copies or substantial portions of the Software.
15 #
16 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 # THE SOFTWARE.
23 #
24 ##########################################################################/
25
26 """d3d.h"""
27
28 from winapi import *
29 from ddraw import *
30 from d3dtypes import *
31 from d3dcaps import *
32
33 def OutPointer(type):
34     return Out(Pointer(type), "out")
35
36 d3dnextFlags = Flags(DWORD, [
37     "D3DNEXT_NEXT",
38     "D3DNEXT_HEAD",
39     "D3DNEXT_TAIL",
40 ])
41
42 direct3dFlags = Flags(DWORD, [
43     "DIRECT3D_VERSION",
44 ])
45
46 d3ddpFlags = Flags(DWORD, [
47     "D3DDP_WAIT",
48     "D3DDP_OUTOFORDER",
49     "D3DDP_DONOTCLIP",
50     "D3DDP_DONOTUPDATEEXTENTS",
51     "D3DDP_DONOTLIGHT",
52 ])
53
54 HRESULT = Enum("HRESULT", [
55     "D3D_OK",
56     "D3DERR_BADMAJORVERSION",
57     "D3DERR_BADMINORVERSION",
58     "D3DERR_INVALID_DEVICE",
59     "D3DERR_INITFAILED",
60     "D3DERR_DEVICEAGGREGATED",
61     "D3DERR_EXECUTE_CREATE_FAILED",
62     "D3DERR_EXECUTE_DESTROY_FAILED",
63     "D3DERR_EXECUTE_LOCK_FAILED",
64     "D3DERR_EXECUTE_UNLOCK_FAILED",
65     "D3DERR_EXECUTE_LOCKED",
66     "D3DERR_EXECUTE_NOT_LOCKED",
67     "D3DERR_EXECUTE_FAILED",
68     "D3DERR_EXECUTE_CLIPPED_FAILED",
69     "D3DERR_TEXTURE_NO_SUPPORT",
70     "D3DERR_TEXTURE_CREATE_FAILED",
71     "D3DERR_TEXTURE_DESTROY_FAILED",
72     "D3DERR_TEXTURE_LOCK_FAILED",
73     "D3DERR_TEXTURE_UNLOCK_FAILED",
74     "D3DERR_TEXTURE_LOAD_FAILED",
75     "D3DERR_TEXTURE_SWAP_FAILED",
76     "D3DERR_TEXTURE_LOCKED",
77     "D3DERR_TEXTURE_NOT_LOCKED",
78     "D3DERR_TEXTURE_GETSURF_FAILED",
79     "D3DERR_MATRIX_CREATE_FAILED",
80     "D3DERR_MATRIX_DESTROY_FAILED",
81     "D3DERR_MATRIX_SETDATA_FAILED",
82     "D3DERR_MATRIX_GETDATA_FAILED",
83     "D3DERR_SETVIEWPORTDATA_FAILED",
84     "D3DERR_INVALIDCURRENTVIEWPORT",
85     "D3DERR_INVALIDPRIMITIVETYPE",
86     "D3DERR_INVALIDVERTEXTYPE",
87     "D3DERR_TEXTURE_BADSIZE",
88     "D3DERR_INVALIDRAMPTEXTURE",
89     "D3DERR_MATERIAL_CREATE_FAILED",
90     "D3DERR_MATERIAL_DESTROY_FAILED",
91     "D3DERR_MATERIAL_SETDATA_FAILED",
92     "D3DERR_MATERIAL_GETDATA_FAILED",
93     "D3DERR_INVALIDPALETTE",
94     "D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY",
95     "D3DERR_ZBUFF_NEEDS_VIDEOMEMORY",
96     "D3DERR_SURFACENOTINVIDMEM",
97     "D3DERR_LIGHT_SET_FAILED",
98     "D3DERR_LIGHTHASVIEWPORT",
99     "D3DERR_LIGHTNOTINTHISVIEWPORT",
100     "D3DERR_SCENE_IN_SCENE",
101     "D3DERR_SCENE_NOT_IN_SCENE",
102     "D3DERR_SCENE_BEGIN_FAILED",
103     "D3DERR_SCENE_END_FAILED",
104     "D3DERR_INBEGIN",
105     "D3DERR_NOTINBEGIN",
106     "D3DERR_NOVIEWPORTS",
107     "D3DERR_VIEWPORTDATANOTSET",
108     "D3DERR_VIEWPORTHASNODEVICE",
109     "D3DERR_NOCURRENTVIEWPORT",
110     "D3DERR_INVALIDVERTEXFORMAT",
111     "D3DERR_COLORKEYATTACHED",
112     "D3DERR_VERTEXBUFFEROPTIMIZED",
113     "D3DERR_VBUF_CREATE_FAILED",
114     "D3DERR_VERTEXBUFFERLOCKED",
115     "D3DERR_VERTEXBUFFERUNLOCKFAILED",
116     "D3DERR_ZBUFFER_NOTPRESENT",
117     "D3DERR_STENCILBUFFER_NOTPRESENT",
118     "D3DERR_WRONGTEXTUREFORMAT",
119     "D3DERR_UNSUPPORTEDCOLOROPERATION",
120     "D3DERR_UNSUPPORTEDCOLORARG",
121     "D3DERR_UNSUPPORTEDALPHAOPERATION",
122     "D3DERR_UNSUPPORTEDALPHAARG",
123     "D3DERR_TOOMANYOPERATIONS",
124     "D3DERR_CONFLICTINGTEXTUREFILTER",
125     "D3DERR_UNSUPPORTEDFACTORVALUE",
126     "D3DERR_CONFLICTINGRENDERSTATE",
127     "D3DERR_UNSUPPORTEDTEXTUREFILTER",
128     "D3DERR_TOOMANYPRIMITIVES",
129     "D3DERR_INVALIDMATRIX",
130     "D3DERR_TOOMANYVERTICES",
131     "D3DERR_CONFLICTINGTEXTUREPALETTE",
132     "D3DERR_INVALIDSTATEBLOCK",
133     "D3DERR_INBEGINSTATEBLOCK",
134     "D3DERR_NOTINBEGINSTATEBLOCK",
135 ])
136
137 IDirect3D = Interface("IDirect3D", IUnknown)
138 IDirect3D2 = Interface("IDirect3D2", IUnknown)
139 IDirect3D3 = Interface("IDirect3D3", IUnknown)
140 IDirect3D7 = Interface("IDirect3D7", IUnknown)
141 IDirect3DDevice = Interface("IDirect3DDevice", IUnknown)
142 IDirect3DDevice2 = Interface("IDirect3DDevice2", IUnknown)
143 IDirect3DDevice3 = Interface("IDirect3DDevice3", IUnknown)
144 IDirect3DDevice7 = Interface("IDirect3DDevice7", IUnknown)
145 IDirect3DExecuteBuffer = Interface("IDirect3DExecuteBuffer", IUnknown)
146 IDirect3DLight = Interface("IDirect3DLight", IUnknown)
147 IDirect3DMaterial = Interface("IDirect3DMaterial", IUnknown)
148 IDirect3DMaterial2 = Interface("IDirect3DMaterial2", IUnknown)
149 IDirect3DMaterial3 = Interface("IDirect3DMaterial3", IUnknown)
150 IDirect3DTexture = Interface("IDirect3DTexture", IUnknown)
151 IDirect3DTexture2 = Interface("IDirect3DTexture2", IUnknown)
152 IDirect3DViewport = Interface("IDirect3DViewport", IUnknown)
153 IDirect3DViewport2 = Interface("IDirect3DViewport2", IDirect3DViewport)
154 IDirect3DViewport3 = Interface("IDirect3DViewport3", IDirect3DViewport2)
155 IDirect3DVertexBuffer = Interface("IDirect3DVertexBuffer", IUnknown)
156 IDirect3DVertexBuffer7 = Interface("IDirect3DVertexBuffer7", IUnknown)
157
158 LPUNKNOWN = WrapPointer(IUnknown)
159
160 LPDIRECT3D = WrapPointer(IDirect3D)
161 LPDIRECT3DDEVICE = WrapPointer(IDirect3DDevice)
162 LPDIRECT3DEXECUTEBUFFER = WrapPointer(IDirect3DExecuteBuffer)
163 LPDIRECT3DLIGHT = WrapPointer(IDirect3DLight)
164 LPDIRECT3DMATERIAL = WrapPointer(IDirect3DMaterial)
165 LPDIRECT3DTEXTURE = WrapPointer(IDirect3DTexture)
166 LPDIRECT3DVIEWPORT = WrapPointer(IDirect3DViewport)
167
168 LPDIRECT3D2 = WrapPointer(IDirect3D2)
169 LPDIRECT3DDEVICE2 = WrapPointer(IDirect3DDevice2)
170 LPDIRECT3DMATERIAL2 = WrapPointer(IDirect3DMaterial2)
171 LPDIRECT3DTEXTURE2 = WrapPointer(IDirect3DTexture2)
172 LPDIRECT3DVIEWPORT2 = WrapPointer(IDirect3DViewport2)
173
174 LPDIRECT3D3 = WrapPointer(IDirect3D3)
175 LPDIRECT3DDEVICE3 = WrapPointer(IDirect3DDevice3)
176 LPDIRECT3DMATERIAL3 = WrapPointer(IDirect3DMaterial3)
177 LPDIRECT3DVIEWPORT3 = WrapPointer(IDirect3DViewport3)
178 LPDIRECT3DVERTEXBUFFER = WrapPointer(IDirect3DVertexBuffer)
179
180 LPDIRECT3D7 = WrapPointer(IDirect3D7)
181 LPDIRECT3DDEVICE7 = WrapPointer(IDirect3DDevice7)
182 LPDIRECT3DVERTEXBUFFER7 = WrapPointer(IDirect3DVertexBuffer7)
183
184 IDirect3D.methods += [
185     Method(HRESULT, "Initialize", [(REFCLSID, "arg0")]),
186     Method(HRESULT, "EnumDevices", [(LPD3DENUMDEVICESCALLBACK, "arg0"), (LPVOID, "arg1")]),
187     Method(HRESULT, "CreateLight", [Out(Pointer(LPDIRECT3DLIGHT), "arg0"), (LPUNKNOWN, "arg1")]),
188     Method(HRESULT, "CreateMaterial", [Out(Pointer(LPDIRECT3DMATERIAL), "arg0"), (LPUNKNOWN, "arg1")]),
189     Method(HRESULT, "CreateViewport", [Out(Pointer(LPDIRECT3DVIEWPORT), "arg0"), (LPUNKNOWN, "arg1")]),
190     Method(HRESULT, "FindDevice", [(LPD3DFINDDEVICESEARCH, "arg0"), (LPD3DFINDDEVICERESULT, "arg1")]),
191 ]
192
193 IDirect3D2.methods += [
194     Method(HRESULT, "EnumDevices", [(LPD3DENUMDEVICESCALLBACK, "arg0"), (LPVOID, "arg1")]),
195     Method(HRESULT, "CreateLight", [Out(Pointer(LPDIRECT3DLIGHT), "arg0"), (LPUNKNOWN, "arg1")]),
196     Method(HRESULT, "CreateMaterial", [Out(Pointer(LPDIRECT3DMATERIAL2), "arg0"), (LPUNKNOWN, "arg1")]),
197     Method(HRESULT, "CreateViewport", [Out(Pointer(LPDIRECT3DVIEWPORT2), "arg0"), (LPUNKNOWN, "arg1")]),
198     Method(HRESULT, "FindDevice", [(LPD3DFINDDEVICESEARCH, "arg0"), (LPD3DFINDDEVICERESULT, "arg1")]),
199     Method(HRESULT, "CreateDevice", [(REFCLSID, "arg0"), (LPDIRECTDRAWSURFACE, "arg1"), Out(Pointer(LPDIRECT3DDEVICE2), "arg2")]),
200 ]
201
202 IDirect3D3.methods += [
203     Method(HRESULT, "EnumDevices", [(LPD3DENUMDEVICESCALLBACK, "arg0"), (LPVOID, "arg1")]),
204     Method(HRESULT, "CreateLight", [Out(Pointer(LPDIRECT3DLIGHT), "arg0"), (LPUNKNOWN, "arg1")]),
205     Method(HRESULT, "CreateMaterial", [Out(Pointer(LPDIRECT3DMATERIAL3), "arg0"), (LPUNKNOWN, "arg1")]),
206     Method(HRESULT, "CreateViewport", [Out(Pointer(LPDIRECT3DVIEWPORT3), "arg0"), (LPUNKNOWN, "arg1")]),
207     Method(HRESULT, "FindDevice", [(LPD3DFINDDEVICESEARCH, "arg0"), Out(LPD3DFINDDEVICERESULT, "arg1")]),
208     Method(HRESULT, "CreateDevice", [(REFCLSID, "arg0"), (LPDIRECTDRAWSURFACE4, "arg1"), Out(Pointer(LPDIRECT3DDEVICE3), "arg2"), (LPUNKNOWN, "arg3")]),
209     Method(HRESULT, "CreateVertexBuffer", [(LPD3DVERTEXBUFFERDESC, "arg0"), Out(Pointer(LPDIRECT3DVERTEXBUFFER), "arg1"), (DWORD, "arg2"), (LPUNKNOWN, "arg3")]),
210     Method(HRESULT, "EnumZBufferFormats", [(REFCLSID, "arg0"), (LPD3DENUMPIXELFORMATSCALLBACK, "arg1"), (LPVOID, "arg2")]),
211     Method(HRESULT, "EvictManagedTextures", []),
212 ]
213
214 IDirect3D7.methods += [
215     Method(HRESULT, "EnumDevices", [(LPD3DENUMDEVICESCALLBACK7, "arg0"), (LPVOID, "arg1")]),
216     Method(HRESULT, "CreateDevice", [(REFCLSID, "arg0"), (LPDIRECTDRAWSURFACE7, "arg1"), Out(Pointer(LPDIRECT3DDEVICE7), "arg2")]),
217     Method(HRESULT, "CreateVertexBuffer", [(LPD3DVERTEXBUFFERDESC, "arg0"), Out(Pointer(LPDIRECT3DVERTEXBUFFER7), "arg1"), (DWORD, "arg2")]),
218     Method(HRESULT, "EnumZBufferFormats", [(REFCLSID, "arg0"), (LPD3DENUMPIXELFORMATSCALLBACK, "arg1"), (LPVOID, "arg2")]),
219     Method(HRESULT, "EvictManagedTextures", []),
220 ]
221
222 IDirect3DDevice.methods += [
223     Method(HRESULT, "Initialize", [(LPDIRECT3D, "arg0"), (LPGUID, "arg1"), (LPD3DDEVICEDESC, "arg2")]),
224     Method(HRESULT, "GetCaps", [Out(LPD3DDEVICEDESC, "arg0"), Out(LPD3DDEVICEDESC, "arg1")]),
225     Method(HRESULT, "SwapTextureHandles", [(LPDIRECT3DTEXTURE, "arg0"), (LPDIRECT3DTEXTURE, "arg1")]),
226     Method(HRESULT, "CreateExecuteBuffer", [(LPD3DEXECUTEBUFFERDESC, "arg0"), Out(Pointer(LPDIRECT3DEXECUTEBUFFER), "arg1"), (LPUNKNOWN, "arg2")]),
227     Method(HRESULT, "GetStats", [(LPD3DSTATS, "arg0")]),
228     Method(HRESULT, "Execute", [(LPDIRECT3DEXECUTEBUFFER, "arg0"), (LPDIRECT3DVIEWPORT, "arg1"), (DWORD, "arg2")]),
229     Method(HRESULT, "AddViewport", [(LPDIRECT3DVIEWPORT, "arg0")]),
230     Method(HRESULT, "DeleteViewport", [(LPDIRECT3DVIEWPORT, "arg0")]),
231     Method(HRESULT, "NextViewport", [(LPDIRECT3DVIEWPORT, "arg0"), Out(Pointer(LPDIRECT3DVIEWPORT), "arg1"), (DWORD, "arg2")]),
232     Method(HRESULT, "Pick", [(LPDIRECT3DEXECUTEBUFFER, "arg0"), (LPDIRECT3DVIEWPORT, "arg1"), (DWORD, "arg2"), (LPD3DRECT, "arg3")]),
233     Method(HRESULT, "GetPickRecords", [(LPDWORD, "arg0"), (LPD3DPICKRECORD, "arg1")]),
234     Method(HRESULT, "EnumTextureFormats", [(LPD3DENUMTEXTUREFORMATSCALLBACK, "arg0"), (LPVOID, "arg1")]),
235     Method(HRESULT, "CreateMatrix", [Out(LPD3DMATRIXHANDLE, "arg0")]),
236     Method(HRESULT, "SetMatrix", [(D3DMATRIXHANDLE, "arg0"), (Const(LPD3DMATRIX), "arg1")]),
237     Method(HRESULT, "GetMatrix", [(D3DMATRIXHANDLE, "arg0"), Out(LPD3DMATRIX, "arg1")]),
238     Method(HRESULT, "DeleteMatrix", [(D3DMATRIXHANDLE, "arg0")]),
239     Method(HRESULT, "BeginScene", []),
240     Method(HRESULT, "EndScene", []),
241     Method(HRESULT, "GetDirect3D", [OutPointer(LPDIRECT3D)]),
242 ]
243
244 IDirect3DDevice2.methods += [
245     Method(HRESULT, "GetCaps", [Out(LPD3DDEVICEDESC, "arg0"), Out(LPD3DDEVICEDESC, "arg1")]),
246     Method(HRESULT, "SwapTextureHandles", [(LPDIRECT3DTEXTURE2, "arg0"), (LPDIRECT3DTEXTURE2, "arg1")]),
247     Method(HRESULT, "GetStats", [Out(LPD3DSTATS, "arg0")]),
248     Method(HRESULT, "AddViewport", [(LPDIRECT3DVIEWPORT2, "arg0")]),
249     Method(HRESULT, "DeleteViewport", [(LPDIRECT3DVIEWPORT2, "arg0")]),
250     Method(HRESULT, "NextViewport", [(LPDIRECT3DVIEWPORT2, "arg0"), Out(Pointer(LPDIRECT3DVIEWPORT2), "arg1"), (DWORD, "arg2")]),
251     Method(HRESULT, "EnumTextureFormats", [(LPD3DENUMTEXTUREFORMATSCALLBACK, "arg0"), (LPVOID, "arg1")]),
252     Method(HRESULT, "BeginScene", []),
253     Method(HRESULT, "EndScene", []),
254     Method(HRESULT, "GetDirect3D", [Out(Pointer(LPDIRECT3D2), "arg0")]),
255     Method(HRESULT, "SetCurrentViewport", [(LPDIRECT3DVIEWPORT2, "arg0")]),
256     Method(HRESULT, "GetCurrentViewport", [Out(Pointer(LPDIRECT3DVIEWPORT2), "arg0")]),
257     Method(HRESULT, "SetRenderTarget", [(LPDIRECTDRAWSURFACE, "arg0"), (DWORD, "arg1")]),
258     Method(HRESULT, "GetRenderTarget", [Out(Pointer(LPDIRECTDRAWSURFACE), "arg0")]),
259     Method(HRESULT, "Begin", [(D3DPRIMITIVETYPE, "arg0"), (D3DVERTEXTYPE, "arg1"), (DWORD, "arg2")]),
260     Method(HRESULT, "BeginIndexed", [(D3DPRIMITIVETYPE, "arg0"), (D3DVERTEXTYPE, "arg1"), (LPVOID, "arg2"), (DWORD, "arg3"), (DWORD, "arg4")]),
261     Method(HRESULT, "Vertex", [(LPVOID, "arg0")]),
262     Method(HRESULT, "Index", [(WORD, "arg0")]),
263     Method(HRESULT, "End", [(DWORD, "arg0")]),
264     Method(HRESULT, "GetRenderState", [(D3DRENDERSTATETYPE, "arg0"), Out(LPDWORD, "arg1")]),
265     Method(HRESULT, "SetRenderState", [(D3DRENDERSTATETYPE, "arg0"), (DWORD, "arg1")]),
266     Method(HRESULT, "GetLightState", [(D3DLIGHTSTATETYPE, "arg0"), Out(LPDWORD, "arg1")]),
267     Method(HRESULT, "SetLightState", [(D3DLIGHTSTATETYPE, "arg0"), (DWORD, "arg1")]),
268     Method(HRESULT, "SetTransform", [(D3DTRANSFORMSTATETYPE, "arg0"), (LPD3DMATRIX, "arg1")]),
269     Method(HRESULT, "GetTransform", [(D3DTRANSFORMSTATETYPE, "arg0"), Out(LPD3DMATRIX, "arg1")]),
270     Method(HRESULT, "MultiplyTransform", [(D3DTRANSFORMSTATETYPE, "arg0"), Out(LPD3DMATRIX, "arg1")]),
271     Method(HRESULT, "DrawPrimitive", [(D3DPRIMITIVETYPE, "arg0"), (D3DVERTEXTYPE, "arg1"), (LPVOID, "arg2"), (DWORD, "arg3"), (DWORD, "arg4")]),
272     Method(HRESULT, "DrawIndexedPrimitive", [(D3DPRIMITIVETYPE, "arg0"), (D3DVERTEXTYPE, "arg1"), (LPVOID, "arg2"), (DWORD, "arg3"), (LPWORD, "arg4"), (DWORD, "arg5"), (DWORD, "arg6")]),
273     Method(HRESULT, "SetClipStatus", [(LPD3DCLIPSTATUS, "arg0")]),
274     Method(HRESULT, "GetClipStatus", [(LPD3DCLIPSTATUS, "arg0")]),
275 ]
276
277 IDirect3DDevice3.methods += [
278     Method(HRESULT, "GetCaps", [Out(LPD3DDEVICEDESC, "arg0"), Out(LPD3DDEVICEDESC, "arg1")]),
279     Method(HRESULT, "GetStats", [Out(LPD3DSTATS, "arg0")]),
280     Method(HRESULT, "AddViewport", [(LPDIRECT3DVIEWPORT3, "arg0")]),
281     Method(HRESULT, "DeleteViewport", [(LPDIRECT3DVIEWPORT3, "arg0")]),
282     Method(HRESULT, "NextViewport", [(LPDIRECT3DVIEWPORT3, "arg0"), Out(Pointer(LPDIRECT3DVIEWPORT3), "arg1"), (DWORD, "arg2")]),
283     Method(HRESULT, "EnumTextureFormats", [(LPD3DENUMPIXELFORMATSCALLBACK, "arg0"), (LPVOID, "arg1")]),
284     Method(HRESULT, "BeginScene", []),
285     Method(HRESULT, "EndScene", []),
286     Method(HRESULT, "GetDirect3D", [Out(Pointer(LPDIRECT3D3), "arg0")]),
287     Method(HRESULT, "SetCurrentViewport", [(LPDIRECT3DVIEWPORT3, "arg0")]),
288     Method(HRESULT, "GetCurrentViewport", [Out(Pointer(LPDIRECT3DVIEWPORT3), "arg0")]),
289     Method(HRESULT, "SetRenderTarget", [(LPDIRECTDRAWSURFACE4, "arg0"), (DWORD, "arg1")]),
290     Method(HRESULT, "GetRenderTarget", [Out(Pointer(LPDIRECTDRAWSURFACE4), "arg0")]),
291     Method(HRESULT, "Begin", [(D3DPRIMITIVETYPE, "arg0"), (DWORD, "arg1"), (DWORD, "arg2")]),
292     Method(HRESULT, "BeginIndexed", [(D3DPRIMITIVETYPE, "arg0"), (DWORD, "arg1"), (LPVOID, "arg2"), (DWORD, "arg3"), (DWORD, "arg4")]),
293     Method(HRESULT, "Vertex", [(LPVOID, "arg0")]),
294     Method(HRESULT, "Index", [(WORD, "arg0")]),
295     Method(HRESULT, "End", [(DWORD, "arg0")]),
296     Method(HRESULT, "GetRenderState", [(D3DRENDERSTATETYPE, "arg0"), Out(LPDWORD, "arg1")]),
297     Method(HRESULT, "SetRenderState", [(D3DRENDERSTATETYPE, "arg0"), (DWORD, "arg1")]),
298     Method(HRESULT, "GetLightState", [(D3DLIGHTSTATETYPE, "arg0"), Out(LPDWORD, "arg1")]),
299     Method(HRESULT, "SetLightState", [(D3DLIGHTSTATETYPE, "arg0"), (DWORD, "arg1")]),
300     Method(HRESULT, "SetTransform", [(D3DTRANSFORMSTATETYPE, "arg0"), (LPD3DMATRIX, "arg1")]),
301     Method(HRESULT, "GetTransform", [(D3DTRANSFORMSTATETYPE, "arg0"), Out(LPD3DMATRIX, "arg1")]),
302     Method(HRESULT, "MultiplyTransform", [(D3DTRANSFORMSTATETYPE, "arg0"), Out(LPD3DMATRIX, "arg1")]),
303     Method(HRESULT, "DrawPrimitive", [(D3DPRIMITIVETYPE, "arg0"), (DWORD, "arg1"), (LPVOID, "arg2"), (DWORD, "arg3"), (DWORD, "arg4")]),
304     Method(HRESULT, "DrawIndexedPrimitive", [(D3DPRIMITIVETYPE, "arg0"), (DWORD, "arg1"), (LPVOID, "arg2"), (DWORD, "arg3"), (LPWORD, "arg4"), (DWORD, "arg5"), (DWORD, "arg6")]),
305     Method(HRESULT, "SetClipStatus", [(LPD3DCLIPSTATUS, "arg0")]),
306     Method(HRESULT, "GetClipStatus", [Out(LPD3DCLIPSTATUS, "arg0")]),
307     Method(HRESULT, "DrawPrimitiveStrided", [(D3DPRIMITIVETYPE, "arg0"), (DWORD, "arg1"), (LPD3DDRAWPRIMITIVESTRIDEDDATA, "arg2"), (DWORD, "arg3"), (DWORD, "arg4")]),
308     Method(HRESULT, "DrawIndexedPrimitiveStrided", [(D3DPRIMITIVETYPE, "arg0"), (DWORD, "arg1"), (LPD3DDRAWPRIMITIVESTRIDEDDATA, "arg2"), (DWORD, "arg3"), (LPWORD, "arg4"), (DWORD, "arg5"), (DWORD, "arg6")]),
309     Method(HRESULT, "DrawPrimitiveVB", [(D3DPRIMITIVETYPE, "arg0"), (LPDIRECT3DVERTEXBUFFER, "arg1"), (DWORD, "arg2"), (DWORD, "arg3"), (DWORD, "arg4")]),
310     Method(HRESULT, "DrawIndexedPrimitiveVB", [(D3DPRIMITIVETYPE, "arg0"), (LPDIRECT3DVERTEXBUFFER, "arg1"), (LPWORD, "arg2"), (DWORD, "arg3"), (DWORD, "arg4")]),
311     Method(HRESULT, "ComputeSphereVisibility", [(LPD3DVECTOR, "arg0"), (LPD3DVALUE, "arg1"), (DWORD, "arg2"), (DWORD, "arg3"), (LPDWORD, "arg4")]),
312     Method(HRESULT, "GetTexture", [(DWORD, "arg0"), Out(Pointer(LPDIRECT3DTEXTURE2), "arg1")]),
313     Method(HRESULT, "SetTexture", [(DWORD, "arg0"), (LPDIRECT3DTEXTURE2, "arg1")]),
314     Method(HRESULT, "GetTextureStageState", [(DWORD, "arg0"), (D3DTEXTURESTAGESTATETYPE, "arg1"), Out(LPDWORD, "arg2")]),
315     Method(HRESULT, "SetTextureStageState", [(DWORD, "arg0"), (D3DTEXTURESTAGESTATETYPE, "arg1"), (DWORD, "arg2")]),
316     Method(HRESULT, "ValidateDevice", [(LPDWORD, "arg0")]),
317 ]
318
319 IDirect3DDevice7.methods += [
320     Method(HRESULT, "GetCaps", [Out(LPD3DDEVICEDESC7, "arg0")]),
321     Method(HRESULT, "EnumTextureFormats", [(LPD3DENUMPIXELFORMATSCALLBACK, "arg0"), (LPVOID, "arg1")]),
322     Method(HRESULT, "BeginScene", []),
323     Method(HRESULT, "EndScene", []),
324     Method(HRESULT, "GetDirect3D", [Out(Pointer(LPDIRECT3D7), "arg0")]),
325     Method(HRESULT, "SetRenderTarget", [(LPDIRECTDRAWSURFACE7, "arg0"), (DWORD, "arg1")]),
326     Method(HRESULT, "GetRenderTarget", [Out(Pointer(LPDIRECTDRAWSURFACE7), "arg0")]),
327     Method(HRESULT, "Clear", [(DWORD, "arg0"), (LPD3DRECT, "arg1"), (DWORD, "arg2"), (D3DCOLOR, "arg3"), (D3DVALUE, "arg4"), (DWORD, "arg5")]),
328     Method(HRESULT, "SetTransform", [(D3DTRANSFORMSTATETYPE, "arg0"), (LPD3DMATRIX, "arg1")]),
329     Method(HRESULT, "GetTransform", [(D3DTRANSFORMSTATETYPE, "arg0"), Out(LPD3DMATRIX, "arg1")]),
330     Method(HRESULT, "SetViewport", [(LPD3DVIEWPORT7, "arg0")]),
331     Method(HRESULT, "MultiplyTransform", [(D3DTRANSFORMSTATETYPE, "arg0"), (LPD3DMATRIX, "arg1")]),
332     Method(HRESULT, "GetViewport", [Out(LPD3DVIEWPORT7, "arg0")]),
333     Method(HRESULT, "SetMaterial", [(LPD3DMATERIAL7, "arg0")]),
334     Method(HRESULT, "GetMaterial", [Out(LPD3DMATERIAL7, "arg0")]),
335     Method(HRESULT, "SetLight", [(DWORD, "arg0"), (LPD3DLIGHT7, "arg1")]),
336     Method(HRESULT, "GetLight", [(DWORD, "arg0"), (LPD3DLIGHT7, "arg1")]),
337     Method(HRESULT, "SetRenderState", [(D3DRENDERSTATETYPE, "arg0"), (DWORD, "arg1")]),
338     Method(HRESULT, "GetRenderState", [(D3DRENDERSTATETYPE, "arg0"), Out(LPDWORD, "arg1")]),
339     Method(HRESULT, "BeginStateBlock", []),
340     Method(HRESULT, "EndStateBlock", [Out(LPDWORD, "arg0")]),
341     Method(HRESULT, "PreLoad", [(LPDIRECTDRAWSURFACE7, "arg0")]),
342     Method(HRESULT, "DrawPrimitive", [(D3DPRIMITIVETYPE, "arg0"), (DWORD, "arg1"), (LPVOID, "arg2"), (DWORD, "arg3"), (DWORD, "arg4")]),
343     Method(HRESULT, "DrawIndexedPrimitive", [(D3DPRIMITIVETYPE, "arg0"), (DWORD, "arg1"), (LPVOID, "arg2"), (DWORD, "arg3"), (LPWORD, "arg4"), (DWORD, "arg5"), (DWORD, "arg6")]),
344     Method(HRESULT, "SetClipStatus", [(LPD3DCLIPSTATUS, "arg0")]),
345     Method(HRESULT, "GetClipStatus", [Out(LPD3DCLIPSTATUS, "arg0")]),
346     Method(HRESULT, "DrawPrimitiveStrided", [(D3DPRIMITIVETYPE, "arg0"), (DWORD, "arg1"), (LPD3DDRAWPRIMITIVESTRIDEDDATA, "arg2"), (DWORD, "arg3"), (DWORD, "arg4")]),
347     Method(HRESULT, "DrawIndexedPrimitiveStrided", [(D3DPRIMITIVETYPE, "arg0"), (DWORD, "arg1"), (LPD3DDRAWPRIMITIVESTRIDEDDATA, "arg2"), (DWORD, "arg3"), (LPWORD, "arg4"), (DWORD, "arg5"), (DWORD, "arg6")]),
348     Method(HRESULT, "DrawPrimitiveVB", [(D3DPRIMITIVETYPE, "arg0"), (LPDIRECT3DVERTEXBUFFER7, "arg1"), (DWORD, "arg2"), (DWORD, "arg3"), (DWORD, "arg4")]),
349     Method(HRESULT, "DrawIndexedPrimitiveVB", [(D3DPRIMITIVETYPE, "arg0"), (LPDIRECT3DVERTEXBUFFER7, "arg1"), (DWORD, "arg2"), (DWORD, "arg3"), (LPWORD, "arg4"), (DWORD, "arg5"), (DWORD, "arg6")]),
350     Method(HRESULT, "ComputeSphereVisibility", [(LPD3DVECTOR, "arg0"), (LPD3DVALUE, "arg1"), (DWORD, "arg2"), (DWORD, "arg3"), (LPDWORD, "arg4")]),
351     Method(HRESULT, "GetTexture", [(DWORD, "arg0"), Out(Pointer(LPDIRECTDRAWSURFACE7), "arg1")]),
352     Method(HRESULT, "SetTexture", [(DWORD, "arg0"), (LPDIRECTDRAWSURFACE7, "arg1")]),
353     Method(HRESULT, "GetTextureStageState", [(DWORD, "arg0"), (D3DTEXTURESTAGESTATETYPE, "arg1"), Out(LPDWORD, "arg2")]),
354     Method(HRESULT, "SetTextureStageState", [(DWORD, "arg0"), (D3DTEXTURESTAGESTATETYPE, "arg1"), (DWORD, "arg2")]),
355     Method(HRESULT, "ValidateDevice", [Out(LPDWORD, "arg0")]),
356     Method(HRESULT, "ApplyStateBlock", [(DWORD, "arg0")]),
357     Method(HRESULT, "CaptureStateBlock", [(DWORD, "arg0")]),
358     Method(HRESULT, "DeleteStateBlock", [(DWORD, "arg0")]),
359     Method(HRESULT, "CreateStateBlock", [(D3DSTATEBLOCKTYPE, "arg0"), Out(LPDWORD, "arg1")]),
360     Method(HRESULT, "Load", [(LPDIRECTDRAWSURFACE7, "arg0"), (LPPOINT, "arg1"), (LPDIRECTDRAWSURFACE7, "arg2"), (LPRECT, "arg3"), (DWORD, "arg4")]),
361     Method(HRESULT, "LightEnable", [(DWORD, "arg0"), (BOOL, "arg1")]),
362     Method(HRESULT, "GetLightEnable", [(DWORD, "arg0"), Out(Pointer(BOOL), "arg1")]),
363     Method(HRESULT, "SetClipPlane", [(DWORD, "arg0"), (Pointer(D3DVALUE), "arg1")]),
364     Method(HRESULT, "GetClipPlane", [(DWORD, "arg0"), Out(Pointer(D3DVALUE), "arg1")]),
365     Method(HRESULT, "GetInfo", [(DWORD, "arg0"), Out(LPVOID, "arg1"), (DWORD, "arg2")]),
366 ]
367
368 IDirect3DExecuteBuffer.methods += [
369     Method(HRESULT, "Initialize", [(LPDIRECT3DDEVICE, "arg0"), (LPD3DEXECUTEBUFFERDESC, "arg1")]),
370     Method(HRESULT, "Lock", [(LPD3DEXECUTEBUFFERDESC, "arg0")]),
371     Method(HRESULT, "Unlock", []),
372     Method(HRESULT, "SetExecuteData", [(LPD3DEXECUTEDATA, "arg0")]),
373     Method(HRESULT, "GetExecuteData", [Out(LPD3DEXECUTEDATA, "arg0")]),
374     Method(HRESULT, "Validate", [(LPDWORD, "arg0"), (LPD3DVALIDATECALLBACK, "arg1"), (LPVOID, "arg2"), (DWORD, "arg3")]),
375     Method(HRESULT, "Optimize", [(DWORD, "arg0")]),
376 ]
377
378 IDirect3DLight.methods += [
379     Method(HRESULT, "Initialize", [(LPDIRECT3D, "arg0")]),
380     Method(HRESULT, "SetLight", [(LPD3DLIGHT, "arg0")]),
381     Method(HRESULT, "GetLight", [Out(LPD3DLIGHT, "arg0")]),
382 ]
383
384 IDirect3DMaterial.methods += [
385     Method(HRESULT, "Initialize", [(LPDIRECT3D, "arg0")]),
386     Method(HRESULT, "SetMaterial", [(LPD3DMATERIAL, "arg0")]),
387     Method(HRESULT, "GetMaterial", [Out(LPD3DMATERIAL, "arg0")]),
388     Method(HRESULT, "GetHandle", [(LPDIRECT3DDEVICE, "arg0"), Out(LPD3DMATERIALHANDLE, "arg1")]),
389     Method(HRESULT, "Reserve", []),
390     Method(HRESULT, "Unreserve", []),
391 ]
392
393 IDirect3DMaterial2.methods += [
394     Method(HRESULT, "SetMaterial", [(LPD3DMATERIAL, "arg0")]),
395     Method(HRESULT, "GetMaterial", [Out(LPD3DMATERIAL, "arg0")]),
396     Method(HRESULT, "GetHandle", [(LPDIRECT3DDEVICE2, "arg0"), Out(LPD3DMATERIALHANDLE, "arg1")]),
397 ]
398
399 IDirect3DMaterial3.methods += [
400     Method(HRESULT, "SetMaterial", [(LPD3DMATERIAL, "arg0")]),
401     Method(HRESULT, "GetMaterial", [Out(LPD3DMATERIAL, "arg0")]),
402     Method(HRESULT, "GetHandle", [(LPDIRECT3DDEVICE3, "arg0"), Out(LPD3DMATERIALHANDLE, "arg1")]),
403 ]
404
405 IDirect3DTexture.methods += [
406     Method(HRESULT, "Initialize", [(LPDIRECT3DDEVICE, "arg0"), (LPDIRECTDRAWSURFACE, "arg1")]),
407     Method(HRESULT, "GetHandle", [(LPDIRECT3DDEVICE, "arg0"), (LPD3DTEXTUREHANDLE, "arg1")]),
408     Method(HRESULT, "PaletteChanged", [(DWORD, "arg0"), (DWORD, "arg1")]),
409     Method(HRESULT, "Load", [(LPDIRECT3DTEXTURE, "arg0")]),
410     Method(HRESULT, "Unload", []),
411 ]
412
413 IDirect3DTexture2.methods += [
414     Method(HRESULT, "GetHandle", [(LPDIRECT3DDEVICE2, "arg0"), (LPD3DTEXTUREHANDLE, "arg1")]),
415     Method(HRESULT, "PaletteChanged", [(DWORD, "arg0"), (DWORD, "arg1")]),
416     Method(HRESULT, "Load", [(LPDIRECT3DTEXTURE2, "arg0")]),
417 ]
418
419 IDirect3DViewport.methods += [
420     Method(HRESULT, "Initialize", [(LPDIRECT3D, "arg0")]),
421     Method(HRESULT, "GetViewport", [Out(LPD3DVIEWPORT, "arg0")]),
422     Method(HRESULT, "SetViewport", [(LPD3DVIEWPORT, "arg0")]),
423     Method(HRESULT, "TransformVertices", [(DWORD, "arg0"), (LPD3DTRANSFORMDATA, "arg1"), (DWORD, "arg2"), (LPDWORD, "arg3")]),
424     Method(HRESULT, "LightElements", [(DWORD, "arg0"), (LPD3DLIGHTDATA, "arg1")]),
425     Method(HRESULT, "SetBackground", [(D3DMATERIALHANDLE, "arg0")]),
426     Method(HRESULT, "GetBackground", [Out(LPD3DMATERIALHANDLE, "arg0"), Out(LPBOOL, "arg1")]),
427     Method(HRESULT, "SetBackgroundDepth", [(LPDIRECTDRAWSURFACE, "arg0")]),
428     Method(HRESULT, "GetBackgroundDepth", [Out(Pointer(LPDIRECTDRAWSURFACE), "arg0"), Out(LPBOOL, "arg1")]),
429     Method(HRESULT, "Clear", [(DWORD, "arg0"), (LPD3DRECT, "arg1"), (DWORD, "arg2")]),
430     Method(HRESULT, "AddLight", [(LPDIRECT3DLIGHT, "arg0")]),
431     Method(HRESULT, "DeleteLight", [(LPDIRECT3DLIGHT, "arg0")]),
432     Method(HRESULT, "NextLight", [(LPDIRECT3DLIGHT, "arg0"), Out(Pointer(LPDIRECT3DLIGHT), "arg1"), (DWORD, "arg2")]),
433 ]
434
435 IDirect3DViewport2.methods += [
436     Method(HRESULT, "GetViewport2", [Out(LPD3DVIEWPORT2, "arg0")]),
437     Method(HRESULT, "SetViewport2", [(LPD3DVIEWPORT2, "arg0")]),
438 ]
439
440 IDirect3DViewport3.methods += [
441     Method(HRESULT, "SetBackgroundDepth2", [(LPDIRECTDRAWSURFACE4, "arg0")]),
442     Method(HRESULT, "GetBackgroundDepth2", [Out(Pointer(LPDIRECTDRAWSURFACE4), "arg0"), (LPBOOL, "arg1")]),
443     Method(HRESULT, "Clear2", [(DWORD, "arg0"), (LPD3DRECT, "arg1"), (DWORD, "arg2"), (D3DCOLOR, "arg3"), (D3DVALUE, "arg4"), (DWORD, "arg5")]),
444 ]
445
446 IDirect3DVertexBuffer.methods += [
447     Method(HRESULT, "Lock", [(DWORD, "arg0"), Out(Pointer(LPVOID), "arg1"), (LPDWORD, "arg2")]),
448     Method(HRESULT, "Unlock", []),
449     Method(HRESULT, "ProcessVertices", [(DWORD, "arg0"), (DWORD, "arg1"), (DWORD, "arg2"), (LPDIRECT3DVERTEXBUFFER, "arg3"), (DWORD, "arg4"), (LPDIRECT3DDEVICE3, "arg5"), (DWORD, "arg6")]),
450     Method(HRESULT, "GetVertexBufferDesc", [Out(LPD3DVERTEXBUFFERDESC, "arg0")]),
451     Method(HRESULT, "Optimize", [(LPDIRECT3DDEVICE3, "arg0"), (DWORD, "arg1")]),
452 ]
453
454 IDirect3DVertexBuffer7.methods += [
455     Method(HRESULT, "Lock", [(DWORD, "arg0"), Out(Pointer(LPVOID), "arg1"), (LPDWORD, "arg2")]),
456     Method(HRESULT, "Unlock", []),
457     Method(HRESULT, "ProcessVertices", [(DWORD, "arg0"), (DWORD, "arg1"), (DWORD, "arg2"), (LPDIRECT3DVERTEXBUFFER7, "arg3"), (DWORD, "arg4"), (LPDIRECT3DDEVICE7, "arg5"), (DWORD, "arg6")]),
458     Method(HRESULT, "GetVertexBufferDesc", [Out(LPD3DVERTEXBUFFERDESC, "arg0")]),
459     Method(HRESULT, "Optimize", [(LPDIRECT3DDEVICE7, "arg0"), (DWORD, "arg1")]),
460     Method(HRESULT, "ProcessVerticesStrided", [(DWORD, "arg0"), (DWORD, "arg1"), (DWORD, "arg2"), (LPD3DDRAWPRIMITIVESTRIDEDDATA, "arg3"), (DWORD, "arg4"), (LPDIRECT3DDEVICE7, "arg5"), (DWORD, "arg6")]),
461 ]
462
463 interfaces = [
464     IDirectDraw,
465     IDirectDraw2,
466     IDirectDraw4,
467     IDirectDraw7,
468     IDirect3D,
469     IDirect3D2,
470     IDirect3D3,
471     IDirect3D7,
472 ]
473
474 ddraw.add_interfaces(interfaces)
475
476
477 class DDrawTracer(DllTracer):
478
479     def trace_function_impl_body(self, function):
480         if function.name in ('AcquireDDThreadLock', 'ReleaseDDThreadLock'):
481             self.dispatch_function(function)
482             return
483
484         DllTracer.trace_function_impl_body(self, function)
485
486     def wrap_arg(self, function, arg):
487         if function.name == 'DirectDrawCreateEx' and arg.name == 'lplpDD':
488             print '    if (*lplpDD) {'
489             for iface in interfaces:
490                 print '        if (iid == IID_%s) {' % iface.name
491                 print '            *lplpDD = (LPVOID) new Wrap%s((%s *)*lplpDD);' % (iface.name, iface.name)
492                 print '        }'
493             print '    }'
494
495         DllTracer.wrap_arg(self, function, arg)
496
497
498 if __name__ == '__main__':
499     print '#define INITGUID'
500     print '#include <windows.h>'
501     print '#include <ddraw.h>'
502     print '#include <d3d.h>'
503     print
504     print '''
505
506 #ifndef D3DLIGHT_PARALLELPOINT
507 #define D3DLIGHT_PARALLELPOINT (D3DLIGHTTYPE)4
508 #endif
509
510 #ifndef D3DLIGHT_GLSPOT
511 #define D3DLIGHT_GLSPOT (D3DLIGHTTYPE)5
512 #endif
513
514 '''
515     print '#include "trace_writer.hpp"'
516     print '#include "os.hpp"'
517     print
518     tracer = DDrawTracer('ddraw.dll')
519     tracer.trace_api(ddraw)