]> git.cworth.org Git - apitrace/blob - specs/ddraw.py
Fix array swizzling.
[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     (WORD, "MultiSampleCaps.wFlipMSTypes"),
459     (WORD, "MultiSampleCaps.wBltMSTypes"),
460     (DWORD, "dwBBitMask"),
461     (DWORD, "dwVBitMask"),
462     (DWORD, "dwStencilBitMask"),
463     (DWORD, "dwBumpLuminanceBitMask"),
464     (DWORD, "dwRGBAlphaBitMask"),
465     (DWORD, "dwYUVAlphaBitMask"),
466     (DWORD, "dwLuminanceAlphaBitMask"),
467     (DWORD, "dwRGBZBitMask"),
468     (DWORD, "dwYUVZBitMask"),
469 ])
470 LPDDPIXELFORMAT = Pointer(DDPIXELFORMAT)
471
472 DDOVERLAYFX = Struct("DDOVERLAYFX", [
473     (DWORD, "dwSize"),
474     (DWORD, "dwAlphaEdgeBlendBitDepth"),
475     (DWORD, "dwAlphaEdgeBlend"),
476     (DWORD, "dwReserved"),
477     (DWORD, "dwAlphaDestConstBitDepth"),
478     (DWORD, "dwAlphaDestConst"),
479     (LPDIRECTDRAWSURFACE, "lpDDSAlphaDest"),
480     (DWORD, "dwAlphaSrcConstBitDepth"),
481     (DWORD, "dwAlphaSrcConst"),
482     (LPDIRECTDRAWSURFACE, "lpDDSAlphaSrc"),
483     (DDCOLORKEY, "dckDestColorkey"),
484     (DDCOLORKEY, "dckSrcColorkey"),
485     (DWORD, "dwDDFX"),
486     (DWORD, "dwFlags"),
487 ])
488 LPDDOVERLAYFX = Pointer(DDOVERLAYFX)
489
490 DDBLTBATCH = Struct("DDBLTBATCH", [
491     (LPRECT, "lprDest"),
492     (LPDIRECTDRAWSURFACE, "lpDDSSrc"),
493     (LPRECT, "lprSrc"),
494     (DWORD, "dwFlags"),
495     (LPDDBLTFX, "lpDDBltFx"),
496 ])
497 LPDDBLTBATCH = Pointer(DDBLTBATCH)
498
499 DDGAMMARAMP = Struct("DDGAMMARAMP", [
500     (Array(WORD, 256), "red"),
501     (Array(WORD, 256), "green"),
502     (Array(WORD, 256), "blue"),
503 ])
504 LPDDGAMMARAMP = Pointer(DDGAMMARAMP)
505
506 DDDEVICEIDENTIFIER = Struct("DDDEVICEIDENTIFIER", [
507     (CString, "szDriver"),
508     (CString, "szDescription"),
509     (LARGE_INTEGER, "liDriverVersion"),
510     (DWORD, "dwVendorId"),
511     (DWORD, "dwDeviceId"),
512     (DWORD, "dwSubSysId"),
513     (DWORD, "dwRevision"),
514     (GUID, "guidDeviceIdentifier"),
515 ])
516 LPDDDEVICEIDENTIFIER = Pointer(DDDEVICEIDENTIFIER)
517
518 DDDEVICEIDENTIFIER2 = Struct("DDDEVICEIDENTIFIER2", [
519     (CString, "szDriver"),
520     (CString, "szDescription"),
521     (LARGE_INTEGER, "liDriverVersion"),
522     (DWORD, "dwVendorId"),
523     (DWORD, "dwDeviceId"),
524     (DWORD, "dwSubSysId"),
525     (DWORD, "dwRevision"),
526     (GUID, "guidDeviceIdentifier"),
527     (DWORD, "dwWHQLLevel"),
528 ])
529 LPDDDEVICEIDENTIFIER2 = Pointer(DDDEVICEIDENTIFIER2)
530
531 LPCLIPPERCALLBACK = FunctionPointer(DWORD, "LPCLIPPERCALLBACK", [(LPDIRECTDRAWCLIPPER, "lpDDClipper"), (HWND, "hWnd"), (DWORD, "code"), (LPVOID, "lpContext")])
532 LPSURFACESTREAMINGCALLBACK = FunctionPointer(DWORD, "LPSURFACESTREAMINGCALLBACK", [DWORD])
533
534 DDSURFACEDESC = Struct("DDSURFACEDESC", [
535     (DWORD, "dwSize"),
536     (DWORD, "dwFlags"),
537     (DWORD, "dwHeight"),
538     (DWORD, "dwWidth"),
539     (LONG, "lPitch"),
540     (DWORD, "dwLinearSize"),
541     (DWORD, "dwBackBufferCount"),
542     (DWORD, "dwMipMapCount"),
543     (DWORD, "dwZBufferBitDepth"),
544     (DWORD, "dwRefreshRate"),
545     (DWORD, "dwAlphaBitDepth"),
546     (DWORD, "dwReserved"),
547     (LPVOID, "lpSurface"),
548     (DDCOLORKEY, "ddckCKDestOverlay"),
549     (DDCOLORKEY, "ddckCKDestBlt"),
550     (DDCOLORKEY, "ddckCKSrcOverlay"),
551     (DDCOLORKEY, "ddckCKSrcBlt"),
552     (DDPIXELFORMAT, "ddpfPixelFormat"),
553     (DDSCAPS, "ddsCaps"),
554 ])
555 LPDDSURFACEDESC = Pointer(DDSURFACEDESC)
556
557 DDSURFACEDESC2 = Struct("DDSURFACEDESC2", [
558     (DWORD, "dwSize"),
559     (DWORD, "dwFlags"),
560     (DWORD, "dwHeight"),
561     (DWORD, "dwWidth"),
562     (LONG, "lPitch"),
563     (DWORD, "dwLinearSize"),
564     (DWORD, "dwBackBufferCount"),
565     (DWORD, "dwDepth"),
566     (DWORD, "dwMipMapCount"),
567     (DWORD, "dwRefreshRate"),
568     (DWORD, "dwSrcVBHandle"),
569     (DWORD, "dwAlphaBitDepth"),
570     (DWORD, "dwReserved"),
571     (LPVOID, "lpSurface"),
572     (DDCOLORKEY, "ddckCKDestOverlay"),
573     (DWORD, "dwEmptyFaceColor"),
574     (DDCOLORKEY, "ddckCKDestBlt"),
575     (DDCOLORKEY, "ddckCKSrcOverlay"),
576     (DDCOLORKEY, "ddckCKSrcBlt"),
577     (DDPIXELFORMAT, "ddpfPixelFormat"),
578     (DWORD, "dwFVF"),
579     (DDSCAPS2, "ddsCaps"),
580     (DWORD, "dwTextureStage"),
581 ])
582 LPDDSURFACEDESC2 = Pointer(DDSURFACEDESC2)
583
584 DirectDrawSurfaceDescFlags = Flags(DWORD, [
585     "DDSD_CAPS",
586     "DDSD_HEIGHT",
587     "DDSD_WIDTH",
588     "DDSD_PITCH",
589     "DDSD_BACKBUFFERCOUNT",
590     "DDSD_ZBUFFERBITDEPTH",
591     "DDSD_ALPHABITDEPTH",
592     "DDSD_LPSURFACE",
593     "DDSD_PIXELFORMAT",
594     "DDSD_CKDESTOVERLAY",
595     "DDSD_CKDESTBLT",
596     "DDSD_CKSRCOVERLAY",
597     "DDSD_CKSRCBLT",
598     "DDSD_MIPMAPCOUNT",
599     "DDSD_REFRESHRATE",
600     "DDSD_LINEARSIZE",
601     "DDSD_TEXTURESTAGE",
602     "DDSD_FVF",
603     "DDSD_SRCVBHANDLE",
604     "DDSD_DEPTH",
605     "DDSD_ALL",
606 ])
607
608 DDOPTSURFACEDESC = Struct("DDOPTSURFACEDESC", [
609     (DWORD, "dwSize"),
610     (DWORD, "dwFlags"),
611     (DDSCAPS2, "ddSCaps"),
612     (DDOSCAPS, "ddOSCaps"),
613     (GUID, "guid"),
614     (DWORD, "dwCompressionRatio"),
615 ])
616
617 DDSD = Flags(DWORD, [
618     "DDOSD_GUID",
619     "DDOSD_COMPRESSION_RATIO",
620     "DDOSD_SCAPS",
621     "DDOSD_OSCAPS",
622     "DDOSD_ALL",
623 ])
624
625 DDOSDCAPS = Flags(DWORD, [
626     "DDOSDCAPS_OPTCOMPRESSED",
627     "DDOSDCAPS_OPTREORDERED",
628     "DDOSDCAPS_MONOLITHICMIPMAP",
629     "DDOSDCAPS_VALIDSCAPS",
630     "DDOSDCAPS_VALIDOSCAPS",
631 ])
632
633 DDCOLORCONTROL = Struct("DDCOLORCONTROL", [
634     (DWORD, "dwSize"),
635     (DWORD, "dwFlags"),
636     (LONG, "lBrightness"),
637     (LONG, "lContrast"),
638     (LONG, "lHue"),
639     (LONG, "lSaturation"),
640     (LONG, "lSharpness"),
641     (LONG, "lGamma"),
642     (LONG, "lColorEnable"),
643     (DWORD, "dwReserved1"),
644 ])
645 LPDDCOLORCONTROL = Pointer(DDCOLORCONTROL)
646
647 DirectDrawEnumerateExFlags = Flags(DWORD, [
648     "DDENUM_ATTACHEDSECONDARYDEVICES",
649     "DDENUM_DETACHEDSECONDARYDEVICES",
650     "DDENUM_NONDISPLAYDEVICES",
651 ])
652
653 DirectDrawCreateFlags = FakeEnum(DWORD, [
654     "DDCREATE_HARDWAREONLY",
655     "DDCREATE_EMULATIONONLY",
656 ])
657
658 DirectDrawColorControlFlags = Flags(DWORD, [
659     "DDCOLOR_BRIGHTNESS",
660     "DDCOLOR_CONTRAST",
661     "DDCOLOR_HUE",
662     "DDCOLOR_SATURATION",
663     "DDCOLOR_SHARPNESS",
664     "DDCOLOR_GAMMA",
665     "DDCOLOR_COLORENABLE",
666 ])
667
668 DirectDrawCapsFlags = Flags(DWORD, [
669     "DDSCAPS_RESERVED1",
670     "DDSCAPS_ALPHA",
671     "DDSCAPS_BACKBUFFER",
672     "DDSCAPS_COMPLEX",
673     "DDSCAPS_FLIP",
674     "DDSCAPS_FRONTBUFFER",
675     "DDSCAPS_OFFSCREENPLAIN",
676     "DDSCAPS_OVERLAY",
677     "DDSCAPS_PALETTE",
678     "DDSCAPS_PRIMARYSURFACE",
679     "DDSCAPS_RESERVED3",
680     "DDSCAPS_PRIMARYSURFACELEFT",
681     "DDSCAPS_SYSTEMMEMORY",
682     "DDSCAPS_TEXTURE",
683     "DDSCAPS_3DDEVICE",
684     "DDSCAPS_VIDEOMEMORY",
685     "DDSCAPS_VISIBLE",
686     "DDSCAPS_WRITEONLY",
687     "DDSCAPS_ZBUFFER",
688     "DDSCAPS_OWNDC",
689     "DDSCAPS_LIVEVIDEO",
690     "DDSCAPS_HWCODEC",
691     "DDSCAPS_MODEX",
692     "DDSCAPS_MIPMAP",
693     "DDSCAPS_RESERVED2",
694     "DDSCAPS_ALLOCONLOAD",
695     "DDSCAPS_VIDEOPORT",
696     "DDSCAPS_LOCALVIDMEM",
697     "DDSCAPS_NONLOCALVIDMEM",
698     "DDSCAPS_STANDARDVGAMODE",
699     "DDSCAPS_OPTIMIZED",
700 ])
701
702 DirectDrawCapabilityFlags2 = Flags(DWORD, [
703     "DDSCAPS2_RESERVED4",
704     "DDSCAPS2_HARDWAREDEINTERLACE",
705     "DDSCAPS2_HINTDYNAMIC",
706     "DDSCAPS2_HINTSTATIC",
707     "DDSCAPS2_TEXTUREMANAGE",
708     "DDSCAPS2_RESERVED1",
709     "DDSCAPS2_RESERVED2",
710     "DDSCAPS2_OPAQUE",
711     "DDSCAPS2_HINTANTIALIASING",
712     "DDSCAPS2_CUBEMAP",
713     "DDSCAPS2_CUBEMAP_ALLFACES",
714     "DDSCAPS2_CUBEMAP_POSITIVEX",
715     "DDSCAPS2_CUBEMAP_NEGATIVEX",
716     "DDSCAPS2_CUBEMAP_POSITIVEY",
717     "DDSCAPS2_CUBEMAP_NEGATIVEY",
718     "DDSCAPS2_CUBEMAP_POSITIVEZ",
719     "DDSCAPS2_CUBEMAP_NEGATIVEZ",
720     "DDSCAPS2_MIPMAPSUBLEVEL",
721     "DDSCAPS2_D3DTEXTUREMANAGE",
722     "DDSCAPS2_DONOTPERSIST",
723     "DDSCAPS2_STEREOSURFACELEFT",
724     "DDSCAPS2_VOLUME",
725     "DDSCAPS2_NOTUSERLOCKABLE",
726     "DDSCAPS2_POINTS",
727     "DDSCAPS2_RTPATCHES",
728     "DDSCAPS2_NPATCHES",
729     "DDSCAPS2_RESERVED3",
730     "DDSCAPS2_DISCARDBACKBUFFER",
731     "DDSCAPS2_ENABLEALPHACHANNEL",
732     "DDSCAPS2_EXTENDEDFORMATPRIMARY",
733     "DDSCAPS2_ADDITIONALPRIMARY",
734 ])
735 DDSCAPS3 = Flags(DWORD, [
736     "DDSCAPS3_MULTISAMPLE_MASK",
737     "DDSCAPS3_MULTISAMPLE_QUALITY_MASK",
738     "DDSCAPS3_MULTISAMPLE_QUALITY_SHIFT",
739     "DDSCAPS3_RESERVED1",
740     "DDSCAPS3_RESERVED2",
741     "DDSCAPS3_LIGHTWEIGHTMIPMAP",
742     "DDSCAPS3_AUTOGENMIPMAP",
743     "DDSCAPS3_DMAP",
744     "DDSCAPS3_CREATESHAREDRESOURCE",
745     "DDSCAPS3_READONLYRESOURCE",
746     "DDSCAPS3_OPENSHAREDRESOURCE",
747 ])
748
749 DirectDrawDriverCapsFlags = Flags(DWORD, [
750     "DDCAPS_3D",
751     "DDCAPS_ALIGNBOUNDARYDEST",
752     "DDCAPS_ALIGNSIZEDEST",
753     "DDCAPS_ALIGNBOUNDARYSRC",
754     "DDCAPS_ALIGNSIZESRC",
755     "DDCAPS_ALIGNSTRIDE",
756     "DDCAPS_BLT",
757     "DDCAPS_BLTQUEUE",
758     "DDCAPS_BLTFOURCC",
759     "DDCAPS_BLTSTRETCH",
760     "DDCAPS_GDI",
761     "DDCAPS_OVERLAY",
762     "DDCAPS_OVERLAYCANTCLIP",
763     "DDCAPS_OVERLAYFOURCC",
764     "DDCAPS_OVERLAYSTRETCH",
765     "DDCAPS_PALETTE",
766     "DDCAPS_PALETTEVSYNC",
767     "DDCAPS_READSCANLINE",
768     "DDCAPS_RESERVED1",
769     "DDCAPS_VBI",
770     "DDCAPS_ZBLTS",
771     "DDCAPS_ZOVERLAYS",
772     "DDCAPS_COLORKEY",
773     "DDCAPS_ALPHA",
774     "DDCAPS_COLORKEYHWASSIST",
775     "DDCAPS_NOHARDWARE",
776     "DDCAPS_BLTCOLORFILL",
777     "DDCAPS_BANKSWITCHED",
778     "DDCAPS_BLTDEPTHFILL",
779     "DDCAPS_CANCLIP",
780     "DDCAPS_CANCLIPSTRETCHED",
781     "DDCAPS_CANBLTSYSMEM",
782 ])
783
784 DirectDrawDriverCapsFlags2 = Flags(DWORD, [
785     "DDCAPS2_CERTIFIED",
786     "DDCAPS2_NO2DDURING3DSCENE",
787     "DDCAPS2_VIDEOPORT",
788     "DDCAPS2_AUTOFLIPOVERLAY",
789     "DDCAPS2_CANBOBINTERLEAVED",
790     "DDCAPS2_CANBOBNONINTERLEAVED",
791     "DDCAPS2_COLORCONTROLOVERLAY",
792     "DDCAPS2_COLORCONTROLPRIMARY",
793     "DDCAPS2_CANDROPZ16BIT",
794     "DDCAPS2_NONLOCALVIDMEM",
795     "DDCAPS2_NONLOCALVIDMEMCAPS",
796     "DDCAPS2_NOPAGELOCKREQUIRED",
797     "DDCAPS2_WIDESURFACES",
798     "DDCAPS2_CANFLIPODDEVEN",
799     "DDCAPS2_CANBOBHARDWARE",
800     "DDCAPS2_COPYFOURCC",
801     "DDCAPS2_PRIMARYGAMMA",
802     "DDCAPS2_CANRENDERWINDOWED",
803     "DDCAPS2_CANCALIBRATEGAMMA",
804     "DDCAPS2_FLIPINTERVAL",
805     "DDCAPS2_FLIPNOVSYNC",
806     "DDCAPS2_CANMANAGETEXTURE",
807     "DDCAPS2_TEXMANINNONLOCALVIDMEM",
808     "DDCAPS2_STEREO",
809     "DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL",
810     "DDCAPS2_RESERVED1",
811     "DDCAPS2_CANMANAGERESOURCE",
812     "DDCAPS2_DYNAMICTEXTURES",
813     "DDCAPS2_CANAUTOGENMIPMAP",
814     "DDCAPS2_CANSHARERESOURCE",
815 ])
816
817 DirectDrawFxAlphaCapsFlags = Flags(DWORD, [
818     "DDFXALPHACAPS_BLTALPHAEDGEBLEND",
819     "DDFXALPHACAPS_BLTALPHAPIXELS",
820     "DDFXALPHACAPS_BLTALPHAPIXELSNEG",
821     "DDFXALPHACAPS_BLTALPHASURFACES",
822     "DDFXALPHACAPS_BLTALPHASURFACESNEG",
823     "DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND",
824     "DDFXALPHACAPS_OVERLAYALPHAPIXELS",
825     "DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG",
826     "DDFXALPHACAPS_OVERLAYALPHASURFACES",
827     "DDFXALPHACAPS_OVERLAYALPHASURFACESNEG",
828 ])
829
830 DirectDrawFxCapsFlags = Flags(DWORD, [
831     "DDFXCAPS_BLTARITHSTRETCHY",
832     "DDFXCAPS_BLTARITHSTRETCHYN",
833     "DDFXCAPS_BLTMIRRORLEFTRIGHT",
834     "DDFXCAPS_BLTMIRRORUPDOWN",
835     "DDFXCAPS_BLTROTATION",
836     "DDFXCAPS_BLTROTATION90",
837     "DDFXCAPS_BLTSHRINKX",
838     "DDFXCAPS_BLTSHRINKXN",
839     "DDFXCAPS_BLTSHRINKY",
840     "DDFXCAPS_BLTSHRINKYN",
841     "DDFXCAPS_BLTSTRETCHX",
842     "DDFXCAPS_BLTSTRETCHXN",
843     "DDFXCAPS_BLTSTRETCHY",
844     "DDFXCAPS_BLTSTRETCHYN",
845     "DDFXCAPS_OVERLAYARITHSTRETCHY",
846     "DDFXCAPS_OVERLAYARITHSTRETCHYN",
847     "DDFXCAPS_OVERLAYSHRINKX",
848     "DDFXCAPS_OVERLAYSHRINKXN",
849     "DDFXCAPS_OVERLAYSHRINKY",
850     "DDFXCAPS_OVERLAYSHRINKYN",
851     "DDFXCAPS_OVERLAYSTRETCHX",
852     "DDFXCAPS_OVERLAYSTRETCHXN",
853     "DDFXCAPS_OVERLAYSTRETCHY",
854     "DDFXCAPS_OVERLAYSTRETCHYN",
855     "DDFXCAPS_OVERLAYMIRRORLEFTRIGHT",
856     "DDFXCAPS_OVERLAYMIRRORUPDOWN",
857     "DDFXCAPS_OVERLAYDEINTERLACE",
858     "DDFXCAPS_BLTALPHA",
859     "DDFXCAPS_BLTFILTER",
860     "DDFXCAPS_OVERLAYALPHA",
861     "DDFXCAPS_OVERLAYFILTER",
862 ])
863
864 DirectDrawStereoViewCapsFlags = Flags(DWORD, [
865     "DDSVCAPS_RESERVED1",
866     "DDSVCAPS_RESERVED2",
867     "DDSVCAPS_RESERVED3",
868     "DDSVCAPS_RESERVED4",
869     "DDSVCAPS_STEREOSEQUENTIAL",
870 ])
871
872 DirectDrawPaletteCapsFlags = Flags(DWORD, [
873     "DDPCAPS_4BIT",
874     "DDPCAPS_8BITENTRIES",
875     "DDPCAPS_8BIT",
876     "DDPCAPS_INITIALIZE",
877     "DDPCAPS_PRIMARYSURFACE",
878     "DDPCAPS_PRIMARYSURFACELEFT",
879     "DDPCAPS_ALLOW256",
880     "DDPCAPS_VSYNC",
881     "DDPCAPS_1BIT",
882     "DDPCAPS_2BIT",
883     "DDPCAPS_ALPHA",
884 ])
885
886 DirectDrawSurfaceSetPrivateDataConstants = FakeEnum(DWORD, [
887     "DDSPD_IUNKNOWNPOINTER",
888     "DDSPD_VOLATILE",
889 ])
890
891 DirectDrawSurfaceSetPaletteConstants = FakeEnum(DWORD, [
892     "DDBD_1",
893     "DDBD_2",
894     "DDBD_4",
895     "DDBD_8",
896     "DDBD_16",
897     "DDBD_24",
898     "DDBD_32",
899 ])
900
901 DirectDrawSurfaceSetGetColorKeyFlags = Flags(DWORD, [
902     "DDCKEY_COLORSPACE",
903     "DDCKEY_DESTBLT",
904     "DDCKEY_DESTOVERLAY",
905     "DDCKEY_SRCBLT",
906     "DDCKEY_SRCOVERLAY",
907 ])
908
909 DirectDrawColorKeyCapsFlags = Flags(DWORD, [
910     "DDCKEYCAPS_DESTBLT",
911     "DDCKEYCAPS_DESTBLTCLRSPACE",
912     "DDCKEYCAPS_DESTBLTCLRSPACEYUV",
913     "DDCKEYCAPS_DESTBLTYUV",
914     "DDCKEYCAPS_DESTOVERLAY",
915     "DDCKEYCAPS_DESTOVERLAYCLRSPACE",
916     "DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV",
917     "DDCKEYCAPS_DESTOVERLAYONEACTIVE",
918     "DDCKEYCAPS_DESTOVERLAYYUV",
919     "DDCKEYCAPS_SRCBLT",
920     "DDCKEYCAPS_SRCBLTCLRSPACE",
921     "DDCKEYCAPS_SRCBLTCLRSPACEYUV",
922     "DDCKEYCAPS_SRCBLTYUV",
923     "DDCKEYCAPS_SRCOVERLAY",
924     "DDCKEYCAPS_SRCOVERLAYCLRSPACE",
925     "DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV",
926     "DDCKEYCAPS_SRCOVERLAYONEACTIVE",
927     "DDCKEYCAPS_SRCOVERLAYYUV",
928     "DDCKEYCAPS_NOCOSTOVERLAY",
929 ])
930
931 DirectDrawPixelFormatFlags = Flags(DWORD, [
932     "DDPF_ALPHAPIXELS",
933     "DDPF_ALPHA",
934     "DDPF_FOURCC",
935     "DDPF_PALETTEINDEXED4",
936     "DDPF_PALETTEINDEXEDTO8",
937     "DDPF_PALETTEINDEXED8",
938     "DDPF_RGB",
939     "DDPF_COMPRESSED",
940     "DDPF_RGBTOYUV",
941     "DDPF_YUV",
942     "DDPF_ZBUFFER",
943     "DDPF_PALETTEINDEXED1",
944     "DDPF_PALETTEINDEXED2",
945     "DDPF_ZPIXELS",
946     "DDPF_STENCILBUFFER",
947     "DDPF_ALPHAPREMULT",
948     "DDPF_LUMINANCE",
949     "DDPF_BUMPLUMINANCE",
950     "DDPF_BUMPDUDV",
951 ])
952
953 DirectDrawEnumSurfacesFlags = Flags(DWORD, [
954     "DDENUMSURFACES_ALL",
955     "DDENUMSURFACES_MATCH",
956     "DDENUMSURFACES_NOMATCH",
957     "DDENUMSURFACES_CANBECREATED",
958     "DDENUMSURFACES_DOESEXIST",
959 ])
960
961 DirectDrawSetDisplayModeFlags = Flags(DWORD, [
962     "DDSDM_STANDARDVGAMODE",
963 ])
964
965 DirectDrawEnumDisplayModesFlags = Flags(DWORD, [
966     "DDEDM_REFRESHRATES",
967     "DDEDM_STANDARDVGAMODES",
968 ])
969
970 DirectDrawSetCooperativeLevelFlags = Flags(DWORD, [
971     "DDSCL_FULLSCREEN",
972     "DDSCL_ALLOWREBOOT",
973     "DDSCL_NOWINDOWCHANGES",
974     "DDSCL_NORMAL",
975     "DDSCL_EXCLUSIVE",
976     "DDSCL_ALLOWMODEX",
977     "DDSCL_SETFOCUSWINDOW",
978     "DDSCL_SETDEVICEWINDOW",
979     "DDSCL_CREATEDEVICEWINDOW",
980     "DDSCL_MULTITHREADED",
981     "DDSCL_FPUSETUP",
982     "DDSCL_FPUPRESERVE",
983 ])
984
985 DirectDrawBltFlags = Flags(DWORD, [
986     "DDBLT_ALPHADEST",
987     "DDBLT_ALPHADESTCONSTOVERRIDE",
988     "DDBLT_ALPHADESTNEG",
989     "DDBLT_ALPHADESTSURFACEOVERRIDE",
990     "DDBLT_ALPHAEDGEBLEND",
991     "DDBLT_ALPHASRC",
992     "DDBLT_ALPHASRCCONSTOVERRIDE",
993     "DDBLT_ALPHASRCNEG",
994     "DDBLT_ALPHASRCSURFACEOVERRIDE",
995     "DDBLT_ASYNC",
996     "DDBLT_COLORFILL",
997     "DDBLT_DDFX",
998     "DDBLT_DDROPS",
999     "DDBLT_KEYDEST",
1000     "DDBLT_KEYDESTOVERRIDE",
1001     "DDBLT_KEYSRC",
1002     "DDBLT_KEYSRCOVERRIDE",
1003     "DDBLT_ROP",
1004     "DDBLT_ROTATIONANGLE",
1005     "DDBLT_ZBUFFER",
1006     "DDBLT_ZBUFFERDESTCONSTOVERRIDE",
1007     "DDBLT_ZBUFFERDESTOVERRIDE",
1008     "DDBLT_ZBUFFERSRCCONSTOVERRIDE",
1009     "DDBLT_ZBUFFERSRCOVERRIDE",
1010     "DDBLT_WAIT",
1011     "DDBLT_DEPTHFILL",
1012     "DDBLT_DONOTWAIT",
1013     "DDBLT_PRESENTATION",
1014     "DDBLT_LAST_PRESENTATION",
1015     "DDBLT_EXTENDED_FLAGS",
1016     "DDBLT_EXTENDED_LINEAR_CONTENT",
1017 ])
1018
1019 DirectDrawBltFastFlags = Flags(DWORD, [
1020     "DDBLTFAST_NOCOLORKEY",
1021     "DDBLTFAST_SRCCOLORKEY",
1022     "DDBLTFAST_DESTCOLORKEY",
1023     "DDBLTFAST_WAIT",
1024     "DDBLTFAST_DONOTWAIT",
1025 ])
1026
1027 DirectDrawFlipFlags = Flags(DWORD, [
1028     "DDFLIP_WAIT",
1029     "DDFLIP_EVEN",
1030     "DDFLIP_ODD",
1031     "DDFLIP_NOVSYNC",
1032     "DDFLIP_INTERVAL2",
1033     "DDFLIP_INTERVAL3",
1034     "DDFLIP_INTERVAL4",
1035     "DDFLIP_STEREO",
1036     "DDFLIP_DONOTWAIT",
1037 ])
1038
1039 DirectDrawSurfaceOverlayFlags = Flags(DWORD, [
1040     "DDOVER_ALPHADEST",
1041     "DDOVER_ALPHADESTCONSTOVERRIDE",
1042     "DDOVER_ALPHADESTNEG",
1043     "DDOVER_ALPHADESTSURFACEOVERRIDE",
1044     "DDOVER_ALPHAEDGEBLEND",
1045     "DDOVER_ALPHASRC",
1046     "DDOVER_ALPHASRCCONSTOVERRIDE",
1047     "DDOVER_ALPHASRCNEG",
1048     "DDOVER_ALPHASRCSURFACEOVERRIDE",
1049     "DDOVER_HIDE",
1050     "DDOVER_KEYDEST",
1051     "DDOVER_KEYDESTOVERRIDE",
1052     "DDOVER_KEYSRC",
1053     "DDOVER_KEYSRCOVERRIDE",
1054     "DDOVER_SHOW",
1055     "DDOVER_ADDDIRTYRECT",
1056     "DDOVER_REFRESHDIRTYRECTS",
1057     "DDOVER_REFRESHALL",
1058     "DDOVER_DDFX",
1059     "DDOVER_AUTOFLIP",
1060     "DDOVER_BOB",
1061     "DDOVER_OVERRIDEBOBWEAVE",
1062     "DDOVER_INTERLEAVED",
1063     "DDOVER_BOBHARDWARE",
1064     "DDOVER_ARGBSCALEFACTORS",
1065     "DDOVER_DEGRADEARGBSCALING",
1066 ])
1067
1068 DDSETSURFACEDESC = Flags(DWORD, [
1069     #"DDSETSURFACEDESC_RECREATEDC",
1070     #"DDSETSURFACEDESC_PRESERVEDC",
1071 ])
1072
1073 DirectDrawSurfaceLockFlags = Flags(DWORD, [
1074     "DDLOCK_SURFACEMEMORYPTR",
1075     "DDLOCK_WAIT",
1076     "DDLOCK_EVENT",
1077     "DDLOCK_READONLY",
1078     "DDLOCK_WRITEONLY",
1079     "DDLOCK_NOSYSLOCK",
1080     "DDLOCK_NOOVERWRITE",
1081     "DDLOCK_DISCARDCONTENTS",
1082     "DDLOCK_OKTOSWAP",
1083     "DDLOCK_DONOTWAIT",
1084     "DDLOCK_HASVOLUMETEXTUREBOXRECT",
1085     "DDLOCK_NODIRTYUPDATE",
1086 ])
1087
1088 DirectDrawSurfaceBltFxFlags = Flags(DWORD, [
1089     "DDBLTFX_ARITHSTRETCHY",
1090     "DDBLTFX_MIRRORLEFTRIGHT",
1091     "DDBLTFX_MIRRORUPDOWN",
1092     "DDBLTFX_NOTEARING",
1093     "DDBLTFX_ROTATE180",
1094     "DDBLTFX_ROTATE270",
1095     "DDBLTFX_ROTATE90",
1096     "DDBLTFX_ZBUFFERRANGE",
1097     "DDBLTFX_ZBUFFERBASEDEST",
1098 ])
1099
1100 DirectDrawOverlayFxFlags = Flags(DWORD, [
1101     "DDOVERFX_ARITHSTRETCHY",
1102     "DDOVERFX_MIRRORLEFTRIGHT",
1103     "DDOVERFX_MIRRORUPDOWN",
1104     "DDOVERFX_DEINTERLACE",
1105 ])
1106
1107 DirectDrawWaitForVerticalBlankFlags = Flags(DWORD, [
1108     "DDWAITVB_BLOCKBEGIN",
1109     "DDWAITVB_BLOCKBEGINEVENT",
1110     "DDWAITVB_BLOCKEND",
1111 ])
1112
1113 DirectDrawGetFlipStatusFlags = Flags(DWORD, [
1114     "DDGFS_CANFLIP",
1115     "DDGFS_ISFLIPDONE",
1116 ])
1117
1118 DirectDrawGetBltStatusFlags = Flags(DWORD, [
1119     "DDGBS_CANBLT",
1120     "DDGBS_ISBLTDONE",
1121 ])
1122
1123 DirectDrawEnumOverlayZOrderFlags = Flags(DWORD, [
1124     "DDENUMOVERLAYZ_BACKTOFRONT",
1125     "DDENUMOVERLAYZ_FRONTTOBACK",
1126 ])
1127
1128 DirectDrawUpdateOverlayZOrderFlags = Flags(DWORD, [
1129     "DDOVERZ_SENDTOFRONT",
1130     "DDOVERZ_SENDTOBACK",
1131     "DDOVERZ_MOVEFORWARD",
1132     "DDOVERZ_MOVEBACKWARD",
1133     "DDOVERZ_INSERTINFRONTOF",
1134     "DDOVERZ_INSERTINBACKOF",
1135 ])
1136
1137 DirectDrawSetGammaRampFlags = Flags(DWORD, [
1138     "DDSGR_CALIBRATE",
1139 ])
1140
1141 DirectDrawStartModeTestFlags = Flags(DWORD, [
1142     "DDSMT_ISTESTREQUIRED",
1143 ])
1144
1145 DirectDrawEvaluateModeFlags = Flags(DWORD, [
1146     "DDEM_MODEPASSED",
1147     "DDEM_MODEFAILED",
1148 ])
1149
1150 DDRESULT = MAKE_HRESULT(ok = "DD_OK", false = "DD_FALSE", errors = [
1151     "DDERR_ALREADYINITIALIZED",
1152     "DDERR_CANNOTATTACHSURFACE",
1153     "DDERR_CANNOTDETACHSURFACE",
1154     "DDERR_CURRENTLYNOTAVAIL",
1155     "DDERR_EXCEPTION",
1156     "DDERR_GENERIC",
1157     "DDERR_HEIGHTALIGN",
1158     "DDERR_INCOMPATIBLEPRIMARY",
1159     "DDERR_INVALIDCAPS",
1160     "DDERR_INVALIDCLIPLIST",
1161     "DDERR_INVALIDMODE",
1162     "DDERR_INVALIDOBJECT",
1163     "DDERR_INVALIDPARAMS",
1164     "DDERR_INVALIDPIXELFORMAT",
1165     "DDERR_INVALIDRECT",
1166     "DDERR_LOCKEDSURFACES",
1167     "DDERR_NO3D",
1168     "DDERR_NOALPHAHW",
1169     "DDERR_NOSTEREOHARDWARE",
1170     "DDERR_NOSURFACELEFT",
1171     "DDERR_NOCLIPLIST",
1172     "DDERR_NOCOLORCONVHW",
1173     "DDERR_NOCOOPERATIVELEVELSET",
1174     "DDERR_NOCOLORKEY",
1175     "DDERR_NOCOLORKEYHW",
1176     "DDERR_NODIRECTDRAWSUPPORT",
1177     "DDERR_NOEXCLUSIVEMODE",
1178     "DDERR_NOFLIPHW",
1179     "DDERR_NOGDI",
1180     "DDERR_NOMIRRORHW",
1181     "DDERR_NOTFOUND",
1182     "DDERR_NOOVERLAYHW",
1183     "DDERR_OVERLAPPINGRECTS",
1184     "DDERR_NORASTEROPHW",
1185     "DDERR_NOROTATIONHW",
1186     "DDERR_NOSTRETCHHW",
1187     "DDERR_NOT4BITCOLOR",
1188     "DDERR_NOT4BITCOLORINDEX",
1189     "DDERR_NOT8BITCOLOR",
1190     "DDERR_NOTEXTUREHW",
1191     "DDERR_NOVSYNCHW",
1192     "DDERR_NOZBUFFERHW",
1193     "DDERR_NOZOVERLAYHW",
1194     "DDERR_OUTOFCAPS",
1195     "DDERR_OUTOFMEMORY",
1196     "DDERR_OUTOFVIDEOMEMORY",
1197     "DDERR_OVERLAYCANTCLIP",
1198     "DDERR_OVERLAYCOLORKEYONLYONEACTIVE",
1199     "DDERR_PALETTEBUSY",
1200     "DDERR_COLORKEYNOTSET",
1201     "DDERR_SURFACEALREADYATTACHED",
1202     "DDERR_SURFACEALREADYDEPENDENT",
1203     "DDERR_SURFACEBUSY",
1204     "DDERR_CANTLOCKSURFACE",
1205     "DDERR_SURFACEISOBSCURED",
1206     "DDERR_SURFACELOST",
1207     "DDERR_SURFACENOTATTACHED",
1208     "DDERR_TOOBIGHEIGHT",
1209     "DDERR_TOOBIGSIZE",
1210     "DDERR_TOOBIGWIDTH",
1211     "DDERR_UNSUPPORTED",
1212     "DDERR_UNSUPPORTEDFORMAT",
1213     "DDERR_UNSUPPORTEDMASK",
1214     "DDERR_INVALIDSTREAM",
1215     "DDERR_VERTICALBLANKINPROGRESS",
1216     "DDERR_WASSTILLDRAWING",
1217     "DDERR_DDSCAPSCOMPLEXREQUIRED",
1218     "DDERR_XALIGN",
1219     "DDERR_INVALIDDIRECTDRAWGUID",
1220     "DDERR_DIRECTDRAWALREADYCREATED",
1221     "DDERR_NODIRECTDRAWHW",
1222     "DDERR_PRIMARYSURFACEALREADYEXISTS",
1223     "DDERR_NOEMULATION",
1224     "DDERR_REGIONTOOSMALL",
1225     "DDERR_CLIPPERISUSINGHWND",
1226     "DDERR_NOCLIPPERATTACHED",
1227     "DDERR_NOHWND",
1228     "DDERR_HWNDSUBCLASSED",
1229     "DDERR_HWNDALREADYSET",
1230     "DDERR_NOPALETTEATTACHED",
1231     "DDERR_NOPALETTEHW",
1232     "DDERR_BLTFASTCANTCLIP",
1233     "DDERR_NOBLTHW",
1234     "DDERR_NODDROPSHW",
1235     "DDERR_OVERLAYNOTVISIBLE",
1236     "DDERR_NOOVERLAYDEST",
1237     "DDERR_INVALIDPOSITION",
1238     "DDERR_NOTAOVERLAYSURFACE",
1239     "DDERR_EXCLUSIVEMODEALREADYSET",
1240     "DDERR_NOTFLIPPABLE",
1241     "DDERR_CANTDUPLICATE",
1242     "DDERR_NOTLOCKED",
1243     "DDERR_CANTCREATEDC",
1244     "DDERR_NODC",
1245     "DDERR_WRONGMODE",
1246     "DDERR_IMPLICITLYCREATED",
1247     "DDERR_NOTPALETTIZED",
1248     "DDERR_UNSUPPORTEDMODE",
1249     "DDERR_NOMIPMAPHW",
1250     "DDERR_INVALIDSURFACETYPE",
1251     "DDERR_NOOPTIMIZEHW",
1252     "DDERR_NOTLOADED",
1253     "DDERR_NOFOCUSWINDOW",
1254     "DDERR_NOTONMIPMAPSUBLEVEL",
1255     "DDERR_DCALREADYCREATED",
1256     "DDERR_NONONLOCALVIDMEM",
1257     "DDERR_CANTPAGELOCK",
1258     "DDERR_CANTPAGEUNLOCK",
1259     "DDERR_NOTPAGELOCKED",
1260     "DDERR_MOREDATA",
1261     "DDERR_EXPIRED",
1262     "DDERR_TESTFINISHED",
1263     "DDERR_NEWMODE",
1264     "DDERR_D3DNOTINITIALIZED",
1265     "DDERR_VIDEONOTACTIVE",
1266     "DDERR_NOMONITORINFORMATION",
1267     "DDERR_NODRIVERSUPPORT",
1268     "DDERR_DEVICEDOESNTOWNSURFACE",
1269     "DDERR_NOTINITIALIZED",
1270 ])
1271
1272 LPDDENUMMODESCALLBACK     = FunctionPointer(HRESULT, "LPDDENUMMODESCALLBACK", [LPDDSURFACEDESC, LPVOID])
1273 LPDDENUMMODESCALLBACK2    = FunctionPointer(HRESULT, "LPDDENUMMODESCALLBACK2", [LPDDSURFACEDESC2, LPVOID])
1274 LPDDENUMSURFACESCALLBACK  = FunctionPointer(HRESULT, "LPDDENUMSURFACESCALLBACK", [LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, LPVOID])
1275 LPDDENUMSURFACESCALLBACK2 = FunctionPointer(HRESULT, "LPDDENUMSURFACESCALLBACK2", [LPDIRECTDRAWSURFACE4, LPDDSURFACEDESC2, LPVOID])
1276 LPDDENUMSURFACESCALLBACK7 = FunctionPointer(HRESULT, "LPDDENUMSURFACESCALLBACK7", [LPDIRECTDRAWSURFACE7, LPDDSURFACEDESC2, LPVOID])
1277
1278 IDirectDraw.methods += [
1279     Method(DDRESULT, "Compact", []),
1280     Method(DDRESULT, "CreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (LPUNKNOWN, "pUnkOuter")]),
1281     Method(DDRESULT, "CreatePalette", [(DirectDrawPaletteCapsFlags, "dwFlags"), (LPPALETTEENTRY, "lpDDColorArray"), Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette"), (ObjPointer(IUnknown), "pUnkOuter")]),
1282     Method(DDRESULT, "CreateSurface", [(LPDDSURFACEDESC, "lpDDSurfaceDesc"), Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDDSurface"), (LPUNKNOWN, "pUnkOuter")]),
1283     Method(DDRESULT, "DuplicateSurface", [(LPDIRECTDRAWSURFACE, "lpDDSurface"), Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDupDDSurface")]),
1284     Method(DDRESULT, "EnumDisplayModes", [(DirectDrawEnumDisplayModesFlags, "dwFlags"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMMODESCALLBACK, "lpEnumModesCallback")]),
1285     Method(DDRESULT, "EnumSurfaces", [(DirectDrawEnumSurfacesFlags, "dwFlags"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpEnumSurfacesCallback")]),
1286     Method(DDRESULT, "FlipToGDISurface", []),
1287     Method(DDRESULT, "GetCaps", [Out(LPDDCAPS, "lpDDDriverCaps"), Out(LPDDCAPS, "lpDDHELCaps")]),
1288     Method(DDRESULT, "GetDisplayMode", [Out(LPDDSURFACEDESC, "lpDDSurfaceDesc")]),
1289     Method(DDRESULT, "GetFourCCCodes", [Out(LPDWORD, "lpNumCodes"), Out(LPDWORD, "lpCodes")]),
1290     Method(DDRESULT, "GetGDISurface", [Out(Pointer(LPDIRECTDRAWSURFACE), "lplpGDIDDSSurface")]),
1291     Method(DDRESULT, "GetMonitorFrequency", [Out(LPDWORD, "lpdwFrequency")]),
1292     Method(DDRESULT, "GetScanLine", [Out(LPDWORD, "lpdwScanLine")]),
1293     Method(DDRESULT, "GetVerticalBlankStatus", [Out(LPBOOL, "lpbIsInVB")]),
1294     Method(DDRESULT, "Initialize", [(Pointer(GUID), "lpGUID")]),
1295     Method(DDRESULT, "RestoreDisplayMode", []),
1296     Method(DDRESULT, "SetCooperativeLevel", [(HWND, "hWnd"), (DirectDrawSetCooperativeLevelFlags, "dwFlags")]),
1297     Method(DDRESULT, "SetDisplayMode", [(DWORD, "dwWidth"), (DWORD, "dwHeight"), (DWORD, "dwBPP")]),
1298     Method(DDRESULT, "WaitForVerticalBlank", [(DirectDrawWaitForVerticalBlankFlags, "dwFlags"), (HANDLE, "hEvent")]),
1299 ]
1300
1301 IDirectDraw2.methods += [
1302     Method(DDRESULT, "Compact", []),
1303     Method(DDRESULT, "CreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (LPUNKNOWN, "pUnkOuter")]),
1304     Method(DDRESULT, "CreatePalette", [(DirectDrawPaletteCapsFlags, "dwFlags"), (LPPALETTEENTRY, "lpDDColorArray"), Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette"), (LPUNKNOWN, "pUnkOuter")]),
1305     Method(DDRESULT, "CreateSurface", [(LPDDSURFACEDESC, "lpDDSurfaceDesc"), Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDDSurface"), (LPUNKNOWN, "pUnkOuter")]),
1306     Method(DDRESULT, "DuplicateSurface", [(LPDIRECTDRAWSURFACE, "lpDDSurface"), Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDupDDSurface")]),
1307     Method(DDRESULT, "EnumDisplayModes", [(DirectDrawEnumDisplayModesFlags, "dwFlags"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMMODESCALLBACK, "lpEnumModesCallback")]),
1308     Method(DDRESULT, "EnumSurfaces", [(DirectDrawEnumSurfacesFlags, "dwFlags"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpEnumSurfacesCallback")]),
1309     Method(DDRESULT, "FlipToGDISurface", []),
1310     Method(DDRESULT, "GetCaps", [Out(LPDDCAPS, "lpDDDriverCaps"), Out(LPDDCAPS, "lpDDHELCaps")]),
1311     Method(DDRESULT, "GetDisplayMode", [Out(LPDDSURFACEDESC, "lpDDSurfaceDesc")]),
1312     Method(DDRESULT, "GetFourCCCodes", [Out(LPDWORD, "lpNumCodes"), Out(LPDWORD, "lpCodes")]),
1313     Method(DDRESULT, "GetGDISurface", [Out(Pointer(LPDIRECTDRAWSURFACE), "lplpGDIDDSSurface")]),
1314     Method(DDRESULT, "GetMonitorFrequency", [Out(LPDWORD, "lpdwFrequency")]),
1315     Method(DDRESULT, "GetScanLine", [Out(LPDWORD, "lpdwScanLine")]),
1316     Method(DDRESULT, "GetVerticalBlankStatus", [Out(LPBOOL, "lpbIsInVB")]),
1317     Method(DDRESULT, "Initialize", [(Pointer(GUID), "lpGUID")]),
1318     Method(DDRESULT, "RestoreDisplayMode", []),
1319     Method(DDRESULT, "SetCooperativeLevel", [(HWND, "hWnd"), (DirectDrawSetCooperativeLevelFlags, "dwFlags")]),
1320     Method(DDRESULT, "SetDisplayMode", [(DWORD, "dwWidth"), (DWORD, "dwHeight"), (DWORD, "dwBPP"), (DWORD, "dwRefreshRate"), (DirectDrawSetDisplayModeFlags, "dwFlags")]),
1321     Method(DDRESULT, "WaitForVerticalBlank", [(DirectDrawWaitForVerticalBlankFlags, "dwFlags"), (HANDLE, "hEvent")]),
1322     Method(DDRESULT, "GetAvailableVidMem", [(LPDDSCAPS, "lpDDSCaps"), Out(LPDWORD, "lpdwTotal"), Out(LPDWORD, "lpdwFree")]),
1323 ]
1324
1325 IDirectDraw4.methods += [
1326     Method(DDRESULT, "Compact", []),
1327     Method(DDRESULT, "CreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (LPUNKNOWN, "pUnkOuter")]),
1328     Method(DDRESULT, "CreatePalette", [(DirectDrawPaletteCapsFlags, "dwFlags"), (LPPALETTEENTRY, "lpDDColorArray"), Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette"), (ObjPointer(IUnknown), "pUnkOuter")]),
1329     Method(DDRESULT, "CreateSurface", [(LPDDSURFACEDESC2, "lpDDSurfaceDesc"), Out(Pointer(LPDIRECTDRAWSURFACE4), "lplpDDSurface"), (LPUNKNOWN, "pUnkOuter")]),
1330     Method(DDRESULT, "DuplicateSurface", [(LPDIRECTDRAWSURFACE4, "lpDDSurface"), Out(Pointer(LPDIRECTDRAWSURFACE4), "lplpDupDDSurface")]),
1331     Method(DDRESULT, "EnumDisplayModes", [(DirectDrawEnumDisplayModesFlags, "dwFlags"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMMODESCALLBACK2, "lpEnumModesCallback")]),
1332     Method(DDRESULT, "EnumSurfaces", [(DirectDrawEnumSurfacesFlags, "dwFlags"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK2, "lpEnumSurfacesCallback")]),
1333     Method(DDRESULT, "FlipToGDISurface", []),
1334     Method(DDRESULT, "GetCaps", [Out(LPDDCAPS, "lpDDDriverCaps"), Out(LPDDCAPS, "lpDDHELCaps")]),
1335     Method(DDRESULT, "GetDisplayMode", [Out(LPDDSURFACEDESC2, "lpDDSurfaceDesc")]),
1336     Method(DDRESULT, "GetFourCCCodes", [Out(LPDWORD, "lpNumCodes"), Out(LPDWORD, "lpCodes")]),
1337     Method(DDRESULT, "GetGDISurface", [Out(Pointer(LPDIRECTDRAWSURFACE4), "lplpGDIDDSSurface")]),
1338     Method(DDRESULT, "GetMonitorFrequency", [Out(LPDWORD, "lpdwFrequency")]),
1339     Method(DDRESULT, "GetScanLine", [Out(LPDWORD, "lpdwScanLine")]),
1340     Method(DDRESULT, "GetVerticalBlankStatus", [Out(LPBOOL, "lpbIsInVB")]),
1341     Method(DDRESULT, "Initialize", [(Pointer(GUID), "lpGUID")]),
1342     Method(DDRESULT, "RestoreDisplayMode", []),
1343     Method(DDRESULT, "SetCooperativeLevel", [(HWND, "hWnd"), (DirectDrawSetCooperativeLevelFlags, "dwFlags")]),
1344     Method(DDRESULT, "SetDisplayMode", [(DWORD, "dwWidth"), (DWORD, "dwHeight"), (DWORD, "dwBPP"), (DWORD, "dwRefreshRate"), (DirectDrawSetDisplayModeFlags, "dwFlags")]),
1345     Method(DDRESULT, "WaitForVerticalBlank", [(DirectDrawWaitForVerticalBlankFlags, "dwFlags"), (HANDLE, "hEvent")]),
1346     Method(DDRESULT, "GetAvailableVidMem", [(LPDDSCAPS2, "lpDDSCaps"), Out(LPDWORD, "lpdwTotal"), Out(LPDWORD, "lpdwFree")]),
1347     Method(DDRESULT, "GetSurfaceFromDC", [(HDC, "hdc"), Out(Pointer(LPDIRECTDRAWSURFACE4), "lpDDSurface")]),
1348     Method(DDRESULT, "RestoreAllSurfaces", []),
1349     Method(DDRESULT, "TestCooperativeLevel", []),
1350     Method(DDRESULT, "GetDeviceIdentifier", [Out(LPDDDEVICEIDENTIFIER, "lpDDDI"), (DirectDrawGetDeviceIdentifierFlags, "dwFlags")]),
1351 ]
1352
1353 IDirectDraw7.methods += [
1354     Method(DDRESULT, "Compact", []),
1355     Method(DDRESULT, "CreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (LPUNKNOWN, "pUnkOuter")]),
1356     Method(DDRESULT, "CreatePalette", [(DirectDrawPaletteCapsFlags, "dwFlags"), (LPPALETTEENTRY, "lpDDColorArray"), Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette"), (LPUNKNOWN, "pUnkOuter")]),
1357     Method(DDRESULT, "CreateSurface", [(LPDDSURFACEDESC2, "lpDDSurfaceDesc"), Out(Pointer(LPDIRECTDRAWSURFACE7), "lplpDDSurface"), (LPUNKNOWN, "pUnkOuter")]),
1358     Method(DDRESULT, "DuplicateSurface", [(LPDIRECTDRAWSURFACE7, "lpDDSurface"), Out(Pointer(LPDIRECTDRAWSURFACE7), "lplpDupDDSurface")]),
1359     Method(DDRESULT, "EnumDisplayModes", [(DirectDrawEnumDisplayModesFlags, "dwFlags"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMMODESCALLBACK2, "lpEnumModesCallback")]),
1360     Method(DDRESULT, "EnumSurfaces", [(DirectDrawEnumSurfacesFlags, "dwFlags"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK7, "lpEnumSurfacesCallback")]),
1361     Method(DDRESULT, "FlipToGDISurface", []),
1362     Method(DDRESULT, "GetCaps", [Out(LPDDCAPS, "lpDDDriverCaps"), Out(LPDDCAPS, "lpDDHELCaps")]),
1363     Method(DDRESULT, "GetDisplayMode", [Out(LPDDSURFACEDESC2, "lpDDSurfaceDesc")]),
1364     Method(DDRESULT, "GetFourCCCodes", [Out(LPDWORD, "lpNumCodes"), Out(LPDWORD, "lpCodes")]),
1365     Method(DDRESULT, "GetGDISurface", [Out(Pointer(LPDIRECTDRAWSURFACE7), "lplpGDIDDSSurface")]),
1366     Method(DDRESULT, "GetMonitorFrequency", [Out(LPDWORD, "lpdwFrequency")]),
1367     Method(DDRESULT, "GetScanLine", [Out(LPDWORD, "lpdwScanLine")]),
1368     Method(DDRESULT, "GetVerticalBlankStatus", [Out(LPBOOL, "lpbIsInVB")]),
1369     Method(DDRESULT, "Initialize", [(Pointer(GUID), "lpGUID")]),
1370     Method(DDRESULT, "RestoreDisplayMode", []),
1371     Method(DDRESULT, "SetCooperativeLevel", [(HWND, "hWnd"), (DirectDrawSetCooperativeLevelFlags, "dwFlags")]),
1372     Method(DDRESULT, "SetDisplayMode", [(DWORD, "dwWidth"), (DWORD, "dwHeight"), (DWORD, "dwBPP"), (DWORD, "dwRefreshRate"), (DirectDrawSetDisplayModeFlags, "dwFlags")]),
1373     Method(DDRESULT, "WaitForVerticalBlank", [(DirectDrawWaitForVerticalBlankFlags, "dwFlags"), (HANDLE, "hEvent")]),
1374     Method(DDRESULT, "GetAvailableVidMem", [(LPDDSCAPS2, "lpDDSCaps"), Out(LPDWORD, "lpdwTotal"), Out(LPDWORD, "lpdwFree")]),
1375     Method(DDRESULT, "GetSurfaceFromDC", [(HDC, "hdc"), Out(Pointer(LPDIRECTDRAWSURFACE7), "lpDDSurface")]),
1376     Method(DDRESULT, "RestoreAllSurfaces", []),
1377     Method(DDRESULT, "TestCooperativeLevel", []),
1378     Method(DDRESULT, "GetDeviceIdentifier", [Out(LPDDDEVICEIDENTIFIER2, "lpDDDI"), (DirectDrawGetDeviceIdentifierFlags, "dwFlags")]),
1379     Method(DDRESULT, "StartModeTest", [(LPSIZE, "lpModesToTest"), (DWORD, "dwNumEntries"), (DirectDrawStartModeTestFlags, "dwFlags")]),
1380     Method(DDRESULT, "EvaluateMode", [(DirectDrawEvaluateModeFlags, "dwFlags"), Out(Pointer(DWORD), "pSecondsUntilTimeout")]),
1381 ]
1382
1383 IDirectDrawPalette.methods += [
1384     Method(DDRESULT, "GetCaps", [Out(Pointer(DirectDrawPaletteCapsFlags), "lpdwCaps")]),
1385     Method(DDRESULT, "GetEntries", [(DWORD, "dwFlags"), (DWORD, "dwBase"), (DWORD, "dwNumEntries"), Out(LPPALETTEENTRY, "lpEntries")]),
1386     Method(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (DWORD, "dwFlags"), (LPPALETTEENTRY, "lpDDColorTable")]),
1387     Method(DDRESULT, "SetEntries", [(DWORD, "dwFlags"), (DWORD, "dwStartingEntry"), (DWORD, "dwCount"), (LPPALETTEENTRY, "lpEntries")]),
1388 ]
1389
1390 IDirectDrawClipper.methods += [
1391     Method(DDRESULT, "GetClipList", [(LPRECT, "lpRect"), (LPRGNDATA, "lpClipList"), Out(LPDWORD, "lpdwSize")]),
1392     Method(DDRESULT, "GetHWnd", [Out(Pointer(HWND), "hWnd")]),
1393     Method(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (DWORD, "dwFlags")]),
1394     Method(DDRESULT, "IsClipListChanged", [Out(Pointer(BOOL), "lpbChanged")]),
1395     Method(DDRESULT, "SetClipList", [(LPRGNDATA, "lpClipList"), (DWORD, "dwFlags")]),
1396     Method(DDRESULT, "SetHWnd", [(DWORD, "dwFlags"), (HWND, "hWnd")]),
1397 ]
1398
1399
1400 IDirectDrawSurface.methods += [
1401     Method(DDRESULT, "AddAttachedSurface", [(LPDIRECTDRAWSURFACE, "lpDDSAttachedSurface")]),
1402     Method(DDRESULT, "AddOverlayDirtyRect", [(LPRECT, "lpRect")]),
1403     Method(DDRESULT, "Blt", [(LPRECT, "lpDestRect"), (LPDIRECTDRAWSURFACE, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DirectDrawBltFlags, "dwFlags"), (LPDDBLTFX, "lpDDBltFx")]),
1404     Method(DDRESULT, "BltBatch", [(LPDDBLTBATCH, "lpDDBltBatch"), (DWORD, "dwCount"), (DWORD, "dwFlags")]),
1405     Method(DDRESULT, "BltFast", [(DWORD, "dwX"), (DWORD, "dwY"), (LPDIRECTDRAWSURFACE, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DWORD, "dwTrans")]),
1406     Method(DDRESULT, "DeleteAttachedSurface", [(DWORD, "dwFlags"), (LPDIRECTDRAWSURFACE, "lpDDSurface")]),
1407     Method(DDRESULT, "EnumAttachedSurfaces", [(LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpEnumSurfacesCallback")]),
1408     Method(DDRESULT, "EnumOverlayZOrders", [(DirectDrawEnumOverlayZOrderFlags, "dwFlags"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpfnCallback")]),
1409     Method(DDRESULT, "Flip", [(LPDIRECTDRAWSURFACE, "lpDDSurfaceTargetOverride"), (DirectDrawFlipFlags, "dwFlags")]),
1410     Method(DDRESULT, "GetAttachedSurface", [(LPDDSCAPS, "lpDDSCaps"), Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDDAttachedSurface")]),
1411     Method(DDRESULT, "GetBltStatus", [(DirectDrawGetBltStatusFlags, "dwFlags")]),
1412     Method(DDRESULT, "GetCaps", [Out(LPDDSCAPS, "lpDDSCaps")]),
1413     Method(DDRESULT, "GetClipper", [Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper")]),
1414     Method(DDRESULT, "GetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1415     Method(DDRESULT, "GetDC", [Out(Pointer(HDC), "phDC")]),
1416     Method(DDRESULT, "GetFlipStatus", [(DWORD, "dwFlags")]),
1417     Method(DDRESULT, "GetOverlayPosition", [Out(LPLONG, "lplX"), Out(LPLONG, "lplY")]),
1418     Method(DDRESULT, "GetPalette", [Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette")]),
1419     Method(DDRESULT, "GetPixelFormat", [Out(LPDDPIXELFORMAT, "lpDDPixelFormat")]),
1420     Method(DDRESULT, "GetSurfaceDesc", [Out(LPDDSURFACEDESC, "lpDDSurfaceDesc")]),
1421     Method(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (LPDDSURFACEDESC, "lpDDSurfaceDesc")]),
1422     Method(DDRESULT, "IsLost", []),
1423     Method(DDRESULT, "Lock", [(LPRECT, "lpDestRect"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (DirectDrawSurfaceLockFlags, "dwFlags"), (HANDLE, "hEvent")]),
1424     Method(DDRESULT, "ReleaseDC", [(HDC, "hDC")]),
1425     Method(DDRESULT, "Restore", []),
1426     Method(DDRESULT, "SetClipper", [(LPDIRECTDRAWCLIPPER, "lpDDClipper")]),
1427     Method(DDRESULT, "SetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1428     Method(DDRESULT, "SetOverlayPosition", [(LONG, "lX"), (LONG, "lY")]),
1429     Method(DDRESULT, "SetPalette", [(LPDIRECTDRAWPALETTE, "lpDDPalette")]),
1430     Method(DDRESULT, "Unlock", [(LPVOID, "lp")]),
1431     Method(DDRESULT, "UpdateOverlay", [(LPRECT, "lpSrcRect"), (LPDIRECTDRAWSURFACE, "lpDDDestSurface"), (LPRECT, "lpDestRect"), (DirectDrawSurfaceOverlayFlags, "dwFlags"), (LPDDOVERLAYFX, "lpDDOverlayFx")]),
1432     Method(DDRESULT, "UpdateOverlayDisplay", [(DWORD, "dwFlags")]),
1433     Method(DDRESULT, "UpdateOverlayZOrder", [(DirectDrawUpdateOverlayZOrderFlags, "dwFlags"), (LPDIRECTDRAWSURFACE, "lpDDSReference")]),
1434 ]
1435
1436 IDirectDrawSurface2.methods += [
1437     Method(DDRESULT, "AddAttachedSurface", [(LPDIRECTDRAWSURFACE2, "lpDDSAttachedSurface")]),
1438     Method(DDRESULT, "AddOverlayDirtyRect", [(LPRECT, "lpRect")]),
1439     Method(DDRESULT, "Blt", [(LPRECT, "lpDestRect"), (LPDIRECTDRAWSURFACE2, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DirectDrawBltFlags, "dwFlags"), (LPDDBLTFX, "lpDDBltFx")]),
1440     Method(DDRESULT, "BltBatch", [(LPDDBLTBATCH, "lpDDBltBatch"), (DWORD, "dwCount"), (DWORD, "dwFlags")]),
1441     Method(DDRESULT, "BltFast", [(DWORD, "dwX"), (DWORD, "dwY"), (LPDIRECTDRAWSURFACE2, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DWORD, "dwTrans")]),
1442     Method(DDRESULT, "DeleteAttachedSurface", [(DWORD, "dwFlags"), (LPDIRECTDRAWSURFACE2, "lpDDSurface")]),
1443     Method(DDRESULT, "EnumAttachedSurfaces", [(LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpEnumSurfacesCallback")]),
1444     Method(DDRESULT, "EnumOverlayZOrders", [(DirectDrawEnumOverlayZOrderFlags, "dwFlags"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpfnCallback")]),
1445     Method(DDRESULT, "Flip", [(LPDIRECTDRAWSURFACE2, "lpDDSurfaceTargetOverride"), (DirectDrawFlipFlags, "dwFlags")]),
1446     Method(DDRESULT, "GetAttachedSurface", [(LPDDSCAPS, "lpDDSCaps"), Out(Pointer(LPDIRECTDRAWSURFACE2), "lplpDDAttachedSurface")]),
1447     Method(DDRESULT, "GetBltStatus", [(DirectDrawGetBltStatusFlags, "dwFlags")]),
1448     Method(DDRESULT, "GetCaps", [Out(LPDDSCAPS, "lpDDSCaps")]),
1449     Method(DDRESULT, "GetClipper", [Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper")]),
1450     Method(DDRESULT, "GetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1451     Method(DDRESULT, "GetDC", [Out(Pointer(HDC), "phDC")]),
1452     Method(DDRESULT, "GetFlipStatus", [(DWORD, "dwFlags")]),
1453     Method(DDRESULT, "GetOverlayPosition", [Out(LPLONG, "lplX"), Out(LPLONG, "lplY")]),
1454     Method(DDRESULT, "GetPalette", [Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette")]),
1455     Method(DDRESULT, "GetPixelFormat", [Out(LPDDPIXELFORMAT, "lpDDPixelFormat")]),
1456     Method(DDRESULT, "GetSurfaceDesc", [Out(LPDDSURFACEDESC, "lpDDSurfaceDesc")]),
1457     Method(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (LPDDSURFACEDESC, "lpDDSurfaceDesc")]),
1458     Method(DDRESULT, "IsLost", []),
1459     Method(DDRESULT, "Lock", [(LPRECT, "lpDestRect"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (DirectDrawSurfaceLockFlags, "dwFlags"), (HANDLE, "hEvent")]),
1460     Method(DDRESULT, "ReleaseDC", [(HDC, "hDC")]),
1461     Method(DDRESULT, "Restore", []),
1462     Method(DDRESULT, "SetClipper", [(LPDIRECTDRAWCLIPPER, "lpDDClipper")]),
1463     Method(DDRESULT, "SetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1464     Method(DDRESULT, "SetOverlayPosition", [(LONG, "lX"), (LONG, "lY")]),
1465     Method(DDRESULT, "SetPalette", [(LPDIRECTDRAWPALETTE, "lpDDPalette")]),
1466     Method(DDRESULT, "Unlock", [(LPVOID, "lp")]),
1467     Method(DDRESULT, "UpdateOverlay", [(LPRECT, "lpSrcRect"), (LPDIRECTDRAWSURFACE2, "lpDDDestSurface"), (LPRECT, "lpDestRect"), (DirectDrawSurfaceOverlayFlags, "dwFlags"), (LPDDOVERLAYFX, "lpDDOverlayFx")]),
1468     Method(DDRESULT, "UpdateOverlayDisplay", [(DWORD, "dwFlags")]),
1469     Method(DDRESULT, "UpdateOverlayZOrder", [(DirectDrawUpdateOverlayZOrderFlags, "dwFlags"), (LPDIRECTDRAWSURFACE2, "lpDDSReference")]),
1470     Method(DDRESULT, "GetDDInterface", [Out(LPUNKNOWN, "lplpDD")]),
1471     Method(DDRESULT, "PageLock", [(DWORD, "dwFlags")]),
1472     Method(DDRESULT, "PageUnlock", [(DWORD, "dwFlags")]),
1473 ]
1474
1475 IDirectDrawSurface3.methods += [
1476     Method(DDRESULT, "AddAttachedSurface", [(LPDIRECTDRAWSURFACE3, "lpDDSAttachedSurface")]),
1477     Method(DDRESULT, "AddOverlayDirtyRect", [(LPRECT, "lpRect")]),
1478     Method(DDRESULT, "Blt", [(LPRECT, "lpDestRect"), (LPDIRECTDRAWSURFACE3, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DirectDrawBltFlags, "dwFlags"), (LPDDBLTFX, "lpDDBltFx")]),
1479     Method(DDRESULT, "BltBatch", [(LPDDBLTBATCH, "lpDDBltBatch"), (DWORD, "dwCount"), (DWORD, "dwFlags")]),
1480     Method(DDRESULT, "BltFast", [(DWORD, "dwX"), (DWORD, "dwY"), (LPDIRECTDRAWSURFACE3, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DWORD, "dwTrans")]),
1481     Method(DDRESULT, "DeleteAttachedSurface", [(DWORD, "dwFlags"), (LPDIRECTDRAWSURFACE3, "lpDDSurface")]),
1482     Method(DDRESULT, "EnumAttachedSurfaces", [(LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpEnumSurfacesCallback")]),
1483     Method(DDRESULT, "EnumOverlayZOrders", [(DirectDrawEnumOverlayZOrderFlags, "dwFlags"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK, "lpfnCallback")]),
1484     Method(DDRESULT, "Flip", [(LPDIRECTDRAWSURFACE3, "lpDDSurfaceTargetOverride"), (DirectDrawFlipFlags, "dwFlags")]),
1485     Method(DDRESULT, "GetAttachedSurface", [(LPDDSCAPS, "lpDDSCaps"), Out(Pointer(LPDIRECTDRAWSURFACE3), "lplpDDAttachedSurface")]),
1486     Method(DDRESULT, "GetBltStatus", [(DirectDrawGetBltStatusFlags, "dwFlags")]),
1487     Method(DDRESULT, "GetCaps", [Out(LPDDSCAPS, "lpDDSCaps")]),
1488     Method(DDRESULT, "GetClipper", [Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper")]),
1489     Method(DDRESULT, "GetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1490     Method(DDRESULT, "GetDC", [Out(Pointer(HDC), "phDC")]),
1491     Method(DDRESULT, "GetFlipStatus", [(DWORD, "dwFlags")]),
1492     Method(DDRESULT, "GetOverlayPosition", [Out(LPLONG, "lplX"), Out(LPLONG, "lplY")]),
1493     Method(DDRESULT, "GetPalette", [Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette")]),
1494     Method(DDRESULT, "GetPixelFormat", [Out(LPDDPIXELFORMAT, "lpDDPixelFormat")]),
1495     Method(DDRESULT, "GetSurfaceDesc", [Out(LPDDSURFACEDESC, "lpDDSurfaceDesc")]),
1496     Method(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (LPDDSURFACEDESC, "lpDDSurfaceDesc")]),
1497     Method(DDRESULT, "IsLost", []),
1498     Method(DDRESULT, "Lock", [(LPRECT, "lpDestRect"), (LPDDSURFACEDESC, "lpDDSurfaceDesc"), (DirectDrawSurfaceLockFlags, "dwFlags"), (HANDLE, "hEvent")]),
1499     Method(DDRESULT, "ReleaseDC", [(HDC, "hDC")]),
1500     Method(DDRESULT, "Restore", []),
1501     Method(DDRESULT, "SetClipper", [(LPDIRECTDRAWCLIPPER, "lpDDClipper")]),
1502     Method(DDRESULT, "SetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1503     Method(DDRESULT, "SetOverlayPosition", [(LONG, "lX"), (LONG, "lY")]),
1504     Method(DDRESULT, "SetPalette", [(LPDIRECTDRAWPALETTE, "lpDDPalette")]),
1505     Method(DDRESULT, "Unlock", [(LPVOID, "lp")]),
1506     Method(DDRESULT, "UpdateOverlay", [(LPRECT, "lpSrcRect"), (LPDIRECTDRAWSURFACE3, "lpDDDestSurface"), (LPRECT, "lpDestRect"), (DirectDrawSurfaceOverlayFlags, "dwFlags"), (LPDDOVERLAYFX, "lpDDOverlayFx")]),
1507     Method(DDRESULT, "UpdateOverlayDisplay", [(DWORD, "dwFlags")]),
1508     Method(DDRESULT, "UpdateOverlayZOrder", [(DirectDrawUpdateOverlayZOrderFlags, "dwFlags"), (LPDIRECTDRAWSURFACE3, "lpDDSReference")]),
1509     Method(DDRESULT, "GetDDInterface", [Out(LPUNKNOWN, "lplpDD")]),
1510     Method(DDRESULT, "PageLock", [(DWORD, "dwFlags")]),
1511     Method(DDRESULT, "PageUnlock", [(DWORD, "dwFlags")]),
1512     Method(DDRESULT, "SetSurfaceDesc", [(LPDDSURFACEDESC, "lpDDSD"), (DWORD, "dwFlags")]),
1513 ]
1514
1515 IDirectDrawSurface4.methods += [
1516     Method(DDRESULT, "AddAttachedSurface", [(LPDIRECTDRAWSURFACE4, "lpDDSAttachedSurface")]),
1517     Method(DDRESULT, "AddOverlayDirtyRect", [(LPRECT, "lpRect")]),
1518     Method(DDRESULT, "Blt", [(LPRECT, "lpDestRect"), (LPDIRECTDRAWSURFACE4, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DirectDrawBltFlags, "dwFlags"), (LPDDBLTFX, "lpDDBltFx")]),
1519     Method(DDRESULT, "BltBatch", [(LPDDBLTBATCH, "lpDDBltBatch"), (DWORD, "dwCount"), (DWORD, "dwFlags")]),
1520     Method(DDRESULT, "BltFast", [(DWORD, "dwX"), (DWORD, "dwY"), (LPDIRECTDRAWSURFACE4, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DWORD, "dwTrans")]),
1521     Method(DDRESULT, "DeleteAttachedSurface", [(DWORD, "dwFlags"), (LPDIRECTDRAWSURFACE4, "lpDDSurface")]),
1522     Method(DDRESULT, "EnumAttachedSurfaces", [(LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK2, "lpEnumSurfacesCallback")]),
1523     Method(DDRESULT, "EnumOverlayZOrders", [(DirectDrawEnumOverlayZOrderFlags, "dwFlags"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK2, "lpfnCallback")]),
1524     Method(DDRESULT, "Flip", [(LPDIRECTDRAWSURFACE4, "lpDDSurfaceTargetOverride"), (DirectDrawFlipFlags, "dwFlags")]),
1525     Method(DDRESULT, "GetAttachedSurface", [(LPDDSCAPS2, "lpDDSCaps"), Out(Pointer(LPDIRECTDRAWSURFACE4), "lplpDDAttachedSurface")]),
1526     Method(DDRESULT, "GetBltStatus", [(DirectDrawGetBltStatusFlags, "dwFlags")]),
1527     Method(DDRESULT, "GetCaps", [Out(LPDDSCAPS2, "lpDDSCaps")]),
1528     Method(DDRESULT, "GetClipper", [Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper")]),
1529     Method(DDRESULT, "GetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1530     Method(DDRESULT, "GetDC", [Out(Pointer(HDC), "phDC")]),
1531     Method(DDRESULT, "GetFlipStatus", [(DWORD, "dwFlags")]),
1532     Method(DDRESULT, "GetOverlayPosition", [Out(LPLONG, "lplX"), Out(LPLONG, "lplY")]),
1533     Method(DDRESULT, "GetPalette", [Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette")]),
1534     Method(DDRESULT, "GetPixelFormat", [Out(LPDDPIXELFORMAT, "lpDDPixelFormat")]),
1535     Method(DDRESULT, "GetSurfaceDesc", [Out(LPDDSURFACEDESC2, "lpDDSurfaceDesc")]),
1536     Method(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc")]),
1537     Method(DDRESULT, "IsLost", []),
1538     Method(DDRESULT, "Lock", [(LPRECT, "lpDestRect"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (DirectDrawSurfaceLockFlags, "dwFlags"), (HANDLE, "hEvent")]),
1539     Method(DDRESULT, "ReleaseDC", [(HDC, "hDC")]),
1540     Method(DDRESULT, "Restore", []),
1541     Method(DDRESULT, "SetClipper", [(LPDIRECTDRAWCLIPPER, "lpDDClipper")]),
1542     Method(DDRESULT, "SetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1543     Method(DDRESULT, "SetOverlayPosition", [(LONG, "lX"), (LONG, "lY")]),
1544     Method(DDRESULT, "SetPalette", [(LPDIRECTDRAWPALETTE, "lpDDPalette")]),
1545     Method(DDRESULT, "Unlock", [(LPRECT, "lpRect")]),
1546     Method(DDRESULT, "UpdateOverlay", [(LPRECT, "lpSrcRect"), (LPDIRECTDRAWSURFACE4, "lpDDDestSurface"), (LPRECT, "lpDestRect"), (DirectDrawSurfaceOverlayFlags, "dwFlags"), (LPDDOVERLAYFX, "lpDDOverlayFx")]),
1547     Method(DDRESULT, "UpdateOverlayDisplay", [(DWORD, "dwFlags")]),
1548     Method(DDRESULT, "UpdateOverlayZOrder", [(DirectDrawUpdateOverlayZOrderFlags, "dwFlags"), (LPDIRECTDRAWSURFACE4, "lpDDSReference")]),
1549     Method(DDRESULT, "GetDDInterface", [Out(Pointer(LPVOID), "lplpDD")]),
1550     Method(DDRESULT, "PageLock", [(DWORD, "dwFlags")]),
1551     Method(DDRESULT, "PageUnlock", [(DWORD, "dwFlags")]),
1552     Method(DDRESULT, "SetSurfaceDesc", [(LPDDSURFACEDESC2, "lpDDSD"), (DWORD, "dwFlags")]),
1553     Method(DDRESULT, "SetPrivateData", [(REFGUID, "guidTag"), (LPVOID, "lpData"), (DWORD, "cbSize"), (DWORD, "dwFlags")]),
1554     Method(DDRESULT, "GetPrivateData", [(REFGUID, "guidTag"), (LPVOID, "lpData"), Out(LPDWORD, "lpcbBufferSize")]),
1555     Method(DDRESULT, "FreePrivateData", [(REFGUID, "guidTag")]),
1556     Method(DDRESULT, "GetUniquenessValue", [Out(LPDWORD, "lpValue")]),
1557     Method(DDRESULT, "ChangeUniquenessValue", []),
1558 ]
1559
1560 IDirectDrawSurface7.methods += [
1561     Method(DDRESULT, "AddAttachedSurface", [(LPDIRECTDRAWSURFACE7, "lpDDSAttachedSurface")]),
1562     Method(DDRESULT, "AddOverlayDirtyRect", [(LPRECT, "lpRect")]),
1563     Method(DDRESULT, "Blt", [(LPRECT, "lpDestRect"), (LPDIRECTDRAWSURFACE7, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DirectDrawBltFlags, "dwFlags"), (LPDDBLTFX, "lpDDBltFx")]),
1564     Method(DDRESULT, "BltBatch", [(LPDDBLTBATCH, "lpDDBltBatch"), (DWORD, "dwCount"), (DWORD, "dwFlags")]),
1565     Method(DDRESULT, "BltFast", [(DWORD, "dwX"), (DWORD, "dwY"), (LPDIRECTDRAWSURFACE7, "lpDDSrcSurface"), (LPRECT, "lpSrcRect"), (DWORD, "dwTrans")]),
1566     Method(DDRESULT, "DeleteAttachedSurface", [(DWORD, "dwFlags"), (LPDIRECTDRAWSURFACE7, "lpDDSurface")]),
1567     Method(DDRESULT, "EnumAttachedSurfaces", [(LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK7, "lpEnumSurfacesCallback")]),
1568     Method(DDRESULT, "EnumOverlayZOrders", [(DirectDrawEnumOverlayZOrderFlags, "dwFlags"), (LPVOID, "lpContext"), (LPDDENUMSURFACESCALLBACK7, "lpfnCallback")]),
1569     Method(DDRESULT, "Flip", [(LPDIRECTDRAWSURFACE7, "lpDDSurfaceTargetOverride"), (DirectDrawFlipFlags, "dwFlags")]),
1570     Method(DDRESULT, "GetAttachedSurface", [(LPDDSCAPS2, "lpDDSCaps"), Out(Pointer(LPDIRECTDRAWSURFACE7), "lplpDDAttachedSurface")]),
1571     Method(DDRESULT, "GetBltStatus", [(DirectDrawGetBltStatusFlags, "dwFlags")]),
1572     Method(DDRESULT, "GetCaps", [Out(LPDDSCAPS2, "lpDDSCaps")]),
1573     Method(DDRESULT, "GetClipper", [Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper")]),
1574     Method(DDRESULT, "GetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1575     Method(DDRESULT, "GetDC", [Out(Pointer(HDC), "phDC")]),
1576     Method(DDRESULT, "GetFlipStatus", [(DWORD, "dwFlags")]),
1577     Method(DDRESULT, "GetOverlayPosition", [Out(LPLONG, "lplX"), Out(LPLONG, "lplY")]),
1578     Method(DDRESULT, "GetPalette", [Out(Pointer(LPDIRECTDRAWPALETTE), "lplpDDPalette")]),
1579     Method(DDRESULT, "GetPixelFormat", [Out(LPDDPIXELFORMAT, "lpDDPixelFormat")]),
1580     Method(DDRESULT, "GetSurfaceDesc", [Out(LPDDSURFACEDESC2, "lpDDSurfaceDesc")]),
1581     Method(DDRESULT, "Initialize", [(LPDIRECTDRAW, "lpDD"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc")]),
1582     Method(DDRESULT, "IsLost", []),
1583     Method(DDRESULT, "Lock", [(LPRECT, "lpDestRect"), (LPDDSURFACEDESC2, "lpDDSurfaceDesc"), (DirectDrawSurfaceLockFlags, "dwFlags"), (HANDLE, "hEvent")]),
1584     Method(DDRESULT, "ReleaseDC", [(HDC, "hDC")]),
1585     Method(DDRESULT, "Restore", []),
1586     Method(DDRESULT, "SetClipper", [(LPDIRECTDRAWCLIPPER, "lpDDClipper")]),
1587     Method(DDRESULT, "SetColorKey", [(DirectDrawSurfaceSetGetColorKeyFlags, "dwFlags"), Out(LPDDCOLORKEY, "lpDDColorKey")]),
1588     Method(DDRESULT, "SetOverlayPosition", [(LONG, "lX"), (LONG, "lY")]),
1589     Method(DDRESULT, "SetPalette", [(LPDIRECTDRAWPALETTE, "lpDDPalette")]),
1590     Method(DDRESULT, "Unlock", [(LPRECT, "lpRect")]),
1591     Method(DDRESULT, "UpdateOverlay", [(LPRECT, "lpSrcRect"), (LPDIRECTDRAWSURFACE7, "lpDDDestSurface"), (LPRECT, "lpDestRect"), (DirectDrawSurfaceOverlayFlags, "dwFlags"), (LPDDOVERLAYFX, "lpDDOverlayFx")]),
1592     Method(DDRESULT, "UpdateOverlayDisplay", [(DWORD, "dwFlags")]),
1593     Method(DDRESULT, "UpdateOverlayZOrder", [(DirectDrawUpdateOverlayZOrderFlags, "dwFlags"), (LPDIRECTDRAWSURFACE7, "lpDDSReference")]),
1594     Method(DDRESULT, "GetDDInterface", [Out(Pointer(LPVOID), "lplpDD")]),
1595     Method(DDRESULT, "PageLock", [(DWORD, "dwFlags")]),
1596     Method(DDRESULT, "PageUnlock", [(DWORD, "dwFlags")]),
1597     Method(DDRESULT, "SetSurfaceDesc", [(LPDDSURFACEDESC2, "lpDDSD"), (DWORD, "dwFlags")]),
1598     Method(DDRESULT, "SetPrivateData", [(REFGUID, "guidTag"), (LPVOID, "lpData"), (DWORD, "cbSize"), (DWORD, "dwFlags")]),
1599     Method(DDRESULT, "GetPrivateData", [(REFGUID, "guidTag"), (LPVOID, "lpData"), Out(LPDWORD, "lpcbBufferSize")]),
1600     Method(DDRESULT, "FreePrivateData", [(REFGUID, "guidTag")]),
1601     Method(DDRESULT, "GetUniquenessValue", [Out(LPDWORD, "lpValue")]),
1602     Method(DDRESULT, "ChangeUniquenessValue", []),
1603     Method(DDRESULT, "SetPriority", [(DWORD, "dwPriority")]),
1604     Method(DDRESULT, "GetPriority", [Out(LPDWORD, "lpdwPriority")]),
1605     Method(DDRESULT, "SetLOD", [(DWORD, "dwMaxLOD")]),
1606     Method(DDRESULT, "GetLOD", [Out(LPDWORD, "lpdwMaxLOD")]),
1607 ]
1608
1609 IDirectDrawColorControl.methods += [
1610     Method(DDRESULT, "GetColorControls", [(LPDDCOLORCONTROL, "lpColorControl")]),
1611     Method(DDRESULT, "SetColorControls", [(LPDDCOLORCONTROL, "lpColorControl")]),
1612 ]
1613
1614 IDirectDrawGammaControl.methods += [
1615     Method(DDRESULT, "GetGammaRamp", [(DWORD, "dwFlags"), Out(LPDDGAMMARAMP, "lpRampData")]),
1616     Method(DDRESULT, "SetGammaRamp", [(DirectDrawSetGammaRampFlags, "dwFlags"), (LPDDGAMMARAMP, "lpRampData")]),
1617 ]
1618
1619 LPDDENUMCALLBACKA   = FunctionPointer(BOOL, "LPDDENUMCALLBACKA", [Pointer(GUID), LPSTR, LPSTR, LPVOID])
1620 LPDDENUMCALLBACKW   = FunctionPointer(BOOL, "LPDDENUMCALLBACKW", [Pointer(GUID), LPWSTR, LPWSTR, LPVOID])
1621 LPDDENUMCALLBACKEXA = FunctionPointer(BOOL, "LPDDENUMCALLBACKEXA", [Pointer(GUID), LPSTR, LPSTR, LPVOID, HMONITOR])
1622 LPDDENUMCALLBACKEXW = FunctionPointer(BOOL, "LPDDENUMCALLBACKEXW", [Pointer(GUID), LPWSTR, LPWSTR, LPVOID, HMONITOR])
1623
1624 DDENUM = Flags(DWORD, [
1625     "DDENUM_ATTACHEDSECONDARYDEVICES",
1626     "DDENUM_DETACHEDSECONDARYDEVICES",
1627     "DDENUM_NONDISPLAYDEVICES",
1628 ])
1629
1630 DDCREATE = Flags(DWORD, [
1631     "DDCREATE_HARDWAREONLY",
1632     "DDCREATE_EMULATIONONLY",
1633 ])
1634
1635 ddraw = API("ddraw")
1636 ddraw.addFunctions([
1637     StdFunction(HRESULT, "DirectDrawEnumerateW", [(LPDDENUMCALLBACKW, "lpCallback"), (LPVOID, "lpContext")]),
1638     StdFunction(HRESULT, "DirectDrawEnumerateA", [(LPDDENUMCALLBACKA, "lpCallback"), (LPVOID, "lpContext")]),
1639     StdFunction(HRESULT, "DirectDrawEnumerateExW", [(LPDDENUMCALLBACKEXW, "lpCallback"), (LPVOID, "lpContext"), (DDENUM, "dwFlags")]),
1640     StdFunction(HRESULT, "DirectDrawEnumerateExA", [(LPDDENUMCALLBACKEXA, "lpCallback"), (LPVOID, "lpContext"), (DDENUM, "dwFlags")]),
1641     StdFunction(HRESULT, "DirectDrawCreate", [(Pointer(GUID), "lpGUID"), Out(Pointer(LPDIRECTDRAW), "lplpDD"), (LPUNKNOWN, "pUnkOuter")]),
1642     StdFunction(HRESULT, "DirectDrawCreateEx", [(Pointer(GUID), "lpGuid"), Out(Pointer(ObjPointer(Void)), "lplpDD"), (REFIID, "iid"), (LPUNKNOWN, "pUnkOuter")]),
1643     StdFunction(HRESULT, "DirectDrawCreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (LPUNKNOWN, "pUnkOuter")]),
1644     StdFunction(Void, "AcquireDDThreadLock", []),
1645     StdFunction(Void, "ReleaseDDThreadLock", []),
1646     StdFunction(DWORD, "D3DParseUnknownCommand", [(LPVOID, "lpCmd"), Out(Pointer(LPVOID), "lpRetCmd")]),
1647     StdFunction(HRESULT, "DllCanUnloadNow", []),
1648     StdFunction(HRESULT, "DllGetClassObject", [(REFCLSID, "rclsid"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppv")]),
1649
1650     # XXX
1651     StdFunction(HRESULT, "CompleteCreateSysmemSurface", [Int, Int]),
1652     StdFunction(HRESULT, "GetSurfaceFromDC", [Int, Int, Int]),
1653     StdFunction(HRESULT, "DDInternalLock", [Int, Int]),
1654     StdFunction(HRESULT, "DDInternalUnlock", [Int]),
1655     StdFunction(HRESULT, "DSoundHelp", [HWND, Int, Int]),
1656     StdFunction(HRESULT, "GetDDSurfaceLocal", [Int, Int, Int]),
1657     StdFunction(HANDLE, "GetOLEThunkData", [Int]),
1658     StdFunction(HRESULT, "RegisterSpecialCase", [Int, Int, Int, Int]),
1659     StdFunction(HRESULT, "DDGetAttachedSurfaceLcl", [Int, Int, Int]),
1660
1661     # TODO: SetAppCompatData
1662 ])
1663