]> git.cworth.org Git - apitrace/blob - specs/ddraw.py
Use skiplist-based FastCallSet within trace::CallSet
[apitrace] / specs / ddraw.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 """ddraw.h"""
27
28 from winapi import *
29
30 DirectDrawOptSurfaceDescFlags = Flags(DWORD, [
31     "DDOSD_GUID",
32     "DDOSD_COMPRESSION_RATIO",
33     "DDOSD_SCAPS",
34     "DDOSD_OSCAPS",
35     "DDOSD_ALL",
36 ])
37
38 DirectDrawOptSurfaceDescCapsFlags = Flags(DWORD, [
39     "DDOSDCAPS_OPTCOMPRESSED",
40     "DDOSDCAPS_OPTREORDERED",
41     "DDOSDCAPS_MONOLITHICMIPMAP",
42 ])
43
44 DirectDrawGetDeviceIdentifierFlags = Flags(DWORD, [
45     "DDGDI_GETHOSTIDENTIFIER",
46 ])
47
48 IDirectDraw = Interface("IDirectDraw", IUnknown)
49 IDirectDraw2 = Interface("IDirectDraw2", IUnknown)
50 IDirectDraw4 = Interface("IDirectDraw4", IUnknown)
51 IDirectDraw7 = Interface("IDirectDraw7", IUnknown)
52 IDirectDrawPalette = Interface("IDirectDrawPalette", IUnknown)
53 IDirectDrawClipper = Interface("IDirectDrawClipper", IUnknown)
54 IDirectDrawSurface = Interface("IDirectDrawSurface", IUnknown)
55 IDirectDrawSurface2 = Interface("IDirectDrawSurface2", IUnknown)
56 IDirectDrawSurface3 = Interface("IDirectDrawSurface3", IUnknown)
57 IDirectDrawSurface4 = Interface("IDirectDrawSurface4", IUnknown)
58 IDirectDrawSurface7 = Interface("IDirectDrawSurface7", IUnknown)
59 IDirectDrawColorControl = Interface("IDirectDrawColorControl", IUnknown)
60 IDirectDrawGammaControl = Interface("IDirectDrawGammaControl", IUnknown)
61
62 LPUNKNOWN = ObjPointer(IUnknown)
63 LPDIRECTDRAW = ObjPointer(IDirectDraw)
64 LPDIRECTDRAW2 = ObjPointer(IDirectDraw2)
65 LPDIRECTDRAW4 = ObjPointer(IDirectDraw4)
66 LPDIRECTDRAW7 = ObjPointer(IDirectDraw7)
67 LPDIRECTDRAWSURFACE = ObjPointer(IDirectDrawSurface)
68 LPDIRECTDRAWSURFACE2 = ObjPointer(IDirectDrawSurface2)
69 LPDIRECTDRAWSURFACE3 = ObjPointer(IDirectDrawSurface3)
70 LPDIRECTDRAWSURFACE4 = ObjPointer(IDirectDrawSurface4)
71 LPDIRECTDRAWSURFACE7 = ObjPointer(IDirectDrawSurface7)
72 LPDIRECTDRAWPALETTE = ObjPointer(IDirectDrawPalette)
73 LPDIRECTDRAWCLIPPER = ObjPointer(IDirectDrawClipper)
74 LPDIRECTDRAWCOLORCONTROL = ObjPointer(IDirectDrawColorControl)
75 LPDIRECTDRAWGAMMACONTROL = ObjPointer(IDirectDrawGammaControl)
76
77 DDARGB = Struct("DDARGB", [
78     (BYTE, "blue"),
79     (BYTE, "green"),
80     (BYTE, "red"),
81     (BYTE, "alpha"),
82 ])
83
84 LPDDARGB = Pointer(DDARGB)
85
86 DDRGBA = Struct("DDRGBA", [
87     (BYTE, "red"),
88     (BYTE, "green"),
89     (BYTE, "blue"),
90     (BYTE, "alpha"),
91 ])
92 LPDDRGBA = Pointer(DDRGBA)
93
94 DDCOLORKEY = Struct("DDCOLORKEY", [
95     (DWORD, "dwColorSpaceLowValue"),
96     (DWORD, "dwColorSpaceHighValue"),
97 ])
98 LPDDCOLORKEY = Pointer(DDCOLORKEY)
99
100 DDBLTFX = Struct("DDBLTFX", [
101     (DWORD, "dwSize"),
102     (DWORD, "dwDDFX"),
103     (DWORD, "dwROP"),
104     (DWORD, "dwDDROP"),
105     (DWORD, "dwRotationAngle"),
106     (DWORD, "dwZBufferOpCode"),
107     (DWORD, "dwZBufferLow"),
108     (DWORD, "dwZBufferHigh"),
109     (DWORD, "dwZBufferBaseDest"),
110     (DWORD, "dwZDestConstBitDepth"),
111     (DWORD, "dwZDestConst"),
112     (LPDIRECTDRAWSURFACE, "lpDDSZBufferDest"),
113     (DWORD, "dwZSrcConstBitDepth"),
114     (DWORD, "dwZSrcConst"),
115     (LPDIRECTDRAWSURFACE, "lpDDSZBufferSrc"),
116     (DWORD, "dwAlphaEdgeBlendBitDepth"),
117     (DWORD, "dwAlphaEdgeBlend"),
118     (DWORD, "dwReserved"),
119     (DWORD, "dwAlphaDestConstBitDepth"),
120     (DWORD, "dwAlphaDestConst"),
121     (LPDIRECTDRAWSURFACE, "lpDDSAlphaDest"),
122     (DWORD, "dwAlphaSrcConstBitDepth"),
123     (DWORD, "dwAlphaSrcConst"),
124     (LPDIRECTDRAWSURFACE, "lpDDSAlphaSrc"),
125     (DWORD, "dwFillColor"),
126     (DWORD, "dwFillDepth"),
127     (DWORD, "dwFillPixel"),
128     (LPDIRECTDRAWSURFACE, "lpDDSPattern"),
129     (DDCOLORKEY, "ddckDestColorkey"),
130     (DDCOLORKEY, "ddckSrcColorkey"),
131 ])
132 LPDDBLTFX = Pointer(DDBLTFX)
133
134 DDSCAPS = Struct("DDSCAPS", [
135     (DWORD, "dwCaps"),
136 ])
137 LPDDSCAPS = Pointer(DDSCAPS)
138
139 DDOSCAPS = Struct("DDOSCAPS", [
140     (DWORD, "dwCaps"),
141 ])
142 LPDDOSCAPS = Pointer(DDOSCAPS)
143
144 DDSCAPSEX = Struct("DDSCAPSEX", [
145     (DWORD, "dwCaps2"),
146     (DWORD, "dwCaps3"),
147     (DWORD, "dwCaps4"),
148 ])
149
150 DDSCAPS2 = Struct("DDSCAPS2", [
151     (DWORD, "dwCaps"),
152     (DWORD, "dwCaps2"),
153     (DWORD, "dwCaps3"),
154     (DWORD, "dwCaps4"),
155 ])
156 LPDDSCAPS2 = Pointer(DDSCAPS2)
157
158 DDCAPS_DX1 = Struct("DDCAPS_DX1", [
159     (DWORD, "dwSize"),
160     (DWORD, "dwCaps"),
161     (DWORD, "dwCaps2"),
162     (DWORD, "dwCKeyCaps"),
163     (DWORD, "dwFXCaps"),
164     (DWORD, "dwFXAlphaCaps"),
165     (DWORD, "dwPalCaps"),
166     (DWORD, "dwSVCaps"),
167     (DWORD, "dwAlphaBltConstBitDepths"),
168     (DWORD, "dwAlphaBltPixelBitDepths"),
169     (DWORD, "dwAlphaBltSurfaceBitDepths"),
170     (DWORD, "dwAlphaOverlayConstBitDepths"),
171     (DWORD, "dwAlphaOverlayPixelBitDepths"),
172     (DWORD, "dwAlphaOverlaySurfaceBitDepths"),
173     (DWORD, "dwZBufferBitDepths"),
174     (DWORD, "dwVidMemTotal"),
175     (DWORD, "dwVidMemFree"),
176     (DWORD, "dwMaxVisibleOverlays"),
177     (DWORD, "dwCurrVisibleOverlays"),
178     (DWORD, "dwNumFourCCCodes"),
179     (DWORD, "dwAlignBoundarySrc"),
180     (DWORD, "dwAlignSizeSrc"),
181     (DWORD, "dwAlignBoundaryDest"),
182     (DWORD, "dwAlignSizeDest"),
183     (DWORD, "dwAlignStrideAlign"),
184     (Array(DWORD, "DD_ROP_SPACE"), "dwRops"),
185     (DDSCAPS, "ddsCaps"),
186     (DWORD, "dwMinOverlayStretch"),
187     (DWORD, "dwMaxOverlayStretch"),
188     (DWORD, "dwMinLiveVideoStretch"),
189     (DWORD, "dwMaxLiveVideoStretch"),
190     (DWORD, "dwMinHwCodecStretch"),
191     (DWORD, "dwMaxHwCodecStretch"),
192     (DWORD, "dwReserved1"),
193     (DWORD, "dwReserved2"),
194     (DWORD, "dwReserved3"),
195 ])
196 LPDDCAPS_DX1 = Pointer(DDCAPS_DX1)
197
198 DDCAPS_DX3 = Struct("DDCAPS_DX3", [
199     (DWORD, "dwSize"),
200     (DWORD, "dwCaps"),
201     (DWORD, "dwCaps2"),
202     (DWORD, "dwCKeyCaps"),
203     (DWORD, "dwFXCaps"),
204     (DWORD, "dwFXAlphaCaps"),
205     (DWORD, "dwPalCaps"),
206     (DWORD, "dwSVCaps"),
207     (DWORD, "dwAlphaBltConstBitDepths"),
208     (DWORD, "dwAlphaBltPixelBitDepths"),
209     (DWORD, "dwAlphaBltSurfaceBitDepths"),
210     (DWORD, "dwAlphaOverlayConstBitDepths"),
211     (DWORD, "dwAlphaOverlayPixelBitDepths"),
212     (DWORD, "dwAlphaOverlaySurfaceBitDepths"),
213     (DWORD, "dwZBufferBitDepths"),
214     (DWORD, "dwVidMemTotal"),
215     (DWORD, "dwVidMemFree"),
216     (DWORD, "dwMaxVisibleOverlays"),
217     (DWORD, "dwCurrVisibleOverlays"),
218     (DWORD, "dwNumFourCCCodes"),
219     (DWORD, "dwAlignBoundarySrc"),
220     (DWORD, "dwAlignSizeSrc"),
221     (DWORD, "dwAlignBoundaryDest"),
222     (DWORD, "dwAlignSizeDest"),
223     (DWORD, "dwAlignStrideAlign"),
224     (Array(DWORD, "DD_ROP_SPACE"), "dwRops"),
225     (DDSCAPS, "ddsCaps"),
226     (DWORD, "dwMinOverlayStretch"),
227     (DWORD, "dwMaxOverlayStretch"),
228     (DWORD, "dwMinLiveVideoStretch"),
229     (DWORD, "dwMaxLiveVideoStretch"),
230     (DWORD, "dwMinHwCodecStretch"),
231     (DWORD, "dwMaxHwCodecStretch"),
232     (DWORD, "dwReserved1"),
233     (DWORD, "dwReserved2"),
234     (DWORD, "dwReserved3"),
235     (DWORD, "dwSVBCaps"),
236     (DWORD, "dwSVBCKeyCaps"),
237     (DWORD, "dwSVBFXCaps"),
238     (Array(DWORD, "DD_ROP_SPACE"), "dwSVBRops"),
239     (DWORD, "dwVSBCaps"),
240     (DWORD, "dwVSBCKeyCaps"),
241     (DWORD, "dwVSBFXCaps"),
242     (Array(DWORD, "DD_ROP_SPACE"), "dwVSBRops"),
243     (DWORD, "dwSSBCaps"),
244     (DWORD, "dwSSBCKeyCaps"),
245     (DWORD, "dwSSBFXCaps"),
246     (Array(DWORD, "DD_ROP_SPACE"), "dwSSBRops"),
247     (DWORD, "dwReserved4"),
248     (DWORD, "dwReserved5"),
249     (DWORD, "dwReserved6"),
250 ])
251 LPDDCAPS_DX3 = Pointer(DDCAPS_DX3)
252
253 DDCAPS_DX5 = Struct("DDCAPS_DX5", [
254     (DWORD, "dwSize"),
255     (DWORD, "dwCaps"),
256     (DWORD, "dwCaps2"),
257     (DWORD, "dwCKeyCaps"),
258     (DWORD, "dwFXCaps"),
259     (DWORD, "dwFXAlphaCaps"),
260     (DWORD, "dwPalCaps"),
261     (DWORD, "dwSVCaps"),
262     (DWORD, "dwAlphaBltConstBitDepths"),
263     (DWORD, "dwAlphaBltPixelBitDepths"),
264     (DWORD, "dwAlphaBltSurfaceBitDepths"),
265     (DWORD, "dwAlphaOverlayConstBitDepths"),
266     (DWORD, "dwAlphaOverlayPixelBitDepths"),
267     (DWORD, "dwAlphaOverlaySurfaceBitDepths"),
268     (DWORD, "dwZBufferBitDepths"),
269     (DWORD, "dwVidMemTotal"),
270     (DWORD, "dwVidMemFree"),
271     (DWORD, "dwMaxVisibleOverlays"),
272     (DWORD, "dwCurrVisibleOverlays"),
273     (DWORD, "dwNumFourCCCodes"),
274     (DWORD, "dwAlignBoundarySrc"),
275     (DWORD, "dwAlignSizeSrc"),
276     (DWORD, "dwAlignBoundaryDest"),
277     (DWORD, "dwAlignSizeDest"),
278     (DWORD, "dwAlignStrideAlign"),
279     (Array(DWORD, "DD_ROP_SPACE"), "dwRops"),
280     (DDSCAPS, "ddsCaps"),
281     (DWORD, "dwMinOverlayStretch"),
282     (DWORD, "dwMaxOverlayStretch"),
283     (DWORD, "dwMinLiveVideoStretch"),
284     (DWORD, "dwMaxLiveVideoStretch"),
285     (DWORD, "dwMinHwCodecStretch"),
286     (DWORD, "dwMaxHwCodecStretch"),
287     (DWORD, "dwReserved1"),
288     (DWORD, "dwReserved2"),
289     (DWORD, "dwReserved3"),
290     (DWORD, "dwSVBCaps"),
291     (DWORD, "dwSVBCKeyCaps"),
292     (DWORD, "dwSVBFXCaps"),
293     (Array(DWORD, "DD_ROP_SPACE"), "dwSVBRops"),
294     (DWORD, "dwVSBCaps"),
295     (DWORD, "dwVSBCKeyCaps"),
296     (DWORD, "dwVSBFXCaps"),
297     (Array(DWORD, "DD_ROP_SPACE"), "dwVSBRops"),
298     (DWORD, "dwSSBCaps"),
299     (DWORD, "dwSSBCKeyCaps"),
300     (DWORD, "dwSSBFXCaps"),
301     (Array(DWORD, "DD_ROP_SPACE"), "dwSSBRops"),
302     (DWORD, "dwMaxVideoPorts"),
303     (DWORD, "dwCurrVideoPorts"),
304     (DWORD, "dwSVBCaps2"),
305     (DWORD, "dwNLVBCaps"),
306     (DWORD, "dwNLVBCaps2"),
307     (DWORD, "dwNLVBCKeyCaps"),
308     (DWORD, "dwNLVBFXCaps"),
309     (Array(DWORD, "DD_ROP_SPACE"), "dwNLVBRops"),
310 ])
311 LPDDCAPS_DX5 = Pointer(DDCAPS_DX5)
312
313 DDCAPS_DX6 = Struct("DDCAPS_DX6", [
314     (DWORD, "dwSize"),
315     (DWORD, "dwCaps"),
316     (DWORD, "dwCaps2"),
317     (DWORD, "dwCKeyCaps"),
318     (DWORD, "dwFXCaps"),
319     (DWORD, "dwFXAlphaCaps"),
320     (DWORD, "dwPalCaps"),
321     (DWORD, "dwSVCaps"),
322     (DWORD, "dwAlphaBltConstBitDepths"),
323     (DWORD, "dwAlphaBltPixelBitDepths"),
324     (DWORD, "dwAlphaBltSurfaceBitDepths"),
325     (DWORD, "dwAlphaOverlayConstBitDepths"),
326     (DWORD, "dwAlphaOverlayPixelBitDepths"),
327     (DWORD, "dwAlphaOverlaySurfaceBitDepths"),
328     (DWORD, "dwZBufferBitDepths"),
329     (DWORD, "dwVidMemTotal"),
330     (DWORD, "dwVidMemFree"),
331     (DWORD, "dwMaxVisibleOverlays"),
332     (DWORD, "dwCurrVisibleOverlays"),
333     (DWORD, "dwNumFourCCCodes"),
334     (DWORD, "dwAlignBoundarySrc"),
335     (DWORD, "dwAlignSizeSrc"),
336     (DWORD, "dwAlignBoundaryDest"),
337     (DWORD, "dwAlignSizeDest"),
338     (DWORD, "dwAlignStrideAlign"),
339     (Array(DWORD, "DD_ROP_SPACE"), "dwRops"),
340     (DDSCAPS, "ddsOldCaps"),
341     (DWORD, "dwMinOverlayStretch"),
342     (DWORD, "dwMaxOverlayStretch"),
343     (DWORD, "dwMinLiveVideoStretch"),
344     (DWORD, "dwMaxLiveVideoStretch"),
345     (DWORD, "dwMinHwCodecStretch"),
346     (DWORD, "dwMaxHwCodecStretch"),
347     (DWORD, "dwReserved1"),
348     (DWORD, "dwReserved2"),
349     (DWORD, "dwReserved3"),
350     (DWORD, "dwSVBCaps"),
351     (DWORD, "dwSVBCKeyCaps"),
352     (DWORD, "dwSVBFXCaps"),
353     (Array(DWORD, "DD_ROP_SPACE"), "dwSVBRops"),
354     (DWORD, "dwVSBCaps"),
355     (DWORD, "dwVSBCKeyCaps"),
356     (DWORD, "dwVSBFXCaps"),
357     (Array(DWORD, "DD_ROP_SPACE"), "dwVSBRops"),
358     (DWORD, "dwSSBCaps"),
359     (DWORD, "dwSSBCKeyCaps"),
360     (DWORD, "dwSSBFXCaps"),
361     (Array(DWORD, "DD_ROP_SPACE"), "dwSSBRops"),
362     (DWORD, "dwMaxVideoPorts"),
363     (DWORD, "dwCurrVideoPorts"),
364     (DWORD, "dwSVBCaps2"),
365     (DWORD, "dwNLVBCaps"),
366     (DWORD, "dwNLVBCaps2"),
367     (DWORD, "dwNLVBCKeyCaps"),
368     (DWORD, "dwNLVBFXCaps"),
369     (Array(DWORD, "DD_ROP_SPACE"), "dwNLVBRops"),
370     (DDSCAPS2, "ddsCaps"),
371 ])
372 LPDDCAPS_DX6 = Pointer(DDCAPS_DX6)
373
374 DDCAPS_DX7 = Struct("DDCAPS_DX7", [
375     (DWORD, "dwSize"),
376     (DWORD, "dwCaps"),
377     (DWORD, "dwCaps2"),
378     (DWORD, "dwCKeyCaps"),
379     (DWORD, "dwFXCaps"),
380     (DWORD, "dwFXAlphaCaps"),
381     (DWORD, "dwPalCaps"),
382     (DWORD, "dwSVCaps"),
383     (DWORD, "dwAlphaBltConstBitDepths"),
384     (DWORD, "dwAlphaBltPixelBitDepths"),
385     (DWORD, "dwAlphaBltSurfaceBitDepths"),
386     (DWORD, "dwAlphaOverlayConstBitDepths"),
387     (DWORD, "dwAlphaOverlayPixelBitDepths"),
388     (DWORD, "dwAlphaOverlaySurfaceBitDepths"),
389     (DWORD, "dwZBufferBitDepths"),
390     (DWORD, "dwVidMemTotal"),
391     (DWORD, "dwVidMemFree"),
392     (DWORD, "dwMaxVisibleOverlays"),
393     (DWORD, "dwCurrVisibleOverlays"),
394     (DWORD, "dwNumFourCCCodes"),
395     (DWORD, "dwAlignBoundarySrc"),
396     (DWORD, "dwAlignSizeSrc"),
397     (DWORD, "dwAlignBoundaryDest"),
398     (DWORD, "dwAlignSizeDest"),
399     (DWORD, "dwAlignStrideAlign"),
400     (Array(DWORD, "DD_ROP_SPACE"), "dwRops"),
401     (DDSCAPS, "ddsOldCaps"),
402     (DWORD, "dwMinOverlayStretch"),
403     (DWORD, "dwMaxOverlayStretch"),
404     (DWORD, "dwMinLiveVideoStretch"),
405     (DWORD, "dwMaxLiveVideoStretch"),
406     (DWORD, "dwMinHwCodecStretch"),
407     (DWORD, "dwMaxHwCodecStretch"),
408     (DWORD, "dwReserved1"),
409     (DWORD, "dwReserved2"),
410     (DWORD, "dwReserved3"),
411     (DWORD, "dwSVBCaps"),
412     (DWORD, "dwSVBCKeyCaps"),
413     (DWORD, "dwSVBFXCaps"),
414     (Array(DWORD, "DD_ROP_SPACE"), "dwSVBRops"),
415     (DWORD, "dwVSBCaps"),
416     (DWORD, "dwVSBCKeyCaps"),
417     (DWORD, "dwVSBFXCaps"),
418     (Array(DWORD, "DD_ROP_SPACE"), "dwVSBRops"),
419     (DWORD, "dwSSBCaps"),
420     (DWORD, "dwSSBCKeyCaps"),
421     (DWORD, "dwSSBFXCaps"),
422     (Array(DWORD, "DD_ROP_SPACE"), "dwSSBRops"),
423     (DWORD, "dwMaxVideoPorts"),
424     (DWORD, "dwCurrVideoPorts"),
425     (DWORD, "dwSVBCaps2"),
426     (DWORD, "dwNLVBCaps"),
427     (DWORD, "dwNLVBCaps2"),
428     (DWORD, "dwNLVBCKeyCaps"),
429     (DWORD, "dwNLVBFXCaps"),
430     (Array(DWORD, "DD_ROP_SPACE"), "dwNLVBRops"),
431     (DDSCAPS2, "ddsCaps"),
432 ])
433 LPDDCAPS_DX7 = Pointer(DDCAPS_DX7)
434 DDCAPS = DDCAPS_DX7
435 LPDDCAPS = Pointer(DDCAPS)
436
437 DDPIXELFORMAT = Struct("DDPIXELFORMAT", [
438     (DWORD, "dwSize"),
439     (DWORD, "dwFlags"),
440     (DWORD, "dwFourCC"),
441     (DWORD, "dwRGBBitCount"),
442     (DWORD, "dwYUVBitCount"),
443     (DWORD, "dwZBufferBitDepth"),
444     (DWORD, "dwAlphaBitDepth"),
445     (DWORD, "dwLuminanceBitCount"),
446     (DWORD, "dwBumpBitCount"),
447     (DWORD, "dwPrivateFormatBitCount"),
448     (DWORD, "dwRBitMask"),
449     (DWORD, "dwYBitMask"),
450     (DWORD, "dwStencilBitDepth"),
451     (DWORD, "dwLuminanceBitMask"),
452     (DWORD, "dwBumpDuBitMask"),
453     (DWORD, "dwOperations"),
454     (DWORD, "dwGBitMask"),
455     (DWORD, "dwUBitMask"),
456     (DWORD, "dwZBitMask"),
457     (DWORD, "dwBumpDvBitMask"),
458     (Struct(None, [
459         (WORD, "wFlipMSTypes"),
460         (WORD, "wBltMSTypes"),
461     ]), "MultiSampleCaps"),
462     (DWORD, "dwBBitMask"),
463     (DWORD, "dwVBitMask"),
464     (DWORD, "dwStencilBitMask"),
465     (DWORD, "dwBumpLuminanceBitMask"),
466     (DWORD, "dwRGBAlphaBitMask"),
467     (DWORD, "dwYUVAlphaBitMask"),
468     (DWORD, "dwLuminanceAlphaBitMask"),
469     (DWORD, "dwRGBZBitMask"),
470     (DWORD, "dwYUVZBitMask"),
471 ])
472 LPDDPIXELFORMAT = Pointer(DDPIXELFORMAT)
473
474 DDOVERLAYFX = Struct("DDOVERLAYFX", [
475     (DWORD, "dwSize"),
476     (DWORD, "dwAlphaEdgeBlendBitDepth"),
477     (DWORD, "dwAlphaEdgeBlend"),
478     (DWORD, "dwReserved"),
479     (DWORD, "dwAlphaDestConstBitDepth"),
480     (DWORD, "dwAlphaDestConst"),
481     (LPDIRECTDRAWSURFACE, "lpDDSAlphaDest"),
482     (DWORD, "dwAlphaSrcConstBitDepth"),
483     (DWORD, "dwAlphaSrcConst"),
484     (LPDIRECTDRAWSURFACE, "lpDDSAlphaSrc"),
485     (DDCOLORKEY, "dckDestColorkey"),
486     (DDCOLORKEY, "dckSrcColorkey"),
487     (DWORD, "dwDDFX"),
488     (DWORD, "dwFlags"),
489 ])
490 LPDDOVERLAYFX = Pointer(DDOVERLAYFX)
491
492 DDBLTBATCH = Struct("DDBLTBATCH", [
493     (LPRECT, "lprDest"),
494     (LPDIRECTDRAWSURFACE, "lpDDSSrc"),
495     (LPRECT, "lprSrc"),
496     (DWORD, "dwFlags"),
497     (LPDDBLTFX, "lpDDBltFx"),
498 ])
499 LPDDBLTBATCH = Pointer(DDBLTBATCH)
500
501 DDGAMMARAMP = Struct("DDGAMMARAMP", [
502     (Array(WORD, 256), "red"),
503     (Array(WORD, 256), "green"),
504     (Array(WORD, 256), "blue"),
505 ])
506 LPDDGAMMARAMP = Pointer(DDGAMMARAMP)
507
508 DDDEVICEIDENTIFIER = Struct("DDDEVICEIDENTIFIER", [
509     (CString, "szDriver"),
510     (CString, "szDescription"),
511     (LARGE_INTEGER, "liDriverVersion"),
512     (DWORD, "dwVendorId"),
513     (DWORD, "dwDeviceId"),
514     (DWORD, "dwSubSysId"),
515     (DWORD, "dwRevision"),
516     (GUID, "guidDeviceIdentifier"),
517 ])
518 LPDDDEVICEIDENTIFIER = Pointer(DDDEVICEIDENTIFIER)
519
520 DDDEVICEIDENTIFIER2 = Struct("DDDEVICEIDENTIFIER2", [
521     (CString, "szDriver"),
522     (CString, "szDescription"),
523     (LARGE_INTEGER, "liDriverVersion"),
524     (DWORD, "dwVendorId"),
525     (DWORD, "dwDeviceId"),
526     (DWORD, "dwSubSysId"),
527     (DWORD, "dwRevision"),
528     (GUID, "guidDeviceIdentifier"),
529     (DWORD, "dwWHQLLevel"),
530 ])
531 LPDDDEVICEIDENTIFIER2 = Pointer(DDDEVICEIDENTIFIER2)
532
533 LPCLIPPERCALLBACK = FunctionPointer(DWORD, "LPCLIPPERCALLBACK", [(LPDIRECTDRAWCLIPPER, "lpDDClipper"), (HWND, "hWnd"), (DWORD, "code"), (LPVOID, "lpContext")])
534 LPSURFACESTREAMINGCALLBACK = FunctionPointer(DWORD, "LPSURFACESTREAMINGCALLBACK", [DWORD])
535
536 DDSURFACEDESC = Struct("DDSURFACEDESC", [
537     (DWORD, "dwSize"),
538     (DWORD, "dwFlags"),
539     (DWORD, "dwHeight"),
540     (DWORD, "dwWidth"),
541     (LONG, "lPitch"),
542     (DWORD, "dwLinearSize"),
543     (DWORD, "dwBackBufferCount"),
544     (DWORD, "dwMipMapCount"),
545     (DWORD, "dwZBufferBitDepth"),
546     (DWORD, "dwRefreshRate"),
547     (DWORD, "dwAlphaBitDepth"),
548     (DWORD, "dwReserved"),
549     (LPVOID, "lpSurface"),
550     (DDCOLORKEY, "ddckCKDestOverlay"),
551     (DDCOLORKEY, "ddckCKDestBlt"),
552     (DDCOLORKEY, "ddckCKSrcOverlay"),
553     (DDCOLORKEY, "ddckCKSrcBlt"),
554     (DDPIXELFORMAT, "ddpfPixelFormat"),
555     (DDSCAPS, "ddsCaps"),
556 ])
557 LPDDSURFACEDESC = Pointer(DDSURFACEDESC)
558
559 DDSURFACEDESC2 = Struct("DDSURFACEDESC2", [
560     (DWORD, "dwSize"),
561     (DWORD, "dwFlags"),
562     (DWORD, "dwHeight"),
563     (DWORD, "dwWidth"),
564     (LONG, "lPitch"),
565     (DWORD, "dwLinearSize"),
566     (DWORD, "dwBackBufferCount"),
567     (DWORD, "dwDepth"),
568     (DWORD, "dwMipMapCount"),
569     (DWORD, "dwRefreshRate"),
570     (DWORD, "dwSrcVBHandle"),
571     (DWORD, "dwAlphaBitDepth"),
572     (DWORD, "dwReserved"),
573     (LPVOID, "lpSurface"),
574     (DDCOLORKEY, "ddckCKDestOverlay"),
575     (DWORD, "dwEmptyFaceColor"),
576     (DDCOLORKEY, "ddckCKDestBlt"),
577     (DDCOLORKEY, "ddckCKSrcOverlay"),
578     (DDCOLORKEY, "ddckCKSrcBlt"),
579     (DDPIXELFORMAT, "ddpfPixelFormat"),
580     (DWORD, "dwFVF"),
581     (DDSCAPS2, "ddsCaps"),
582     (DWORD, "dwTextureStage"),
583 ])
584 LPDDSURFACEDESC2 = Pointer(DDSURFACEDESC2)
585
586 DirectDrawSurfaceDescFlags = Flags(DWORD, [
587     "DDSD_CAPS",
588     "DDSD_HEIGHT",
589     "DDSD_WIDTH",
590     "DDSD_PITCH",
591     "DDSD_BACKBUFFERCOUNT",
592     "DDSD_ZBUFFERBITDEPTH",
593     "DDSD_ALPHABITDEPTH",
594     "DDSD_LPSURFACE",
595     "DDSD_PIXELFORMAT",
596     "DDSD_CKDESTOVERLAY",
597     "DDSD_CKDESTBLT",
598     "DDSD_CKSRCOVERLAY",
599     "DDSD_CKSRCBLT",
600     "DDSD_MIPMAPCOUNT",
601     "DDSD_REFRESHRATE",
602     "DDSD_LINEARSIZE",
603     "DDSD_TEXTURESTAGE",
604     "DDSD_FVF",
605     "DDSD_SRCVBHANDLE",
606     "DDSD_DEPTH",
607     "DDSD_ALL",
608 ])
609
610 DDOPTSURFACEDESC = Struct("DDOPTSURFACEDESC", [
611     (DWORD, "dwSize"),
612     (DWORD, "dwFlags"),
613     (DDSCAPS2, "ddSCaps"),
614     (DDOSCAPS, "ddOSCaps"),
615     (GUID, "guid"),
616     (DWORD, "dwCompressionRatio"),
617 ])
618
619 DDSD = Flags(DWORD, [
620     "DDOSD_GUID",
621     "DDOSD_COMPRESSION_RATIO",
622     "DDOSD_SCAPS",
623     "DDOSD_OSCAPS",
624     "DDOSD_ALL",
625 ])
626
627 DDOSDCAPS = Flags(DWORD, [
628     "DDOSDCAPS_OPTCOMPRESSED",
629     "DDOSDCAPS_OPTREORDERED",
630     "DDOSDCAPS_MONOLITHICMIPMAP",
631     "DDOSDCAPS_VALIDSCAPS",
632     "DDOSDCAPS_VALIDOSCAPS",
633 ])
634
635 DDCOLORCONTROL = Struct("DDCOLORCONTROL", [
636     (DWORD, "dwSize"),
637     (DWORD, "dwFlags"),
638     (LONG, "lBrightness"),
639     (LONG, "lContrast"),
640     (LONG, "lHue"),
641     (LONG, "lSaturation"),
642     (LONG, "lSharpness"),
643     (LONG, "lGamma"),
644     (LONG, "lColorEnable"),
645     (DWORD, "dwReserved1"),
646 ])
647 LPDDCOLORCONTROL = Pointer(DDCOLORCONTROL)
648
649 DirectDrawEnumerateExFlags = Flags(DWORD, [
650     "DDENUM_ATTACHEDSECONDARYDEVICES",
651     "DDENUM_DETACHEDSECONDARYDEVICES",
652     "DDENUM_NONDISPLAYDEVICES",
653 ])
654
655 DirectDrawCreateFlags = FakeEnum(DWORD, [
656     "DDCREATE_HARDWAREONLY",
657     "DDCREATE_EMULATIONONLY",
658 ])
659
660 DirectDrawColorControlFlags = Flags(DWORD, [
661     "DDCOLOR_BRIGHTNESS",
662     "DDCOLOR_CONTRAST",
663     "DDCOLOR_HUE",
664     "DDCOLOR_SATURATION",
665     "DDCOLOR_SHARPNESS",
666     "DDCOLOR_GAMMA",
667     "DDCOLOR_COLORENABLE",
668 ])
669
670 DirectDrawCapsFlags = Flags(DWORD, [
671     "DDSCAPS_RESERVED1",
672     "DDSCAPS_ALPHA",
673     "DDSCAPS_BACKBUFFER",
674     "DDSCAPS_COMPLEX",
675     "DDSCAPS_FLIP",
676     "DDSCAPS_FRONTBUFFER",
677     "DDSCAPS_OFFSCREENPLAIN",
678     "DDSCAPS_OVERLAY",
679     "DDSCAPS_PALETTE",
680     "DDSCAPS_PRIMARYSURFACE",
681     "DDSCAPS_RESERVED3",
682     "DDSCAPS_PRIMARYSURFACELEFT",
683     "DDSCAPS_SYSTEMMEMORY",
684     "DDSCAPS_TEXTURE",
685     "DDSCAPS_3DDEVICE",
686     "DDSCAPS_VIDEOMEMORY",
687     "DDSCAPS_VISIBLE",
688     "DDSCAPS_WRITEONLY",
689     "DDSCAPS_ZBUFFER",
690     "DDSCAPS_OWNDC",
691     "DDSCAPS_LIVEVIDEO",
692     "DDSCAPS_HWCODEC",
693     "DDSCAPS_MODEX",
694     "DDSCAPS_MIPMAP",
695     "DDSCAPS_RESERVED2",
696     "DDSCAPS_ALLOCONLOAD",
697     "DDSCAPS_VIDEOPORT",
698     "DDSCAPS_LOCALVIDMEM",
699     "DDSCAPS_NONLOCALVIDMEM",
700     "DDSCAPS_STANDARDVGAMODE",
701     "DDSCAPS_OPTIMIZED",
702 ])
703
704 DirectDrawCapabilityFlags2 = Flags(DWORD, [
705     "DDSCAPS2_RESERVED4",
706     "DDSCAPS2_HARDWAREDEINTERLACE",
707     "DDSCAPS2_HINTDYNAMIC",
708     "DDSCAPS2_HINTSTATIC",
709     "DDSCAPS2_TEXTUREMANAGE",
710     "DDSCAPS2_RESERVED1",
711     "DDSCAPS2_RESERVED2",
712     "DDSCAPS2_OPAQUE",
713     "DDSCAPS2_HINTANTIALIASING",
714     "DDSCAPS2_CUBEMAP",
715     "DDSCAPS2_CUBEMAP_ALLFACES",
716     "DDSCAPS2_CUBEMAP_POSITIVEX",
717     "DDSCAPS2_CUBEMAP_NEGATIVEX",
718     "DDSCAPS2_CUBEMAP_POSITIVEY",
719     "DDSCAPS2_CUBEMAP_NEGATIVEY",
720     "DDSCAPS2_CUBEMAP_POSITIVEZ",
721     "DDSCAPS2_CUBEMAP_NEGATIVEZ",
722     "DDSCAPS2_MIPMAPSUBLEVEL",
723     "DDSCAPS2_D3DTEXTUREMANAGE",
724     "DDSCAPS2_DONOTPERSIST",
725     "DDSCAPS2_STEREOSURFACELEFT",
726     "DDSCAPS2_VOLUME",
727     "DDSCAPS2_NOTUSERLOCKABLE",
728     "DDSCAPS2_POINTS",
729     "DDSCAPS2_RTPATCHES",
730     "DDSCAPS2_NPATCHES",
731     "DDSCAPS2_RESERVED3",
732     "DDSCAPS2_DISCARDBACKBUFFER",
733     "DDSCAPS2_ENABLEALPHACHANNEL",
734     "DDSCAPS2_EXTENDEDFORMATPRIMARY",
735     "DDSCAPS2_ADDITIONALPRIMARY",
736 ])
737 DDSCAPS3 = Flags(DWORD, [
738     "DDSCAPS3_MULTISAMPLE_MASK",
739     "DDSCAPS3_MULTISAMPLE_QUALITY_MASK",
740     "DDSCAPS3_MULTISAMPLE_QUALITY_SHIFT",
741     "DDSCAPS3_RESERVED1",
742     "DDSCAPS3_RESERVED2",
743     "DDSCAPS3_LIGHTWEIGHTMIPMAP",
744     "DDSCAPS3_AUTOGENMIPMAP",
745     "DDSCAPS3_DMAP",
746     "DDSCAPS3_CREATESHAREDRESOURCE",
747     "DDSCAPS3_READONLYRESOURCE",
748     "DDSCAPS3_OPENSHAREDRESOURCE",
749 ])
750
751 DirectDrawDriverCapsFlags = Flags(DWORD, [
752     "DDCAPS_3D",
753     "DDCAPS_ALIGNBOUNDARYDEST",
754     "DDCAPS_ALIGNSIZEDEST",
755     "DDCAPS_ALIGNBOUNDARYSRC",
756     "DDCAPS_ALIGNSIZESRC",
757     "DDCAPS_ALIGNSTRIDE",
758     "DDCAPS_BLT",
759     "DDCAPS_BLTQUEUE",
760     "DDCAPS_BLTFOURCC",
761     "DDCAPS_BLTSTRETCH",
762     "DDCAPS_GDI",
763     "DDCAPS_OVERLAY",
764     "DDCAPS_OVERLAYCANTCLIP",
765     "DDCAPS_OVERLAYFOURCC",
766     "DDCAPS_OVERLAYSTRETCH",
767     "DDCAPS_PALETTE",
768     "DDCAPS_PALETTEVSYNC",
769     "DDCAPS_READSCANLINE",
770     "DDCAPS_RESERVED1",
771     "DDCAPS_VBI",
772     "DDCAPS_ZBLTS",
773     "DDCAPS_ZOVERLAYS",
774     "DDCAPS_COLORKEY",
775     "DDCAPS_ALPHA",
776     "DDCAPS_COLORKEYHWASSIST",
777     "DDCAPS_NOHARDWARE",
778     "DDCAPS_BLTCOLORFILL",
779     "DDCAPS_BANKSWITCHED",
780     "DDCAPS_BLTDEPTHFILL",
781     "DDCAPS_CANCLIP",
782     "DDCAPS_CANCLIPSTRETCHED",
783     "DDCAPS_CANBLTSYSMEM",
784 ])
785
786 DirectDrawDriverCapsFlags2 = Flags(DWORD, [
787     "DDCAPS2_CERTIFIED",
788     "DDCAPS2_NO2DDURING3DSCENE",
789     "DDCAPS2_VIDEOPORT",
790     "DDCAPS2_AUTOFLIPOVERLAY",
791     "DDCAPS2_CANBOBINTERLEAVED",
792     "DDCAPS2_CANBOBNONINTERLEAVED",
793     "DDCAPS2_COLORCONTROLOVERLAY",
794     "DDCAPS2_COLORCONTROLPRIMARY",
795     "DDCAPS2_CANDROPZ16BIT",
796     "DDCAPS2_NONLOCALVIDMEM",
797     "DDCAPS2_NONLOCALVIDMEMCAPS",
798     "DDCAPS2_NOPAGELOCKREQUIRED",
799     "DDCAPS2_WIDESURFACES",
800     "DDCAPS2_CANFLIPODDEVEN",
801     "DDCAPS2_CANBOBHARDWARE",
802     "DDCAPS2_COPYFOURCC",
803     "DDCAPS2_PRIMARYGAMMA",
804     "DDCAPS2_CANRENDERWINDOWED",
805     "DDCAPS2_CANCALIBRATEGAMMA",
806     "DDCAPS2_FLIPINTERVAL",
807     "DDCAPS2_FLIPNOVSYNC",
808     "DDCAPS2_CANMANAGETEXTURE",
809     "DDCAPS2_TEXMANINNONLOCALVIDMEM",
810     "DDCAPS2_STEREO",
811     "DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL",
812     "DDCAPS2_RESERVED1",
813     "DDCAPS2_CANMANAGERESOURCE",
814     "DDCAPS2_DYNAMICTEXTURES",
815     "DDCAPS2_CANAUTOGENMIPMAP",
816     "DDCAPS2_CANSHARERESOURCE",
817 ])
818
819 DirectDrawFxAlphaCapsFlags = Flags(DWORD, [
820     "DDFXALPHACAPS_BLTALPHAEDGEBLEND",
821     "DDFXALPHACAPS_BLTALPHAPIXELS",
822     "DDFXALPHACAPS_BLTALPHAPIXELSNEG",
823     "DDFXALPHACAPS_BLTALPHASURFACES",
824     "DDFXALPHACAPS_BLTALPHASURFACESNEG",
825     "DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND",
826     "DDFXALPHACAPS_OVERLAYALPHAPIXELS",
827     "DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG",
828     "DDFXALPHACAPS_OVERLAYALPHASURFACES",
829     "DDFXALPHACAPS_OVERLAYALPHASURFACESNEG",
830 ])
831
832 DirectDrawFxCapsFlags = Flags(DWORD, [
833     "DDFXCAPS_BLTARITHSTRETCHY",
834     "DDFXCAPS_BLTARITHSTRETCHYN",
835     "DDFXCAPS_BLTMIRRORLEFTRIGHT",
836     "DDFXCAPS_BLTMIRRORUPDOWN",
837     "DDFXCAPS_BLTROTATION",
838     "DDFXCAPS_BLTROTATION90",
839     "DDFXCAPS_BLTSHRINKX",
840     "DDFXCAPS_BLTSHRINKXN",
841     "DDFXCAPS_BLTSHRINKY",
842     "DDFXCAPS_BLTSHRINKYN",
843     "DDFXCAPS_BLTSTRETCHX",
844     "DDFXCAPS_BLTSTRETCHXN",
845     "DDFXCAPS_BLTSTRETCHY",
846     "DDFXCAPS_BLTSTRETCHYN",
847     "DDFXCAPS_OVERLAYARITHSTRETCHY",
848     "DDFXCAPS_OVERLAYARITHSTRETCHYN",
849     "DDFXCAPS_OVERLAYSHRINKX",
850     "DDFXCAPS_OVERLAYSHRINKXN",
851     "DDFXCAPS_OVERLAYSHRINKY",
852     "DDFXCAPS_OVERLAYSHRINKYN",
853     "DDFXCAPS_OVERLAYSTRETCHX",
854     "DDFXCAPS_OVERLAYSTRETCHXN",
855     "DDFXCAPS_OVERLAYSTRETCHY",
856     "DDFXCAPS_OVERLAYSTRETCHYN",
857     "DDFXCAPS_OVERLAYMIRRORLEFTRIGHT",
858     "DDFXCAPS_OVERLAYMIRRORUPDOWN",
859     "DDFXCAPS_OVERLAYDEINTERLACE",
860     "DDFXCAPS_BLTALPHA",
861     "DDFXCAPS_BLTFILTER",
862     "DDFXCAPS_OVERLAYALPHA",
863     "DDFXCAPS_OVERLAYFILTER",
864 ])
865
866 DirectDrawStereoViewCapsFlags = Flags(DWORD, [
867     "DDSVCAPS_RESERVED1",
868     "DDSVCAPS_RESERVED2",
869     "DDSVCAPS_RESERVED3",
870     "DDSVCAPS_RESERVED4",
871     "DDSVCAPS_STEREOSEQUENTIAL",
872 ])
873
874 DirectDrawPaletteCapsFlags = Flags(DWORD, [
875     "DDPCAPS_4BIT",
876     "DDPCAPS_8BITENTRIES",
877     "DDPCAPS_8BIT",
878     "DDPCAPS_INITIALIZE",
879     "DDPCAPS_PRIMARYSURFACE",
880     "DDPCAPS_PRIMARYSURFACELEFT",
881     "DDPCAPS_ALLOW256",
882     "DDPCAPS_VSYNC",
883     "DDPCAPS_1BIT",
884     "DDPCAPS_2BIT",
885     "DDPCAPS_ALPHA",
886 ])
887
888 DirectDrawSurfaceSetPrivateDataConstants = FakeEnum(DWORD, [
889     "DDSPD_IUNKNOWNPOINTER",
890     "DDSPD_VOLATILE",
891 ])
892
893 DirectDrawSurfaceSetPaletteConstants = FakeEnum(DWORD, [
894     "DDBD_1",
895     "DDBD_2",
896     "DDBD_4",
897     "DDBD_8",
898     "DDBD_16",
899     "DDBD_24",
900     "DDBD_32",
901 ])
902
903 DirectDrawSurfaceSetGetColorKeyFlags = Flags(DWORD, [
904     "DDCKEY_COLORSPACE",
905     "DDCKEY_DESTBLT",
906     "DDCKEY_DESTOVERLAY",
907     "DDCKEY_SRCBLT",
908     "DDCKEY_SRCOVERLAY",
909 ])
910
911 DirectDrawColorKeyCapsFlags = Flags(DWORD, [
912     "DDCKEYCAPS_DESTBLT",
913     "DDCKEYCAPS_DESTBLTCLRSPACE",
914     "DDCKEYCAPS_DESTBLTCLRSPACEYUV",
915     "DDCKEYCAPS_DESTBLTYUV",
916     "DDCKEYCAPS_DESTOVERLAY",
917     "DDCKEYCAPS_DESTOVERLAYCLRSPACE",
918     "DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV",
919     "DDCKEYCAPS_DESTOVERLAYONEACTIVE",
920     "DDCKEYCAPS_DESTOVERLAYYUV",
921     "DDCKEYCAPS_SRCBLT",
922     "DDCKEYCAPS_SRCBLTCLRSPACE",
923     "DDCKEYCAPS_SRCBLTCLRSPACEYUV",
924     "DDCKEYCAPS_SRCBLTYUV",
925     "DDCKEYCAPS_SRCOVERLAY",
926     "DDCKEYCAPS_SRCOVERLAYCLRSPACE",
927     "DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV",
928     "DDCKEYCAPS_SRCOVERLAYONEACTIVE",
929     "DDCKEYCAPS_SRCOVERLAYYUV",
930     "DDCKEYCAPS_NOCOSTOVERLAY",
931 ])
932
933 DirectDrawPixelFormatFlags = Flags(DWORD, [
934     "DDPF_ALPHAPIXELS",
935     "DDPF_ALPHA",
936     "DDPF_FOURCC",
937     "DDPF_PALETTEINDEXED4",
938     "DDPF_PALETTEINDEXEDTO8",
939     "DDPF_PALETTEINDEXED8",
940     "DDPF_RGB",
941     "DDPF_COMPRESSED",
942     "DDPF_RGBTOYUV",
943     "DDPF_YUV",
944     "DDPF_ZBUFFER",
945     "DDPF_PALETTEINDEXED1",
946     "DDPF_PALETTEINDEXED2",
947     "DDPF_ZPIXELS",
948     "DDPF_STENCILBUFFER",
949     "DDPF_ALPHAPREMULT",
950     "DDPF_LUMINANCE",
951     "DDPF_BUMPLUMINANCE",
952     "DDPF_BUMPDUDV",
953 ])
954
955 DirectDrawEnumSurfacesFlags = Flags(DWORD, [
956     "DDENUMSURFACES_ALL",
957     "DDENUMSURFACES_MATCH",
958     "DDENUMSURFACES_NOMATCH",
959     "DDENUMSURFACES_CANBECREATED",
960     "DDENUMSURFACES_DOESEXIST",
961 ])
962
963 DirectDrawSetDisplayModeFlags = Flags(DWORD, [
964     "DDSDM_STANDARDVGAMODE",
965 ])
966
967 DirectDrawEnumDisplayModesFlags = Flags(DWORD, [
968     "DDEDM_REFRESHRATES",
969     "DDEDM_STANDARDVGAMODES",
970 ])
971
972 DirectDrawSetCooperativeLevelFlags = Flags(DWORD, [
973     "DDSCL_FULLSCREEN",
974     "DDSCL_ALLOWREBOOT",
975     "DDSCL_NOWINDOWCHANGES",
976     "DDSCL_NORMAL",
977     "DDSCL_EXCLUSIVE",
978     "DDSCL_ALLOWMODEX",
979     "DDSCL_SETFOCUSWINDOW",
980     "DDSCL_SETDEVICEWINDOW",
981     "DDSCL_CREATEDEVICEWINDOW",
982     "DDSCL_MULTITHREADED",
983     "DDSCL_FPUSETUP",
984     "DDSCL_FPUPRESERVE",
985 ])
986
987 DirectDrawBltFlags = Flags(DWORD, [
988     "DDBLT_ALPHADEST",
989     "DDBLT_ALPHADESTCONSTOVERRIDE",
990     "DDBLT_ALPHADESTNEG",
991     "DDBLT_ALPHADESTSURFACEOVERRIDE",
992     "DDBLT_ALPHAEDGEBLEND",
993     "DDBLT_ALPHASRC",
994     "DDBLT_ALPHASRCCONSTOVERRIDE",
995     "DDBLT_ALPHASRCNEG",
996     "DDBLT_ALPHASRCSURFACEOVERRIDE",
997     "DDBLT_ASYNC",
998     "DDBLT_COLORFILL",
999     "DDBLT_DDFX",
1000     "DDBLT_DDROPS",
1001     "DDBLT_KEYDEST",
1002     "DDBLT_KEYDESTOVERRIDE",
1003     "DDBLT_KEYSRC",
1004     "DDBLT_KEYSRCOVERRIDE",
1005     "DDBLT_ROP",
1006     "DDBLT_ROTATIONANGLE",
1007     "DDBLT_ZBUFFER",
1008     "DDBLT_ZBUFFERDESTCONSTOVERRIDE",
1009     "DDBLT_ZBUFFERDESTOVERRIDE",
1010     "DDBLT_ZBUFFERSRCCONSTOVERRIDE",
1011     "DDBLT_ZBUFFERSRCOVERRIDE",
1012     "DDBLT_WAIT",
1013     "DDBLT_DEPTHFILL",
1014     "DDBLT_DONOTWAIT",
1015     "DDBLT_PRESENTATION",
1016     "DDBLT_LAST_PRESENTATION",
1017     "DDBLT_EXTENDED_FLAGS",
1018     "DDBLT_EXTENDED_LINEAR_CONTENT",
1019 ])
1020
1021 DirectDrawBltFastFlags = Flags(DWORD, [
1022     "DDBLTFAST_NOCOLORKEY",
1023     "DDBLTFAST_SRCCOLORKEY",
1024     "DDBLTFAST_DESTCOLORKEY",
1025     "DDBLTFAST_WAIT",
1026     "DDBLTFAST_DONOTWAIT",
1027 ])
1028
1029 DirectDrawFlipFlags = Flags(DWORD, [
1030     "DDFLIP_WAIT",
1031     "DDFLIP_EVEN",
1032     "DDFLIP_ODD",
1033     "DDFLIP_NOVSYNC",
1034     "DDFLIP_INTERVAL2",
1035     "DDFLIP_INTERVAL3",
1036     "DDFLIP_INTERVAL4",
1037     "DDFLIP_STEREO",
1038     "DDFLIP_DONOTWAIT",
1039 ])
1040
1041 DirectDrawSurfaceOverlayFlags = Flags(DWORD, [
1042     "DDOVER_ALPHADEST",
1043     "DDOVER_ALPHADESTCONSTOVERRIDE",
1044     "DDOVER_ALPHADESTNEG",
1045     "DDOVER_ALPHADESTSURFACEOVERRIDE",
1046     "DDOVER_ALPHAEDGEBLEND",
1047     "DDOVER_ALPHASRC",
1048     "DDOVER_ALPHASRCCONSTOVERRIDE",
1049     "DDOVER_ALPHASRCNEG",
1050     "DDOVER_ALPHASRCSURFACEOVERRIDE",
1051     "DDOVER_HIDE",
1052     "DDOVER_KEYDEST",
1053     "DDOVER_KEYDESTOVERRIDE",
1054     "DDOVER_KEYSRC",
1055     "DDOVER_KEYSRCOVERRIDE",
1056     "DDOVER_SHOW",
1057     "DDOVER_ADDDIRTYRECT",
1058     "DDOVER_REFRESHDIRTYRECTS",
1059     "DDOVER_REFRESHALL",
1060     "DDOVER_DDFX",
1061     "DDOVER_AUTOFLIP",
1062     "DDOVER_BOB",
1063     "DDOVER_OVERRIDEBOBWEAVE",
1064     "DDOVER_INTERLEAVED",
1065     "DDOVER_BOBHARDWARE",
1066     "DDOVER_ARGBSCALEFACTORS",
1067     "DDOVER_DEGRADEARGBSCALING",
1068 ])
1069
1070 DDSETSURFACEDESC = Flags(DWORD, [
1071     #"DDSETSURFACEDESC_RECREATEDC",
1072     #"DDSETSURFACEDESC_PRESERVEDC",
1073 ])
1074
1075 DirectDrawSurfaceLockFlags = Flags(DWORD, [
1076     "DDLOCK_SURFACEMEMORYPTR",
1077     "DDLOCK_WAIT",
1078     "DDLOCK_EVENT",
1079     "DDLOCK_READONLY",
1080     "DDLOCK_WRITEONLY",
1081     "DDLOCK_NOSYSLOCK",
1082     "DDLOCK_NOOVERWRITE",
1083     "DDLOCK_DISCARDCONTENTS",
1084     "DDLOCK_OKTOSWAP",
1085     "DDLOCK_DONOTWAIT",
1086     "DDLOCK_HASVOLUMETEXTUREBOXRECT",
1087     "DDLOCK_NODIRTYUPDATE",
1088 ])
1089
1090 DirectDrawSurfaceBltFxFlags = Flags(DWORD, [
1091     "DDBLTFX_ARITHSTRETCHY",
1092     "DDBLTFX_MIRRORLEFTRIGHT",
1093     "DDBLTFX_MIRRORUPDOWN",
1094     "DDBLTFX_NOTEARING",
1095     "DDBLTFX_ROTATE180",
1096     "DDBLTFX_ROTATE270",
1097     "DDBLTFX_ROTATE90",
1098     "DDBLTFX_ZBUFFERRANGE",
1099     "DDBLTFX_ZBUFFERBASEDEST",
1100 ])
1101
1102 DirectDrawOverlayFxFlags = Flags(DWORD, [
1103     "DDOVERFX_ARITHSTRETCHY",
1104     "DDOVERFX_MIRRORLEFTRIGHT",
1105     "DDOVERFX_MIRRORUPDOWN",
1106     "DDOVERFX_DEINTERLACE",
1107 ])
1108
1109 DirectDrawWaitForVerticalBlankFlags = Flags(DWORD, [
1110     "DDWAITVB_BLOCKBEGIN",
1111     "DDWAITVB_BLOCKBEGINEVENT",
1112     "DDWAITVB_BLOCKEND",
1113 ])
1114
1115 DirectDrawGetFlipStatusFlags = Flags(DWORD, [
1116     "DDGFS_CANFLIP",
1117     "DDGFS_ISFLIPDONE",
1118 ])
1119
1120 DirectDrawGetBltStatusFlags = Flags(DWORD, [
1121     "DDGBS_CANBLT",
1122     "DDGBS_ISBLTDONE",
1123 ])
1124
1125 DirectDrawEnumOverlayZOrderFlags = Flags(DWORD, [
1126     "DDENUMOVERLAYZ_BACKTOFRONT",
1127     "DDENUMOVERLAYZ_FRONTTOBACK",
1128 ])
1129
1130 DirectDrawUpdateOverlayZOrderFlags = Flags(DWORD, [
1131     "DDOVERZ_SENDTOFRONT",
1132     "DDOVERZ_SENDTOBACK",
1133     "DDOVERZ_MOVEFORWARD",
1134     "DDOVERZ_MOVEBACKWARD",
1135     "DDOVERZ_INSERTINFRONTOF",
1136     "DDOVERZ_INSERTINBACKOF",
1137 ])
1138
1139 DirectDrawSetGammaRampFlags = Flags(DWORD, [
1140     "DDSGR_CALIBRATE",
1141 ])
1142
1143 DirectDrawStartModeTestFlags = Flags(DWORD, [
1144     "DDSMT_ISTESTREQUIRED",
1145 ])
1146
1147 DirectDrawEvaluateModeFlags = Flags(DWORD, [
1148     "DDEM_MODEPASSED",
1149     "DDEM_MODEFAILED",
1150 ])
1151
1152 DDRESULT = MAKE_HRESULT(ok = "DD_OK", false = "DD_FALSE", errors = [
1153     "DDERR_ALREADYINITIALIZED",
1154     "DDERR_CANNOTATTACHSURFACE",
1155     "DDERR_CANNOTDETACHSURFACE",
1156     "DDERR_CURRENTLYNOTAVAIL",
1157     "DDERR_EXCEPTION",
1158     "DDERR_GENERIC",
1159     "DDERR_HEIGHTALIGN",
1160     "DDERR_INCOMPATIBLEPRIMARY",
1161     "DDERR_INVALIDCAPS",
1162     "DDERR_INVALIDCLIPLIST",
1163     "DDERR_INVALIDMODE",
1164     "DDERR_INVALIDOBJECT",
1165     "DDERR_INVALIDPARAMS",
1166     "DDERR_INVALIDPIXELFORMAT",
1167     "DDERR_INVALIDRECT",
1168     "DDERR_LOCKEDSURFACES",
1169     "DDERR_NO3D",
1170     "DDERR_NOALPHAHW",
1171     "DDERR_NOSTEREOHARDWARE",
1172     "DDERR_NOSURFACELEFT",
1173     "DDERR_NOCLIPLIST",
1174     "DDERR_NOCOLORCONVHW",
1175     "DDERR_NOCOOPERATIVELEVELSET",
1176     "DDERR_NOCOLORKEY",
1177     "DDERR_NOCOLORKEYHW",
1178     "DDERR_NODIRECTDRAWSUPPORT",
1179     "DDERR_NOEXCLUSIVEMODE",
1180     "DDERR_NOFLIPHW",
1181     "DDERR_NOGDI",
1182     "DDERR_NOMIRRORHW",
1183     "DDERR_NOTFOUND",
1184     "DDERR_NOOVERLAYHW",
1185     "DDERR_OVERLAPPINGRECTS",
1186     "DDERR_NORASTEROPHW",
1187     "DDERR_NOROTATIONHW",
1188     "DDERR_NOSTRETCHHW",
1189     "DDERR_NOT4BITCOLOR",
1190     "DDERR_NOT4BITCOLORINDEX",
1191     "DDERR_NOT8BITCOLOR",
1192     "DDERR_NOTEXTUREHW",
1193     "DDERR_NOVSYNCHW",
1194     "DDERR_NOZBUFFERHW",
1195     "DDERR_NOZOVERLAYHW",
1196     "DDERR_OUTOFCAPS",
1197     "DDERR_OUTOFMEMORY",
1198     "DDERR_OUTOFVIDEOMEMORY",
1199     "DDERR_OVERLAYCANTCLIP",
1200     "DDERR_OVERLAYCOLORKEYONLYONEACTIVE",
1201     "DDERR_PALETTEBUSY",
1202     "DDERR_COLORKEYNOTSET",
1203     "DDERR_SURFACEALREADYATTACHED",
1204     "DDERR_SURFACEALREADYDEPENDENT",
1205     "DDERR_SURFACEBUSY",
1206     "DDERR_CANTLOCKSURFACE",
1207     "DDERR_SURFACEISOBSCURED",
1208     "DDERR_SURFACELOST",
1209     "DDERR_SURFACENOTATTACHED",
1210     "DDERR_TOOBIGHEIGHT",
1211     "DDERR_TOOBIGSIZE",
1212     "DDERR_TOOBIGWIDTH",
1213     "DDERR_UNSUPPORTED",
1214     "DDERR_UNSUPPORTEDFORMAT",
1215     "DDERR_UNSUPPORTEDMASK",
1216     "DDERR_INVALIDSTREAM",
1217     "DDERR_VERTICALBLANKINPROGRESS",
1218     "DDERR_WASSTILLDRAWING",
1219     "DDERR_DDSCAPSCOMPLEXREQUIRED",
1220     "DDERR_XALIGN",
1221     "DDERR_INVALIDDIRECTDRAWGUID",
1222     "DDERR_DIRECTDRAWALREADYCREATED",
1223     "DDERR_NODIRECTDRAWHW",
1224     "DDERR_PRIMARYSURFACEALREADYEXISTS",
1225     "DDERR_NOEMULATION",
1226     "DDERR_REGIONTOOSMALL",
1227     "DDERR_CLIPPERISUSINGHWND",
1228     "DDERR_NOCLIPPERATTACHED",
1229     "DDERR_NOHWND",
1230     "DDERR_HWNDSUBCLASSED",
1231     "DDERR_HWNDALREADYSET",
1232     "DDERR_NOPALETTEATTACHED",
1233     "DDERR_NOPALETTEHW",
1234     "DDERR_BLTFASTCANTCLIP",
1235     "DDERR_NOBLTHW",
1236     "DDERR_NODDROPSHW",
1237     "DDERR_OVERLAYNOTVISIBLE",
1238     "DDERR_NOOVERLAYDEST",
1239     "DDERR_INVALIDPOSITION",
1240     "DDERR_NOTAOVERLAYSURFACE",
1241     "DDERR_EXCLUSIVEMODEALREADYSET",
1242     "DDERR_NOTFLIPPABLE",
1243     "DDERR_CANTDUPLICATE",
1244     "DDERR_NOTLOCKED",
1245     "DDERR_CANTCREATEDC",
1246     "DDERR_NODC",
1247     "DDERR_WRONGMODE",
1248     "DDERR_IMPLICITLYCREATED",
1249     "DDERR_NOTPALETTIZED",
1250     "DDERR_UNSUPPORTEDMODE",
1251     "DDERR_NOMIPMAPHW",
1252     "DDERR_INVALIDSURFACETYPE",
1253     "DDERR_NOOPTIMIZEHW",
1254     "DDERR_NOTLOADED",
1255     "DDERR_NOFOCUSWINDOW",
1256     "DDERR_NOTONMIPMAPSUBLEVEL",
1257     "DDERR_DCALREADYCREATED",
1258     "DDERR_NONONLOCALVIDMEM",
1259     "DDERR_CANTPAGELOCK",
1260     "DDERR_CANTPAGEUNLOCK",
1261     "DDERR_NOTPAGELOCKED",
1262     "DDERR_MOREDATA",
1263     "DDERR_EXPIRED",
1264     "DDERR_TESTFINISHED",
1265     "DDERR_NEWMODE",
1266     "DDERR_D3DNOTINITIALIZED",
1267     "DDERR_VIDEONOTACTIVE",
1268     "DDERR_NOMONITORINFORMATION",
1269     "DDERR_NODRIVERSUPPORT",
1270     "DDERR_DEVICEDOESNTOWNSURFACE",
1271     "DDERR_NOTINITIALIZED",
1272 ])
1273
1274 LPDDENUMMODESCALLBACK     = FunctionPointer(HRESULT, "LPDDENUMMODESCALLBACK", [LPDDSURFACEDESC, LPVOID])
1275 LPDDENUMMODESCALLBACK2    = FunctionPointer(HRESULT, "LPDDENUMMODESCALLBACK2", [LPDDSURFACEDESC2, LPVOID])
1276 LPDDENUMSURFACESCALLBACK  = FunctionPointer(HRESULT, "LPDDENUMSURFACESCALLBACK", [LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, LPVOID])
1277 LPDDENUMSURFACESCALLBACK2 = FunctionPointer(HRESULT, "LPDDENUMSURFACESCALLBACK2", [LPDIRECTDRAWSURFACE4, LPDDSURFACEDESC2, LPVOID])
1278 LPDDENUMSURFACESCALLBACK7 = FunctionPointer(HRESULT, "LPDDENUMSURFACESCALLBACK7", [LPDIRECTDRAWSURFACE7, LPDDSURFACEDESC2, LPVOID])
1279
1280 IDirectDraw.methods += [
1281     StdMethod(DDRESULT, "Compact", []),
1282     StdMethod(DDRESULT, "CreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (LPUNKNOWN, "pUnkOuter")]),
1283     StdMethod(DDRESULT, "CreatePalette", [(DirectDrawPaletteCapsFlags, "dwFlags"), (LPPALETTEENTRY, "lpDDColorArray"), Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette"), (ObjPointer(IUnknown), "pUnkOuter")]),
1284     StdMethod(DDRESULT, "CreateSurface", [(LPDDSURFACEDESC, "lpDDSurfaceDesc"), Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDDSurface"), (LPUNKNOWN, "pUnkOuter")]),
1285     StdMethod(DDRESULT, "DuplicateSurface", [(LPDIRECTDRAWSURFACE, "lpDDSurface"), Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDupDDSurface")]),
1286     StdMethod(DDRESULT, "EnumDisplayModes", [(DirectDrawEnumDisplayModesFlags, "dwFlags"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMMODESCALLBACK, "lpEnumModesCallback")]),
1287     StdMethod(DDRESULT, "EnumSurfaces", [(DirectDrawEnumSurfacesFlags, "dwFlags"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpEnumSurfacesCallback")]),
1288     StdMethod(DDRESULT, "FlipToGDISurface", []),
1289     StdMethod(DDRESULT, "GetCaps", [Out(LPDDCAPS, "lpDDDriverCaps"), Out(LPDDCAPS, "lpDDHELCaps")]),
1290     StdMethod(DDRESULT, "GetDisplayMode", [Out(LPDDSURFACEDESC, "lpDDSurfaceDesc")]),
1291     StdMethod(DDRESULT, "GetFourCCCodes", [Out(LPDWORD, "lpNumCodes"), Out(LPDWORD, "lpCodes")]),
1292     StdMethod(DDRESULT, "GetGDISurface", [Out(Pointer(LPDIRECTDRAWSURFACE), "lplpGDIDDSSurface")]),
1293     StdMethod(DDRESULT, "GetMonitorFrequency", [Out(LPDWORD, "lpdwFrequency")]),
1294     StdMethod(DDRESULT, "GetScanLine", [Out(LPDWORD, "lpdwScanLine")]),
1295     StdMethod(DDRESULT, "GetVerticalBlankStatus", [Out(LPBOOL, "lpbIsInVB")]),
1296     StdMethod(DDRESULT, "Initialize", [(Pointer(GUID), "lpGUID")]),
1297     StdMethod(DDRESULT, "RestoreDisplayMode", []),
1298     StdMethod(DDRESULT, "SetCooperativeLevel", [(HWND, "hWnd"), (DirectDrawSetCooperativeLevelFlags, "dwFlags")]),
1299     StdMethod(DDRESULT, "SetDisplayMode", [(DWORD, "dwWidth"), (DWORD, "dwHeight"), (DWORD, "dwBPP")]),
1300     StdMethod(DDRESULT, "WaitForVerticalBlank", [(DirectDrawWaitForVerticalBlankFlags, "dwFlags"), (HANDLE, "hEvent")]),
1301 ]
1302
1303 IDirectDraw2.methods += [
1304     StdMethod(DDRESULT, "Compact", []),
1305     StdMethod(DDRESULT, "CreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (LPUNKNOWN, "pUnkOuter")]),
1306     StdMethod(DDRESULT, "CreatePalette", [(DirectDrawPaletteCapsFlags, "dwFlags"), (LPPALETTEENTRY, "lpDDColorArray"), Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette"), (LPUNKNOWN, "pUnkOuter")]),
1307     StdMethod(DDRESULT, "CreateSurface", [(LPDDSURFACEDESC, "lpDDSurfaceDesc"), Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDDSurface"), (LPUNKNOWN, "pUnkOuter")]),
1308     StdMethod(DDRESULT, "DuplicateSurface", [(LPDIRECTDRAWSURFACE, "lpDDSurface"), Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDupDDSurface")]),
1309     StdMethod(DDRESULT, "EnumDisplayModes", [(DirectDrawEnumDisplayModesFlags, "dwFlags"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMMODESCALLBACK, "lpEnumModesCallback")]),
1310     StdMethod(DDRESULT, "EnumSurfaces", [(DirectDrawEnumSurfacesFlags, "dwFlags"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpEnumSurfacesCallback")]),
1311     StdMethod(DDRESULT, "FlipToGDISurface", []),
1312     StdMethod(DDRESULT, "GetCaps", [Out(LPDDCAPS, "lpDDDriverCaps"), Out(LPDDCAPS, "lpDDHELCaps")]),
1313     StdMethod(DDRESULT, "GetDisplayMode", [Out(LPDDSURFACEDESC, "lpDDSurfaceDesc")]),
1314     StdMethod(DDRESULT, "GetFourCCCodes", [Out(LPDWORD, "lpNumCodes"), Out(LPDWORD, "lpCodes")]),
1315     StdMethod(DDRESULT, "GetGDISurface", [Out(Pointer(LPDIRECTDRAWSURFACE), "lplpGDIDDSSurface")]),
1316     StdMethod(DDRESULT, "GetMonitorFrequency", [Out(LPDWORD, "lpdwFrequency")]),
1317     StdMethod(DDRESULT, "GetScanLine", [Out(LPDWORD, "lpdwScanLine")]),
1318     StdMethod(DDRESULT, "GetVerticalBlankStatus", [Out(LPBOOL, "lpbIsInVB")]),
1319     StdMethod(DDRESULT, "Initialize", [(Pointer(GUID), "lpGUID")]),
1320     StdMethod(DDRESULT, "RestoreDisplayMode", []),
1321     StdMethod(DDRESULT, "SetCooperativeLevel", [(HWND, "hWnd"), (DirectDrawSetCooperativeLevelFlags, "dwFlags")]),
1322     StdMethod(DDRESULT, "SetDisplayMode", [(DWORD, "dwWidth"), (DWORD, "dwHeight"), (DWORD, "dwBPP"), (DWORD, "dwRefreshRate"), (DirectDrawSetDisplayModeFlags, "dwFlags")]),
1323     StdMethod(DDRESULT, "WaitForVerticalBlank", [(DirectDrawWaitForVerticalBlankFlags, "dwFlags"), (HANDLE, "hEvent")]),
1324     StdMethod(DDRESULT, "GetAvailableVidMem", [(LPDDSCAPS, "lpDDSCaps"), Out(LPDWORD, "lpdwTotal"), Out(LPDWORD, "lpdwFree")]),
1325 ]
1326
1327 IDirectDraw4.methods += [
1328     StdMethod(DDRESULT, "Compact", []),
1329     StdMethod(DDRESULT, "CreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (LPUNKNOWN, "pUnkOuter")]),
1330     StdMethod(DDRESULT, "CreatePalette", [(DirectDrawPaletteCapsFlags, "dwFlags"), (LPPALETTEENTRY, "lpDDColorArray"), Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette"), (ObjPointer(IUnknown), "pUnkOuter")]),
1331     StdMethod(DDRESULT, "CreateSurface", [(LPDDSURFACEDESC2, "lpDDSurfaceDesc"), Out(Pointer(LPDIRECTDRAWSURFACE4), "lplpDDSurface"), (LPUNKNOWN, "pUnkOuter")]),
1332     StdMethod(DDRESULT, "DuplicateSurface", [(LPDIRECTDRAWSURFACE4, "lpDDSurface"), Out(Pointer(LPDIRECTDRAWSURFACE4), "lplpDupDDSurface")]),
1333     StdMethod(DDRESULT, "EnumDisplayModes", [(DirectDrawEnumDisplayModesFlags, "dwFlags"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMMODESCALLBACK2, "lpEnumModesCallback")]),
1334     StdMethod(DDRESULT, "EnumSurfaces", [(DirectDrawEnumSurfacesFlags, "dwFlags"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK2, "lpEnumSurfacesCallback")]),
1335     StdMethod(DDRESULT, "FlipToGDISurface", []),
1336     StdMethod(DDRESULT, "GetCaps", [Out(LPDDCAPS, "lpDDDriverCaps"), Out(LPDDCAPS, "lpDDHELCaps")]),
1337     StdMethod(DDRESULT, "GetDisplayMode", [Out(LPDDSURFACEDESC2, "lpDDSurfaceDesc")]),
1338     StdMethod(DDRESULT, "GetFourCCCodes", [Out(LPDWORD, "lpNumCodes"), Out(LPDWORD, "lpCodes")]),
1339     StdMethod(DDRESULT, "GetGDISurface", [Out(Pointer(LPDIRECTDRAWSURFACE4), "lplpGDIDDSSurface")]),
1340     StdMethod(DDRESULT, "GetMonitorFrequency", [Out(LPDWORD, "lpdwFrequency")]),
1341     StdMethod(DDRESULT, "GetScanLine", [Out(LPDWORD, "lpdwScanLine")]),
1342     StdMethod(DDRESULT, "GetVerticalBlankStatus", [Out(LPBOOL, "lpbIsInVB")]),
1343     StdMethod(DDRESULT, "Initialize", [(Pointer(GUID), "lpGUID")]),
1344     StdMethod(DDRESULT, "RestoreDisplayMode", []),
1345     StdMethod(DDRESULT, "SetCooperativeLevel", [(HWND, "hWnd"), (DirectDrawSetCooperativeLevelFlags, "dwFlags")]),
1346     StdMethod(DDRESULT, "SetDisplayMode", [(DWORD, "dwWidth"), (DWORD, "dwHeight"), (DWORD, "dwBPP"), (DWORD, "dwRefreshRate"), (DirectDrawSetDisplayModeFlags, "dwFlags")]),
1347     StdMethod(DDRESULT, "WaitForVerticalBlank", [(DirectDrawWaitForVerticalBlankFlags, "dwFlags"), (HANDLE, "hEvent")]),
1348     StdMethod(DDRESULT, "GetAvailableVidMem", [(LPDDSCAPS2, "lpDDSCaps"), Out(LPDWORD, "lpdwTotal"), Out(LPDWORD, "lpdwFree")]),
1349     StdMethod(DDRESULT, "GetSurfaceFromDC", [(HDC, "hdc"), Out(Pointer(LPDIRECTDRAWSURFACE4), "lpDDSurface")]),
1350     StdMethod(DDRESULT, "RestoreAllSurfaces", []),
1351     StdMethod(DDRESULT, "TestCooperativeLevel", []),
1352     StdMethod(DDRESULT, "GetDeviceIdentifier", [Out(LPDDDEVICEIDENTIFIER, "lpDDDI"), (DirectDrawGetDeviceIdentifierFlags, "dwFlags")]),
1353 ]
1354
1355 IDirectDraw7.methods += [
1356     StdMethod(DDRESULT, "Compact", []),
1357     StdMethod(DDRESULT, "CreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (LPUNKNOWN, "pUnkOuter")]),
1358     StdMethod(DDRESULT, "CreatePalette", [(DirectDrawPaletteCapsFlags, "dwFlags"), (LPPALETTEENTRY, "lpDDColorArray"), Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette"), (LPUNKNOWN, "pUnkOuter")]),
1359     StdMethod(DDRESULT, "CreateSurface", [(LPDDSURFACEDESC2, "lpDDSurfaceDesc"), Out(Pointer(LPDIRECTDRAWSURFACE7), "lplpDDSurface"), (LPUNKNOWN, "pUnkOuter")]),
1360     StdMethod(DDRESULT, "DuplicateSurface", [(LPDIRECTDRAWSURFACE7, "lpDDSurface"), Out(Pointer(LPDIRECTDRAWSURFACE7), "lplpDupDDSurface")]),
1361     StdMethod(DDRESULT, "EnumDisplayModes", [(DirectDrawEnumDisplayModesFlags, "dwFlags"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMMODESCALLBACK2, "lpEnumModesCallback")]),
1362     StdMethod(DDRESULT, "EnumSurfaces", [(DirectDrawEnumSurfacesFlags, "dwFlags"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK7, "lpEnumSurfacesCallback")]),
1363     StdMethod(DDRESULT, "FlipToGDISurface", []),
1364     StdMethod(DDRESULT, "GetCaps", [Out(LPDDCAPS, "lpDDDriverCaps"), Out(LPDDCAPS, "lpDDHELCaps")]),
1365     StdMethod(DDRESULT, "GetDisplayMode", [Out(LPDDSURFACEDESC2, "lpDDSurfaceDesc")]),
1366     StdMethod(DDRESULT, "GetFourCCCodes", [Out(LPDWORD, "lpNumCodes"), Out(LPDWORD, "lpCodes")]),
1367     StdMethod(DDRESULT, "GetGDISurface", [Out(Pointer(LPDIRECTDRAWSURFACE7), "lplpGDIDDSSurface")]),
1368     StdMethod(DDRESULT, "GetMonitorFrequency", [Out(LPDWORD, "lpdwFrequency")]),
1369     StdMethod(DDRESULT, "GetScanLine", [Out(LPDWORD, "lpdwScanLine")]),
1370     StdMethod(DDRESULT, "GetVerticalBlankStatus", [Out(LPBOOL, "lpbIsInVB")]),
1371     StdMethod(DDRESULT, "Initialize", [(Pointer(GUID), "lpGUID")]),
1372     StdMethod(DDRESULT, "RestoreDisplayMode", []),
1373     StdMethod(DDRESULT, "SetCooperativeLevel", [(HWND, "hWnd"), (DirectDrawSetCooperativeLevelFlags, "dwFlags")]),
1374     StdMethod(DDRESULT, "SetDisplayMode", [(DWORD, "dwWidth"), (DWORD, "dwHeight"), (DWORD, "dwBPP"), (DWORD, "dwRefreshRate"), (DirectDrawSetDisplayModeFlags, "dwFlags")]),
1375     StdMethod(DDRESULT, "WaitForVerticalBlank", [(DirectDrawWaitForVerticalBlankFlags, "dwFlags"), (HANDLE, "hEvent")]),
1376     StdMethod(DDRESULT, "GetAvailableVidMem", [(LPDDSCAPS2, "lpDDSCaps"), Out(LPDWORD, "lpdwTotal"), Out(LPDWORD, "lpdwFree")]),
1377     StdMethod(DDRESULT, "GetSurfaceFromDC", [(HDC, "hdc"), Out(Pointer(LPDIRECTDRAWSURFACE7), "lpDDSurface")]),
1378     StdMethod(DDRESULT, "RestoreAllSurfaces", []),
1379     StdMethod(DDRESULT, "TestCooperativeLevel", []),
1380     StdMethod(DDRESULT, "GetDeviceIdentifier", [Out(LPDDDEVICEIDENTIFIER2, "lpDDDI"), (DirectDrawGetDeviceIdentifierFlags, "dwFlags")]),
1381     StdMethod(DDRESULT, "StartModeTest", [(LPSIZE, "lpModesToTest"), (DWORD, "dwNumEntries"), (DirectDrawStartModeTestFlags, "dwFlags")]),
1382     StdMethod(DDRESULT, "EvaluateMode", [(DirectDrawEvaluateModeFlags, "dwFlags"), Out(Pointer(DWORD), "pSecondsUntilTimeout")]),
1383 ]
1384
1385 IDirectDrawPalette.methods += [
1386     StdMethod(DDRESULT, "GetCaps", [Out(Pointer(DirectDrawPaletteCapsFlags), "lpdwCaps")]),
1387     StdMethod(DDRESULT, "GetEntries", [(DWORD, "dwFlags"), (DWORD, "dwBase"), (DWORD, "dwNumEntries"), Out(LPPALETTEENTRY, "lpEntries")]),
1388     StdMethod(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (DWORD, "dwFlags"), (LPPALETTEENTRY, "lpDDColorTable")]),
1389     StdMethod(DDRESULT, "SetEntries", [(DWORD, "dwFlags"), (DWORD, "dwStartingEntry"), (DWORD, "dwCount"), (LPPALETTEENTRY, "lpEntries")]),
1390 ]
1391
1392 IDirectDrawClipper.methods += [
1393     StdMethod(DDRESULT, "GetClipList", [(LPRECT, "lpRect"), (LPRGNDATA, "lpClipList"), Out(LPDWORD, "lpdwSize")]),
1394     StdMethod(DDRESULT, "GetHWnd", [Out(Pointer(HWND), "hWnd")]),
1395     StdMethod(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (DWORD, "dwFlags")]),
1396     StdMethod(DDRESULT, "IsClipListChanged", [Out(Pointer(BOOL), "lpbChanged")]),
1397     StdMethod(DDRESULT, "SetClipList", [(LPRGNDATA, "lpClipList"), (DWORD, "dwFlags")]),
1398     StdMethod(DDRESULT, "SetHWnd", [(DWORD, "dwFlags"), (HWND, "hWnd")]),
1399 ]
1400
1401
1402 IDirectDrawSurface.methods += [
1403     StdMethod(DDRESULT, "AddAttachedSurface", [(LPDIRECTDRAWSURFACE, "lpDDSAttachedSurface")]),
1404     StdMethod(DDRESULT, "AddOverlayDirtyRect", [(LPRECT, "lpRect")]),
1405     StdMethod(DDRESULT, "Blt", [(LPRECT, "lpDestRect"), (LPDIRECTDRAWSURFACE, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DirectDrawBltFlags, "dwFlags"), (LPDDBLTFX, "lpDDBltFx")]),
1406     StdMethod(DDRESULT, "BltBatch", [(LPDDBLTBATCH, "lpDDBltBatch"), (DWORD, "dwCount"), (DWORD, "dwFlags")]),
1407     StdMethod(DDRESULT, "BltFast", [(DWORD, "dwX"), (DWORD, "dwY"), (LPDIRECTDRAWSURFACE, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DWORD, "dwTrans")]),
1408     StdMethod(DDRESULT, "DeleteAttachedSurface", [(DWORD, "dwFlags"), (LPDIRECTDRAWSURFACE, "lpDDSurface")]),
1409     StdMethod(DDRESULT, "EnumAttachedSurfaces", [(LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpEnumSurfacesCallback")]),
1410     StdMethod(DDRESULT, "EnumOverlayZOrders", [(DirectDrawEnumOverlayZOrderFlags, "dwFlags"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpfnCallback")]),
1411     StdMethod(DDRESULT, "Flip", [(LPDIRECTDRAWSURFACE, "lpDDSurfaceTargetOverride"), (DirectDrawFlipFlags, "dwFlags")]),
1412     StdMethod(DDRESULT, "GetAttachedSurface", [(LPDDSCAPS, "lpDDSCaps"), Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDDAttachedSurface")]),
1413     StdMethod(DDRESULT, "GetBltStatus", [(DirectDrawGetBltStatusFlags, "dwFlags")]),
1414     StdMethod(DDRESULT, "GetCaps", [Out(LPDDSCAPS, "lpDDSCaps")]),
1415     StdMethod(DDRESULT, "GetClipper", [Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper")]),
1416     StdMethod(DDRESULT, "GetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1417     StdMethod(DDRESULT, "GetDC", [Out(Pointer(HDC), "phDC")]),
1418     StdMethod(DDRESULT, "GetFlipStatus", [(DWORD, "dwFlags")]),
1419     StdMethod(DDRESULT, "GetOverlayPosition", [Out(LPLONG, "lplX"), Out(LPLONG, "lplY")]),
1420     StdMethod(DDRESULT, "GetPalette", [Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette")]),
1421     StdMethod(DDRESULT, "GetPixelFormat", [Out(LPDDPIXELFORMAT, "lpDDPixelFormat")]),
1422     StdMethod(DDRESULT, "GetSurfaceDesc", [Out(LPDDSURFACEDESC, "lpDDSurfaceDesc")]),
1423     StdMethod(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (LPDDSURFACEDESC, "lpDDSurfaceDesc")]),
1424     StdMethod(DDRESULT, "IsLost", []),
1425     StdMethod(DDRESULT, "Lock", [(LPRECT, "lpDestRect"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (DirectDrawSurfaceLockFlags, "dwFlags"), (HANDLE, "hEvent")]),
1426     StdMethod(DDRESULT, "ReleaseDC", [(HDC, "hDC")]),
1427     StdMethod(DDRESULT, "Restore", []),
1428     StdMethod(DDRESULT, "SetClipper", [(LPDIRECTDRAWCLIPPER, "lpDDClipper")]),
1429     StdMethod(DDRESULT, "SetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1430     StdMethod(DDRESULT, "SetOverlayPosition", [(LONG, "lX"), (LONG, "lY")]),
1431     StdMethod(DDRESULT, "SetPalette", [(LPDIRECTDRAWPALETTE, "lpDDPalette")]),
1432     StdMethod(DDRESULT, "Unlock", [(LPVOID, "lp")]),
1433     StdMethod(DDRESULT, "UpdateOverlay", [(LPRECT, "lpSrcRect"), (LPDIRECTDRAWSURFACE, "lpDDDestSurface"), (LPRECT, "lpDestRect"), (DirectDrawSurfaceOverlayFlags, "dwFlags"), (LPDDOVERLAYFX, "lpDDOverlayFx")]),
1434     StdMethod(DDRESULT, "UpdateOverlayDisplay", [(DWORD, "dwFlags")]),
1435     StdMethod(DDRESULT, "UpdateOverlayZOrder", [(DirectDrawUpdateOverlayZOrderFlags, "dwFlags"), (LPDIRECTDRAWSURFACE, "lpDDSReference")]),
1436 ]
1437
1438 IDirectDrawSurface2.methods += [
1439     StdMethod(DDRESULT, "AddAttachedSurface", [(LPDIRECTDRAWSURFACE2, "lpDDSAttachedSurface")]),
1440     StdMethod(DDRESULT, "AddOverlayDirtyRect", [(LPRECT, "lpRect")]),
1441     StdMethod(DDRESULT, "Blt", [(LPRECT, "lpDestRect"), (LPDIRECTDRAWSURFACE2, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DirectDrawBltFlags, "dwFlags"), (LPDDBLTFX, "lpDDBltFx")]),
1442     StdMethod(DDRESULT, "BltBatch", [(LPDDBLTBATCH, "lpDDBltBatch"), (DWORD, "dwCount"), (DWORD, "dwFlags")]),
1443     StdMethod(DDRESULT, "BltFast", [(DWORD, "dwX"), (DWORD, "dwY"), (LPDIRECTDRAWSURFACE2, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DWORD, "dwTrans")]),
1444     StdMethod(DDRESULT, "DeleteAttachedSurface", [(DWORD, "dwFlags"), (LPDIRECTDRAWSURFACE2, "lpDDSurface")]),
1445     StdMethod(DDRESULT, "EnumAttachedSurfaces", [(LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpEnumSurfacesCallback")]),
1446     StdMethod(DDRESULT, "EnumOverlayZOrders", [(DirectDrawEnumOverlayZOrderFlags, "dwFlags"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpfnCallback")]),
1447     StdMethod(DDRESULT, "Flip", [(LPDIRECTDRAWSURFACE2, "lpDDSurfaceTargetOverride"), (DirectDrawFlipFlags, "dwFlags")]),
1448     StdMethod(DDRESULT, "GetAttachedSurface", [(LPDDSCAPS, "lpDDSCaps"), Out(Pointer(LPDIRECTDRAWSURFACE2), "lplpDDAttachedSurface")]),
1449     StdMethod(DDRESULT, "GetBltStatus", [(DirectDrawGetBltStatusFlags, "dwFlags")]),
1450     StdMethod(DDRESULT, "GetCaps", [Out(LPDDSCAPS, "lpDDSCaps")]),
1451     StdMethod(DDRESULT, "GetClipper", [Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper")]),
1452     StdMethod(DDRESULT, "GetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1453     StdMethod(DDRESULT, "GetDC", [Out(Pointer(HDC), "phDC")]),
1454     StdMethod(DDRESULT, "GetFlipStatus", [(DWORD, "dwFlags")]),
1455     StdMethod(DDRESULT, "GetOverlayPosition", [Out(LPLONG, "lplX"), Out(LPLONG, "lplY")]),
1456     StdMethod(DDRESULT, "GetPalette", [Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette")]),
1457     StdMethod(DDRESULT, "GetPixelFormat", [Out(LPDDPIXELFORMAT, "lpDDPixelFormat")]),
1458     StdMethod(DDRESULT, "GetSurfaceDesc", [Out(LPDDSURFACEDESC, "lpDDSurfaceDesc")]),
1459     StdMethod(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (LPDDSURFACEDESC, "lpDDSurfaceDesc")]),
1460     StdMethod(DDRESULT, "IsLost", []),
1461     StdMethod(DDRESULT, "Lock", [(LPRECT, "lpDestRect"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (DirectDrawSurfaceLockFlags, "dwFlags"), (HANDLE, "hEvent")]),
1462     StdMethod(DDRESULT, "ReleaseDC", [(HDC, "hDC")]),
1463     StdMethod(DDRESULT, "Restore", []),
1464     StdMethod(DDRESULT, "SetClipper", [(LPDIRECTDRAWCLIPPER, "lpDDClipper")]),
1465     StdMethod(DDRESULT, "SetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1466     StdMethod(DDRESULT, "SetOverlayPosition", [(LONG, "lX"), (LONG, "lY")]),
1467     StdMethod(DDRESULT, "SetPalette", [(LPDIRECTDRAWPALETTE, "lpDDPalette")]),
1468     StdMethod(DDRESULT, "Unlock", [(LPVOID, "lp")]),
1469     StdMethod(DDRESULT, "UpdateOverlay", [(LPRECT, "lpSrcRect"), (LPDIRECTDRAWSURFACE2, "lpDDDestSurface"), (LPRECT, "lpDestRect"), (DirectDrawSurfaceOverlayFlags, "dwFlags"), (LPDDOVERLAYFX, "lpDDOverlayFx")]),
1470     StdMethod(DDRESULT, "UpdateOverlayDisplay", [(DWORD, "dwFlags")]),
1471     StdMethod(DDRESULT, "UpdateOverlayZOrder", [(DirectDrawUpdateOverlayZOrderFlags, "dwFlags"), (LPDIRECTDRAWSURFACE2, "lpDDSReference")]),
1472     StdMethod(DDRESULT, "GetDDInterface", [Out(LPUNKNOWN, "lplpDD")]),
1473     StdMethod(DDRESULT, "PageLock", [(DWORD, "dwFlags")]),
1474     StdMethod(DDRESULT, "PageUnlock", [(DWORD, "dwFlags")]),
1475 ]
1476
1477 IDirectDrawSurface3.methods += [
1478     StdMethod(DDRESULT, "AddAttachedSurface", [(LPDIRECTDRAWSURFACE3, "lpDDSAttachedSurface")]),
1479     StdMethod(DDRESULT, "AddOverlayDirtyRect", [(LPRECT, "lpRect")]),
1480     StdMethod(DDRESULT, "Blt", [(LPRECT, "lpDestRect"), (LPDIRECTDRAWSURFACE3, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DirectDrawBltFlags, "dwFlags"), (LPDDBLTFX, "lpDDBltFx")]),
1481     StdMethod(DDRESULT, "BltBatch", [(LPDDBLTBATCH, "lpDDBltBatch"), (DWORD, "dwCount"), (DWORD, "dwFlags")]),
1482     StdMethod(DDRESULT, "BltFast", [(DWORD, "dwX"), (DWORD, "dwY"), (LPDIRECTDRAWSURFACE3, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DWORD, "dwTrans")]),
1483     StdMethod(DDRESULT, "DeleteAttachedSurface", [(DWORD, "dwFlags"), (LPDIRECTDRAWSURFACE3, "lpDDSurface")]),
1484     StdMethod(DDRESULT, "EnumAttachedSurfaces", [(LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpEnumSurfacesCallback")]),
1485     StdMethod(DDRESULT, "EnumOverlayZOrders", [(DirectDrawEnumOverlayZOrderFlags, "dwFlags"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpfnCallback")]),
1486     StdMethod(DDRESULT, "Flip", [(LPDIRECTDRAWSURFACE3, "lpDDSurfaceTargetOverride"), (DirectDrawFlipFlags, "dwFlags")]),
1487     StdMethod(DDRESULT, "GetAttachedSurface", [(LPDDSCAPS, "lpDDSCaps"), Out(Pointer(LPDIRECTDRAWSURFACE3), "lplpDDAttachedSurface")]),
1488     StdMethod(DDRESULT, "GetBltStatus", [(DirectDrawGetBltStatusFlags, "dwFlags")]),
1489     StdMethod(DDRESULT, "GetCaps", [Out(LPDDSCAPS, "lpDDSCaps")]),
1490     StdMethod(DDRESULT, "GetClipper", [Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper")]),
1491     StdMethod(DDRESULT, "GetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1492     StdMethod(DDRESULT, "GetDC", [Out(Pointer(HDC), "phDC")]),
1493     StdMethod(DDRESULT, "GetFlipStatus", [(DWORD, "dwFlags")]),
1494     StdMethod(DDRESULT, "GetOverlayPosition", [Out(LPLONG, "lplX"), Out(LPLONG, "lplY")]),
1495     StdMethod(DDRESULT, "GetPalette", [Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette")]),
1496     StdMethod(DDRESULT, "GetPixelFormat", [Out(LPDDPIXELFORMAT, "lpDDPixelFormat")]),
1497     StdMethod(DDRESULT, "GetSurfaceDesc", [Out(LPDDSURFACEDESC, "lpDDSurfaceDesc")]),
1498     StdMethod(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (LPDDSURFACEDESC, "lpDDSurfaceDesc")]),
1499     StdMethod(DDRESULT, "IsLost", []),
1500     StdMethod(DDRESULT, "Lock", [(LPRECT, "lpDestRect"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (DirectDrawSurfaceLockFlags, "dwFlags"), (HANDLE, "hEvent")]),
1501     StdMethod(DDRESULT, "ReleaseDC", [(HDC, "hDC")]),
1502     StdMethod(DDRESULT, "Restore", []),
1503     StdMethod(DDRESULT, "SetClipper", [(LPDIRECTDRAWCLIPPER, "lpDDClipper")]),
1504     StdMethod(DDRESULT, "SetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1505     StdMethod(DDRESULT, "SetOverlayPosition", [(LONG, "lX"), (LONG, "lY")]),
1506     StdMethod(DDRESULT, "SetPalette", [(LPDIRECTDRAWPALETTE, "lpDDPalette")]),
1507     StdMethod(DDRESULT, "Unlock", [(LPVOID, "lp")]),
1508     StdMethod(DDRESULT, "UpdateOverlay", [(LPRECT, "lpSrcRect"), (LPDIRECTDRAWSURFACE3, "lpDDDestSurface"), (LPRECT, "lpDestRect"), (DirectDrawSurfaceOverlayFlags, "dwFlags"), (LPDDOVERLAYFX, "lpDDOverlayFx")]),
1509     StdMethod(DDRESULT, "UpdateOverlayDisplay", [(DWORD, "dwFlags")]),
1510     StdMethod(DDRESULT, "UpdateOverlayZOrder", [(DirectDrawUpdateOverlayZOrderFlags, "dwFlags"), (LPDIRECTDRAWSURFACE3, "lpDDSReference")]),
1511     StdMethod(DDRESULT, "GetDDInterface", [Out(LPUNKNOWN, "lplpDD")]),
1512     StdMethod(DDRESULT, "PageLock", [(DWORD, "dwFlags")]),
1513     StdMethod(DDRESULT, "PageUnlock", [(DWORD, "dwFlags")]),
1514     StdMethod(DDRESULT, "SetSurfaceDesc", [(LPDDSURFACEDESC, "lpDDSD"), (DWORD, "dwFlags")]),
1515 ]
1516
1517 IDirectDrawSurface4.methods += [
1518     StdMethod(DDRESULT, "AddAttachedSurface", [(LPDIRECTDRAWSURFACE4, "lpDDSAttachedSurface")]),
1519     StdMethod(DDRESULT, "AddOverlayDirtyRect", [(LPRECT, "lpRect")]),
1520     StdMethod(DDRESULT, "Blt", [(LPRECT, "lpDestRect"), (LPDIRECTDRAWSURFACE4, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DirectDrawBltFlags, "dwFlags"), (LPDDBLTFX, "lpDDBltFx")]),
1521     StdMethod(DDRESULT, "BltBatch", [(LPDDBLTBATCH, "lpDDBltBatch"), (DWORD, "dwCount"), (DWORD, "dwFlags")]),
1522     StdMethod(DDRESULT, "BltFast", [(DWORD, "dwX"), (DWORD, "dwY"), (LPDIRECTDRAWSURFACE4, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DWORD, "dwTrans")]),
1523     StdMethod(DDRESULT, "DeleteAttachedSurface", [(DWORD, "dwFlags"), (LPDIRECTDRAWSURFACE4, "lpDDSurface")]),
1524     StdMethod(DDRESULT, "EnumAttachedSurfaces", [(LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK2, "lpEnumSurfacesCallback")]),
1525     StdMethod(DDRESULT, "EnumOverlayZOrders", [(DirectDrawEnumOverlayZOrderFlags, "dwFlags"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK2, "lpfnCallback")]),
1526     StdMethod(DDRESULT, "Flip", [(LPDIRECTDRAWSURFACE4, "lpDDSurfaceTargetOverride"), (DirectDrawFlipFlags, "dwFlags")]),
1527     StdMethod(DDRESULT, "GetAttachedSurface", [(LPDDSCAPS2, "lpDDSCaps"), Out(Pointer(LPDIRECTDRAWSURFACE4), "lplpDDAttachedSurface")]),
1528     StdMethod(DDRESULT, "GetBltStatus", [(DirectDrawGetBltStatusFlags, "dwFlags")]),
1529     StdMethod(DDRESULT, "GetCaps", [Out(LPDDSCAPS2, "lpDDSCaps")]),
1530     StdMethod(DDRESULT, "GetClipper", [Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper")]),
1531     StdMethod(DDRESULT, "GetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1532     StdMethod(DDRESULT, "GetDC", [Out(Pointer(HDC), "phDC")]),
1533     StdMethod(DDRESULT, "GetFlipStatus", [(DWORD, "dwFlags")]),
1534     StdMethod(DDRESULT, "GetOverlayPosition", [Out(LPLONG, "lplX"), Out(LPLONG, "lplY")]),
1535     StdMethod(DDRESULT, "GetPalette", [Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette")]),
1536     StdMethod(DDRESULT, "GetPixelFormat", [Out(LPDDPIXELFORMAT, "lpDDPixelFormat")]),
1537     StdMethod(DDRESULT, "GetSurfaceDesc", [Out(LPDDSURFACEDESC2, "lpDDSurfaceDesc")]),
1538     StdMethod(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc")]),
1539     StdMethod(DDRESULT, "IsLost", []),
1540     StdMethod(DDRESULT, "Lock", [(LPRECT, "lpDestRect"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (DirectDrawSurfaceLockFlags, "dwFlags"), (HANDLE, "hEvent")]),
1541     StdMethod(DDRESULT, "ReleaseDC", [(HDC, "hDC")]),
1542     StdMethod(DDRESULT, "Restore", []),
1543     StdMethod(DDRESULT, "SetClipper", [(LPDIRECTDRAWCLIPPER, "lpDDClipper")]),
1544     StdMethod(DDRESULT, "SetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1545     StdMethod(DDRESULT, "SetOverlayPosition", [(LONG, "lX"), (LONG, "lY")]),
1546     StdMethod(DDRESULT, "SetPalette", [(LPDIRECTDRAWPALETTE, "lpDDPalette")]),
1547     StdMethod(DDRESULT, "Unlock", [(LPRECT, "lpRect")]),
1548     StdMethod(DDRESULT, "UpdateOverlay", [(LPRECT, "lpSrcRect"), (LPDIRECTDRAWSURFACE4, "lpDDDestSurface"), (LPRECT, "lpDestRect"), (DirectDrawSurfaceOverlayFlags, "dwFlags"), (LPDDOVERLAYFX, "lpDDOverlayFx")]),
1549     StdMethod(DDRESULT, "UpdateOverlayDisplay", [(DWORD, "dwFlags")]),
1550     StdMethod(DDRESULT, "UpdateOverlayZOrder", [(DirectDrawUpdateOverlayZOrderFlags, "dwFlags"), (LPDIRECTDRAWSURFACE4, "lpDDSReference")]),
1551     StdMethod(DDRESULT, "GetDDInterface", [Out(Pointer(LPVOID), "lplpDD")]),
1552     StdMethod(DDRESULT, "PageLock", [(DWORD, "dwFlags")]),
1553     StdMethod(DDRESULT, "PageUnlock", [(DWORD, "dwFlags")]),
1554     StdMethod(DDRESULT, "SetSurfaceDesc", [(LPDDSURFACEDESC2, "lpDDSD"), (DWORD, "dwFlags")]),
1555     StdMethod(DDRESULT, "SetPrivateData", [(REFGUID, "guidTag"), (LPVOID, "lpData"), (DWORD, "cbSize"), (DWORD, "dwFlags")]),
1556     StdMethod(DDRESULT, "GetPrivateData", [(REFGUID, "guidTag"), (LPVOID, "lpData"), Out(LPDWORD, "lpcbBufferSize")]),
1557     StdMethod(DDRESULT, "FreePrivateData", [(REFGUID, "guidTag")]),
1558     StdMethod(DDRESULT, "GetUniquenessValue", [Out(LPDWORD, "lpValue")]),
1559     StdMethod(DDRESULT, "ChangeUniquenessValue", []),
1560 ]
1561
1562 IDirectDrawSurface7.methods += [
1563     StdMethod(DDRESULT, "AddAttachedSurface", [(LPDIRECTDRAWSURFACE7, "lpDDSAttachedSurface")]),
1564     StdMethod(DDRESULT, "AddOverlayDirtyRect", [(LPRECT, "lpRect")]),
1565     StdMethod(DDRESULT, "Blt", [(LPRECT, "lpDestRect"), (LPDIRECTDRAWSURFACE7, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DirectDrawBltFlags, "dwFlags"), (LPDDBLTFX, "lpDDBltFx")]),
1566     StdMethod(DDRESULT, "BltBatch", [(LPDDBLTBATCH, "lpDDBltBatch"), (DWORD, "dwCount"), (DWORD, "dwFlags")]),
1567     StdMethod(DDRESULT, "BltFast", [(DWORD, "dwX"), (DWORD, "dwY"), (LPDIRECTDRAWSURFACE7, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DWORD, "dwTrans")]),
1568     StdMethod(DDRESULT, "DeleteAttachedSurface", [(DWORD, "dwFlags"), (LPDIRECTDRAWSURFACE7, "lpDDSurface")]),
1569     StdMethod(DDRESULT, "EnumAttachedSurfaces", [(LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK7, "lpEnumSurfacesCallback")]),
1570     StdMethod(DDRESULT, "EnumOverlayZOrders", [(DirectDrawEnumOverlayZOrderFlags, "dwFlags"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK7, "lpfnCallback")]),
1571     StdMethod(DDRESULT, "Flip", [(LPDIRECTDRAWSURFACE7, "lpDDSurfaceTargetOverride"), (DirectDrawFlipFlags, "dwFlags")]),
1572     StdMethod(DDRESULT, "GetAttachedSurface", [(LPDDSCAPS2, "lpDDSCaps"), Out(Pointer(LPDIRECTDRAWSURFACE7), "lplpDDAttachedSurface")]),
1573     StdMethod(DDRESULT, "GetBltStatus", [(DirectDrawGetBltStatusFlags, "dwFlags")]),
1574     StdMethod(DDRESULT, "GetCaps", [Out(LPDDSCAPS2, "lpDDSCaps")]),
1575     StdMethod(DDRESULT, "GetClipper", [Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper")]),
1576     StdMethod(DDRESULT, "GetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1577     StdMethod(DDRESULT, "GetDC", [Out(Pointer(HDC), "phDC")]),
1578     StdMethod(DDRESULT, "GetFlipStatus", [(DWORD, "dwFlags")]),
1579     StdMethod(DDRESULT, "GetOverlayPosition", [Out(LPLONG, "lplX"), Out(LPLONG, "lplY")]),
1580     StdMethod(DDRESULT, "GetPalette", [Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette")]),
1581     StdMethod(DDRESULT, "GetPixelFormat", [Out(LPDDPIXELFORMAT, "lpDDPixelFormat")]),
1582     StdMethod(DDRESULT, "GetSurfaceDesc", [Out(LPDDSURFACEDESC2, "lpDDSurfaceDesc")]),
1583     StdMethod(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc")]),
1584     StdMethod(DDRESULT, "IsLost", []),
1585     StdMethod(DDRESULT, "Lock", [(LPRECT, "lpDestRect"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (DirectDrawSurfaceLockFlags, "dwFlags"), (HANDLE, "hEvent")]),
1586     StdMethod(DDRESULT, "ReleaseDC", [(HDC, "hDC")]),
1587     StdMethod(DDRESULT, "Restore", []),
1588     StdMethod(DDRESULT, "SetClipper", [(LPDIRECTDRAWCLIPPER, "lpDDClipper")]),
1589     StdMethod(DDRESULT, "SetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1590     StdMethod(DDRESULT, "SetOverlayPosition", [(LONG, "lX"), (LONG, "lY")]),
1591     StdMethod(DDRESULT, "SetPalette", [(LPDIRECTDRAWPALETTE, "lpDDPalette")]),
1592     StdMethod(DDRESULT, "Unlock", [(LPRECT, "lpRect")]),
1593     StdMethod(DDRESULT, "UpdateOverlay", [(LPRECT, "lpSrcRect"), (LPDIRECTDRAWSURFACE7, "lpDDDestSurface"), (LPRECT, "lpDestRect"), (DirectDrawSurfaceOverlayFlags, "dwFlags"), (LPDDOVERLAYFX, "lpDDOverlayFx")]),
1594     StdMethod(DDRESULT, "UpdateOverlayDisplay", [(DWORD, "dwFlags")]),
1595     StdMethod(DDRESULT, "UpdateOverlayZOrder", [(DirectDrawUpdateOverlayZOrderFlags, "dwFlags"), (LPDIRECTDRAWSURFACE7, "lpDDSReference")]),
1596     StdMethod(DDRESULT, "GetDDInterface", [Out(Pointer(LPVOID), "lplpDD")]),
1597     StdMethod(DDRESULT, "PageLock", [(DWORD, "dwFlags")]),
1598     StdMethod(DDRESULT, "PageUnlock", [(DWORD, "dwFlags")]),
1599     StdMethod(DDRESULT, "SetSurfaceDesc", [(LPDDSURFACEDESC2, "lpDDSD"), (DWORD, "dwFlags")]),
1600     StdMethod(DDRESULT, "SetPrivateData", [(REFGUID, "guidTag"), (LPVOID, "lpData"), (DWORD, "cbSize"), (DWORD, "dwFlags")]),
1601     StdMethod(DDRESULT, "GetPrivateData", [(REFGUID, "guidTag"), (LPVOID, "lpData"), Out(LPDWORD, "lpcbBufferSize")]),
1602     StdMethod(DDRESULT, "FreePrivateData", [(REFGUID, "guidTag")]),
1603     StdMethod(DDRESULT, "GetUniquenessValue", [Out(LPDWORD, "lpValue")]),
1604     StdMethod(DDRESULT, "ChangeUniquenessValue", []),
1605     StdMethod(DDRESULT, "SetPriority", [(DWORD, "dwPriority")]),
1606     StdMethod(DDRESULT, "GetPriority", [Out(LPDWORD, "lpdwPriority")]),
1607     StdMethod(DDRESULT, "SetLOD", [(DWORD, "dwMaxLOD")]),
1608     StdMethod(DDRESULT, "GetLOD", [Out(LPDWORD, "lpdwMaxLOD")]),
1609 ]
1610
1611 IDirectDrawColorControl.methods += [
1612     StdMethod(DDRESULT, "GetColorControls", [(LPDDCOLORCONTROL, "lpColorControl")]),
1613     StdMethod(DDRESULT, "SetColorControls", [(LPDDCOLORCONTROL, "lpColorControl")]),
1614 ]
1615
1616 IDirectDrawGammaControl.methods += [
1617     StdMethod(DDRESULT, "GetGammaRamp", [(DWORD, "dwFlags"), Out(LPDDGAMMARAMP, "lpRampData")]),
1618     StdMethod(DDRESULT, "SetGammaRamp", [(DirectDrawSetGammaRampFlags, "dwFlags"), (LPDDGAMMARAMP, "lpRampData")]),
1619 ]
1620
1621 LPDDENUMCALLBACKA   = FunctionPointer(BOOL, "LPDDENUMCALLBACKA", [Pointer(GUID), LPSTR, LPSTR, LPVOID])
1622 LPDDENUMCALLBACKW   = FunctionPointer(BOOL, "LPDDENUMCALLBACKW", [Pointer(GUID), LPWSTR, LPWSTR, LPVOID])
1623 LPDDENUMCALLBACKEXA = FunctionPointer(BOOL, "LPDDENUMCALLBACKEXA", [Pointer(GUID), LPSTR, LPSTR, LPVOID, HMONITOR])
1624 LPDDENUMCALLBACKEXW = FunctionPointer(BOOL, "LPDDENUMCALLBACKEXW", [Pointer(GUID), LPWSTR, LPWSTR, LPVOID, HMONITOR])
1625
1626 DDENUM = Flags(DWORD, [
1627     "DDENUM_ATTACHEDSECONDARYDEVICES",
1628     "DDENUM_DETACHEDSECONDARYDEVICES",
1629     "DDENUM_NONDISPLAYDEVICES",
1630 ])
1631
1632 DDCREATE = Flags(DWORD, [
1633     "DDCREATE_HARDWAREONLY",
1634     "DDCREATE_EMULATIONONLY",
1635 ])
1636
1637 ddraw = Module("ddraw")
1638 ddraw.addFunctions([
1639     StdFunction(HRESULT, "DirectDrawEnumerateW", [(LPDDENUMCALLBACKW, "lpCallback"), (LPVOID, "lpContext")]),
1640     StdFunction(HRESULT, "DirectDrawEnumerateA", [(LPDDENUMCALLBACKA, "lpCallback"), (LPVOID, "lpContext")]),
1641     StdFunction(HRESULT, "DirectDrawEnumerateExW", [(LPDDENUMCALLBACKEXW, "lpCallback"), (LPVOID, "lpContext"), (DDENUM, "dwFlags")]),
1642     StdFunction(HRESULT, "DirectDrawEnumerateExA", [(LPDDENUMCALLBACKEXA, "lpCallback"), (LPVOID, "lpContext"), (DDENUM, "dwFlags")]),
1643     StdFunction(HRESULT, "DirectDrawCreate", [(Pointer(GUID), "lpGUID"), Out(Pointer(LPDIRECTDRAW), "lplpDD"), (LPUNKNOWN, "pUnkOuter")]),
1644     StdFunction(HRESULT, "DirectDrawCreateEx", [(Pointer(GUID), "lpGuid"), Out(Pointer(ObjPointer(Void)), "lplpDD"), (REFIID, "iid"), (LPUNKNOWN, "pUnkOuter")]),
1645     StdFunction(HRESULT, "DirectDrawCreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (LPUNKNOWN, "pUnkOuter")]),
1646     StdFunction(Void, "AcquireDDThreadLock", [], internal=True),
1647     StdFunction(Void, "ReleaseDDThreadLock", [], internal=True),
1648     StdFunction(DWORD, "D3DParseUnknownCommand", [(LPVOID, "lpCmd"), Out(Pointer(LPVOID), "lpRetCmd")]),
1649     StdFunction(HRESULT, "DllCanUnloadNow", []),
1650     StdFunction(HRESULT, "DllGetClassObject", [(REFCLSID, "rclsid"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppv")]),
1651
1652     # XXX
1653     StdFunction(HRESULT, "CompleteCreateSysmemSurface", [Int, Int]),
1654     StdFunction(HRESULT, "GetSurfaceFromDC", [Int, Int, Int]),
1655     StdFunction(HRESULT, "DDInternalLock", [Int, Int]),
1656     StdFunction(HRESULT, "DDInternalUnlock", [Int]),
1657     StdFunction(HRESULT, "DSoundHelp", [HWND, Int, Int]),
1658     StdFunction(HRESULT, "GetDDSurfaceLocal", [Int, Int, Int]),
1659     StdFunction(HANDLE, "GetOLEThunkData", [Int]),
1660     StdFunction(HRESULT, "RegisterSpecialCase", [Int, Int, Int, Int]),
1661     StdFunction(HRESULT, "DDGetAttachedSurfaceLcl", [Int, Int, Int]),
1662
1663     # TODO: SetAppCompatData
1664 ])
1665