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