]> git.cworth.org Git - apitrace/commitdiff
Basic support for tracing d3d7.
authorJosé Fonseca <jfonseca@vmware.com>
Mon, 13 Apr 2009 15:15:28 +0000 (16:15 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Mon, 13 Apr 2009 15:15:28 +0000 (16:15 +0100)
.gitignore
SConstruct
d3d.py [new file with mode: 0755]
d3dcaps.py [new file with mode: 0755]
d3dtypes.py [new file with mode: 0755]
ddraw.def [new file with mode: 0644]
ddraw.py [new file with mode: 0755]

index 7627fd602ffe4670dabd98233c77f418d8076483..b7bff911449ccabdf940f4378a9eae5eb75170f9 100644 (file)
@@ -15,6 +15,7 @@
 *.xml
 *.zip
 config.log
+ddraw.cpp
 d3d8.cpp
 d3d9.cpp
 opengl32.cpp
index f98a91d978680668f25f3d1a2145e0d0fb396829..84564c4353b5ba86749c5d92ba9eee2d59534207 100644 (file)
@@ -85,8 +85,27 @@ env.Append(CPPPATH = [
 conf = Configure(env)
 has_d3d9 = conf.CheckCHeader('d3d9.h')
 has_d3d8 = conf.CheckCHeader('d3d8.h')
+has_d3d7 = conf.CheckCHeader('ddraw.h')
 env = conf.Finish()
 
+if has_d3d7:
+    env.Command(
+        target = 'ddraw.cpp', 
+        source = ['ddraw.py', 'd3d.py', 'd3dtypes.py', 'd3dcaps.py', 'windows.py', 'base.py'],
+        action = 'python $SOURCE > $TARGET',
+    )
+        
+    ddraw = env.SharedLibrary(
+        target = 'ddraw',
+        source = [
+            'ddraw.def',
+            'ddraw.cpp',
+            'log.cpp',
+        ]
+    )
+
+    env.Default(ddraw)
+
 if has_d3d8:
     env.Command(
         target = 'd3d8.cpp', 
diff --git a/d3d.py b/d3d.py
new file mode 100755 (executable)
index 0000000..95d1793
--- /dev/null
+++ b/d3d.py
@@ -0,0 +1,447 @@
+#############################################################################
+#
+# Copyright 2008 Tungsten Graphics, Inc.
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+#############################################################################
+
+"""d3d.h"""
+
+from windows import *
+from d3dtypes import *
+from d3dcaps import *
+
+D3DNEXT = Flags(DWORD, [
+    "D3DNEXT_NEXT",
+    "D3DNEXT_HEAD",
+    "D3DNEXT_TAIL",
+])
+
+D3DDP = Flags(DWORD, [
+    "D3DDP_WAIT",
+    "D3DDP_OUTOFORDER",
+    "D3DDP_DONOTCLIP",
+    "D3DDP_DONOTUPDATEEXTENTS",
+    "D3DDP_DONOTLIGHT",
+])
+
+HRESULT = Enum("HRESULT", [
+    "D3D_OK",
+    "D3DERR_BADMAJORVERSION",
+    "D3DERR_BADMINORVERSION",
+    "D3DERR_INVALID_DEVICE",
+    "D3DERR_INITFAILED",
+    "D3DERR_DEVICEAGGREGATED",
+    "D3DERR_EXECUTE_CREATE_FAILED",
+    "D3DERR_EXECUTE_DESTROY_FAILED",
+    "D3DERR_EXECUTE_LOCK_FAILED",
+    "D3DERR_EXECUTE_UNLOCK_FAILED",
+    "D3DERR_EXECUTE_LOCKED",
+    "D3DERR_EXECUTE_NOT_LOCKED",
+    "D3DERR_EXECUTE_FAILED",
+    "D3DERR_EXECUTE_CLIPPED_FAILED",
+    "D3DERR_TEXTURE_NO_SUPPORT",
+    "D3DERR_TEXTURE_CREATE_FAILED",
+    "D3DERR_TEXTURE_DESTROY_FAILED",
+    "D3DERR_TEXTURE_LOCK_FAILED",
+    "D3DERR_TEXTURE_UNLOCK_FAILED",
+    "D3DERR_TEXTURE_LOAD_FAILED",
+    "D3DERR_TEXTURE_SWAP_FAILED",
+    "D3DERR_TEXTURE_LOCKED",
+    "D3DERR_TEXTURE_NOT_LOCKED",
+    "D3DERR_TEXTURE_GETSURF_FAILED",
+    "D3DERR_MATRIX_CREATE_FAILED",
+    "D3DERR_MATRIX_DESTROY_FAILED",
+    "D3DERR_MATRIX_SETDATA_FAILED",
+    "D3DERR_MATRIX_GETDATA_FAILED",
+    "D3DERR_SETVIEWPORTDATA_FAILED",
+    "D3DERR_INVALIDCURRENTVIEWPORT",
+    "D3DERR_INVALIDPRIMITIVETYPE",
+    "D3DERR_INVALIDVERTEXTYPE",
+    "D3DERR_TEXTURE_BADSIZE",
+    "D3DERR_INVALIDRAMPTEXTURE",
+    "D3DERR_MATERIAL_CREATE_FAILED",
+    "D3DERR_MATERIAL_DESTROY_FAILED",
+    "D3DERR_MATERIAL_SETDATA_FAILED",
+    "D3DERR_MATERIAL_GETDATA_FAILED",
+    "D3DERR_INVALIDPALETTE",
+    "D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY",
+    "D3DERR_ZBUFF_NEEDS_VIDEOMEMORY",
+    "D3DERR_SURFACENOTINVIDMEM",
+    "D3DERR_LIGHT_SET_FAILED",
+    "D3DERR_LIGHTHASVIEWPORT",
+    "D3DERR_LIGHTNOTINTHISVIEWPORT",
+    "D3DERR_SCENE_IN_SCENE",
+    "D3DERR_SCENE_NOT_IN_SCENE",
+    "D3DERR_SCENE_BEGIN_FAILED",
+    "D3DERR_SCENE_END_FAILED",
+    "D3DERR_INBEGIN",
+    "D3DERR_NOTINBEGIN",
+    "D3DERR_NOVIEWPORTS",
+    "D3DERR_VIEWPORTDATANOTSET",
+    "D3DERR_VIEWPORTHASNODEVICE",
+    "D3DERR_NOCURRENTVIEWPORT",
+    "D3DERR_INVALIDVERTEXFORMAT",
+    "D3DERR_COLORKEYATTACHED",
+    "D3DERR_VERTEXBUFFEROPTIMIZED",
+    "D3DERR_VBUF_CREATE_FAILED",
+    "D3DERR_VERTEXBUFFERLOCKED",
+    "D3DERR_VERTEXBUFFERUNLOCKFAILED",
+    "D3DERR_ZBUFFER_NOTPRESENT",
+    "D3DERR_STENCILBUFFER_NOTPRESENT",
+    "D3DERR_WRONGTEXTUREFORMAT",
+    "D3DERR_UNSUPPORTEDCOLOROPERATION",
+    "D3DERR_UNSUPPORTEDCOLORARG",
+    "D3DERR_UNSUPPORTEDALPHAOPERATION",
+    "D3DERR_UNSUPPORTEDALPHAARG",
+    "D3DERR_TOOMANYOPERATIONS",
+    "D3DERR_CONFLICTINGTEXTUREFILTER",
+    "D3DERR_UNSUPPORTEDFACTORVALUE",
+    "D3DERR_CONFLICTINGRENDERSTATE",
+    "D3DERR_UNSUPPORTEDTEXTUREFILTER",
+    "D3DERR_TOOMANYPRIMITIVES",
+    "D3DERR_INVALIDMATRIX",
+    "D3DERR_TOOMANYVERTICES",
+    "D3DERR_CONFLICTINGTEXTUREPALETTE",
+    "D3DERR_INVALIDSTATEBLOCK",
+    "D3DERR_INBEGINSTATEBLOCK",
+    "D3DERR_NOTINBEGINSTATEBLOCK",
+])
+
+IDirect3D = Interface("IDirect3D", IUnknown)
+IDirect3D2 = Interface("IDirect3D2", IUnknown)
+IDirect3D3 = Interface("IDirect3D3", IUnknown)
+IDirect3D7 = Interface("IDirect3D7", IUnknown)
+IDirect3DDevice = Interface("IDirect3DDevice", IUnknown)
+IDirect3DDevice2 = Interface("IDirect3DDevice2", IUnknown)
+IDirect3DDevice3 = Interface("IDirect3DDevice3", IUnknown)
+IDirect3DDevice7 = Interface("IDirect3DDevice7", IUnknown)
+IDirect3DExecuteBuffer = Interface("IDirect3DExecuteBuffer", IUnknown)
+IDirect3DLight = Interface("IDirect3DLight", IUnknown)
+IDirect3DMaterial = Interface("IDirect3DMaterial", IUnknown)
+IDirect3DMaterial2 = Interface("IDirect3DMaterial2", IUnknown)
+IDirect3DMaterial3 = Interface("IDirect3DMaterial3", IUnknown)
+IDirect3DTexture = Interface("IDirect3DTexture", IUnknown)
+IDirect3DTexture2 = Interface("IDirect3DTexture2", IUnknown)
+IDirect3DViewport = Interface("IDirect3DViewport", IUnknown)
+IDirect3DViewport2 = Interface("IDirect3DViewport2", IDirect3DViewport)
+IDirect3DViewport3 = Interface("IDirect3DViewport3", IDirect3DViewport2)
+IDirect3DVertexBuffer = Interface("IDirect3DVertexBuffer", IUnknown)
+IDirect3DVertexBuffer7 = Interface("IDirect3DVertexBuffer7", IUnknown)
+
+LPUNKNOWN = WrapPointer(IUnknown)
+
+LPDIRECT3D = WrapPointer(IDirect3D)
+LPDIRECT3DDEVICE = WrapPointer(IDirect3DDevice)
+LPDIRECT3DEXECUTEBUFFER = WrapPointer(IDirect3DExecuteBuffer)
+LPDIRECT3DLIGHT = WrapPointer(IDirect3DLight)
+LPDIRECT3DMATERIAL = WrapPointer(IDirect3DMaterial)
+LPDIRECT3DTEXTURE = WrapPointer(IDirect3DTexture)
+LPDIRECT3DVIEWPORT = WrapPointer(IDirect3DViewport)
+
+LPDIRECT3D2 = WrapPointer(IDirect3D2)
+LPDIRECT3DDEVICE2 = WrapPointer(IDirect3DDevice2)
+LPDIRECT3DMATERIAL2 = WrapPointer(IDirect3DMaterial2)
+LPDIRECT3DTEXTURE2 = WrapPointer(IDirect3DTexture2)
+LPDIRECT3DVIEWPORT2 = WrapPointer(IDirect3DViewport2)
+
+LPDIRECT3D3 = WrapPointer(IDirect3D3)
+LPDIRECT3DDEVICE3 = WrapPointer(IDirect3DDevice3)
+LPDIRECT3DMATERIAL3 = WrapPointer(IDirect3DMaterial3)
+LPDIRECT3DVIEWPORT3 = WrapPointer(IDirect3DViewport3)
+LPDIRECT3DVERTEXBUFFER = WrapPointer(IDirect3DVertexBuffer)
+
+LPDIRECT3D7 = WrapPointer(IDirect3D7)
+LPDIRECT3DDEVICE7 = WrapPointer(IDirect3DDevice7)
+LPDIRECT3DVERTEXBUFFER7 = WrapPointer(IDirect3DVertexBuffer7)
+
+IDirect3D.methods += [
+    Method(HRESULT, "Initialize", [REFCLSID]),
+    Method(HRESULT, "EnumDevices", [LPD3DENUMDEVICESCALLBACK,LPVOID]),
+    Method(HRESULT, "CreateLight", [OutPointer(LPDIRECT3DLIGHT),LPUNKNOWN]),
+    Method(HRESULT, "CreateMaterial", [OutPointer(LPDIRECT3DMATERIAL),LPUNKNOWN]),
+    Method(HRESULT, "CreateViewport", [OutPointer(LPDIRECT3DVIEWPORT),LPUNKNOWN]),
+    Method(HRESULT, "FindDevice", [LPD3DFINDDEVICESEARCH,LPD3DFINDDEVICERESULT]),
+]
+
+IDirect3D2.methods += [
+    Method(HRESULT, "EnumDevices", [LPD3DENUMDEVICESCALLBACK,LPVOID]),
+    Method(HRESULT, "CreateLight", [OutPointer(LPDIRECT3DLIGHT),LPUNKNOWN]),
+    Method(HRESULT, "CreateMaterial", [OutPointer(LPDIRECT3DMATERIAL2),LPUNKNOWN]),
+    Method(HRESULT, "CreateViewport", [OutPointer(LPDIRECT3DVIEWPORT2),LPUNKNOWN]),
+    Method(HRESULT, "FindDevice", [LPD3DFINDDEVICESEARCH,LPD3DFINDDEVICERESULT]),
+    Method(HRESULT, "CreateDevice", [REFCLSID,LPDIRECTDRAWSURFACE,OutPointer(LPDIRECT3DDEVICE2)]),
+]
+
+IDirect3D3.methods += [
+    Method(HRESULT, "EnumDevices", [LPD3DENUMDEVICESCALLBACK,LPVOID]),
+    Method(HRESULT, "CreateLight", [OutPointer(LPDIRECT3DLIGHT),LPUNKNOWN]),
+    Method(HRESULT, "CreateMaterial", [OutPointer(LPDIRECT3DMATERIAL3),LPUNKNOWN]),
+    Method(HRESULT, "CreateViewport", [OutPointer(LPDIRECT3DVIEWPORT3),LPUNKNOWN]),
+    Method(HRESULT, "FindDevice", [LPD3DFINDDEVICESEARCH,LPD3DFINDDEVICERESULT]),
+    Method(HRESULT, "CreateDevice", [REFCLSID,LPDIRECTDRAWSURFACE4,OutPointer(LPDIRECT3DDEVICE3),LPUNKNOWN]),
+    Method(HRESULT, "CreateVertexBuffer", [LPD3DVERTEXBUFFERDESC,OutPointer(LPDIRECT3DVERTEXBUFFER),DWORD,LPUNKNOWN]),
+    Method(HRESULT, "EnumZBufferFormats", [REFCLSID,LPD3DENUMPIXELFORMATSCALLBACK,LPVOID]),
+    Method(HRESULT, "EvictManagedTextures", []),
+]
+
+IDirect3D7.methods += [
+    Method(HRESULT, "EnumDevices", [LPD3DENUMDEVICESCALLBACK7,LPVOID]),
+    Method(HRESULT, "CreateDevice", [REFCLSID,LPDIRECTDRAWSURFACE7,OutPointer(LPDIRECT3DDEVICE7)]),
+    Method(HRESULT, "CreateVertexBuffer", [LPD3DVERTEXBUFFERDESC,OutPointer(LPDIRECT3DVERTEXBUFFER7),DWORD]),
+    Method(HRESULT, "EnumZBufferFormats", [REFCLSID,LPD3DENUMPIXELFORMATSCALLBACK,LPVOID]),
+    Method(HRESULT, "EvictManagedTextures", []),
+]
+
+IDirect3DDevice.methods += [
+    Method(HRESULT, "Initialize", [LPDIRECT3D,LPGUID,LPD3DDEVICEDESC]),
+    Method(HRESULT, "GetCaps", [LPD3DDEVICEDESC,LPD3DDEVICEDESC]),
+    Method(HRESULT, "SwapTextureHandles", [LPDIRECT3DTEXTURE,LPDIRECT3DTEXTURE]),
+    Method(HRESULT, "CreateExecuteBuffer", [LPD3DEXECUTEBUFFERDESC,OutPointer(LPDIRECT3DEXECUTEBUFFER),LPUNKNOWN]),
+    Method(HRESULT, "GetStats", [LPD3DSTATS]),
+    Method(HRESULT, "Execute", [LPDIRECT3DEXECUTEBUFFER,LPDIRECT3DVIEWPORT,DWORD]),
+    Method(HRESULT, "AddViewport", [LPDIRECT3DVIEWPORT]),
+    Method(HRESULT, "DeleteViewport", [LPDIRECT3DVIEWPORT]),
+    Method(HRESULT, "NextViewport", [LPDIRECT3DVIEWPORT,OutPointer(LPDIRECT3DVIEWPORT),DWORD]),
+    Method(HRESULT, "Pick", [LPDIRECT3DEXECUTEBUFFER,LPDIRECT3DVIEWPORT,DWORD,LPD3DRECT]),
+    Method(HRESULT, "GetPickRecords", [LPDWORD,LPD3DPICKRECORD]),
+    Method(HRESULT, "EnumTextureFormats", [LPD3DENUMTEXTUREFORMATSCALLBACK,LPVOID]),
+    Method(HRESULT, "CreateMatrix", [LPD3DMATRIXHANDLE]),
+    Method(HRESULT, "SetMatrix", [D3DMATRIXHANDLE,Const(LPD3DMATRIX)]),
+    Method(HRESULT, "GetMatrix", [D3DMATRIXHANDLE,LPD3DMATRIX]),
+    Method(HRESULT, "DeleteMatrix", [D3DMATRIXHANDLE]),
+    Method(HRESULT, "BeginScene", []),
+    Method(HRESULT, "EndScene", []),
+    Method(HRESULT, "GetDirect3D", [OutPointer(LPDIRECT3D)]),
+]
+
+IDirect3DDevice2.methods += [
+    Method(HRESULT, "GetCaps", [LPD3DDEVICEDESC,LPD3DDEVICEDESC]),
+    Method(HRESULT, "SwapTextureHandles", [LPDIRECT3DTEXTURE2,LPDIRECT3DTEXTURE2]),
+    Method(HRESULT, "GetStats", [LPD3DSTATS]),
+    Method(HRESULT, "AddViewport", [LPDIRECT3DVIEWPORT2]),
+    Method(HRESULT, "DeleteViewport", [LPDIRECT3DVIEWPORT2]),
+    Method(HRESULT, "NextViewport", [LPDIRECT3DVIEWPORT2,OutPointer(LPDIRECT3DVIEWPORT2),DWORD]),
+    Method(HRESULT, "EnumTextureFormats", [LPD3DENUMTEXTUREFORMATSCALLBACK,LPVOID]),
+    Method(HRESULT, "BeginScene", []),
+    Method(HRESULT, "EndScene", []),
+    Method(HRESULT, "GetDirect3D", [OutPointer(LPDIRECT3D2)]),
+    Method(HRESULT, "SetCurrentViewport", [LPDIRECT3DVIEWPORT2]),
+    Method(HRESULT, "GetCurrentViewport", [OutPointer(LPDIRECT3DVIEWPORT2)]),
+    Method(HRESULT, "SetRenderTarget", [LPDIRECTDRAWSURFACE,DWORD]),
+    Method(HRESULT, "GetRenderTarget", [OutPointer(LPDIRECTDRAWSURFACE)]),
+    Method(HRESULT, "Begin", [D3DPRIMITIVETYPE,D3DVERTEXTYPE,DWORD]),
+    Method(HRESULT, "BeginIndexed", [D3DPRIMITIVETYPE,D3DVERTEXTYPE,LPVOID,DWORD,DWORD]),
+    Method(HRESULT, "Vertex", [LPVOID]),
+    Method(HRESULT, "Index", [WORD]),
+    Method(HRESULT, "End", [DWORD]),
+    Method(HRESULT, "GetRenderState", [D3DRENDERSTATETYPE,LPDWORD]),
+    Method(HRESULT, "SetRenderState", [D3DRENDERSTATETYPE,DWORD]),
+    Method(HRESULT, "GetLightState", [D3DLIGHTSTATETYPE,LPDWORD]),
+    Method(HRESULT, "SetLightState", [D3DLIGHTSTATETYPE,DWORD]),
+    Method(HRESULT, "SetTransform", [D3DTRANSFORMSTATETYPE,LPD3DMATRIX]),
+    Method(HRESULT, "GetTransform", [D3DTRANSFORMSTATETYPE,LPD3DMATRIX]),
+    Method(HRESULT, "MultiplyTransform", [D3DTRANSFORMSTATETYPE,LPD3DMATRIX]),
+    Method(HRESULT, "DrawPrimitive", [D3DPRIMITIVETYPE,D3DVERTEXTYPE,LPVOID,DWORD,DWORD]),
+    Method(HRESULT, "DrawIndexedPrimitive", [D3DPRIMITIVETYPE,D3DVERTEXTYPE,LPVOID,DWORD,LPWORD,DWORD,DWORD]),
+    Method(HRESULT, "SetClipStatus", [LPD3DCLIPSTATUS]),
+    Method(HRESULT, "GetClipStatus", [LPD3DCLIPSTATUS]),
+]
+
+IDirect3DDevice3.methods += [
+    Method(HRESULT, "GetCaps", [LPD3DDEVICEDESC,LPD3DDEVICEDESC]),
+    Method(HRESULT, "GetStats", [LPD3DSTATS]),
+    Method(HRESULT, "AddViewport", [LPDIRECT3DVIEWPORT3]),
+    Method(HRESULT, "DeleteViewport", [LPDIRECT3DVIEWPORT3]),
+    Method(HRESULT, "NextViewport", [LPDIRECT3DVIEWPORT3,OutPointer(LPDIRECT3DVIEWPORT3),DWORD]),
+    Method(HRESULT, "EnumTextureFormats", [LPD3DENUMPIXELFORMATSCALLBACK,LPVOID]),
+    Method(HRESULT, "BeginScene", []),
+    Method(HRESULT, "EndScene", []),
+    Method(HRESULT, "GetDirect3D", [OutPointer(LPDIRECT3D3)]),
+    Method(HRESULT, "SetCurrentViewport", [LPDIRECT3DVIEWPORT3]),
+    Method(HRESULT, "GetCurrentViewport", [OutPointer(LPDIRECT3DVIEWPORT3)]),
+    Method(HRESULT, "SetRenderTarget", [LPDIRECTDRAWSURFACE4,DWORD]),
+    Method(HRESULT, "GetRenderTarget", [OutPointer(LPDIRECTDRAWSURFACE4)]),
+    Method(HRESULT, "Begin", [D3DPRIMITIVETYPE,DWORD,DWORD]),
+    Method(HRESULT, "BeginIndexed", [D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,DWORD]),
+    Method(HRESULT, "Vertex", [LPVOID]),
+    Method(HRESULT, "Index", [WORD]),
+    Method(HRESULT, "End", [DWORD]),
+    Method(HRESULT, "GetRenderState", [D3DRENDERSTATETYPE,LPDWORD]),
+    Method(HRESULT, "SetRenderState", [D3DRENDERSTATETYPE,DWORD]),
+    Method(HRESULT, "GetLightState", [D3DLIGHTSTATETYPE,LPDWORD]),
+    Method(HRESULT, "SetLightState", [D3DLIGHTSTATETYPE,DWORD]),
+    Method(HRESULT, "SetTransform", [D3DTRANSFORMSTATETYPE,LPD3DMATRIX]),
+    Method(HRESULT, "GetTransform", [D3DTRANSFORMSTATETYPE,LPD3DMATRIX]),
+    Method(HRESULT, "MultiplyTransform", [D3DTRANSFORMSTATETYPE,LPD3DMATRIX]),
+    Method(HRESULT, "DrawPrimitive", [D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,DWORD]),
+    Method(HRESULT, "DrawIndexedPrimitive", [D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,LPWORD,DWORD,DWORD]),
+    Method(HRESULT, "SetClipStatus", [LPD3DCLIPSTATUS]),
+    Method(HRESULT, "GetClipStatus", [LPD3DCLIPSTATUS]),
+    Method(HRESULT, "DrawPrimitiveStrided", [D3DPRIMITIVETYPE,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,DWORD]),
+    Method(HRESULT, "DrawIndexedPrimitiveStrided", [D3DPRIMITIVETYPE,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,LPWORD,DWORD,DWORD]),
+    Method(HRESULT, "DrawPrimitiveVB", [D3DPRIMITIVETYPE,LPDIRECT3DVERTEXBUFFER,DWORD,DWORD,DWORD]),
+    Method(HRESULT, "DrawIndexedPrimitiveVB", [D3DPRIMITIVETYPE,LPDIRECT3DVERTEXBUFFER,LPWORD,DWORD,DWORD]),
+    Method(HRESULT, "ComputeSphereVisibility", [LPD3DVECTOR,LPD3DVALUE,DWORD,DWORD,LPDWORD]),
+    Method(HRESULT, "GetTexture", [DWORD,OutPointer(LPDIRECT3DTEXTURE2)]),
+    Method(HRESULT, "SetTexture", [DWORD,LPDIRECT3DTEXTURE2]),
+    Method(HRESULT, "GetTextureStageState", [DWORD,D3DTEXTURESTAGESTATETYPE,LPDWORD]),
+    Method(HRESULT, "SetTextureStageState", [DWORD,D3DTEXTURESTAGESTATETYPE,DWORD]),
+    Method(HRESULT, "ValidateDevice", [LPDWORD]),
+]
+
+IDirect3DDevice7.methods += [
+    Method(HRESULT, "GetCaps", [LPD3DDEVICEDESC7]),
+    Method(HRESULT, "EnumTextureFormats", [LPD3DENUMPIXELFORMATSCALLBACK,LPVOID]),
+    Method(HRESULT, "BeginScene", []),
+    Method(HRESULT, "EndScene", []),
+    Method(HRESULT, "GetDirect3D", [OutPointer(LPDIRECT3D7)]),
+    Method(HRESULT, "SetRenderTarget", [LPDIRECTDRAWSURFACE7,DWORD]),
+    Method(HRESULT, "GetRenderTarget", [OutPointer(LPDIRECTDRAWSURFACE7)]),
+    Method(HRESULT, "Clear", [DWORD,LPD3DRECT,DWORD,D3DCOLOR,D3DVALUE,DWORD]),
+    Method(HRESULT, "SetTransform", [D3DTRANSFORMSTATETYPE,LPD3DMATRIX]),
+    Method(HRESULT, "GetTransform", [D3DTRANSFORMSTATETYPE,LPD3DMATRIX]),
+    Method(HRESULT, "SetViewport", [LPD3DVIEWPORT7]),
+    Method(HRESULT, "MultiplyTransform", [D3DTRANSFORMSTATETYPE,LPD3DMATRIX]),
+    Method(HRESULT, "GetViewport", [LPD3DVIEWPORT7]),
+    Method(HRESULT, "SetMaterial", [LPD3DMATERIAL7]),
+    Method(HRESULT, "GetMaterial", [LPD3DMATERIAL7]),
+    Method(HRESULT, "SetLight", [DWORD,LPD3DLIGHT7]),
+    Method(HRESULT, "GetLight", [DWORD,LPD3DLIGHT7]),
+    Method(HRESULT, "SetRenderState", [D3DRENDERSTATETYPE,DWORD]),
+    Method(HRESULT, "GetRenderState", [D3DRENDERSTATETYPE,LPDWORD]),
+    Method(HRESULT, "BeginStateBlock", []),
+    Method(HRESULT, "EndStateBlock", [LPDWORD]),
+    Method(HRESULT, "PreLoad", [LPDIRECTDRAWSURFACE7]),
+    Method(HRESULT, "DrawPrimitive", [D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,DWORD]),
+    Method(HRESULT, "DrawIndexedPrimitive", [D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,LPWORD,DWORD,DWORD]),
+    Method(HRESULT, "SetClipStatus", [LPD3DCLIPSTATUS]),
+    Method(HRESULT, "GetClipStatus", [LPD3DCLIPSTATUS]),
+    Method(HRESULT, "DrawPrimitiveStrided", [D3DPRIMITIVETYPE,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,DWORD]),
+    Method(HRESULT, "DrawIndexedPrimitiveStrided", [D3DPRIMITIVETYPE,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,LPWORD,DWORD,DWORD]),
+    Method(HRESULT, "DrawPrimitiveVB", [D3DPRIMITIVETYPE,LPDIRECT3DVERTEXBUFFER7,DWORD,DWORD,DWORD]),
+    Method(HRESULT, "DrawIndexedPrimitiveVB", [D3DPRIMITIVETYPE,LPDIRECT3DVERTEXBUFFER7,DWORD,DWORD,LPWORD,DWORD,DWORD]),
+    Method(HRESULT, "ComputeSphereVisibility", [LPD3DVECTOR,LPD3DVALUE,DWORD,DWORD,LPDWORD]),
+    Method(HRESULT, "GetTexture", [DWORD,OutPointer(LPDIRECTDRAWSURFACE7)]),
+    Method(HRESULT, "SetTexture", [DWORD,LPDIRECTDRAWSURFACE7]),
+    Method(HRESULT, "GetTextureStageState", [DWORD,D3DTEXTURESTAGESTATETYPE,LPDWORD]),
+    Method(HRESULT, "SetTextureStageState", [DWORD,D3DTEXTURESTAGESTATETYPE,DWORD]),
+    Method(HRESULT, "ValidateDevice", [LPDWORD]),
+    Method(HRESULT, "ApplyStateBlock", [DWORD]),
+    Method(HRESULT, "CaptureStateBlock", [DWORD]),
+    Method(HRESULT, "DeleteStateBlock", [DWORD]),
+    Method(HRESULT, "CreateStateBlock", [D3DSTATEBLOCKTYPE,LPDWORD]),
+    Method(HRESULT, "Load", [LPDIRECTDRAWSURFACE7,LPPOINT,LPDIRECTDRAWSURFACE7,LPRECT,DWORD]),
+    Method(HRESULT, "LightEnable", [DWORD,BOOL]),
+    Method(HRESULT, "GetLightEnable", [DWORD,OutPointer(BOOL)]),
+    Method(HRESULT, "SetClipPlane", [DWORD,OutPointer(D3DVALUE)]),
+    Method(HRESULT, "GetClipPlane", [DWORD,OutPointer(D3DVALUE)]),
+    Method(HRESULT, "GetInfo", [DWORD,LPVOID,DWORD]),
+]
+
+IDirect3DExecuteBuffer.methods += [
+    Method(HRESULT, "Initialize", [LPDIRECT3DDEVICE,LPD3DEXECUTEBUFFERDESC]),
+    Method(HRESULT, "Lock", [LPD3DEXECUTEBUFFERDESC]),
+    Method(HRESULT, "Unlock", []),
+    Method(HRESULT, "SetExecuteData", [LPD3DEXECUTEDATA]),
+    Method(HRESULT, "GetExecuteData", [LPD3DEXECUTEDATA]),
+    Method(HRESULT, "Validate", [LPDWORD,LPD3DVALIDATECALLBACK,LPVOID,DWORD]),
+    Method(HRESULT, "Optimize", [DWORD]),
+]
+
+IDirect3DLight.methods += [
+    Method(HRESULT, "Initialize", [LPDIRECT3D]),
+    Method(HRESULT, "SetLight", [LPD3DLIGHT]),
+    Method(HRESULT, "GetLight", [LPD3DLIGHT]),
+]
+
+IDirect3DMaterial.methods += [
+    Method(HRESULT, "Initialize", [LPDIRECT3D]),
+    Method(HRESULT, "SetMaterial", [LPD3DMATERIAL]),
+    Method(HRESULT, "GetMaterial", [LPD3DMATERIAL]),
+    Method(HRESULT, "GetHandle", [LPDIRECT3DDEVICE,LPD3DMATERIALHANDLE]),
+    Method(HRESULT, "Reserve", []),
+    Method(HRESULT, "Unreserve", []),
+]
+
+IDirect3DMaterial2.methods += [
+    Method(HRESULT, "SetMaterial", [LPD3DMATERIAL]),
+    Method(HRESULT, "GetMaterial", [LPD3DMATERIAL]),
+    Method(HRESULT, "GetHandle", [LPDIRECT3DDEVICE2,LPD3DMATERIALHANDLE]),
+]
+
+IDirect3DMaterial3.methods += [
+    Method(HRESULT, "SetMaterial", [LPD3DMATERIAL]),
+    Method(HRESULT, "GetMaterial", [LPD3DMATERIAL]),
+    Method(HRESULT, "GetHandle", [LPDIRECT3DDEVICE3,LPD3DMATERIALHANDLE]),
+]
+
+IDirect3DTexture.methods += [
+    Method(HRESULT, "Initialize", [LPDIRECT3DDEVICE,LPDIRECTDRAWSURFACE]),
+    Method(HRESULT, "GetHandle", [LPDIRECT3DDEVICE,LPD3DTEXTUREHANDLE]),
+    Method(HRESULT, "PaletteChanged", [DWORD,DWORD]),
+    Method(HRESULT, "Load", [LPDIRECT3DTEXTURE]),
+    Method(HRESULT, "Unload", []),
+]
+
+IDirect3DTexture2.methods += [
+    Method(HRESULT, "GetHandle", [LPDIRECT3DDEVICE2,LPD3DTEXTUREHANDLE]),
+    Method(HRESULT, "PaletteChanged", [DWORD,DWORD]),
+    Method(HRESULT, "Load", [LPDIRECT3DTEXTURE2]),
+]
+
+IDirect3DViewport.methods += [
+    Method(HRESULT, "Initialize", [LPDIRECT3D]),
+    Method(HRESULT, "GetViewport", [LPD3DVIEWPORT]),
+    Method(HRESULT, "SetViewport", [LPD3DVIEWPORT]),
+    Method(HRESULT, "TransformVertices", [DWORD,LPD3DTRANSFORMDATA,DWORD,LPDWORD]),
+    Method(HRESULT, "LightElements", [DWORD,LPD3DLIGHTDATA]),
+    Method(HRESULT, "SetBackground", [D3DMATERIALHANDLE]),
+    Method(HRESULT, "GetBackground", [LPD3DMATERIALHANDLE,LPBOOL]),
+    Method(HRESULT, "SetBackgroundDepth", [LPDIRECTDRAWSURFACE]),
+    Method(HRESULT, "GetBackgroundDepth", [OutPointer(LPDIRECTDRAWSURFACE),LPBOOL]),
+    Method(HRESULT, "Clear", [DWORD,LPD3DRECT,DWORD]),
+    Method(HRESULT, "AddLight", [LPDIRECT3DLIGHT]),
+    Method(HRESULT, "DeleteLight", [LPDIRECT3DLIGHT]),
+    Method(HRESULT, "NextLight", [LPDIRECT3DLIGHT,OutPointer(LPDIRECT3DLIGHT),DWORD]),
+]
+
+IDirect3DViewport2.methods += [
+    Method(HRESULT, "GetViewport2", [LPD3DVIEWPORT2]),
+    Method(HRESULT, "SetViewport2", [LPD3DVIEWPORT2]),
+]
+
+IDirect3DViewport3.methods += [
+    Method(HRESULT, "SetBackgroundDepth2", [LPDIRECTDRAWSURFACE4]),
+    Method(HRESULT, "GetBackgroundDepth2", [OutPointer(LPDIRECTDRAWSURFACE4),LPBOOL]),
+    Method(HRESULT, "Clear2", [DWORD,LPD3DRECT,DWORD,D3DCOLOR,D3DVALUE,DWORD]),
+]
+
+IDirect3DVertexBuffer.methods += [
+    Method(HRESULT, "Lock", [DWORD,OutPointer(LPVOID),LPDWORD]),
+    Method(HRESULT, "Unlock", []),
+    Method(HRESULT, "ProcessVertices", [DWORD,DWORD,DWORD,LPDIRECT3DVERTEXBUFFER,DWORD,LPDIRECT3DDEVICE3,DWORD]),
+    Method(HRESULT, "GetVertexBufferDesc", [LPD3DVERTEXBUFFERDESC]),
+    Method(HRESULT, "Optimize", [LPDIRECT3DDEVICE3,DWORD]),
+]
+
+IDirect3DVertexBuffer7.methods += [
+    Method(HRESULT, "Lock", [DWORD,OutPointer(LPVOID),LPDWORD]),
+    Method(HRESULT, "Unlock", []),
+    Method(HRESULT, "ProcessVertices", [DWORD,DWORD,DWORD,LPDIRECT3DVERTEXBUFFER7,DWORD,LPDIRECT3DDEVICE7,DWORD]),
+    Method(HRESULT, "GetVertexBufferDesc", [LPD3DVERTEXBUFFERDESC]),
+    Method(HRESULT, "Optimize", [LPDIRECT3DDEVICE7,DWORD]),
+    Method(HRESULT, "ProcessVerticesStrided", [DWORD,DWORD,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,LPDIRECT3DDEVICE7,DWORD]),
+]
diff --git a/d3dcaps.py b/d3dcaps.py
new file mode 100755 (executable)
index 0000000..95afa18
--- /dev/null
@@ -0,0 +1,460 @@
+#############################################################################
+#
+# Copyright 2008 Tungsten Graphics, Inc.
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+#############################################################################
+
+"""d3dcaps.h"""
+
+from windows import *
+from d3dtypes import *
+
+D3DTRANSFORMCAPS = Flags(DWORD, [
+    "D3DTRANSFORMCAPS_CLIP",
+])
+
+D3DTRANSFORMCAPS = Struct("D3DTRANSFORMCAPS", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwCaps"),
+])
+
+D3DLIGHTINGCAPS = Struct("D3DLIGHTINGCAPS", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwCaps"),
+    (DWORD, "dwLightingModel"),
+    (DWORD, "dwNumLights"),
+])
+
+D3DLIGHTINGMODEL = Flags(DWORD, [
+    "D3DLIGHTINGMODEL_RGB",
+    "D3DLIGHTINGMODEL_MONO",
+])
+
+D3DLIGHTCAPS = Flags(DWORD, [
+    "D3DLIGHTCAPS_POINT",
+    "D3DLIGHTCAPS_SPOT",
+    "D3DLIGHTCAPS_DIRECTIONAL",
+    "D3DLIGHTCAPS_PARALLELPOINT",
+    "D3DLIGHTCAPS_GLSPOT",
+])
+
+D3DPRIMCAPS = Struct("D3DPRIMCAPS", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwMiscCaps"),
+    (DWORD, "dwRasterCaps"),
+    (DWORD, "dwZCmpCaps"),
+    (DWORD, "dwSrcBlendCaps"),
+    (DWORD, "dwDestBlendCaps"),
+    (DWORD, "dwAlphaCmpCaps"),
+    (DWORD, "dwShadeCaps"),
+    (DWORD, "dwTextureCaps"),
+    (DWORD, "dwTextureFilterCaps"),
+    (DWORD, "dwTextureBlendCaps"),
+    (DWORD, "dwTextureAddressCaps"),
+    (DWORD, "dwStippleWidth"),
+    (DWORD, "dwStippleHeight"),
+])
+
+D3DPMISCCAPS = Flags(DWORD, [
+    "D3DPMISCCAPS_MASKPLANES",
+    "D3DPMISCCAPS_MASKZ",
+    "D3DPMISCCAPS_LINEPATTERNREP",
+    "D3DPMISCCAPS_CONFORMANT",
+    "D3DPMISCCAPS_CULLNONE",
+    "D3DPMISCCAPS_CULLCW",
+    "D3DPMISCCAPS_CULLCCW",
+])
+
+D3DXD3DPRASTERCAPSXX = Flags(DWORD, [
+    "D3DPRASTERCAPS_DITHER",
+    "D3DPRASTERCAPS_ROP2",
+    "D3DPRASTERCAPS_XOR",
+    "D3DPRASTERCAPS_PAT",
+    "D3DPRASTERCAPS_ZTEST",
+    "D3DPRASTERCAPS_SUBPIXEL",
+    "D3DPRASTERCAPS_SUBPIXELX",
+    "D3DPRASTERCAPS_FOGVERTEX",
+    "D3DPRASTERCAPS_FOGTABLE",
+    "D3DPRASTERCAPS_STIPPLE",
+    "D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT",
+    "D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT",
+    "D3DPRASTERCAPS_ANTIALIASEDGES",
+    "D3DPRASTERCAPS_MIPMAPLODBIAS",
+    "D3DPRASTERCAPS_ZBIAS",
+    "D3DPRASTERCAPS_ZBUFFERLESSHSR",
+    "D3DPRASTERCAPS_FOGRANGE",
+    "D3DPRASTERCAPS_ANISOTROPY",
+    "D3DPRASTERCAPS_WBUFFER",
+    "D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT",
+    "D3DPRASTERCAPS_WFOG",
+    "D3DPRASTERCAPS_ZFOG",
+])
+
+D3DPCMPCAPS = Flags(DWORD, [
+    "D3DPCMPCAPS_NEVER",
+    "D3DPCMPCAPS_LESS",
+    "D3DPCMPCAPS_EQUAL",
+    "D3DPCMPCAPS_LESSEQUAL",
+    "D3DPCMPCAPS_GREATER",
+    "D3DPCMPCAPS_NOTEQUAL",
+    "D3DPCMPCAPS_GREATEREQUAL",
+    "D3DPCMPCAPS_ALWAYS",
+])
+
+D3DPBLENDCAPS = Flags(DWORD, [
+    "D3DPBLENDCAPS_ZERO",
+    "D3DPBLENDCAPS_ONE",
+    "D3DPBLENDCAPS_SRCCOLOR",
+    "D3DPBLENDCAPS_INVSRCCOLOR",
+    "D3DPBLENDCAPS_SRCALPHA",
+    "D3DPBLENDCAPS_INVSRCALPHA",
+    "D3DPBLENDCAPS_DESTALPHA",
+    "D3DPBLENDCAPS_INVDESTALPHA",
+    "D3DPBLENDCAPS_DESTCOLOR",
+    "D3DPBLENDCAPS_INVDESTCOLOR",
+    "D3DPBLENDCAPS_SRCALPHASAT",
+    "D3DPBLENDCAPS_BOTHSRCALPHA",
+    "D3DPBLENDCAPS_BOTHINVSRCALPHA",
+])
+
+D3DPSHADECAPS = Flags(DWORD, [
+    "D3DPSHADECAPS_COLORFLATMONO",
+    "D3DPSHADECAPS_COLORFLATRGB",
+    "D3DPSHADECAPS_COLORGOURAUDMONO",
+    "D3DPSHADECAPS_COLORGOURAUDRGB",
+    "D3DPSHADECAPS_COLORPHONGMONO",
+    "D3DPSHADECAPS_COLORPHONGRGB",
+    "D3DPSHADECAPS_SPECULARFLATMONO",
+    "D3DPSHADECAPS_SPECULARFLATRGB",
+    "D3DPSHADECAPS_SPECULARGOURAUDMONO",
+    "D3DPSHADECAPS_SPECULARGOURAUDRGB",
+    "D3DPSHADECAPS_SPECULARPHONGMONO",
+    "D3DPSHADECAPS_SPECULARPHONGRGB",
+    "D3DPSHADECAPS_ALPHAFLATBLEND",
+    "D3DPSHADECAPS_ALPHAFLATSTIPPLED",
+    "D3DPSHADECAPS_ALPHAGOURAUDBLEND",
+    "D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED",
+    "D3DPSHADECAPS_ALPHAPHONGBLEND",
+    "D3DPSHADECAPS_ALPHAPHONGSTIPPLED",
+    "D3DPSHADECAPS_FOGFLAT",
+    "D3DPSHADECAPS_FOGGOURAUD",
+    "D3DPSHADECAPS_FOGPHONG",
+])
+
+D3DPTEXTURECAPS = Flags(DWORD, [
+    "D3DPTEXTURECAPS_PERSPECTIVE",
+    "D3DPTEXTURECAPS_POW2",
+    "D3DPTEXTURECAPS_ALPHA",
+    "D3DPTEXTURECAPS_TRANSPARENCY",
+    "D3DPTEXTURECAPS_BORDER",
+    "D3DPTEXTURECAPS_SQUAREONLY",
+    "D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE",
+    "D3DPTEXTURECAPS_ALPHAPALETTE",
+    "D3DPTEXTURECAPS_NONPOW2CONDITIONAL",
+    "D3DPTEXTURECAPS_PROJECTED",
+    "D3DPTEXTURECAPS_CUBEMAP",
+    "D3DPTEXTURECAPS_COLORKEYBLEND",
+])
+
+D3DPTFILTERCAPS = Flags(DWORD, [
+    "D3DPTFILTERCAPS_NEAREST",
+    "D3DPTFILTERCAPS_LINEAR",
+    "D3DPTFILTERCAPS_MIPNEAREST",
+    "D3DPTFILTERCAPS_MIPLINEAR",
+    "D3DPTFILTERCAPS_LINEARMIPNEAREST",
+    "D3DPTFILTERCAPS_LINEARMIPLINEAR",
+    "D3DPTFILTERCAPS_MINFPOINT",
+    "D3DPTFILTERCAPS_MINFLINEAR",
+    "D3DPTFILTERCAPS_MINFANISOTROPIC",
+    "D3DPTFILTERCAPS_MIPFPOINT",
+    "D3DPTFILTERCAPS_MIPFLINEAR",
+    "D3DPTFILTERCAPS_MAGFPOINT",
+    "D3DPTFILTERCAPS_MAGFLINEAR",
+    "D3DPTFILTERCAPS_MAGFANISOTROPIC",
+    "D3DPTFILTERCAPS_MAGFAFLATCUBIC",
+    "D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC",
+])
+
+D3DPTBLENDCAPS = Flags(DWORD, [
+    "D3DPTBLENDCAPS_DECAL",
+    "D3DPTBLENDCAPS_MODULATE",
+    "D3DPTBLENDCAPS_DECALALPHA",
+    "D3DPTBLENDCAPS_MODULATEALPHA",
+    "D3DPTBLENDCAPS_DECALMASK",
+    "D3DPTBLENDCAPS_MODULATEMASK",
+    "D3DPTBLENDCAPS_COPY",
+    "D3DPTBLENDCAPS_ADD",
+])
+
+D3DPTADDRESSCAPS = Flags(DWORD, [
+    "D3DPTADDRESSCAPS_WRAP",
+    "D3DPTADDRESSCAPS_MIRROR",
+    "D3DPTADDRESSCAPS_CLAMP",
+    "D3DPTADDRESSCAPS_BORDER",
+    "D3DPTADDRESSCAPS_INDEPENDENTUV",
+])
+
+D3DSTENCILCAPS = Flags(DWORD, [
+    "D3DSTENCILCAPS_KEEP",
+    "D3DSTENCILCAPS_ZERO",
+    "D3DSTENCILCAPS_REPLACE",
+    "D3DSTENCILCAPS_INCRSAT",
+    "D3DSTENCILCAPS_DECRSAT",
+    "D3DSTENCILCAPS_INVERT",
+    "D3DSTENCILCAPS_INCR",
+    "D3DSTENCILCAPS_DECR",
+])
+
+D3DTEXOPCAPS = Flags(DWORD, [
+    "D3DTEXOPCAPS_DISABLE",
+    "D3DTEXOPCAPS_SELECTARG1",
+    "D3DTEXOPCAPS_SELECTARG2",
+    "D3DTEXOPCAPS_MODULATE",
+    "D3DTEXOPCAPS_MODULATE2X",
+    "D3DTEXOPCAPS_MODULATE4X",
+    "D3DTEXOPCAPS_ADD",
+    "D3DTEXOPCAPS_ADDSIGNED",
+    "D3DTEXOPCAPS_ADDSIGNED2X",
+    "D3DTEXOPCAPS_SUBTRACT",
+    "D3DTEXOPCAPS_ADDSMOOTH",
+    "D3DTEXOPCAPS_BLENDDIFFUSEALPHA",
+    "D3DTEXOPCAPS_BLENDTEXTUREALPHA",
+    "D3DTEXOPCAPS_BLENDFACTORALPHA",
+    "D3DTEXOPCAPS_BLENDTEXTUREALPHAPM",
+    "D3DTEXOPCAPS_BLENDCURRENTALPHA",
+    "D3DTEXOPCAPS_PREMODULATE",
+    "D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR",
+    "D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA",
+    "D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR",
+    "D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA",
+    "D3DTEXOPCAPS_BUMPENVMAP",
+    "D3DTEXOPCAPS_BUMPENVMAPLUMINANCE",
+    "D3DTEXOPCAPS_DOTPRODUCT3",
+])
+
+D3DFVFCAPS = Flags(DWORD, [
+    "D3DFVFCAPS_TEXCOORDCOUNTMASK",
+    "D3DFVFCAPS_DONOTSTRIPELEMENTS",
+])
+
+D3DDD = Flags(DWORD, [
+    "D3DDD_COLORMODEL",
+    "D3DDD_DEVCAPS",
+    "D3DDD_TRANSFORMCAPS",
+    "D3DDD_LIGHTINGCAPS",
+    "D3DDD_BCLIPPING",
+    "D3DDD_LINECAPS",
+    "D3DDD_TRICAPS",
+    "D3DDD_DEVICERENDERBITDEPTH",
+    "D3DDD_DEVICEZBUFFERBITDEPTH",
+    "D3DDD_MAXBUFFERSIZE",
+    "D3DDD_MAXVERTEXCOUNT",
+])
+
+D3DDEVCAPS = Flags(DWORD, [
+    "D3DDEVCAPS_FLOATTLVERTEX",
+    "D3DDEVCAPS_SORTINCREASINGZ",
+    "D3DDEVCAPS_SORTDECREASINGZ",
+    "D3DDEVCAPS_SORTEXACT",
+    "D3DDEVCAPS_EXECUTESYSTEMMEMORY",
+    "D3DDEVCAPS_EXECUTEVIDEOMEMORY",
+    "D3DDEVCAPS_TLVERTEXSYSTEMMEMORY",
+    "D3DDEVCAPS_TLVERTEXVIDEOMEMORY",
+    "D3DDEVCAPS_TEXTURESYSTEMMEMORY",
+    "D3DDEVCAPS_TEXTUREVIDEOMEMORY",
+    "D3DDEVCAPS_DRAWPRIMTLVERTEX",
+    "D3DDEVCAPS_CANRENDERAFTERFLIP",
+    "D3DDEVCAPS_TEXTURENONLOCALVIDMEM",
+    "D3DDEVCAPS_DRAWPRIMITIVES2",
+    "D3DDEVCAPS_SEPARATETEXTUREMEMORIES",
+    "D3DDEVCAPS_DRAWPRIMITIVES2EX",
+    "D3DDEVCAPS_HWTRANSFORMANDLIGHT",
+    "D3DDEVCAPS_CANBLTSYSTONONLOCAL",
+    "D3DDEVCAPS_HWRASTERIZATION",
+])
+
+D3DVTXPCAPS = Flags(DWORD, [
+    "D3DVTXPCAPS_TEXGEN",
+    "D3DVTXPCAPS_MATERIALSOURCE7",
+    "D3DVTXPCAPS_VERTEXFOG",
+    "D3DVTXPCAPS_DIRECTIONALLIGHTS",
+    "D3DVTXPCAPS_POSITIONALLIGHTS",
+    "D3DVTXPCAPS_LOCALVIEWER",
+])
+
+D3DFDS = Flags(DWORD, [
+    "D3DFDS_COLORMODEL",
+    "D3DFDS_GUID",
+    "D3DFDS_HARDWARE",
+    "D3DFDS_TRIANGLES",
+    "D3DFDS_LINES",
+    "D3DFDS_MISCCAPS",
+    "D3DFDS_RASTERCAPS",
+    "D3DFDS_ZCMPCAPS",
+    "D3DFDS_ALPHACMPCAPS",
+    "D3DFDS_SRCBLENDCAPS",
+    "D3DFDS_DSTBLENDCAPS",
+    "D3DFDS_SHADECAPS",
+    "D3DFDS_TEXTURECAPS",
+    "D3DFDS_TEXTUREFILTERCAPS",
+    "D3DFDS_TEXTUREBLENDCAPS",
+    "D3DFDS_TEXTUREADDRESSCAPS",
+])
+
+D3DFINDDEVICESEARCH = Struct("D3DFINDDEVICESEARCH", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwFlags"),
+    (BOOL, "bHardware"),
+    (D3DCOLORMODEL, "dcmColorModel"),
+    (GUID, "guid"),
+    (DWORD, "dwCaps"),
+    (D3DPRIMCAPS, "dpcPrimCaps"),
+])
+LPD3DFINDDEVICESEARCH = Pointer(D3DFINDDEVICESEARCH)
+
+D3DEXECUTEBUFFERDESC = Struct("D3DEXECUTEBUFFERDESC", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwFlags"),
+    (DWORD, "dwCaps"),
+    (DWORD, "dwBufferSize"),
+    (LPVOID, "lpData"),
+])
+LPD3DEXECUTEBUFFERDESC = Pointer(D3DEXECUTEBUFFERDESC)
+
+D3DDEB = Flags(DWORD, [
+    "D3DDEB_BUFSIZE",
+    "D3DDEB_CAPS",
+    "D3DDEB_LPDATA",
+])
+
+D3DDEBCAPS = Flags(DWORD, [
+    "D3DDEBCAPS_SYSTEMMEMORY",
+    "D3DDEBCAPS_VIDEOMEMORY",
+    "D3DDEBCAPS_MEM",
+])
+
+D3DDEVINFO_TEXTUREMANAGER = Struct("D3DDEVINFO_TEXTUREMANAGER", [
+    (BOOL, "bThrashing"),
+    (DWORD, "dwApproxBytesDownloaded"),
+    (DWORD, "dwNumEvicts"),
+    (DWORD, "dwNumVidCreates"),
+    (DWORD, "dwNumTexturesUsed"),
+    (DWORD, "dwNumUsedTexInVid"),
+    (DWORD, "dwWorkingSet"),
+    (DWORD, "dwWorkingSetBytes"),
+    (DWORD, "dwTotalManaged"),
+    (DWORD, "dwTotalBytes"),
+    (DWORD, "dwLastPri"),
+])
+
+D3DDEVINFO_TEXTURING = Struct("D3DDEVINFO_TEXTURING", [
+    (DWORD, "dwNumLoads"),
+    (DWORD, "dwApproxBytesLoaded"),
+    (DWORD, "dwNumPreLoads"),
+    (DWORD, "dwNumSet"),
+    (DWORD, "dwNumCreates"),
+    (DWORD, "dwNumDestroys"),
+    (DWORD, "dwNumSetPriorities"),
+    (DWORD, "dwNumSetLODs"),
+    (DWORD, "dwNumLocks"),
+    (DWORD, "dwNumGetDCs"),
+])
+
+D3DDEVICEDESC = Struct("D3DDEVICEDESC", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwFlags"),
+    (D3DCOLORMODEL, "dcmColorModel"),
+    (DWORD, "dwDevCaps"),
+    (D3DTRANSFORMCAPS, "dtcTransformCaps"),
+    (BOOL, "bClipping"),
+    (D3DLIGHTINGCAPS, "dlcLightingCaps"),
+    (D3DPRIMCAPS, "dpcLineCaps"),
+    (D3DPRIMCAPS, "dpcTriCaps"),
+    (DWORD, "dwDeviceRenderBitDepth"),
+    (DWORD, "dwDeviceZBufferBitDepth"),
+    (DWORD, "dwMaxBufferSize"),
+    (DWORD, "dwMaxVertexCount"),
+    (DWORD, "dwMinTextureWidth"),
+    (DWORD, "dwMinTextureHeight"),
+    (DWORD, "dwMaxTextureWidth"),
+    (DWORD, "dwMaxTextureHeight"),
+    (DWORD, "dwMinStippleWidth"),
+    (DWORD, "dwMaxStippleWidth"),
+    (DWORD, "dwMinStippleHeight"),
+    (DWORD, "dwMaxStippleHeight"),
+    (DWORD, "dwMaxTextureRepeat"),
+    (DWORD, "dwMaxTextureAspectRatio"),
+    (DWORD, "dwMaxAnisotropy"),
+    (D3DVALUE, "dvGuardBandLeft"),
+    (D3DVALUE, "dvGuardBandTop"),
+    (D3DVALUE, "dvGuardBandRight"),
+    (D3DVALUE, "dvGuardBandBottom"),
+    (D3DVALUE, "dvExtentsAdjust"),
+    (DWORD, "dwStencilCaps"),
+    (DWORD, "dwFVFCaps"),
+    (DWORD, "dwTextureOpCaps"),
+    (WORD, "wMaxTextureBlendStages"),
+    (WORD, "wMaxSimultaneousTextures"),
+])
+LPD3DDEVICEDESC = Pointer(D3DDEVICEDESC)
+
+D3DDEVICEDESC7 = Struct("D3DDEVICEDESC7", [
+    (DWORD, "dwDevCaps"),
+    (D3DPRIMCAPS, "dpcLineCaps"),
+    (D3DPRIMCAPS, "dpcTriCaps"),
+    (DWORD, "dwDeviceRenderBitDepth"),
+    (DWORD, "dwDeviceZBufferBitDepth"),
+    (DWORD, "dwMinTextureWidth"),
+    (DWORD, "dwMinTextureHeight"),
+    (DWORD, "dwMaxTextureWidth"),
+    (DWORD, "dwMaxTextureHeight"),
+    (DWORD, "dwMaxTextureRepeat"),
+    (DWORD, "dwMaxTextureAspectRatio"),
+    (DWORD, "dwMaxAnisotropy"),
+    (D3DVALUE, "dvGuardBandLeft"),
+    (D3DVALUE, "dvGuardBandTop"),
+    (D3DVALUE, "dvGuardBandRight"),
+    (D3DVALUE, "dvGuardBandBottom"),
+    (D3DVALUE, "dvExtentsAdjust"),
+    (DWORD, "dwStencilCaps"),
+    (DWORD, "dwFVFCaps"),
+    (DWORD, "dwTextureOpCaps"),
+    (WORD, "wMaxTextureBlendStages"),
+    (WORD, "wMaxSimultaneousTextures"),
+    (DWORD, "dwMaxActiveLights"),
+    (D3DVALUE, "dvMaxVertexW"),
+    (GUID, "deviceGUID"),
+    (WORD, "wMaxUserClipPlanes"),
+    (WORD, "wMaxVertexBlendMatrices"),
+    (DWORD, "dwVertexProcessingCaps"),
+    (DWORD, "dwReserved1"),
+    (DWORD, "dwReserved2"),
+    (DWORD, "dwReserved3"),
+    (DWORD, "dwReserved4"),
+])
+LPD3DDEVICEDESC7 = Pointer(D3DDEVICEDESC7)
+
+D3DFINDDEVICERESULT = Struct("D3DFINDDEVICERESULT", [
+    (DWORD, "dwSize"),
+    (GUID, "guid"),
+    (D3DDEVICEDESC, "ddHwDesc"),
+    (D3DDEVICEDESC, "ddSwDesc"),
+])
+LPD3DFINDDEVICERESULT = Pointer(D3DFINDDEVICERESULT)
+
+LPD3DENUMDEVICESCALLBACK = Function(HRESULT, "LPD3DENUMDEVICESCALLBACK", [(Pointer(GUID), "lpGuid"), (LPSTR, "lpDeviceDescription"), (LPSTR, "lpDeviceName"), LPD3DDEVICEDESC, LPD3DDEVICEDESC, LPVOID])
+LPD3DENUMDEVICESCALLBACK7 = Function(HRESULT, "LPD3DENUMDEVICESCALLBACK7", [(LPSTR, "lpDeviceDescription"), (LPSTR, "lpDeviceName"), LPD3DDEVICEDESC7, LPVOID])
+
diff --git a/d3dtypes.py b/d3dtypes.py
new file mode 100755 (executable)
index 0000000..97cbde2
--- /dev/null
@@ -0,0 +1,1047 @@
+#############################################################################
+#
+# Copyright 2008 Tungsten Graphics, Inc.
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+#############################################################################
+
+"""d3dtypes.h"""
+
+from windows import *
+from ddraw import *
+
+D3DVALUE = Float
+LPD3DVALUE = Pointer(Float)
+D3DFIXED = LONG
+
+LPD3DVALIDATECALLBACK = LPVOID
+LPD3DENUMTEXTUREFORMATSCALLBACK = LPVOID
+LPD3DENUMPIXELFORMATSCALLBACK = LPVOID
+
+D3DCOLOR = DWORD
+LPD3DCOLOR = Pointer(D3DCOLOR)
+
+D3DMATERIALHANDLE = DWORD
+LPD3DMATERIALHANDLE = Pointer(D3DMATERIALHANDLE)
+
+D3DTEXTUREHANDLE = DWORD
+LPD3DTEXTUREHANDLE = Pointer(D3DTEXTUREHANDLE)
+
+D3DMATRIXHANDLE = DWORD
+LPD3DMATRIXHANDLE = Pointer(D3DMATRIXHANDLE)
+
+D3DCOLORVALUE = Struct("D3DCOLORVALUE", [
+    (D3DVALUE, "r"),
+    (D3DVALUE, "g"),
+    (D3DVALUE, "b"),
+    (D3DVALUE, "a"),
+])
+LPD3DCOLORVALUE = Pointer(D3DCOLORVALUE)
+
+D3DRECT = Struct("D3DRECT", [
+    (LONG, "x1"),
+    (LONG, "y1"),
+    (LONG, "x2"),
+    (LONG, "y2"),
+])
+LPD3DRECT = Pointer(D3DRECT)
+
+D3DVECTOR = Struct("D3DVECTOR", [
+    (D3DVALUE, "x"),
+    (D3DVALUE, "y"),
+    (D3DVALUE, "z"),
+])
+LPD3DVECTOR = Pointer(D3DVECTOR)
+
+D3DHVERTEX = Struct("D3DHVERTEX", [
+    (DWORD, "dwFlags"),
+    (D3DVALUE, "hx"),
+    (D3DVALUE, "hy"),
+    (D3DVALUE, "hz"),
+])
+LPD3DHVERTEX = Pointer(D3DHVERTEX)
+
+D3DTLVERTEX = Struct("D3DTLVERTEX", [
+    (D3DVALUE, "sx"),
+    (D3DVALUE, "sy"),
+    (D3DVALUE, "sz"),
+    (D3DVALUE, "rhw"),
+    (D3DCOLOR, "color"),
+    (D3DCOLOR, "specular"),
+    (D3DVALUE, "tu"),
+    (D3DVALUE, "tv"),
+])
+LPD3DTLVERTEX = Pointer(D3DTLVERTEX)
+
+D3DLVERTEX = Struct("D3DLVERTEX", [
+    (D3DVALUE, "x"),
+    (D3DVALUE, "y"),
+    (D3DVALUE, "z"),
+    (DWORD, "dwReserved"),
+    (D3DCOLOR, "color"),
+    (D3DCOLOR, "specular"),
+    (D3DVALUE, "tu"),
+    (D3DVALUE, "tv"),
+])
+LPD3DLVERTEX = Pointer(D3DLVERTEX)
+
+D3DVERTEX = Struct("D3DVERTEX", [
+    (D3DVALUE, "x"),
+    (D3DVALUE, "y"),
+    (D3DVALUE, "z"),
+    (D3DVALUE, "nx"),
+    (D3DVALUE, "ny"),
+    (D3DVALUE, "nz"),
+    (D3DVALUE, "tu"),
+    (D3DVALUE, "tv"),
+])
+LPD3DVERTEX = Pointer(D3DVERTEX)
+
+D3DMATRIX = Struct("D3DMATRIX", [
+    (D3DVALUE, "m[4][4]"),
+])
+LPD3DMATRIX = Pointer(D3DMATRIX)
+
+D3DVIEWPORT = Struct("D3DVIEWPORT", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwX"),
+    (DWORD, "dwY"),
+    (DWORD, "dwWidth"),
+    (DWORD, "dwHeight"),
+    (D3DVALUE, "dvScaleX"),
+    (D3DVALUE, "dvScaleY"),
+    (D3DVALUE, "dvMaxX"),
+    (D3DVALUE, "dvMaxY"),
+    (D3DVALUE, "dvMinZ"),
+    (D3DVALUE, "dvMaxZ"),
+])
+LPD3DVIEWPORT = Pointer(D3DVIEWPORT)
+
+D3DVIEWPORT2 = Struct("D3DVIEWPORT2", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwX"),
+    (DWORD, "dwY"),
+    (DWORD, "dwWidth"),
+    (DWORD, "dwHeight"),
+    (D3DVALUE, "dvClipX"),
+    (D3DVALUE, "dvClipY"),
+    (D3DVALUE, "dvClipWidth"),
+    (D3DVALUE, "dvClipHeight"),
+    (D3DVALUE, "dvMinZ"),
+    (D3DVALUE, "dvMaxZ"),
+])
+LPD3DVIEWPORT2 = Pointer(D3DVIEWPORT2)
+
+D3DVIEWPORT7 = Struct("D3DVIEWPORT7", [
+    (DWORD, "dwX"),
+    (DWORD, "dwY"),
+    (DWORD, "dwWidth"),
+    (DWORD, "dwHeight"),
+    (D3DVALUE, "dvMinZ"),
+    (D3DVALUE, "dvMaxZ"),
+])
+LPD3DVIEWPORT7 = Pointer(D3DVIEWPORT7)
+
+D3DCLIP = Flags(DWORD, [
+    "D3DCLIP_LEFT",
+    "D3DCLIP_RIGHT",
+    "D3DCLIP_TOP",
+    "D3DCLIP_BOTTOM",
+    "D3DCLIP_FRONT",
+    "D3DCLIP_BACK",
+    "D3DCLIP_GEN0",
+    "D3DCLIP_GEN1",
+    "D3DCLIP_GEN2",
+    "D3DCLIP_GEN3",
+    "D3DCLIP_GEN4",
+    "D3DCLIP_GEN5",
+])
+
+D3DSTATUS = Flags(DWORD, [
+    "D3DSTATUS_DEFAULT",
+    "D3DSTATUS_CLIPUNIONALL",
+    "D3DSTATUS_CLIPUNIONLEFT",
+    "D3DSTATUS_CLIPUNIONRIGHT",
+    "D3DSTATUS_CLIPUNIONTOP",
+    "D3DSTATUS_CLIPUNIONBOTTOM",
+    "D3DSTATUS_CLIPUNIONFRONT",
+    "D3DSTATUS_CLIPUNIONBACK",
+    "D3DSTATUS_CLIPUNIONGEN0",
+    "D3DSTATUS_CLIPUNIONGEN1",
+    "D3DSTATUS_CLIPUNIONGEN2",
+    "D3DSTATUS_CLIPUNIONGEN3",
+    "D3DSTATUS_CLIPUNIONGEN4",
+    "D3DSTATUS_CLIPUNIONGEN5",
+    "D3DSTATUS_CLIPINTERSECTIONALL",
+    "D3DSTATUS_CLIPINTERSECTIONLEFT",
+    "D3DSTATUS_CLIPINTERSECTIONRIGHT",
+    "D3DSTATUS_CLIPINTERSECTIONTOP",
+    "D3DSTATUS_CLIPINTERSECTIONBOTTOM",
+    "D3DSTATUS_CLIPINTERSECTIONFRONT",
+    "D3DSTATUS_CLIPINTERSECTIONBACK",
+    "D3DSTATUS_CLIPINTERSECTIONGEN0",
+    "D3DSTATUS_CLIPINTERSECTIONGEN1",
+    "D3DSTATUS_CLIPINTERSECTIONGEN2",
+    "D3DSTATUS_CLIPINTERSECTIONGEN3",
+    "D3DSTATUS_CLIPINTERSECTIONGEN4",
+    "D3DSTATUS_CLIPINTERSECTIONGEN5",
+    "D3DSTATUS_ZNOTVISIBLE",
+])
+
+D3DTRANSFORM = Flags(DWORD, [
+    "D3DTRANSFORM_CLIPPED",
+    "D3DTRANSFORM_UNCLIPPED",
+])
+
+D3DTRANSFORMDATA = Struct("D3DTRANSFORMDATA", [
+    (DWORD, "dwSize"),
+    (LPVOID, "lpIn"),
+    (DWORD, "dwInSize"),
+    (LPVOID, "lpOut"),
+    (DWORD, "dwOutSize"),
+    (LPD3DHVERTEX, "lpHOut"),
+    (DWORD, "dwClip"),
+    (DWORD, "dwClipIntersection"),
+    (DWORD, "dwClipUnion"),
+    (D3DRECT, "drExtent"),
+])
+LPD3DTRANSFORMDATA = Pointer(D3DTRANSFORMDATA)
+
+D3DLIGHTINGELEMENT = Struct("D3DLIGHTINGELEMENT", [
+    (D3DVECTOR, "dvPosition"),
+    (D3DVECTOR, "dvNormal"),
+])
+LPD3DLIGHTINGELEMENT = Pointer(D3DLIGHTINGELEMENT)
+
+D3DMATERIAL = Struct("D3DMATERIAL", [
+    (DWORD, "dwSize"),
+    (D3DCOLORVALUE, "diffuse"),
+    (D3DCOLORVALUE, "ambient"),
+    (D3DCOLORVALUE, "specular"),
+    (D3DCOLORVALUE, "emissive"),
+    (D3DVALUE, "power"),
+    (D3DTEXTUREHANDLE, "hTexture"),
+    (DWORD, "dwRampSize"),
+])
+LPD3DMATERIAL = Pointer(D3DMATERIAL)
+
+D3DMATERIAL7 = Struct("D3DMATERIAL7", [
+    (D3DCOLORVALUE, "diffuse"),
+    (D3DCOLORVALUE, "ambient"),
+    (D3DCOLORVALUE, "specular"),
+    (D3DCOLORVALUE, "emissive"),
+    (D3DVALUE, "power"),
+])
+LPD3DMATERIAL7 = Pointer(D3DMATERIAL7)
+
+D3DLIGHTTYPE = Enum("D3DLIGHTTYPE", [
+    "D3DLIGHT_POINT",
+    "D3DLIGHT_SPOT",
+    "D3DLIGHT_DIRECTIONAL",
+    "D3DLIGHT_PARALLELPOINT",
+    "D3DLIGHT_GLSPOT",
+    "D3DLIGHT_FORCE_DWORD",
+])
+
+D3DLIGHT = Struct("D3DLIGHT", [
+    (DWORD, "dwSize"),
+    (D3DLIGHTTYPE, "dltType"),
+    (D3DCOLORVALUE, "dcvColor"),
+    (D3DVECTOR, "dvPosition"),
+    (D3DVECTOR, "dvDirection"),
+    (D3DVALUE, "dvRange"),
+    (D3DVALUE, "dvFalloff"),
+    (D3DVALUE, "dvAttenuation0"),
+    (D3DVALUE, "dvAttenuation1"),
+    (D3DVALUE, "dvAttenuation2"),
+    (D3DVALUE, "dvTheta"),
+    (D3DVALUE, "dvPhi"),
+])
+LPD3DLIGHT = Pointer(D3DLIGHT)
+
+D3DLIGHT7 = Struct("D3DLIGHT7", [
+    (D3DLIGHTTYPE, "dltType"),
+    (D3DCOLORVALUE, "dcvDiffuse"),
+    (D3DCOLORVALUE, "dcvSpecular"),
+    (D3DCOLORVALUE, "dcvAmbient"),
+    (D3DVECTOR, "dvPosition"),
+    (D3DVECTOR, "dvDirection"),
+    (D3DVALUE, "dvRange"),
+    (D3DVALUE, "dvFalloff"),
+    (D3DVALUE, "dvAttenuation0"),
+    (D3DVALUE, "dvAttenuation1"),
+    (D3DVALUE, "dvAttenuation2"),
+    (D3DVALUE, "dvTheta"),
+    (D3DVALUE, "dvPhi"),
+])
+LPD3DLIGHT7 = Pointer(D3DLIGHT7)
+
+D3DLIGHTFLAGS = Flags(DWORD, [
+    "D3DLIGHT_ACTIVE",
+    "D3DLIGHT_NO_SPECULAR",
+    "D3DLIGHT_ALL",
+])
+
+D3DLIGHT2 = Struct("D3DLIGHT2", [
+    (DWORD, "dwSize"),
+    (D3DLIGHTTYPE, "dltType"),
+    (D3DCOLORVALUE, "dcvColor"),
+    (D3DVECTOR, "dvPosition"),
+    (D3DVECTOR, "dvDirection"),
+    (D3DVALUE, "dvRange"),
+    (D3DVALUE, "dvFalloff"),
+    (D3DVALUE, "dvAttenuation0"),
+    (D3DVALUE, "dvAttenuation1"),
+    (D3DVALUE, "dvAttenuation2"),
+    (D3DVALUE, "dvTheta"),
+    (D3DVALUE, "dvPhi"),
+    (DWORD, "dwFlags"),
+])
+LPD3DLIGHT2 = Pointer(D3DLIGHT2)
+
+D3DLIGHTDATA = Struct("D3DLIGHTDATA", [
+    (DWORD, "dwSize"),
+    (LPD3DLIGHTINGELEMENT, "lpIn"),
+    (DWORD, "dwInSize"),
+    (LPD3DTLVERTEX, "lpOut"),
+    (DWORD, "dwOutSize"),
+])
+LPD3DLIGHTDATA = Pointer(D3DLIGHTDATA)
+
+D3DCOLOR = Flags(DWORD, [
+    "D3DCOLOR_MONO",
+    "D3DCOLOR_RGB",
+])
+
+D3DCOLORMODEL = DWORD
+
+D3DCLEAR = Flags(DWORD, [
+    "D3DCLEAR_TARGET",
+    "D3DCLEAR_ZBUFFER",
+    "D3DCLEAR_STENCIL",
+])
+
+D3DOPCODE = Enum("D3DOPCODE", [
+    "D3DOP_POINT",
+    "D3DOP_LINE",
+    "D3DOP_TRIANGLE",
+    "D3DOP_MATRIXLOAD",
+    "D3DOP_MATRIXMULTIPLY",
+    "D3DOP_STATETRANSFORM",
+    "D3DOP_STATELIGHT",
+    "D3DOP_STATERENDER",
+    "D3DOP_PROCESSVERTICES",
+    "D3DOP_TEXTURELOAD",
+    "D3DOP_EXIT",
+    "D3DOP_BRANCHFORWARD",
+    "D3DOP_SPAN",
+    "D3DOP_SETSTATUS",
+    "D3DOP_FORCE_DWORD",
+])
+
+D3DINSTRUCTION = Struct("D3DINSTRUCTION", [
+    (BYTE, "bOpcode"),
+    (BYTE, "bSize"),
+    (WORD, "wCount"),
+])
+
+D3DTEXTURELOAD = Struct("D3DTEXTURELOAD", [
+    (D3DTEXTUREHANDLE, "hDestTexture"),
+    (D3DTEXTUREHANDLE, "hSrcTexture"),
+])
+
+D3DPICKRECORD = Struct("D3DPICKRECORD", [
+    (BYTE, "bOpcode"),
+    (BYTE, "bPad"),
+    (DWORD, "dwOffset"),
+    (D3DVALUE, "dvZ"),
+])
+LPD3DPICKRECORD = Pointer(D3DPICKRECORD)
+
+D3DSHADEMODE = Enum("D3DSHADEMODE", [
+    "D3DSHADE_FLAT",
+    "D3DSHADE_GOURAUD",
+    "D3DSHADE_PHONG",
+    "D3DSHADE_FORCE_DWORD",
+])
+
+D3DFILLMODE = Enum("D3DFILLMODE", [
+    "D3DFILL_POINT",
+    "D3DFILL_WIREFRAME",
+    "D3DFILL_SOLID",
+    "D3DFILL_FORCE_DWORD",
+])
+
+D3DLINEPATTERN = Struct("D3DLINEPATTERN", [
+    (WORD, "wRepeatFactor"),
+    (WORD, "wLinePattern"),
+])
+
+D3DTEXTUREFILTER = Enum("D3DTEXTUREFILTER", [
+    "D3DFILTER_NEAREST",
+    "D3DFILTER_LINEAR",
+    "D3DFILTER_MIPNEAREST",
+    "D3DFILTER_MIPLINEAR",
+    "D3DFILTER_LINEARMIPNEAREST",
+    "D3DFILTER_LINEARMIPLINEAR",
+    "D3DFILTER_FORCE_DWORD",
+])
+
+D3DBLEND = Enum("D3DBLEND", [
+    "D3DBLEND_ZERO",
+    "D3DBLEND_ONE",
+    "D3DBLEND_SRCCOLOR",
+    "D3DBLEND_INVSRCCOLOR",
+    "D3DBLEND_SRCALPHA",
+    "D3DBLEND_INVSRCALPHA",
+    "D3DBLEND_DESTALPHA",
+    "D3DBLEND_INVDESTALPHA",
+    "D3DBLEND_DESTCOLOR",
+    "D3DBLEND_INVDESTCOLOR",
+    "D3DBLEND_SRCALPHASAT",
+    "D3DBLEND_BOTHSRCALPHA",
+    "D3DBLEND_BOTHINVSRCALPHA",
+    "D3DBLEND_FORCE_DWORD",
+])
+
+D3DTEXTUREBLEND = Enum("D3DTEXTUREBLEND", [
+    "D3DTBLEND_DECAL",
+    "D3DTBLEND_MODULATE",
+    "D3DTBLEND_DECALALPHA",
+    "D3DTBLEND_MODULATEALPHA",
+    "D3DTBLEND_DECALMASK",
+    "D3DTBLEND_MODULATEMASK",
+    "D3DTBLEND_COPY",
+    "D3DTBLEND_ADD",
+    "D3DTBLEND_FORCE_DWORD",
+])
+
+D3DTEXTUREADDRESS = Enum("D3DTEXTUREADDRESS", [
+    "D3DTADDRESS_WRAP",
+    "D3DTADDRESS_MIRROR",
+    "D3DTADDRESS_CLAMP",
+    "D3DTADDRESS_BORDER",
+    "D3DTADDRESS_FORCE_DWORD",
+])
+
+D3DCULL = Enum("D3DCULL", [
+    "D3DCULL_NONE",
+    "D3DCULL_CW",
+    "D3DCULL_CCW",
+    "D3DCULL_FORCE_DWORD",
+])
+
+D3DCMPFUNC = Enum("D3DCMPFUNC", [
+    "D3DCMP_NEVER",
+    "D3DCMP_LESS",
+    "D3DCMP_EQUAL",
+    "D3DCMP_LESSEQUAL",
+    "D3DCMP_GREATER",
+    "D3DCMP_NOTEQUAL",
+    "D3DCMP_GREATEREQUAL",
+    "D3DCMP_ALWAYS",
+    "D3DCMP_FORCE_DWORD",
+])
+
+D3DSTENCILOP = Enum("D3DSTENCILOP", [
+    "D3DSTENCILOP_KEEP",
+    "D3DSTENCILOP_ZERO",
+    "D3DSTENCILOP_REPLACE",
+    "D3DSTENCILOP_INCRSAT",
+    "D3DSTENCILOP_DECRSAT",
+    "D3DSTENCILOP_INVERT",
+    "D3DSTENCILOP_INCR",
+    "D3DSTENCILOP_DECR",
+    "D3DSTENCILOP_FORCE_DWORD",
+])
+
+D3DFOGMODE = Enum("D3DFOGMODE", [
+    "D3DFOG_NONE",
+    "D3DFOG_EXP",
+    "D3DFOG_EXP2",
+    "D3DFOG_LINEAR",
+    "D3DFOG_FORCE_DWORD",
+])
+
+D3DZBUFFERTYPE = Enum("D3DZBUFFERTYPE", [
+    "D3DZB_FALSE",
+    "D3DZB_TRUE",
+    "D3DZB_USEW",
+    "D3DZB_FORCE_DWORD",
+])
+
+D3DANTIALIASMODE = Enum("D3DANTIALIASMODE", [
+    "D3DANTIALIAS_NONE",
+    "D3DANTIALIAS_SORTDEPENDENT",
+    "D3DANTIALIAS_SORTINDEPENDENT",
+    "D3DANTIALIAS_FORCE_DWORD",
+])
+
+D3DVERTEXTYPE = Enum("D3DVERTEXTYPE", [
+    "D3DVT_VERTEX",
+    "D3DVT_LVERTEX",
+    "D3DVT_TLVERTEX",
+    "D3DVT_FORCE_DWORD",
+])
+
+D3DPRIMITIVETYPE = Enum("D3DPRIMITIVETYPE", [
+    "D3DPT_POINTLIST",
+    "D3DPT_LINELIST",
+    "D3DPT_LINESTRIP",
+    "D3DPT_TRIANGLELIST",
+    "D3DPT_TRIANGLESTRIP",
+    "D3DPT_TRIANGLEFAN",
+    "D3DPT_FORCE_DWORD",
+])
+
+D3DTRANSFORMSTATETYPE = Enum("D3DTRANSFORMSTATETYPE", [
+    "D3DTRANSFORMSTATE_WORLD",
+    "D3DTRANSFORMSTATE_VIEW",
+    "D3DTRANSFORMSTATE_PROJECTION",
+    "D3DTRANSFORMSTATE_WORLD1",
+    "D3DTRANSFORMSTATE_WORLD2",
+    "D3DTRANSFORMSTATE_WORLD3",
+    "D3DTRANSFORMSTATE_TEXTURE0",
+    "D3DTRANSFORMSTATE_TEXTURE1",
+    "D3DTRANSFORMSTATE_TEXTURE2",
+    "D3DTRANSFORMSTATE_TEXTURE3",
+    "D3DTRANSFORMSTATE_TEXTURE4",
+    "D3DTRANSFORMSTATE_TEXTURE5",
+    "D3DTRANSFORMSTATE_TEXTURE6",
+    "D3DTRANSFORMSTATE_TEXTURE7",
+    "D3DTRANSFORMSTATE_FORCE_DWORD",
+])
+
+D3DLIGHTSTATETYPE = Enum("D3DLIGHTSTATETYPE", [
+    "D3DLIGHTSTATE_MATERIAL",
+    "D3DLIGHTSTATE_AMBIENT",
+    "D3DLIGHTSTATE_COLORMODEL",
+    "D3DLIGHTSTATE_FOGMODE",
+    "D3DLIGHTSTATE_FOGSTART",
+    "D3DLIGHTSTATE_FOGEND",
+    "D3DLIGHTSTATE_FOGDENSITY",
+    "D3DLIGHTSTATE_COLORVERTEX",
+    "D3DLIGHTSTATE_FORCE_DWORD",
+])
+
+D3DRENDERSTATETYPE = Enum("D3DRENDERSTATETYPE", [
+    "D3DRENDERSTATE_ANTIALIAS",
+    "D3DRENDERSTATE_TEXTUREPERSPECTIVE",
+    "D3DRENDERSTATE_ZENABLE",
+    "D3DRENDERSTATE_FILLMODE",
+    "D3DRENDERSTATE_SHADEMODE",
+    "D3DRENDERSTATE_LINEPATTERN",
+    "D3DRENDERSTATE_ZWRITEENABLE",
+    "D3DRENDERSTATE_ALPHATESTENABLE",
+    "D3DRENDERSTATE_LASTPIXEL",
+    "D3DRENDERSTATE_SRCBLEND",
+    "D3DRENDERSTATE_DESTBLEND",
+    "D3DRENDERSTATE_CULLMODE",
+    "D3DRENDERSTATE_ZFUNC",
+    "D3DRENDERSTATE_ALPHAREF",
+    "D3DRENDERSTATE_ALPHAFUNC",
+    "D3DRENDERSTATE_DITHERENABLE",
+    "D3DRENDERSTATE_ALPHABLENDENABLE",
+    "D3DRENDERSTATE_FOGENABLE",
+    "D3DRENDERSTATE_SPECULARENABLE",
+    "D3DRENDERSTATE_ZVISIBLE",
+    "D3DRENDERSTATE_STIPPLEDALPHA",
+    "D3DRENDERSTATE_FOGCOLOR",
+    "D3DRENDERSTATE_FOGTABLEMODE",
+    "D3DRENDERSTATE_FOGSTART",
+    "D3DRENDERSTATE_FOGEND",
+    "D3DRENDERSTATE_FOGDENSITY",
+    "D3DRENDERSTATE_EDGEANTIALIAS",
+    "D3DRENDERSTATE_COLORKEYENABLE",
+    "D3DRENDERSTATE_ZBIAS",
+    "D3DRENDERSTATE_RANGEFOGENABLE",
+    "D3DRENDERSTATE_STENCILENABLE",
+    "D3DRENDERSTATE_STENCILFAIL",
+    "D3DRENDERSTATE_STENCILZFAIL",
+    "D3DRENDERSTATE_STENCILPASS",
+    "D3DRENDERSTATE_STENCILFUNC",
+    "D3DRENDERSTATE_STENCILREF",
+    "D3DRENDERSTATE_STENCILMASK",
+    "D3DRENDERSTATE_STENCILWRITEMASK",
+    "D3DRENDERSTATE_TEXTUREFACTOR",
+    "D3DRENDERSTATE_WRAP0",
+    "D3DRENDERSTATE_WRAP1",
+    "D3DRENDERSTATE_WRAP2",
+    "D3DRENDERSTATE_WRAP3",
+    "D3DRENDERSTATE_WRAP4",
+    "D3DRENDERSTATE_WRAP5",
+    "D3DRENDERSTATE_WRAP6",
+    "D3DRENDERSTATE_WRAP7",
+    "D3DRENDERSTATE_CLIPPING",
+    "D3DRENDERSTATE_LIGHTING",
+    "D3DRENDERSTATE_EXTENTS",
+    "D3DRENDERSTATE_AMBIENT",
+    "D3DRENDERSTATE_FOGVERTEXMODE",
+    "D3DRENDERSTATE_COLORVERTEX",
+    "D3DRENDERSTATE_LOCALVIEWER",
+    "D3DRENDERSTATE_NORMALIZENORMALS",
+    "D3DRENDERSTATE_COLORKEYBLENDENABLE",
+    "D3DRENDERSTATE_DIFFUSEMATERIALSOURCE",
+    "D3DRENDERSTATE_SPECULARMATERIALSOURCE",
+    "D3DRENDERSTATE_AMBIENTMATERIALSOURCE",
+    "D3DRENDERSTATE_EMISSIVEMATERIALSOURCE",
+    "D3DRENDERSTATE_VERTEXBLEND",
+    "D3DRENDERSTATE_CLIPPLANEENABLE",
+    "D3DRENDERSTATE_TEXTUREHANDLE",
+    "D3DRENDERSTATE_TEXTUREADDRESS",
+    "D3DRENDERSTATE_WRAPU",
+    "D3DRENDERSTATE_WRAPV",
+    "D3DRENDERSTATE_MONOENABLE",
+    "D3DRENDERSTATE_ROP2",
+    "D3DRENDERSTATE_PLANEMASK",
+    "D3DRENDERSTATE_TEXTUREMAG",
+    "D3DRENDERSTATE_TEXTUREMIN",
+    "D3DRENDERSTATE_TEXTUREMAPBLEND",
+    "D3DRENDERSTATE_SUBPIXEL",
+    "D3DRENDERSTATE_SUBPIXELX",
+    "D3DRENDERSTATE_STIPPLEENABLE",
+    "D3DRENDERSTATE_BORDERCOLOR",
+    "D3DRENDERSTATE_TEXTUREADDRESSU",
+    "D3DRENDERSTATE_TEXTUREADDRESSV",
+    "D3DRENDERSTATE_MIPMAPLODBIAS",
+    "D3DRENDERSTATE_ANISOTROPY",
+    "D3DRENDERSTATE_FLUSHBATCH",
+    "D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT",
+    "D3DRENDERSTATE_STIPPLEPATTERN00",
+    "D3DRENDERSTATE_STIPPLEPATTERN01",
+    "D3DRENDERSTATE_STIPPLEPATTERN02",
+    "D3DRENDERSTATE_STIPPLEPATTERN03",
+    "D3DRENDERSTATE_STIPPLEPATTERN04",
+    "D3DRENDERSTATE_STIPPLEPATTERN05",
+    "D3DRENDERSTATE_STIPPLEPATTERN06",
+    "D3DRENDERSTATE_STIPPLEPATTERN07",
+    "D3DRENDERSTATE_STIPPLEPATTERN08",
+    "D3DRENDERSTATE_STIPPLEPATTERN09",
+    "D3DRENDERSTATE_STIPPLEPATTERN10",
+    "D3DRENDERSTATE_STIPPLEPATTERN11",
+    "D3DRENDERSTATE_STIPPLEPATTERN12",
+    "D3DRENDERSTATE_STIPPLEPATTERN13",
+    "D3DRENDERSTATE_STIPPLEPATTERN14",
+    "D3DRENDERSTATE_STIPPLEPATTERN15",
+    "D3DRENDERSTATE_STIPPLEPATTERN16",
+    "D3DRENDERSTATE_STIPPLEPATTERN17",
+    "D3DRENDERSTATE_STIPPLEPATTERN18",
+    "D3DRENDERSTATE_STIPPLEPATTERN19",
+    "D3DRENDERSTATE_STIPPLEPATTERN20",
+    "D3DRENDERSTATE_STIPPLEPATTERN21",
+    "D3DRENDERSTATE_STIPPLEPATTERN22",
+    "D3DRENDERSTATE_STIPPLEPATTERN23",
+    "D3DRENDERSTATE_STIPPLEPATTERN24",
+    "D3DRENDERSTATE_STIPPLEPATTERN25",
+    "D3DRENDERSTATE_STIPPLEPATTERN26",
+    "D3DRENDERSTATE_STIPPLEPATTERN27",
+    "D3DRENDERSTATE_STIPPLEPATTERN28",
+    "D3DRENDERSTATE_STIPPLEPATTERN29",
+    "D3DRENDERSTATE_STIPPLEPATTERN30",
+    "D3DRENDERSTATE_STIPPLEPATTERN31",
+    "D3DRENDERSTATE_FOGTABLESTART",
+    "D3DRENDERSTATE_FOGTABLEEND",
+    "D3DRENDERSTATE_FOGTABLEDENSITY",
+])
+
+D3DMATERIALCOLORSOURCE = Enum("D3DMATERIALCOLORSOURCE", [
+    "D3DMCS_MATERIAL",
+    "D3DMCS_COLOR1",
+    "D3DMCS_COLOR2",
+])
+
+D3DWRAP = Flags(DWORD, [
+    "D3DWRAP_U",
+    "D3DWRAP_V",
+    "D3DWRAPCOORD_0",
+    "D3DWRAPCOORD_1",
+    "D3DWRAPCOORD_2",
+    "D3DWRAPCOORD_3",
+])
+
+D3DSTATE = Struct("D3DSTATE", [
+    (D3DTRANSFORMSTATETYPE, "dtstTransformStateType"),
+    (D3DLIGHTSTATETYPE, "dlstLightStateType"),
+    (D3DRENDERSTATETYPE, "drstRenderStateType"),
+    (DWORD, "dwArg[1]"),
+    (D3DVALUE, "dvArg[1]"),
+])
+
+D3DMATRIXLOAD = Struct("D3DMATRIXLOAD", [
+    (D3DMATRIXHANDLE, "hDestMatrix"),
+    (D3DMATRIXHANDLE, "hSrcMatrix"),
+])
+
+D3DMATRIXMULTIPLY = Struct("D3DMATRIXMULTIPLY", [
+    (D3DMATRIXHANDLE, "hDestMatrix"),
+    (D3DMATRIXHANDLE, "hSrcMatrix1"),
+    (D3DMATRIXHANDLE, "hSrcMatrix2"),
+])
+
+D3DPROCESSVERTICES = Struct("D3DPROCESSVERTICES", [
+    (DWORD, "dwFlags"),
+    (WORD, "wStart"),
+    (WORD, "wDest"),
+    (DWORD, "dwCount"),
+    (DWORD, "dwReserved"),
+])
+
+D3DPROCESSVERTICES = Flags(DWORD, [
+    "D3DPROCESSVERTICES_TRANSFORMLIGHT",
+    "D3DPROCESSVERTICES_TRANSFORM",
+    "D3DPROCESSVERTICES_COPY",
+    "D3DPROCESSVERTICES_OPMASK",
+    "D3DPROCESSVERTICES_UPDATEEXTENTS",
+    "D3DPROCESSVERTICES_NOCOLOR",
+])
+
+D3DTEXTURESTAGESTATETYPE = Enum("D3DTEXTURESTAGESTATETYPE", [
+    "D3DTSS_COLOROP",
+    "D3DTSS_COLORARG1",
+    "D3DTSS_COLORARG2",
+    "D3DTSS_ALPHAOP",
+    "D3DTSS_ALPHAARG1",
+    "D3DTSS_ALPHAARG2",
+    "D3DTSS_BUMPENVMAT00",
+    "D3DTSS_BUMPENVMAT01",
+    "D3DTSS_BUMPENVMAT10",
+    "D3DTSS_BUMPENVMAT11",
+    "D3DTSS_TEXCOORDINDEX",
+    "D3DTSS_ADDRESS",
+    "D3DTSS_ADDRESSU",
+    "D3DTSS_ADDRESSV",
+    "D3DTSS_BORDERCOLOR",
+    "D3DTSS_MAGFILTER",
+    "D3DTSS_MINFILTER",
+    "D3DTSS_MIPFILTER",
+    "D3DTSS_MIPMAPLODBIAS",
+    "D3DTSS_MAXMIPLEVEL",
+    "D3DTSS_MAXANISOTROPY",
+    "D3DTSS_BUMPENVLSCALE",
+    "D3DTSS_BUMPENVLOFFSET",
+    "D3DTSS_TEXTURETRANSFORMFLAGS",
+    "D3DTSS_FORCE_DWORD",
+])
+
+D3DTSS_TCI = Flags(DWORD, [
+    "D3DTSS_TCI_PASSTHRU",
+    "D3DTSS_TCI_CAMERASPACENORMAL",
+    "D3DTSS_TCI_CAMERASPACEPOSITION",
+    "D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR",
+])
+
+D3DTEXTUREOP = Enum("D3DTEXTUREOP", [
+    "D3DTOP_DISABLE",
+    "D3DTOP_SELECTARG1",
+    "D3DTOP_SELECTARG2",
+    "D3DTOP_MODULATE",
+    "D3DTOP_MODULATE2X",
+    "D3DTOP_MODULATE4X",
+    "D3DTOP_ADD",
+    "D3DTOP_ADDSIGNED",
+    "D3DTOP_ADDSIGNED2X",
+    "D3DTOP_SUBTRACT",
+    "D3DTOP_ADDSMOOTH",
+    "D3DTOP_BLENDDIFFUSEALPHA",
+    "D3DTOP_BLENDTEXTUREALPHA",
+    "D3DTOP_BLENDFACTORALPHA",
+    "D3DTOP_BLENDTEXTUREALPHAPM",
+    "D3DTOP_BLENDCURRENTALPHA",
+    "D3DTOP_PREMODULATE",
+    "D3DTOP_MODULATEALPHA_ADDCOLOR",
+    "D3DTOP_MODULATECOLOR_ADDALPHA",
+    "D3DTOP_MODULATEINVALPHA_ADDCOLOR",
+    "D3DTOP_MODULATEINVCOLOR_ADDALPHA",
+    "D3DTOP_BUMPENVMAP",
+    "D3DTOP_BUMPENVMAPLUMINANCE",
+    "D3DTOP_DOTPRODUCT3",
+])
+
+D3DTA = Flags(DWORD, [
+    "D3DTA_SELECTMASK",
+    "D3DTA_DIFFUSE",
+    "D3DTA_CURRENT",
+    "D3DTA_TEXTURE",
+    "D3DTA_TFACTOR",
+    "D3DTA_SPECULAR",
+    "D3DTA_COMPLEMENT",
+    "D3DTA_ALPHAREPLICATE",
+])
+
+D3DTEXTUREMAGFILTER = Enum("D3DTEXTUREMAGFILTER", [
+    "D3DTFG_POINT",
+    "D3DTFG_LINEAR",
+    "D3DTFG_FLATCUBIC",
+    "D3DTFG_GAUSSIANCUBIC",
+    "D3DTFG_ANISOTROPIC",
+    "D3DTFG_FORCE_DWORD",
+])
+
+D3DTEXTUREMINFILTER = Enum("D3DTEXTUREMINFILTER", [
+    "D3DTFN_POINT",
+    "D3DTFN_LINEAR",
+    "D3DTFN_ANISOTROPIC",
+    "D3DTFN_FORCE_DWORD",
+])
+
+D3DTEXTUREMIPFILTER = Enum("D3DTEXTUREMIPFILTER", [
+    "D3DTFP_NONE",
+    "D3DTFP_POINT",
+    "D3DTFP_LINEAR",
+    "D3DTFP_FORCE_DWORD",
+])
+
+D3DTRIFLAG = Flags(DWORD, [
+    "D3DTRIFLAG_START",
+    "D3DTRIFLAG_STARTFLAT(len)",
+    "D3DTRIFLAG_ODD",
+    "D3DTRIFLAG_EVEN",
+    "D3DTRIFLAG_EDGEENABLETRIANGLE",
+    "D3DTRIFLAG_EDGEENABLE1",
+    "D3DTRIFLAG_EDGEENABLE2",
+    "D3DTRIFLAG_EDGEENABLE3",
+])
+
+D3DTRIANGLE = Struct("D3DTRIANGLE", [
+    (WORD, "v1"),
+    (WORD, "v2"),
+    (WORD, "v3"),
+    (WORD, "wFlags"),
+])
+
+D3DLINE = Struct("D3DLINE", [
+    (WORD, "v1"),
+    (WORD, "v2"),
+])
+
+D3DSPAN = Struct("D3DSPAN", [
+    (WORD, "wCount"),
+    (WORD, "wFirst"),
+])
+
+D3DPOINT = Struct("D3DPOINT", [
+    (WORD, "wCount"),
+    (WORD, "wFirst"),
+])
+
+D3DBRANCH = Struct("D3DBRANCH", [
+    (DWORD, "dwMask"),
+    (DWORD, "dwValue"),
+    (BOOL, "bNegate"),
+    (DWORD, "dwOffset"),
+])
+
+D3DSTATUS = Struct("D3DSTATUS", [
+    (DWORD, "dwFlags"),
+    (DWORD, "dwStatus"),
+    (D3DRECT, "drExtent"),
+])
+
+D3DSETSTATUS = Flags(DWORD, [
+    "D3DSETSTATUS_STATUS",
+    "D3DSETSTATUS_EXTENTS",
+    "D3DSETSTATUS_ALL",
+])
+
+D3DCLIPSTATUS = Struct("D3DCLIPSTATUS", [
+    (DWORD, "dwFlags"),
+    (DWORD, "dwStatus"),
+    (Float, "minx"),
+    (Float, "maxx"),
+    (Float, "miny"),
+    (Float, "maxy"),
+    (Float, "minz"),
+    (Float, "maxz"),
+])
+LPD3DCLIPSTATUS = Pointer(D3DCLIPSTATUS)
+
+D3DCLIPSTATUS = Flags(DWORD, [
+    "D3DCLIPSTATUS_STATUS",
+    "D3DCLIPSTATUS_EXTENTS2",
+    "D3DCLIPSTATUS_EXTENTS3",
+])
+
+D3DSTATS = Struct("D3DSTATS", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwTrianglesDrawn"),
+    (DWORD, "dwLinesDrawn"),
+    (DWORD, "dwPointsDrawn"),
+    (DWORD, "dwSpansDrawn"),
+    (DWORD, "dwVerticesProcessed"),
+])
+LPD3DSTATS = Pointer(D3DSTATS)
+
+D3DEXECUTE = Flags(DWORD, [
+    "D3DEXECUTE_CLIPPED",
+    "D3DEXECUTE_UNCLIPPED",
+])
+
+D3DEXECUTEDATA = Struct("D3DEXECUTEDATA", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwVertexOffset"),
+    (DWORD, "dwVertexCount"),
+    (DWORD, "dwInstructionOffset"),
+    (DWORD, "dwInstructionLength"),
+    (DWORD, "dwHVertexOffset"),
+    (D3DSTATUS, "dsStatus"),
+])
+LPD3DEXECUTEDATA = Pointer(D3DEXECUTEDATA)
+
+D3DPAL = Flags(DWORD, [
+    "D3DPAL_FREE",
+    "D3DPAL_READONLY",
+    "D3DPAL_RESERVED",
+])
+
+D3DVERTEXBUFFERDESC = Struct("D3DVERTEXBUFFERDESC", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwCaps"),
+    (DWORD, "dwFVF"),
+    (DWORD, "dwNumVertices"),
+])
+LPD3DVERTEXBUFFERDESC = Pointer(D3DVERTEXBUFFERDESC)
+
+D3DVBCAPS = Flags(DWORD, [
+    "D3DVBCAPS_SYSTEMMEMORY",
+    "D3DVBCAPS_WRITEONLY",
+    "D3DVBCAPS_OPTIMIZED",
+    "D3DVBCAPS_DONOTCLIP",
+])
+
+D3DVOP = Flags(DWORD, [
+    "D3DVOP_LIGHT",
+    "D3DVOP_TRANSFORM",
+    "D3DVOP_CLIP",
+    "D3DVOP_EXTENTS",
+])
+
+D3DPV = Flags(DWORD, [
+    "D3DPV_DONOTCOPYDATA",
+])
+
+D3DFVF = Flags(DWORD, [
+    "D3DFVF_RESERVED0",
+    "D3DFVF_POSITION_MASK",
+    "D3DFVF_XYZ",
+    "D3DFVF_XYZRHW",
+    "D3DFVF_XYZB1",
+    "D3DFVF_XYZB2",
+    "D3DFVF_XYZB3",
+    "D3DFVF_XYZB4",
+    "D3DFVF_XYZB5",
+    "D3DFVF_NORMAL",
+    "D3DFVF_RESERVED1",
+    "D3DFVF_DIFFUSE",
+    "D3DFVF_SPECULAR",
+    "D3DFVF_TEXCOUNT_MASK",
+    "D3DFVF_TEXCOUNT_SHIFT",
+    "D3DFVF_TEX0",
+    "D3DFVF_TEX1",
+    "D3DFVF_TEX2",
+    "D3DFVF_TEX3",
+    "D3DFVF_TEX4",
+    "D3DFVF_TEX5",
+    "D3DFVF_TEX6",
+    "D3DFVF_TEX7",
+    "D3DFVF_TEX8",
+    "D3DFVF_RESERVED2",
+    "D3DFVF_RESERVED1",
+    "D3DFVF_VERTEX",
+    "D3DFVF_LVERTEX",
+    "D3DFVF_TLVERTEX",
+    "D3DFVF_TEXCOORDSIZE1(0)",
+    "D3DFVF_TEXCOORDSIZE1(1)",
+    "D3DFVF_TEXCOORDSIZE2(0)",
+    "D3DFVF_TEXCOORDSIZE2(1)",
+    "D3DFVF_TEXCOORDSIZE3(0)",
+    "D3DFVF_TEXCOORDSIZE3(1)",
+    "D3DFVF_TEXCOORDSIZE4(0)",
+    "D3DFVF_TEXCOORDSIZE4(1)",
+])
+
+D3DDP_PTRSTRIDE = Struct("D3DDP_PTRSTRIDE", [
+    (LPVOID, "lpvData"),
+    (DWORD, "dwStride"),
+])
+
+D3DDRAWPRIMITIVESTRIDEDDATA = Struct("D3DDRAWPRIMITIVESTRIDEDDATA", [
+    (D3DDP_PTRSTRIDE, "position"),
+    (D3DDP_PTRSTRIDE, "normal"),
+    (D3DDP_PTRSTRIDE, "diffuse"),
+    (D3DDP_PTRSTRIDE, "specular"),
+    (D3DDP_PTRSTRIDE, "textureCoords[D3DDP_MAXTEXCOORD]"),
+])
+LPD3DDRAWPRIMITIVESTRIDEDDATA = Pointer(D3DDRAWPRIMITIVESTRIDEDDATA)
+
+D3DVIS = Flags(DWORD, [
+    "D3DVIS_INSIDE_FRUSTUM",
+    "D3DVIS_INTERSECT_FRUSTUM",
+    "D3DVIS_OUTSIDE_FRUSTUM",
+    "D3DVIS_INSIDE_LEFT",
+    "D3DVIS_INTERSECT_LEFT",
+    "D3DVIS_OUTSIDE_LEFT",
+    "D3DVIS_INSIDE_RIGHT",
+    "D3DVIS_INTERSECT_RIGHT",
+    "D3DVIS_OUTSIDE_RIGHT",
+    "D3DVIS_INSIDE_TOP",
+    "D3DVIS_INTERSECT_TOP",
+    "D3DVIS_OUTSIDE_TOP",
+    "D3DVIS_INSIDE_BOTTOM",
+    "D3DVIS_INTERSECT_BOTTOM",
+    "D3DVIS_OUTSIDE_BOTTOM",
+    "D3DVIS_INSIDE_NEAR",
+    "D3DVIS_INTERSECT_NEAR",
+    "D3DVIS_OUTSIDE_NEAR",
+    "D3DVIS_INSIDE_FAR",
+    "D3DVIS_INTERSECT_FAR",
+    "D3DVIS_OUTSIDE_FAR",
+    "D3DVIS_MASK_FRUSTUM",
+    "D3DVIS_MASK_LEFT",
+    "D3DVIS_MASK_RIGHT",
+    "D3DVIS_MASK_TOP",
+    "D3DVIS_MASK_BOTTOM",
+    "D3DVIS_MASK_NEAR",
+    "D3DVIS_MASK_FAR",
+])
+
+D3DDEVINFOID = Flags(DWORD, [
+    "D3DDEVINFOID_TEXTUREMANAGER",
+    "D3DDEVINFOID_D3DTEXTUREMANAGER",
+    "D3DDEVINFOID_TEXTURING",
+])
+
+D3DSTATEBLOCKTYPE = Enum("D3DSTATEBLOCKTYPE", [
+    "D3DSBT_ALL",
+    "D3DSBT_PIXELSTATE",
+    "D3DSBT_VERTEXSTATE",
+    "D3DSBT_FORCE_DWORD",
+])
+
+D3DVERTEXBLENDFLAGS = Enum("D3DVERTEXBLENDFLAGS", [
+    "D3DVBLEND_DISABLE",
+    "D3DVBLEND_1WEIGHT",
+    "D3DVBLEND_2WEIGHTS",
+    "D3DVBLEND_3WEIGHTS",
+])
+
+D3DTEXTURETRANSFORMFLAGS = Enum("D3DTEXTURETRANSFORMFLAGS", [
+    "D3DTTFF_DISABLE",
+    "D3DTTFF_COUNT1",
+    "D3DTTFF_COUNT2",
+    "D3DTTFF_COUNT3",
+    "D3DTTFF_COUNT4",
+    "D3DTTFF_PROJECTED",
+    "D3DTTFF_FORCE_DWORD",
+])
diff --git a/ddraw.def b/ddraw.def
new file mode 100644 (file)
index 0000000..3ce1083
--- /dev/null
+++ b/ddraw.def
@@ -0,0 +1,8 @@
+EXPORTS
+       DirectDrawCreate
+       DirectDrawCreateClipper
+       DirectDrawCreateEx
+       DirectDrawEnumerateA
+       DirectDrawEnumerateW
+       DirectDrawEnumerateExA
+       DirectDrawEnumerateExW
diff --git a/ddraw.py b/ddraw.py
new file mode 100755 (executable)
index 0000000..2e5187b
--- /dev/null
+++ b/ddraw.py
@@ -0,0 +1,1622 @@
+#############################################################################
+#
+# Copyright 2008 Tungsten Graphics, Inc.
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+#############################################################################
+
+"""ddraw.h"""
+
+from windows import *
+
+IDirectDraw = Interface("IDirectDraw", IUnknown)
+IDirectDraw2 = Interface("IDirectDraw2", IUnknown)
+IDirectDraw4 = Interface("IDirectDraw4", IUnknown)
+IDirectDraw7 = Interface("IDirectDraw7", IUnknown)
+IDirectDrawPalette = Interface("IDirectDrawPalette", IUnknown)
+IDirectDrawClipper = Interface("IDirectDrawClipper", IUnknown)
+IDirectDrawSurface = Interface("IDirectDrawSurface", IUnknown)
+IDirectDrawSurface2 = Interface("IDirectDrawSurface2", IUnknown)
+IDirectDrawSurface3 = Interface("IDirectDrawSurface3", IUnknown)
+IDirectDrawSurface4 = Interface("IDirectDrawSurface4", IUnknown)
+IDirectDrawSurface7 = Interface("IDirectDrawSurface7", IUnknown)
+IDirectDrawColorControl = Interface("IDirectDrawColorControl", IUnknown)
+IDirectDrawGammaControl = Interface("IDirectDrawGammaControl", IUnknown)
+
+LPDIRECTDRAW = Pointer(IDirectDraw)
+LPDIRECTDRAW2 = Pointer(IDirectDraw2)
+LPDIRECTDRAW4 = Pointer(IDirectDraw4)
+LPDIRECTDRAW7 = Pointer(IDirectDraw7)
+LPDIRECTDRAWSURFACE = Pointer(IDirectDrawSurface)
+LPDIRECTDRAWSURFACE2 = Pointer(IDirectDrawSurface2)
+LPDIRECTDRAWSURFACE3 = Pointer(IDirectDrawSurface3)
+LPDIRECTDRAWSURFACE4 = Pointer(IDirectDrawSurface4)
+LPDIRECTDRAWSURFACE7 = Pointer(IDirectDrawSurface7)
+LPDIRECTDRAWPALETTE = Pointer(IDirectDrawPalette)
+LPDIRECTDRAWCLIPPER = Pointer(IDirectDrawClipper)
+LPDIRECTDRAWCOLORCONTROL = Pointer(IDirectDrawColorControl)
+LPDIRECTDRAWGAMMACONTROL = Pointer(IDirectDrawGammaControl)
+
+DDARGB = Struct("DDARGB", [
+    (BYTE, "blue"),
+    (BYTE, "green"),
+    (BYTE, "red"),
+    (BYTE, "alpha"),
+])
+
+LPDDARGB = Pointer(DDARGB)
+
+DDRGBA = Struct("DDRGBA", [
+    (BYTE, "red"),
+    (BYTE, "green"),
+    (BYTE, "blue"),
+    (BYTE, "alpha"),
+])
+LPDDRGBA = Pointer(DDRGBA)
+
+DDCOLORKEY = Struct("DDCOLORKEY", [
+    (DWORD, "dwColorSpaceLowValue"),
+    (DWORD, "dwColorSpaceHighValue"),
+])
+LPDDCOLORKEY = Pointer(DDCOLORKEY)
+
+DDBLTFX = Struct("DDBLTFX", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwDDFX"),
+    (DWORD, "dwROP"),
+    (DWORD, "dwDDROP"),
+    (DWORD, "dwRotationAngle"),
+    (DWORD, "dwZBufferOpCode"),
+    (DWORD, "dwZBufferLow"),
+    (DWORD, "dwZBufferHigh"),
+    (DWORD, "dwZBufferBaseDest"),
+    (DWORD, "dwZDestConstBitDepth"),
+    (DWORD, "dwZDestConst"),
+    (LPDIRECTDRAWSURFACE, "lpDDSZBufferDest"),
+    (DWORD, "dwZSrcConstBitDepth"),
+    (DWORD, "dwZSrcConst"),
+    (LPDIRECTDRAWSURFACE, "lpDDSZBufferSrc"),
+    (DWORD, "dwAlphaEdgeBlendBitDepth"),
+    (DWORD, "dwAlphaEdgeBlend"),
+    (DWORD, "dwReserved"),
+    (DWORD, "dwAlphaDestConstBitDepth"),
+    (DWORD, "dwAlphaDestConst"),
+    (LPDIRECTDRAWSURFACE, "lpDDSAlphaDest"),
+    (DWORD, "dwAlphaSrcConstBitDepth"),
+    (DWORD, "dwAlphaSrcConst"),
+    (LPDIRECTDRAWSURFACE, "lpDDSAlphaSrc"),
+    (DWORD, "dwFillColor"),
+    (DWORD, "dwFillDepth"),
+    (DWORD, "dwFillPixel"),
+    (LPDIRECTDRAWSURFACE, "lpDDSPattern"),
+    (DDCOLORKEY, "ddckDestColorkey"),
+    (DDCOLORKEY, "ddckSrcColorkey"),
+])
+LPDDBLTFX = Pointer(DDBLTFX)
+
+DDSCAPS = Struct("DDSCAPS", [
+    (DWORD, "dwCaps"),
+])
+LPDDSCAPS = Pointer(DDSCAPS)
+
+DDOSCAPS = Struct("DDOSCAPS", [
+    (DWORD, "dwCaps"),
+])
+LPDDOSCAPS = Pointer(DDOSCAPS)
+
+DDSCAPSEX = Struct("DDSCAPSEX", [
+    (DWORD, "dwCaps2"),
+    (DWORD, "dwCaps3"),
+    (DWORD, "dwCaps4"),
+])
+
+DDSCAPS2 = Struct("DDSCAPS2", [
+    (DWORD, "dwCaps"),
+    (DWORD, "dwCaps2"),
+    (DWORD, "dwCaps3"),
+    (DWORD, "dwCaps4"),
+])
+LPDDSCAPS2 = Pointer(DDSCAPS2)
+
+DDCAPS_DX1 = Struct("DDCAPS_DX1", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwCaps"),
+    (DWORD, "dwCaps2"),
+    (DWORD, "dwCKeyCaps"),
+    (DWORD, "dwFXCaps"),
+    (DWORD, "dwFXAlphaCaps"),
+    (DWORD, "dwPalCaps"),
+    (DWORD, "dwSVCaps"),
+    (DWORD, "dwAlphaBltConstBitDepths"),
+    (DWORD, "dwAlphaBltPixelBitDepths"),
+    (DWORD, "dwAlphaBltSurfaceBitDepths"),
+    (DWORD, "dwAlphaOverlayConstBitDepths"),
+    (DWORD, "dwAlphaOverlayPixelBitDepths"),
+    (DWORD, "dwAlphaOverlaySurfaceBitDepths"),
+    (DWORD, "dwZBufferBitDepths"),
+    (DWORD, "dwVidMemTotal"),
+    (DWORD, "dwVidMemFree"),
+    (DWORD, "dwMaxVisibleOverlays"),
+    (DWORD, "dwCurrVisibleOverlays"),
+    (DWORD, "dwNumFourCCCodes"),
+    (DWORD, "dwAlignBoundarySrc"),
+    (DWORD, "dwAlignSizeSrc"),
+    (DWORD, "dwAlignBoundaryDest"),
+    (DWORD, "dwAlignSizeDest"),
+    (DWORD, "dwAlignStrideAlign"),
+    (DWORD, "dwRops[DD_ROP_SPACE]"),
+    (DDSCAPS, "ddsCaps"),
+    (DWORD, "dwMinOverlayStretch"),
+    (DWORD, "dwMaxOverlayStretch"),
+    (DWORD, "dwMinLiveVideoStretch"),
+    (DWORD, "dwMaxLiveVideoStretch"),
+    (DWORD, "dwMinHwCodecStretch"),
+    (DWORD, "dwMaxHwCodecStretch"),
+    (DWORD, "dwReserved1"),
+    (DWORD, "dwReserved2"),
+    (DWORD, "dwReserved3"),
+])
+LPDDCAPS_DX1 = Pointer(DDCAPS_DX1)
+
+DDCAPS_DX3 = Struct("DDCAPS_DX3", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwCaps"),
+    (DWORD, "dwCaps2"),
+    (DWORD, "dwCKeyCaps"),
+    (DWORD, "dwFXCaps"),
+    (DWORD, "dwFXAlphaCaps"),
+    (DWORD, "dwPalCaps"),
+    (DWORD, "dwSVCaps"),
+    (DWORD, "dwAlphaBltConstBitDepths"),
+    (DWORD, "dwAlphaBltPixelBitDepths"),
+    (DWORD, "dwAlphaBltSurfaceBitDepths"),
+    (DWORD, "dwAlphaOverlayConstBitDepths"),
+    (DWORD, "dwAlphaOverlayPixelBitDepths"),
+    (DWORD, "dwAlphaOverlaySurfaceBitDepths"),
+    (DWORD, "dwZBufferBitDepths"),
+    (DWORD, "dwVidMemTotal"),
+    (DWORD, "dwVidMemFree"),
+    (DWORD, "dwMaxVisibleOverlays"),
+    (DWORD, "dwCurrVisibleOverlays"),
+    (DWORD, "dwNumFourCCCodes"),
+    (DWORD, "dwAlignBoundarySrc"),
+    (DWORD, "dwAlignSizeSrc"),
+    (DWORD, "dwAlignBoundaryDest"),
+    (DWORD, "dwAlignSizeDest"),
+    (DWORD, "dwAlignStrideAlign"),
+    (DWORD, "dwRops[DD_ROP_SPACE]"),
+    (DDSCAPS, "ddsCaps"),
+    (DWORD, "dwMinOverlayStretch"),
+    (DWORD, "dwMaxOverlayStretch"),
+    (DWORD, "dwMinLiveVideoStretch"),
+    (DWORD, "dwMaxLiveVideoStretch"),
+    (DWORD, "dwMinHwCodecStretch"),
+    (DWORD, "dwMaxHwCodecStretch"),
+    (DWORD, "dwReserved1"),
+    (DWORD, "dwReserved2"),
+    (DWORD, "dwReserved3"),
+    (DWORD, "dwSVBCaps"),
+    (DWORD, "dwSVBCKeyCaps"),
+    (DWORD, "dwSVBFXCaps"),
+    (DWORD, "dwSVBRops[DD_ROP_SPACE]"),
+    (DWORD, "dwVSBCaps"),
+    (DWORD, "dwVSBCKeyCaps"),
+    (DWORD, "dwVSBFXCaps"),
+    (DWORD, "dwVSBRops[DD_ROP_SPACE]"),
+    (DWORD, "dwSSBCaps"),
+    (DWORD, "dwSSBCKeyCaps"),
+    (DWORD, "dwSSBFXCaps"),
+    (DWORD, "dwSSBRops[DD_ROP_SPACE]"),
+    (DWORD, "dwReserved4"),
+    (DWORD, "dwReserved5"),
+    (DWORD, "dwReserved6"),
+])
+LPDDCAPS_DX3 = Pointer(DDCAPS_DX3)
+
+DDCAPS_DX5 = Struct("DDCAPS_DX5", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwCaps"),
+    (DWORD, "dwCaps2"),
+    (DWORD, "dwCKeyCaps"),
+    (DWORD, "dwFXCaps"),
+    (DWORD, "dwFXAlphaCaps"),
+    (DWORD, "dwPalCaps"),
+    (DWORD, "dwSVCaps"),
+    (DWORD, "dwAlphaBltConstBitDepths"),
+    (DWORD, "dwAlphaBltPixelBitDepths"),
+    (DWORD, "dwAlphaBltSurfaceBitDepths"),
+    (DWORD, "dwAlphaOverlayConstBitDepths"),
+    (DWORD, "dwAlphaOverlayPixelBitDepths"),
+    (DWORD, "dwAlphaOverlaySurfaceBitDepths"),
+    (DWORD, "dwZBufferBitDepths"),
+    (DWORD, "dwVidMemTotal"),
+    (DWORD, "dwVidMemFree"),
+    (DWORD, "dwMaxVisibleOverlays"),
+    (DWORD, "dwCurrVisibleOverlays"),
+    (DWORD, "dwNumFourCCCodes"),
+    (DWORD, "dwAlignBoundarySrc"),
+    (DWORD, "dwAlignSizeSrc"),
+    (DWORD, "dwAlignBoundaryDest"),
+    (DWORD, "dwAlignSizeDest"),
+    (DWORD, "dwAlignStrideAlign"),
+    (DWORD, "dwRops[DD_ROP_SPACE]"),
+    (DDSCAPS, "ddsCaps"),
+    (DWORD, "dwMinOverlayStretch"),
+    (DWORD, "dwMaxOverlayStretch"),
+    (DWORD, "dwMinLiveVideoStretch"),
+    (DWORD, "dwMaxLiveVideoStretch"),
+    (DWORD, "dwMinHwCodecStretch"),
+    (DWORD, "dwMaxHwCodecStretch"),
+    (DWORD, "dwReserved1"),
+    (DWORD, "dwReserved2"),
+    (DWORD, "dwReserved3"),
+    (DWORD, "dwSVBCaps"),
+    (DWORD, "dwSVBCKeyCaps"),
+    (DWORD, "dwSVBFXCaps"),
+    (DWORD, "dwSVBRops[DD_ROP_SPACE]"),
+    (DWORD, "dwVSBCaps"),
+    (DWORD, "dwVSBCKeyCaps"),
+    (DWORD, "dwVSBFXCaps"),
+    (DWORD, "dwVSBRops[DD_ROP_SPACE]"),
+    (DWORD, "dwSSBCaps"),
+    (DWORD, "dwSSBCKeyCaps"),
+    (DWORD, "dwSSBFXCaps"),
+    (DWORD, "dwSSBRops[DD_ROP_SPACE]"),
+    (DWORD, "dwMaxVideoPorts"),
+    (DWORD, "dwCurrVideoPorts"),
+    (DWORD, "dwSVBCaps2"),
+    (DWORD, "dwNLVBCaps"),
+    (DWORD, "dwNLVBCaps2"),
+    (DWORD, "dwNLVBCKeyCaps"),
+    (DWORD, "dwNLVBFXCaps"),
+    (DWORD, "dwNLVBRops[DD_ROP_SPACE]"),
+])
+LPDDCAPS_DX5 = Pointer(DDCAPS_DX5)
+
+DDCAPS_DX6 = Struct("DDCAPS_DX6", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwCaps"),
+    (DWORD, "dwCaps2"),
+    (DWORD, "dwCKeyCaps"),
+    (DWORD, "dwFXCaps"),
+    (DWORD, "dwFXAlphaCaps"),
+    (DWORD, "dwPalCaps"),
+    (DWORD, "dwSVCaps"),
+    (DWORD, "dwAlphaBltConstBitDepths"),
+    (DWORD, "dwAlphaBltPixelBitDepths"),
+    (DWORD, "dwAlphaBltSurfaceBitDepths"),
+    (DWORD, "dwAlphaOverlayConstBitDepths"),
+    (DWORD, "dwAlphaOverlayPixelBitDepths"),
+    (DWORD, "dwAlphaOverlaySurfaceBitDepths"),
+    (DWORD, "dwZBufferBitDepths"),
+    (DWORD, "dwVidMemTotal"),
+    (DWORD, "dwVidMemFree"),
+    (DWORD, "dwMaxVisibleOverlays"),
+    (DWORD, "dwCurrVisibleOverlays"),
+    (DWORD, "dwNumFourCCCodes"),
+    (DWORD, "dwAlignBoundarySrc"),
+    (DWORD, "dwAlignSizeSrc"),
+    (DWORD, "dwAlignBoundaryDest"),
+    (DWORD, "dwAlignSizeDest"),
+    (DWORD, "dwAlignStrideAlign"),
+    (DWORD, "dwRops[DD_ROP_SPACE]"),
+    (DDSCAPS, "ddsOldCaps"),
+    (DWORD, "dwMinOverlayStretch"),
+    (DWORD, "dwMaxOverlayStretch"),
+    (DWORD, "dwMinLiveVideoStretch"),
+    (DWORD, "dwMaxLiveVideoStretch"),
+    (DWORD, "dwMinHwCodecStretch"),
+    (DWORD, "dwMaxHwCodecStretch"),
+    (DWORD, "dwReserved1"),
+    (DWORD, "dwReserved2"),
+    (DWORD, "dwReserved3"),
+    (DWORD, "dwSVBCaps"),
+    (DWORD, "dwSVBCKeyCaps"),
+    (DWORD, "dwSVBFXCaps"),
+    (DWORD, "dwSVBRops[DD_ROP_SPACE]"),
+    (DWORD, "dwVSBCaps"),
+    (DWORD, "dwVSBCKeyCaps"),
+    (DWORD, "dwVSBFXCaps"),
+    (DWORD, "dwVSBRops[DD_ROP_SPACE]"),
+    (DWORD, "dwSSBCaps"),
+    (DWORD, "dwSSBCKeyCaps"),
+    (DWORD, "dwSSBFXCaps"),
+    (DWORD, "dwSSBRops[DD_ROP_SPACE]"),
+    (DWORD, "dwMaxVideoPorts"),
+    (DWORD, "dwCurrVideoPorts"),
+    (DWORD, "dwSVBCaps2"),
+    (DWORD, "dwNLVBCaps"),
+    (DWORD, "dwNLVBCaps2"),
+    (DWORD, "dwNLVBCKeyCaps"),
+    (DWORD, "dwNLVBFXCaps"),
+    (DWORD, "dwNLVBRops[DD_ROP_SPACE]"),
+    (DDSCAPS2, "ddsCaps"),
+])
+LPDDCAPS_DX6 = Pointer(DDCAPS_DX6)
+
+DDCAPS_DX7 = Struct("DDCAPS_DX7", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwCaps"),
+    (DWORD, "dwCaps2"),
+    (DWORD, "dwCKeyCaps"),
+    (DWORD, "dwFXCaps"),
+    (DWORD, "dwFXAlphaCaps"),
+    (DWORD, "dwPalCaps"),
+    (DWORD, "dwSVCaps"),
+    (DWORD, "dwAlphaBltConstBitDepths"),
+    (DWORD, "dwAlphaBltPixelBitDepths"),
+    (DWORD, "dwAlphaBltSurfaceBitDepths"),
+    (DWORD, "dwAlphaOverlayConstBitDepths"),
+    (DWORD, "dwAlphaOverlayPixelBitDepths"),
+    (DWORD, "dwAlphaOverlaySurfaceBitDepths"),
+    (DWORD, "dwZBufferBitDepths"),
+    (DWORD, "dwVidMemTotal"),
+    (DWORD, "dwVidMemFree"),
+    (DWORD, "dwMaxVisibleOverlays"),
+    (DWORD, "dwCurrVisibleOverlays"),
+    (DWORD, "dwNumFourCCCodes"),
+    (DWORD, "dwAlignBoundarySrc"),
+    (DWORD, "dwAlignSizeSrc"),
+    (DWORD, "dwAlignBoundaryDest"),
+    (DWORD, "dwAlignSizeDest"),
+    (DWORD, "dwAlignStrideAlign"),
+    (DWORD, "dwRops[DD_ROP_SPACE]"),
+    (DDSCAPS, "ddsOldCaps"),
+    (DWORD, "dwMinOverlayStretch"),
+    (DWORD, "dwMaxOverlayStretch"),
+    (DWORD, "dwMinLiveVideoStretch"),
+    (DWORD, "dwMaxLiveVideoStretch"),
+    (DWORD, "dwMinHwCodecStretch"),
+    (DWORD, "dwMaxHwCodecStretch"),
+    (DWORD, "dwReserved1"),
+    (DWORD, "dwReserved2"),
+    (DWORD, "dwReserved3"),
+    (DWORD, "dwSVBCaps"),
+    (DWORD, "dwSVBCKeyCaps"),
+    (DWORD, "dwSVBFXCaps"),
+    (DWORD, "dwSVBRops[DD_ROP_SPACE]"),
+    (DWORD, "dwVSBCaps"),
+    (DWORD, "dwVSBCKeyCaps"),
+    (DWORD, "dwVSBFXCaps"),
+    (DWORD, "dwVSBRops[DD_ROP_SPACE]"),
+    (DWORD, "dwSSBCaps"),
+    (DWORD, "dwSSBCKeyCaps"),
+    (DWORD, "dwSSBFXCaps"),
+    (DWORD, "dwSSBRops[DD_ROP_SPACE]"),
+    (DWORD, "dwMaxVideoPorts"),
+    (DWORD, "dwCurrVideoPorts"),
+    (DWORD, "dwSVBCaps2"),
+    (DWORD, "dwNLVBCaps"),
+    (DWORD, "dwNLVBCaps2"),
+    (DWORD, "dwNLVBCKeyCaps"),
+    (DWORD, "dwNLVBFXCaps"),
+    (DWORD, "dwNLVBRops[DD_ROP_SPACE]"),
+    (DDSCAPS2, "ddsCaps"),
+])
+LPDDCAPS_DX7 = Pointer(DDCAPS_DX7)
+DDCAPS = DDCAPS_DX7
+LPDDCAPS = Pointer(DDCAPS)
+
+DDPIXELFORMAT = Struct("DDPIXELFORMAT", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwFlags"),
+    (DWORD, "dwFourCC"),
+    (DWORD, "dwRGBBitCount"),
+    (DWORD, "dwYUVBitCount"),
+    (DWORD, "dwZBufferBitDepth"),
+    (DWORD, "dwAlphaBitDepth"),
+    (DWORD, "dwLuminanceBitCount"),
+    (DWORD, "dwBumpBitCount"),
+    (DWORD, "dwPrivateFormatBitCount"),
+    (DWORD, "dwRBitMask"),
+    (DWORD, "dwYBitMask"),
+    (DWORD, "dwStencilBitDepth"),
+    (DWORD, "dwLuminanceBitMask"),
+    (DWORD, "dwBumpDuBitMask"),
+    (DWORD, "dwOperations"),
+    (DWORD, "dwGBitMask"),
+    (DWORD, "dwUBitMask"),
+    (DWORD, "dwZBitMask"),
+    (DWORD, "dwBumpDvBitMask"),
+    (WORD, "MultiSampleCaps.wFlipMSTypes"),
+    (WORD, "MultiSampleCaps.wBltMSTypes"),
+    (DWORD, "dwBBitMask"),
+    (DWORD, "dwVBitMask"),
+    (DWORD, "dwStencilBitMask"),
+    (DWORD, "dwBumpLuminanceBitMask"),
+    (DWORD, "dwRGBAlphaBitMask"),
+    (DWORD, "dwYUVAlphaBitMask"),
+    (DWORD, "dwLuminanceAlphaBitMask"),
+    (DWORD, "dwRGBZBitMask"),
+    (DWORD, "dwYUVZBitMask"),
+])
+LPDDPIXELFORMAT = Pointer(DDPIXELFORMAT)
+
+DDOVERLAYFX = Struct("DDOVERLAYFX", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwAlphaEdgeBlendBitDepth"),
+    (DWORD, "dwAlphaEdgeBlend"),
+    (DWORD, "dwReserved"),
+    (DWORD, "dwAlphaDestConstBitDepth"),
+    (DWORD, "dwAlphaDestConst"),
+    (LPDIRECTDRAWSURFACE, "lpDDSAlphaDest"),
+    (DWORD, "dwAlphaSrcConstBitDepth"),
+    (DWORD, "dwAlphaSrcConst"),
+    (LPDIRECTDRAWSURFACE, "lpDDSAlphaSrc"),
+    (DDCOLORKEY, "dckDestColorkey"),
+    (DDCOLORKEY, "dckSrcColorkey"),
+    (DWORD, "dwDDFX"),
+    (DWORD, "dwFlags"),
+])
+LPDDOVERLAYFX = Pointer(DDOVERLAYFX)
+
+DDBLTBATCH = Struct("DDBLTBATCH", [
+    (LPRECT, "lprDest"),
+    (LPDIRECTDRAWSURFACE, "lpDDSSrc"),
+    (LPRECT, "lprSrc"),
+    (DWORD, "dwFlags"),
+    (LPDDBLTFX, "lpDDBltFx"),
+])
+LPDDBLTBATCH = Pointer(DDBLTBATCH)
+
+DDGAMMARAMP = Struct("DDGAMMARAMP", [
+    (WORD, "red[256]"),
+    (WORD, "green[256]"),
+    (WORD, "blue[256]"),
+])
+LPDDGAMMARAMP = Pointer(DDGAMMARAMP)
+
+DDDEVICEIDENTIFIER = Struct("DDDEVICEIDENTIFIER", [
+    (String, "szDriver"),
+    (String, "szDescription"),
+    (LARGE_INTEGER, "liDriverVersion"),
+    (DWORD, "dwVendorId"),
+    (DWORD, "dwDeviceId"),
+    (DWORD, "dwSubSysId"),
+    (DWORD, "dwRevision"),
+    (GUID, "guidDeviceIdentifier"),
+])
+LPDDDEVICEIDENTIFIER = Pointer(DDDEVICEIDENTIFIER)
+
+DDDEVICEIDENTIFIER2 = Struct("DDDEVICEIDENTIFIER2", [
+    (String, "szDriver[MAX_DDDEVICEID_STRING]"),
+    (String, "szDescription[MAX_DDDEVICEID_STRING]"),
+    (LARGE_INTEGER, "liDriverVersion"),
+    (DWORD, "dwVendorId"),
+    (DWORD, "dwDeviceId"),
+    (DWORD, "dwSubSysId"),
+    (DWORD, "dwRevision"),
+    (GUID, "guidDeviceIdentifier"),
+    (DWORD, "dwWHQLLevel"),
+])
+LPDDDEVICEIDENTIFIER2 = Pointer(DDDEVICEIDENTIFIER2)
+
+LPCLIPPERCALLBACK = Pointer(Function("DWORD", "CLIPPERCALLBACK", [(LPDIRECTDRAWCLIPPER, "lpDDClipper"), (HWND, "hWnd"), (DWORD, "code"), (LPVOID, "lpContext")]))
+LPSURFACESTREAMINGCALLBACK = Pointer(Function("DWORD", "SURFACESTREAMINGCALLBACK", [DWORD]))
+
+DDSURFACEDESC = Struct("DDSURFACEDESC", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwFlags"),
+    (DWORD, "dwHeight"),
+    (DWORD, "dwWidth"),
+    (LONG, "lPitch"),
+    (DWORD, "dwLinearSize"),
+    (DWORD, "dwBackBufferCount"),
+    (DWORD, "dwMipMapCount"),
+    (DWORD, "dwZBufferBitDepth"),
+    (DWORD, "dwRefreshRate"),
+    (DWORD, "dwAlphaBitDepth"),
+    (DWORD, "dwReserved"),
+    (LPVOID, "lpSurface"),
+    (DDCOLORKEY, "ddckCKDestOverlay"),
+    (DDCOLORKEY, "ddckCKDestBlt"),
+    (DDCOLORKEY, "ddckCKSrcOverlay"),
+    (DDCOLORKEY, "ddckCKSrcBlt"),
+    (DDPIXELFORMAT, "ddpfPixelFormat"),
+    (DDSCAPS, "ddsCaps"),
+])
+LPDDSURFACEDESC = Pointer(DDSURFACEDESC)
+
+DDSURFACEDESC2 = Struct("DDSURFACEDESC2", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwFlags"),
+    (DWORD, "dwHeight"),
+    (DWORD, "dwWidth"),
+    (LONG, "lPitch"),
+    (DWORD, "dwLinearSize"),
+    (DWORD, "dwBackBufferCount"),
+    (DWORD, "dwDepth"),
+    (DWORD, "dwMipMapCount"),
+    (DWORD, "dwRefreshRate"),
+    (DWORD, "dwSrcVBHandle"),
+    (DWORD, "dwAlphaBitDepth"),
+    (DWORD, "dwReserved"),
+    (LPVOID, "lpSurface"),
+    (DDCOLORKEY, "ddckCKDestOverlay"),
+    (DWORD, "dwEmptyFaceColor"),
+    (DDCOLORKEY, "ddckCKDestBlt"),
+    (DDCOLORKEY, "ddckCKSrcOverlay"),
+    (DDCOLORKEY, "ddckCKSrcBlt"),
+    (DDPIXELFORMAT, "ddpfPixelFormat"),
+    (DWORD, "dwFVF"),
+    (DDSCAPS2, "ddsCaps"),
+    (DWORD, "dwTextureStage"),
+])
+LPDDSURFACEDESC2 = Pointer(DDSURFACEDESC2)
+
+DDSD = Flags(DWORD, [
+    "DDSD_CAPS",
+    "DDSD_HEIGHT",
+    "DDSD_WIDTH",
+    "DDSD_PITCH",
+    "DDSD_BACKBUFFERCOUNT",
+    "DDSD_ZBUFFERBITDEPTH",
+    "DDSD_ALPHABITDEPTH",
+    "DDSD_LPSURFACE",
+    "DDSD_PIXELFORMAT",
+    "DDSD_CKDESTOVERLAY",
+    "DDSD_CKDESTBLT",
+    "DDSD_CKSRCOVERLAY",
+    "DDSD_CKSRCBLT",
+    "DDSD_MIPMAPCOUNT",
+    "DDSD_REFRESHRATE",
+    "DDSD_LINEARSIZE",
+    "DDSD_TEXTURESTAGE",
+    "DDSD_FVF",
+    "DDSD_SRCVBHANDLE",
+    "DDSD_DEPTH",
+    "DDSD_ALL",
+])
+
+DDOPTSURFACEDESC = Struct("DDOPTSURFACEDESC", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwFlags"),
+    (DDSCAPS2, "ddSCaps"),
+    (DDOSCAPS, "ddOSCaps"),
+    (GUID, "guid"),
+    (DWORD, "dwCompressionRatio"),
+])
+
+DDSD = Flags(DWORD, [
+    "DDOSD_GUID",
+    "DDOSD_COMPRESSION_RATIO",
+    "DDOSD_SCAPS",
+    "DDOSD_OSCAPS",
+    "DDOSD_ALL",
+])
+
+DDOSDCAPS = Flags(DWORD, [
+    "DDOSDCAPS_OPTCOMPRESSED",
+    "DDOSDCAPS_OPTREORDERED",
+    "DDOSDCAPS_MONOLITHICMIPMAP",
+    "DDOSDCAPS_VALIDSCAPS",
+    "DDOSDCAPS_VALIDOSCAPS",
+])
+
+DDCOLORCONTROL = Struct("DDCOLORCONTROL", [
+    (DWORD, "dwSize"),
+    (DWORD, "dwFlags"),
+    (LONG, "lBrightness"),
+    (LONG, "lContrast"),
+    (LONG, "lHue"),
+    (LONG, "lSaturation"),
+    (LONG, "lSharpness"),
+    (LONG, "lGamma"),
+    (LONG, "lColorEnable"),
+    (DWORD, "dwReserved1"),
+])
+LPDDCOLORCONTROL = Pointer(DDCOLORCONTROL)
+
+DDCOLOR = Flags(DWORD, [
+    "DDCOLOR_BRIGHTNESS",
+    "DDCOLOR_CONTRAST",
+    "DDCOLOR_HUE",
+    "DDCOLOR_SATURATION",
+    "DDCOLOR_SHARPNESS",
+    "DDCOLOR_GAMMA",
+    "DDCOLOR_COLORENABLE",
+])
+
+DDSCAPS = Flags(DWORD, [
+    "DDSCAPS_RESERVED1",
+    "DDSCAPS_ALPHA",
+    "DDSCAPS_BACKBUFFER",
+    "DDSCAPS_COMPLEX",
+    "DDSCAPS_FLIP",
+    "DDSCAPS_FRONTBUFFER",
+    "DDSCAPS_OFFSCREENPLAIN",
+    "DDSCAPS_OVERLAY",
+    "DDSCAPS_PALETTE",
+    "DDSCAPS_PRIMARYSURFACE",
+    "DDSCAPS_RESERVED3",
+    "DDSCAPS_PRIMARYSURFACELEFT",
+    "DDSCAPS_SYSTEMMEMORY",
+    "DDSCAPS_TEXTURE",
+    "DDSCAPS_3DDEVICE",
+    "DDSCAPS_VIDEOMEMORY",
+    "DDSCAPS_VISIBLE",
+    "DDSCAPS_WRITEONLY",
+    "DDSCAPS_ZBUFFER",
+    "DDSCAPS_OWNDC",
+    "DDSCAPS_LIVEVIDEO",
+    "DDSCAPS_HWCODEC",
+    "DDSCAPS_MODEX",
+    "DDSCAPS_MIPMAP",
+    "DDSCAPS_RESERVED2",
+    "DDSCAPS_ALLOCONLOAD",
+    "DDSCAPS_VIDEOPORT",
+    "DDSCAPS_LOCALVIDMEM",
+    "DDSCAPS_NONLOCALVIDMEM",
+    "DDSCAPS_STANDARDVGAMODE",
+    "DDSCAPS_OPTIMIZED",
+])
+DDCAPS2 = Flags(DWORD, [
+    "DDSCAPS2_RESERVED4",
+    "DDSCAPS2_HARDWAREDEINTERLACE",
+    "DDSCAPS2_HINTDYNAMIC",
+    "DDSCAPS2_HINTSTATIC",
+    "DDSCAPS2_TEXTUREMANAGE",
+    "DDSCAPS2_RESERVED1",
+    "DDSCAPS2_RESERVED2",
+    "DDSCAPS2_OPAQUE",
+    "DDSCAPS2_HINTANTIALIASING",
+    "DDSCAPS2_CUBEMAP",
+    "DDSCAPS2_CUBEMAP_ALLFACES",
+    "DDSCAPS2_CUBEMAP_POSITIVEX",
+    "DDSCAPS2_CUBEMAP_NEGATIVEX",
+    "DDSCAPS2_CUBEMAP_POSITIVEY",
+    "DDSCAPS2_CUBEMAP_NEGATIVEY",
+    "DDSCAPS2_CUBEMAP_POSITIVEZ",
+    "DDSCAPS2_CUBEMAP_NEGATIVEZ",
+    "DDSCAPS2_MIPMAPSUBLEVEL",
+    "DDSCAPS2_D3DTEXTUREMANAGE",
+    "DDSCAPS2_DONOTPERSIST",
+    "DDSCAPS2_STEREOSURFACELEFT",
+    "DDSCAPS2_VOLUME",
+    "DDSCAPS2_NOTUSERLOCKABLE",
+    "DDSCAPS2_POINTS",
+    "DDSCAPS2_RTPATCHES",
+    "DDSCAPS2_NPATCHES",
+    "DDSCAPS2_RESERVED3",
+    "DDSCAPS2_DISCARDBACKBUFFER",
+    "DDSCAPS2_ENABLEALPHACHANNEL",
+    "DDSCAPS2_EXTENDEDFORMATPRIMARY",
+    "DDSCAPS2_ADDITIONALPRIMARY",
+])
+DDSCAPS3 = Flags(DWORD, [
+    "DDSCAPS3_MULTISAMPLE_MASK",
+    "DDSCAPS3_MULTISAMPLE_QUALITY_MASK",
+    "DDSCAPS3_MULTISAMPLE_QUALITY_SHIFT",
+    "DDSCAPS3_RESERVED1",
+    "DDSCAPS3_RESERVED2",
+    "DDSCAPS3_LIGHTWEIGHTMIPMAP",
+    "DDSCAPS3_AUTOGENMIPMAP",
+    "DDSCAPS3_DMAP",
+    "DDSCAPS3_CREATESHAREDRESOURCE",
+    "DDSCAPS3_READONLYRESOURCE",
+    "DDSCAPS3_OPENSHAREDRESOURCE",
+])
+
+DDCAPS = Flags(DWORD, [
+    "DDCAPS_3D",
+    "DDCAPS_ALIGNBOUNDARYDEST",
+    "DDCAPS_ALIGNSIZEDEST",
+    "DDCAPS_ALIGNBOUNDARYSRC",
+    "DDCAPS_ALIGNSIZESRC",
+    "DDCAPS_ALIGNSTRIDE",
+    "DDCAPS_BLT",
+    "DDCAPS_BLTQUEUE",
+    "DDCAPS_BLTFOURCC",
+    "DDCAPS_BLTSTRETCH",
+    "DDCAPS_GDI",
+    "DDCAPS_OVERLAY",
+    "DDCAPS_OVERLAYCANTCLIP",
+    "DDCAPS_OVERLAYFOURCC",
+    "DDCAPS_OVERLAYSTRETCH",
+    "DDCAPS_PALETTE",
+    "DDCAPS_PALETTEVSYNC",
+    "DDCAPS_READSCANLINE",
+    "DDCAPS_RESERVED1",
+    "DDCAPS_VBI",
+    "DDCAPS_ZBLTS",
+    "DDCAPS_ZOVERLAYS",
+    "DDCAPS_COLORKEY",
+    "DDCAPS_ALPHA",
+    "DDCAPS_COLORKEYHWASSIST",
+    "DDCAPS_NOHARDWARE",
+    "DDCAPS_BLTCOLORFILL",
+    "DDCAPS_BANKSWITCHED",
+    "DDCAPS_BLTDEPTHFILL",
+    "DDCAPS_CANCLIP",
+    "DDCAPS_CANCLIPSTRETCHED",
+    "DDCAPS_CANBLTSYSMEM",
+])
+
+DDCAPS2 = Flags(DWORD, [
+    "DDCAPS2_CERTIFIED",
+    "DDCAPS2_NO2DDURING3DSCENE",
+    "DDCAPS2_VIDEOPORT",
+    "DDCAPS2_AUTOFLIPOVERLAY",
+    "DDCAPS2_CANBOBINTERLEAVED",
+    "DDCAPS2_CANBOBNONINTERLEAVED",
+    "DDCAPS2_COLORCONTROLOVERLAY",
+    "DDCAPS2_COLORCONTROLPRIMARY",
+    "DDCAPS2_CANDROPZ16BIT",
+    "DDCAPS2_NONLOCALVIDMEM",
+    "DDCAPS2_NONLOCALVIDMEMCAPS",
+    "DDCAPS2_NOPAGELOCKREQUIRED",
+    "DDCAPS2_WIDESURFACES",
+    "DDCAPS2_CANFLIPODDEVEN",
+    "DDCAPS2_CANBOBHARDWARE",
+    "DDCAPS2_COPYFOURCC",
+    "DDCAPS2_PRIMARYGAMMA",
+    "DDCAPS2_CANRENDERWINDOWED",
+    "DDCAPS2_CANCALIBRATEGAMMA",
+    "DDCAPS2_FLIPINTERVAL",
+    "DDCAPS2_FLIPNOVSYNC",
+    "DDCAPS2_CANMANAGETEXTURE",
+    "DDCAPS2_TEXMANINNONLOCALVIDMEM",
+    "DDCAPS2_STEREO",
+    "DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL",
+    "DDCAPS2_RESERVED1",
+    "DDCAPS2_CANMANAGERESOURCE",
+    "DDCAPS2_DYNAMICTEXTURES",
+    "DDCAPS2_CANAUTOGENMIPMAP",
+    "DDCAPS2_CANSHARERESOURCE",
+])
+
+DDFXALPHACAPS = Flags(DWORD, [
+    "DDFXALPHACAPS_BLTALPHAEDGEBLEND",
+    "DDFXALPHACAPS_BLTALPHAPIXELS",
+    "DDFXALPHACAPS_BLTALPHAPIXELSNEG",
+    "DDFXALPHACAPS_BLTALPHASURFACES",
+    "DDFXALPHACAPS_BLTALPHASURFACESNEG",
+    "DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND",
+    "DDFXALPHACAPS_OVERLAYALPHAPIXELS",
+    "DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG",
+    "DDFXALPHACAPS_OVERLAYALPHASURFACES",
+    "DDFXALPHACAPS_OVERLAYALPHASURFACESNEG",
+])
+
+DDFXCAPS = Flags(DWORD, [
+    "DDFXCAPS_BLTARITHSTRETCHY",
+    "DDFXCAPS_BLTARITHSTRETCHYN",
+    "DDFXCAPS_BLTMIRRORLEFTRIGHT",
+    "DDFXCAPS_BLTMIRRORUPDOWN",
+    "DDFXCAPS_BLTROTATION",
+    "DDFXCAPS_BLTROTATION90",
+    "DDFXCAPS_BLTSHRINKX",
+    "DDFXCAPS_BLTSHRINKXN",
+    "DDFXCAPS_BLTSHRINKY",
+    "DDFXCAPS_BLTSHRINKYN",
+    "DDFXCAPS_BLTSTRETCHX",
+    "DDFXCAPS_BLTSTRETCHXN",
+    "DDFXCAPS_BLTSTRETCHY",
+    "DDFXCAPS_BLTSTRETCHYN",
+    "DDFXCAPS_OVERLAYARITHSTRETCHY",
+    "DDFXCAPS_OVERLAYARITHSTRETCHYN",
+    "DDFXCAPS_OVERLAYSHRINKX",
+    "DDFXCAPS_OVERLAYSHRINKXN",
+    "DDFXCAPS_OVERLAYSHRINKY",
+    "DDFXCAPS_OVERLAYSHRINKYN",
+    "DDFXCAPS_OVERLAYSTRETCHX",
+    "DDFXCAPS_OVERLAYSTRETCHXN",
+    "DDFXCAPS_OVERLAYSTRETCHY",
+    "DDFXCAPS_OVERLAYSTRETCHYN",
+    "DDFXCAPS_OVERLAYMIRRORLEFTRIGHT",
+    "DDFXCAPS_OVERLAYMIRRORUPDOWN",
+    "DDFXCAPS_OVERLAYDEINTERLACE",
+    "DDFXCAPS_BLTALPHA",
+    "DDFXCAPS_BLTFILTER",
+    "DDFXCAPS_OVERLAYALPHA",
+    "DDFXCAPS_OVERLAYFILTER",
+])
+
+DDSVCAPS = Flags(DWORD, [
+    "DDSVCAPS_RESERVED1",
+    "DDSVCAPS_RESERVED2",
+    "DDSVCAPS_RESERVED3",
+    "DDSVCAPS_RESERVED4",
+    "DDSVCAPS_STEREOSEQUENTIAL",
+])
+
+DDPCAPS = Flags(DWORD, [
+    "DDPCAPS_4BIT",
+    "DDPCAPS_8BITENTRIES",
+    "DDPCAPS_8BIT",
+    "DDPCAPS_INITIALIZE",
+    "DDPCAPS_PRIMARYSURFACE",
+    "DDPCAPS_PRIMARYSURFACELEFT",
+    "DDPCAPS_ALLOW256",
+    "DDPCAPS_VSYNC",
+    "DDPCAPS_1BIT",
+    "DDPCAPS_2BIT",
+    "DDPCAPS_ALPHA",
+])
+
+DDSPD = Flags(DWORD, [
+    "DDSPD_IUNKNOWNPOINTER",
+    "DDSPD_VOLATILE",
+])
+
+DDBD = Flags(DWORD, [
+    "DDBD_1",
+    "DDBD_2",
+    "DDBD_4",
+    "DDBD_8",
+    "DDBD_16",
+    "DDBD_24",
+    "DDBD_32",
+])
+
+DDCKEY = Flags(DWORD, [
+    "DDCKEY_COLORSPACE",
+    "DDCKEY_DESTBLT",
+    "DDCKEY_DESTOVERLAY",
+    "DDCKEY_SRCBLT",
+    "DDCKEY_SRCOVERLAY",
+])
+
+DDCKEYCAPS = Flags(DWORD, [
+    "DDCKEYCAPS_DESTBLT",
+    "DDCKEYCAPS_DESTBLTCLRSPACE",
+    "DDCKEYCAPS_DESTBLTCLRSPACEYUV",
+    "DDCKEYCAPS_DESTBLTYUV",
+    "DDCKEYCAPS_DESTOVERLAY",
+    "DDCKEYCAPS_DESTOVERLAYCLRSPACE",
+    "DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV",
+    "DDCKEYCAPS_DESTOVERLAYONEACTIVE",
+    "DDCKEYCAPS_DESTOVERLAYYUV",
+    "DDCKEYCAPS_SRCBLT",
+    "DDCKEYCAPS_SRCBLTCLRSPACE",
+    "DDCKEYCAPS_SRCBLTCLRSPACEYUV",
+    "DDCKEYCAPS_SRCBLTYUV",
+    "DDCKEYCAPS_SRCOVERLAY",
+    "DDCKEYCAPS_SRCOVERLAYCLRSPACE",
+    "DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV",
+    "DDCKEYCAPS_SRCOVERLAYONEACTIVE",
+    "DDCKEYCAPS_SRCOVERLAYYUV",
+    "DDCKEYCAPS_NOCOSTOVERLAY",
+])
+
+DDPF = Flags(DWORD, [
+    "DDPF_ALPHAPIXELS",
+    "DDPF_ALPHA",
+    "DDPF_FOURCC",
+    "DDPF_PALETTEINDEXED4",
+    "DDPF_PALETTEINDEXEDTO8",
+    "DDPF_PALETTEINDEXED8",
+    "DDPF_RGB",
+    "DDPF_COMPRESSED",
+    "DDPF_RGBTOYUV",
+    "DDPF_YUV",
+    "DDPF_ZBUFFER",
+    "DDPF_PALETTEINDEXED1",
+    "DDPF_PALETTEINDEXED2",
+    "DDPF_ZPIXELS",
+    "DDPF_STENCILBUFFER",
+    "DDPF_ALPHAPREMULT",
+    "DDPF_LUMINANCE",
+    "DDPF_BUMPLUMINANCE",
+    "DDPF_BUMPDUDV",
+])
+
+DDENUMSURFACES = Flags(DWORD, [
+    "DDENUMSURFACES_ALL",
+    "DDENUMSURFACES_MATCH",
+    "DDENUMSURFACES_NOMATCH",
+    "DDENUMSURFACES_CANBECREATED",
+    "DDENUMSURFACES_DOESEXIST",
+])
+
+DDSDM = Flags(DWORD, [
+    "DDSDM_STANDARDVGAMODE",
+])
+
+DDEDM = Flags(DWORD, [
+    "DDEDM_REFRESHRATES",
+    "DDEDM_STANDARDVGAMODES",
+])
+
+DDSCL = Flags(DWORD, [
+    "DDSCL_FULLSCREEN",
+    "DDSCL_ALLOWREBOOT",
+    "DDSCL_NOWINDOWCHANGES",
+    "DDSCL_NORMAL",
+    "DDSCL_EXCLUSIVE",
+    "DDSCL_ALLOWMODEX",
+    "DDSCL_SETFOCUSWINDOW",
+    "DDSCL_SETDEVICEWINDOW",
+    "DDSCL_CREATEDEVICEWINDOW",
+    "DDSCL_MULTITHREADED",
+    "DDSCL_FPUSETUP",
+    "DDSCL_FPUPRESERVE",
+])
+
+DDBLT = Flags(DWORD, [
+    "DDBLT_ALPHADEST",
+    "DDBLT_ALPHADESTCONSTOVERRIDE",
+    "DDBLT_ALPHADESTNEG",
+    "DDBLT_ALPHADESTSURFACEOVERRIDE",
+    "DDBLT_ALPHAEDGEBLEND",
+    "DDBLT_ALPHASRC",
+    "DDBLT_ALPHASRCCONSTOVERRIDE",
+    "DDBLT_ALPHASRCNEG",
+    "DDBLT_ALPHASRCSURFACEOVERRIDE",
+    "DDBLT_ASYNC",
+    "DDBLT_COLORFILL",
+    "DDBLT_DDFX",
+    "DDBLT_DDROPS",
+    "DDBLT_KEYDEST",
+    "DDBLT_KEYDESTOVERRIDE",
+    "DDBLT_KEYSRC",
+    "DDBLT_KEYSRCOVERRIDE",
+    "DDBLT_ROP",
+    "DDBLT_ROTATIONANGLE",
+    "DDBLT_ZBUFFER",
+    "DDBLT_ZBUFFERDESTCONSTOVERRIDE",
+    "DDBLT_ZBUFFERDESTOVERRIDE",
+    "DDBLT_ZBUFFERSRCCONSTOVERRIDE",
+    "DDBLT_ZBUFFERSRCOVERRIDE",
+    "DDBLT_WAIT",
+    "DDBLT_DEPTHFILL",
+    "DDBLT_DONOTWAIT",
+    "DDBLT_PRESENTATION",
+    "DDBLT_LAST_PRESENTATION",
+    "DDBLT_EXTENDED_FLAGS",
+    "DDBLT_EXTENDED_LINEAR_CONTENT",
+])
+
+DDBLTFAST = Flags(DWORD, [
+    "DDBLTFAST_NOCOLORKEY",
+    "DDBLTFAST_SRCCOLORKEY",
+    "DDBLTFAST_DESTCOLORKEY",
+    "DDBLTFAST_WAIT",
+    "DDBLTFAST_DONOTWAIT",
+])
+
+DDFLIP = Flags(DWORD, [
+    "DDFLIP_WAIT",
+    "DDFLIP_EVEN",
+    "DDFLIP_ODD",
+    "DDFLIP_NOVSYNC",
+    "DDFLIP_INTERVAL2",
+    "DDFLIP_INTERVAL3",
+    "DDFLIP_INTERVAL4",
+    "DDFLIP_STEREO",
+    "DDFLIP_DONOTWAIT",
+])
+
+DDOVER = Flags(DWORD, [
+    "DDOVER_ALPHADEST",
+    "DDOVER_ALPHADESTCONSTOVERRIDE",
+    "DDOVER_ALPHADESTNEG",
+    "DDOVER_ALPHADESTSURFACEOVERRIDE",
+    "DDOVER_ALPHAEDGEBLEND",
+    "DDOVER_ALPHASRC",
+    "DDOVER_ALPHASRCCONSTOVERRIDE",
+    "DDOVER_ALPHASRCNEG",
+    "DDOVER_ALPHASRCSURFACEOVERRIDE",
+    "DDOVER_HIDE",
+    "DDOVER_KEYDEST",
+    "DDOVER_KEYDESTOVERRIDE",
+    "DDOVER_KEYSRC",
+    "DDOVER_KEYSRCOVERRIDE",
+    "DDOVER_SHOW",
+    "DDOVER_ADDDIRTYRECT",
+    "DDOVER_REFRESHDIRTYRECTS",
+    "DDOVER_REFRESHALL",
+    "DDOVER_DDFX",
+    "DDOVER_AUTOFLIP",
+    "DDOVER_BOB",
+    "DDOVER_OVERRIDEBOBWEAVE",
+    "DDOVER_INTERLEAVED",
+    "DDOVER_BOBHARDWARE",
+    "DDOVER_ARGBSCALEFACTORS",
+    "DDOVER_DEGRADEARGBSCALING",
+])
+
+DDSETSURFACEDESC = Flags(DWORD, [
+    #"DDSETSURFACEDESC_RECREATEDC",
+    #"DDSETSURFACEDESC_PRESERVEDC",
+])
+
+DDLOCK = Flags(DWORD, [
+    "DDLOCK_SURFACEMEMORYPTR",
+    "DDLOCK_WAIT",
+    "DDLOCK_EVENT",
+    "DDLOCK_READONLY",
+    "DDLOCK_WRITEONLY",
+    "DDLOCK_NOSYSLOCK",
+    "DDLOCK_NOOVERWRITE",
+    "DDLOCK_DISCARDCONTENTS",
+    "DDLOCK_OKTOSWAP",
+    "DDLOCK_DONOTWAIT",
+    "DDLOCK_HASVOLUMETEXTUREBOXRECT",
+    "DDLOCK_NODIRTYUPDATE",
+])
+
+DDBLTFX = Flags(DWORD, [
+    "DDBLTFX_ARITHSTRETCHY",
+    "DDBLTFX_MIRRORLEFTRIGHT",
+    "DDBLTFX_MIRRORUPDOWN",
+    "DDBLTFX_NOTEARING",
+    "DDBLTFX_ROTATE180",
+    "DDBLTFX_ROTATE270",
+    "DDBLTFX_ROTATE90",
+    "DDBLTFX_ZBUFFERRANGE",
+    "DDBLTFX_ZBUFFERBASEDEST",
+])
+
+DDOVERFX = Flags(DWORD, [
+    "DDOVERFX_ARITHSTRETCHY",
+    "DDOVERFX_MIRRORLEFTRIGHT",
+    "DDOVERFX_MIRRORUPDOWN",
+    "DDOVERFX_DEINTERLACE",
+])
+
+DDWAITVB = Flags(DWORD, [
+    "DDWAITVB_BLOCKBEGIN",
+    "DDWAITVB_BLOCKBEGINEVENT",
+    "DDWAITVB_BLOCKEND",
+])
+
+DDGFS = Flags(DWORD, [
+    "DDGFS_CANFLIP",
+    "DDGFS_ISFLIPDONE",
+])
+
+DDGBS = Flags(DWORD, [
+    "DDGBS_CANBLT",
+    "DDGBS_ISBLTDONE",
+])
+
+DDENUMOVERLAYZ = Flags(DWORD, [
+    "DDENUMOVERLAYZ_BACKTOFRONT",
+    "DDENUMOVERLAYZ_FRONTTOBACK",
+])
+
+DDOVERZ = Flags(DWORD, [
+    "DDOVERZ_SENDTOFRONT",
+    "DDOVERZ_SENDTOBACK",
+    "DDOVERZ_MOVEFORWARD",
+    "DDOVERZ_MOVEBACKWARD",
+    "DDOVERZ_INSERTINFRONTOF",
+    "DDOVERZ_INSERTINBACKOF",
+])
+
+DDSGR = Flags(DWORD, [
+    "DDSGR_CALIBRATE",
+])
+
+DDSMT = Flags(DWORD, [
+    "DDSMT_ISTESTREQUIRED",
+])
+
+DDEM = Flags(DWORD, [
+    "DDEM_MODEPASSED",
+    "DDEM_MODEFAILED",
+])
+
+HRESULT = Enum("HRESULT", [
+    "DD_OK",
+    "DD_FALSE",
+    "DDERR_ALREADYINITIALIZED",
+    "DDERR_CANNOTATTACHSURFACE",
+    "DDERR_CANNOTDETACHSURFACE",
+    "DDERR_CURRENTLYNOTAVAIL",
+    "DDERR_EXCEPTION",
+    "DDERR_GENERIC",
+    "DDERR_HEIGHTALIGN",
+    "DDERR_INCOMPATIBLEPRIMARY",
+    "DDERR_INVALIDCAPS",
+    "DDERR_INVALIDCLIPLIST",
+    "DDERR_INVALIDMODE",
+    "DDERR_INVALIDOBJECT",
+    "DDERR_INVALIDPARAMS",
+    "DDERR_INVALIDPIXELFORMAT",
+    "DDERR_INVALIDRECT",
+    "DDERR_LOCKEDSURFACES",
+    "DDERR_NO3D",
+    "DDERR_NOALPHAHW",
+    "DDERR_NOSTEREOHARDWARE",
+    "DDERR_NOSURFACELEFT",
+    "DDERR_NOCLIPLIST",
+    "DDERR_NOCOLORCONVHW",
+    "DDERR_NOCOOPERATIVELEVELSET",
+    "DDERR_NOCOLORKEY",
+    "DDERR_NOCOLORKEYHW",
+    "DDERR_NODIRECTDRAWSUPPORT",
+    "DDERR_NOEXCLUSIVEMODE",
+    "DDERR_NOFLIPHW",
+    "DDERR_NOGDI",
+    "DDERR_NOMIRRORHW",
+    "DDERR_NOTFOUND",
+    "DDERR_NOOVERLAYHW",
+    "DDERR_OVERLAPPINGRECTS",
+    "DDERR_NORASTEROPHW",
+    "DDERR_NOROTATIONHW",
+    "DDERR_NOSTRETCHHW",
+    "DDERR_NOT4BITCOLOR",
+    "DDERR_NOT4BITCOLORINDEX",
+    "DDERR_NOT8BITCOLOR",
+    "DDERR_NOTEXTUREHW",
+    "DDERR_NOVSYNCHW",
+    "DDERR_NOZBUFFERHW",
+    "DDERR_NOZOVERLAYHW",
+    "DDERR_OUTOFCAPS",
+    "DDERR_OUTOFMEMORY",
+    "DDERR_OUTOFVIDEOMEMORY",
+    "DDERR_OVERLAYCANTCLIP",
+    "DDERR_OVERLAYCOLORKEYONLYONEACTIVE",
+    "DDERR_PALETTEBUSY",
+    "DDERR_COLORKEYNOTSET",
+    "DDERR_SURFACEALREADYATTACHED",
+    "DDERR_SURFACEALREADYDEPENDENT",
+    "DDERR_SURFACEBUSY",
+    "DDERR_CANTLOCKSURFACE",
+    "DDERR_SURFACEISOBSCURED",
+    "DDERR_SURFACELOST",
+    "DDERR_SURFACENOTATTACHED",
+    "DDERR_TOOBIGHEIGHT",
+    "DDERR_TOOBIGSIZE",
+    "DDERR_TOOBIGWIDTH",
+    "DDERR_UNSUPPORTED",
+    "DDERR_UNSUPPORTEDFORMAT",
+    "DDERR_UNSUPPORTEDMASK",
+    "DDERR_INVALIDSTREAM",
+    "DDERR_VERTICALBLANKINPROGRESS",
+    "DDERR_WASSTILLDRAWING",
+    "DDERR_DDSCAPSCOMPLEXREQUIRED",
+    "DDERR_XALIGN",
+    "DDERR_INVALIDDIRECTDRAWGUID",
+    "DDERR_DIRECTDRAWALREADYCREATED",
+    "DDERR_NODIRECTDRAWHW",
+    "DDERR_PRIMARYSURFACEALREADYEXISTS",
+    "DDERR_NOEMULATION",
+    "DDERR_REGIONTOOSMALL",
+    "DDERR_CLIPPERISUSINGHWND",
+    "DDERR_NOCLIPPERATTACHED",
+    "DDERR_NOHWND",
+    "DDERR_HWNDSUBCLASSED",
+    "DDERR_HWNDALREADYSET",
+    "DDERR_NOPALETTEATTACHED",
+    "DDERR_NOPALETTEHW",
+    "DDERR_BLTFASTCANTCLIP",
+    "DDERR_NOBLTHW",
+    "DDERR_NODDROPSHW",
+    "DDERR_OVERLAYNOTVISIBLE",
+    "DDERR_NOOVERLAYDEST",
+    "DDERR_INVALIDPOSITION",
+    "DDERR_NOTAOVERLAYSURFACE",
+    "DDERR_EXCLUSIVEMODEALREADYSET",
+    "DDERR_NOTFLIPPABLE",
+    "DDERR_CANTDUPLICATE",
+    "DDERR_NOTLOCKED",
+    "DDERR_CANTCREATEDC",
+    "DDERR_NODC",
+    "DDERR_WRONGMODE",
+    "DDERR_IMPLICITLYCREATED",
+    "DDERR_NOTPALETTIZED",
+    "DDERR_UNSUPPORTEDMODE",
+    "DDERR_NOMIPMAPHW",
+    "DDERR_INVALIDSURFACETYPE",
+    "DDERR_NOOPTIMIZEHW",
+    "DDERR_NOTLOADED",
+    "DDERR_NOFOCUSWINDOW",
+    "DDERR_NOTONMIPMAPSUBLEVEL",
+    "DDERR_DCALREADYCREATED",
+    "DDERR_NONONLOCALVIDMEM",
+    "DDERR_CANTPAGELOCK",
+    "DDERR_CANTPAGEUNLOCK",
+    "DDERR_NOTPAGELOCKED",
+    "DDERR_MOREDATA",
+    "DDERR_EXPIRED",
+    "DDERR_TESTFINISHED",
+    "DDERR_NEWMODE",
+    "DDERR_D3DNOTINITIALIZED",
+    "DDERR_VIDEONOTACTIVE",
+    "DDERR_NOMONITORINFORMATION",
+    "DDERR_NODRIVERSUPPORT",
+    "DDERR_DEVICEDOESNTOWNSURFACE",
+    "DDERR_NOTINITIALIZED",
+])
+
+LPDDENUMMODESCALLBACK = Pointer(Function(HRESULT, "LPDDENUMMODESCALLBACK", [LPDDSURFACEDESC, LPVOID]))
+LPDDENUMMODESCALLBACK2 = Pointer(Function(HRESULT, "LPDDENUMMODESCALLBACK2", [LPDDSURFACEDESC2, LPVOID]))
+LPDDENUMSURFACESCALLBACK = Pointer(Function(HRESULT, "LPDDENUMSURFACESCALLBACK", [LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, LPVOID]))
+LPDDENUMSURFACESCALLBACK2 = Pointer(Function(HRESULT, "LPDDENUMSURFACESCALLBACK2", [LPDIRECTDRAWSURFACE4, LPDDSURFACEDESC2, LPVOID]))
+LPDDENUMSURFACESCALLBACK7 = Pointer(Function(HRESULT, "LPDDENUMSURFACESCALLBACK7", [LPDIRECTDRAWSURFACE7, LPDDSURFACEDESC2, LPVOID]))
+
+IDirectDraw.methods += [
+    Method(HRESULT, "Compact", []),
+    Method(HRESULT, "CreateClipper", [DWORD, Pointer(LPDIRECTDRAWCLIPPER) , Pointer(IUnknown) ]),
+    Method(HRESULT, "CreatePalette", [DWORD, LPPALETTEENTRY, Pointer(LPDIRECTDRAWPALETTE) , Pointer(IUnknown) ]),
+    Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC, Pointer(LPDIRECTDRAWSURFACE) , Pointer(IUnknown) ]),
+    Method(HRESULT, "DuplicateSurface", [ LPDIRECTDRAWSURFACE, Pointer(LPDIRECTDRAWSURFACE) ]),
+    Method(HRESULT, "EnumDisplayModes", [ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ]),
+    Method(HRESULT, "EnumSurfaces", [DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ]),
+    Method(HRESULT, "FlipToGDISurface", []),
+    Method(HRESULT, "GetCaps", [ LPDDCAPS, LPDDCAPS]),
+    Method(HRESULT, "GetDisplayMode", [ LPDDSURFACEDESC]),
+    Method(HRESULT, "GetFourCCCodes", [LPDWORD, LPDWORD ]),
+    Method(HRESULT, "GetGDISurface", [Pointer(LPDIRECTDRAWSURFACE) ]),
+    Method(HRESULT, "GetMonitorFrequency", [LPDWORD]),
+    Method(HRESULT, "GetScanLine", [LPDWORD]),
+    Method(HRESULT, "GetVerticalBlankStatus", [LPBOOL ]),
+    Method(HRESULT, "Initialize", [Pointer(GUID) ]),
+    Method(HRESULT, "RestoreDisplayMode", []),
+    Method(HRESULT, "SetCooperativeLevel", [HWND, DWORD]),
+    Method(HRESULT, "SetDisplayMode", [DWORD, DWORD,DWORD]),
+    Method(HRESULT, "WaitForVerticalBlank", [DWORD, HANDLE ]),
+]
+
+IDirectDraw2.methods += [
+    Method(HRESULT, "Compact", []),
+    Method(HRESULT, "CreateClipper", [DWORD, Pointer(LPDIRECTDRAWCLIPPER) , Pointer(IUnknown) ]),
+    Method(HRESULT, "CreatePalette", [DWORD, LPPALETTEENTRY, Pointer(LPDIRECTDRAWPALETTE) , Pointer(IUnknown) ]),
+    Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC, Pointer(LPDIRECTDRAWSURFACE) , Pointer(IUnknown) ]),
+    Method(HRESULT, "DuplicateSurface", [ LPDIRECTDRAWSURFACE, Pointer(LPDIRECTDRAWSURFACE) ]),
+    Method(HRESULT, "EnumDisplayModes", [ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ]),
+    Method(HRESULT, "EnumSurfaces", [DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ]),
+    Method(HRESULT, "FlipToGDISurface", []),
+    Method(HRESULT, "GetCaps", [ LPDDCAPS, LPDDCAPS]),
+    Method(HRESULT, "GetDisplayMode", [ LPDDSURFACEDESC]),
+    Method(HRESULT, "GetFourCCCodes", [LPDWORD, LPDWORD ]),
+    Method(HRESULT, "GetGDISurface", [Pointer(LPDIRECTDRAWSURFACE) ]),
+    Method(HRESULT, "GetMonitorFrequency", [LPDWORD]),
+    Method(HRESULT, "GetScanLine", [LPDWORD]),
+    Method(HRESULT, "GetVerticalBlankStatus", [LPBOOL ]),
+    Method(HRESULT, "Initialize", [Pointer(GUID) ]),
+    Method(HRESULT, "RestoreDisplayMode", []),
+    Method(HRESULT, "SetCooperativeLevel", [HWND, DWORD]),
+    Method(HRESULT, "SetDisplayMode", [DWORD, DWORD,DWORD, DWORD, DWORD]),
+    Method(HRESULT, "WaitForVerticalBlank", [DWORD, HANDLE ]),
+    Method(HRESULT, "GetAvailableVidMem", [LPDDSCAPS, LPDWORD, LPDWORD]),
+]
+
+IDirectDraw4.methods += [
+    Method(HRESULT, "Compact", []),
+    Method(HRESULT, "CreateClipper", [DWORD, Pointer(LPDIRECTDRAWCLIPPER) , Pointer(IUnknown) ]),
+    Method(HRESULT, "CreatePalette", [DWORD, LPPALETTEENTRY, Pointer(LPDIRECTDRAWPALETTE) , Pointer(IUnknown) ]),
+    Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC2, Pointer(LPDIRECTDRAWSURFACE4) , Pointer(IUnknown) ]),
+    Method(HRESULT, "DuplicateSurface", [ LPDIRECTDRAWSURFACE4, Pointer(LPDIRECTDRAWSURFACE4) ]),
+    Method(HRESULT, "EnumDisplayModes", [ DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2 ]),
+    Method(HRESULT, "EnumSurfaces", [DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK2 ]),
+    Method(HRESULT, "FlipToGDISurface", []),
+    Method(HRESULT, "GetCaps", [ LPDDCAPS, LPDDCAPS]),
+    Method(HRESULT, "GetDisplayMode", [ LPDDSURFACEDESC2]),
+    Method(HRESULT, "GetFourCCCodes", [LPDWORD, LPDWORD ]),
+    Method(HRESULT, "GetGDISurface", [Pointer(LPDIRECTDRAWSURFACE4) ]),
+    Method(HRESULT, "GetMonitorFrequency", [LPDWORD]),
+    Method(HRESULT, "GetScanLine", [LPDWORD]),
+    Method(HRESULT, "GetVerticalBlankStatus", [LPBOOL ]),
+    Method(HRESULT, "Initialize", [Pointer(GUID) ]),
+    Method(HRESULT, "RestoreDisplayMode", []),
+    Method(HRESULT, "SetCooperativeLevel", [HWND, DWORD]),
+    Method(HRESULT, "SetDisplayMode", [DWORD, DWORD,DWORD, DWORD, DWORD]),
+    Method(HRESULT, "WaitForVerticalBlank", [DWORD, HANDLE ]),
+    Method(HRESULT, "GetAvailableVidMem", [LPDDSCAPS2, LPDWORD, LPDWORD]),
+    Method(HRESULT, "GetSurfaceFromDC", [HDC, Pointer(LPDIRECTDRAWSURFACE4)]),
+    Method(HRESULT, "RestoreAllSurfaces", []),
+    Method(HRESULT, "TestCooperativeLevel", []),
+    Method(HRESULT, "GetDeviceIdentifier", [LPDDDEVICEIDENTIFIER, DWORD ]),
+]
+
+IDirectDraw7.methods += [
+    Method(HRESULT, "Compact", []),
+    Method(HRESULT, "CreateClipper", [DWORD, Pointer(LPDIRECTDRAWCLIPPER) , Pointer(IUnknown) ]),
+    Method(HRESULT, "CreatePalette", [DWORD, LPPALETTEENTRY, Pointer(LPDIRECTDRAWPALETTE) , Pointer(IUnknown) ]),
+    Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC2, Pointer(LPDIRECTDRAWSURFACE7) , Pointer(IUnknown) ]),
+    Method(HRESULT, "DuplicateSurface", [ LPDIRECTDRAWSURFACE7, Pointer(LPDIRECTDRAWSURFACE7) ]),
+    Method(HRESULT, "EnumDisplayModes", [ DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2 ]),
+    Method(HRESULT, "EnumSurfaces", [DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK7 ]),
+    Method(HRESULT, "FlipToGDISurface", []),
+    Method(HRESULT, "GetCaps", [ LPDDCAPS, LPDDCAPS]),
+    Method(HRESULT, "GetDisplayMode", [ LPDDSURFACEDESC2]),
+    Method(HRESULT, "GetFourCCCodes", [LPDWORD, LPDWORD ]),
+    Method(HRESULT, "GetGDISurface", [Pointer(LPDIRECTDRAWSURFACE7) ]),
+    Method(HRESULT, "GetMonitorFrequency", [LPDWORD]),
+    Method(HRESULT, "GetScanLine", [LPDWORD]),
+    Method(HRESULT, "GetVerticalBlankStatus", [LPBOOL ]),
+    Method(HRESULT, "Initialize", [Pointer(GUID) ]),
+    Method(HRESULT, "RestoreDisplayMode", []),
+    Method(HRESULT, "SetCooperativeLevel", [HWND, DWORD]),
+    Method(HRESULT, "SetDisplayMode", [DWORD, DWORD,DWORD, DWORD, DWORD]),
+    Method(HRESULT, "WaitForVerticalBlank", [DWORD, HANDLE ]),
+    Method(HRESULT, "GetAvailableVidMem", [LPDDSCAPS2, LPDWORD, LPDWORD]),
+    Method(HRESULT, "GetSurfaceFromDC", [HDC, Pointer(LPDIRECTDRAWSURFACE7)]),
+    Method(HRESULT, "RestoreAllSurfaces", []),
+    Method(HRESULT, "TestCooperativeLevel", []),
+    Method(HRESULT, "GetDeviceIdentifier", [LPDDDEVICEIDENTIFIER2, DWORD ]),
+    Method(HRESULT, "StartModeTest", [LPSIZE, DWORD, DWORD ]),
+    Method(HRESULT, "EvaluateMode", [DWORD, Pointer(DWORD) ]),
+]
+
+IDirectDrawPalette.methods += [
+    Method(HRESULT, "GetCaps", [LPDWORD]),
+    Method(HRESULT, "GetEntries", [DWORD,DWORD,DWORD,LPPALETTEENTRY]),
+    Method(HRESULT, "Initialize", [LPDIRECTDRAW, DWORD, LPPALETTEENTRY]),
+    Method(HRESULT, "SetEntries", [DWORD,DWORD,DWORD,LPPALETTEENTRY]),
+]
+
+IDirectDrawClipper.methods += [
+    Method(HRESULT, "GetClipList", [LPRECT, LPRGNDATA, LPDWORD]),
+    Method(HRESULT, "GetHWnd", [Pointer(HWND) ]),
+    Method(HRESULT, "Initialize", [LPDIRECTDRAW, DWORD]),
+    Method(HRESULT, "IsClipListChanged", [Pointer(BOOL) ]),
+    Method(HRESULT, "SetClipList", [LPRGNDATA,DWORD]),
+    Method(HRESULT, "SetHWnd", [DWORD, HWND ]),
+]
+
+
+IDirectDrawSurface.methods += [
+    Method(HRESULT, "AddAttachedSurface", [LPDIRECTDRAWSURFACE]),
+    Method(HRESULT, "AddOverlayDirtyRect", [LPRECT]),
+    Method(HRESULT, "Blt", [LPRECT,LPDIRECTDRAWSURFACE, LPRECT,DWORD, LPDDBLTFX]),
+    Method(HRESULT, "BltBatch", [LPDDBLTBATCH, DWORD, DWORD ]),
+    Method(HRESULT, "BltFast", [DWORD,DWORD,LPDIRECTDRAWSURFACE, LPRECT,DWORD]),
+    Method(HRESULT, "DeleteAttachedSurface", [DWORD,LPDIRECTDRAWSURFACE]),
+    Method(HRESULT, "EnumAttachedSurfaces", [LPVOID,LPDDENUMSURFACESCALLBACK]),
+    Method(HRESULT, "EnumOverlayZOrders", [DWORD,LPVOID,LPDDENUMSURFACESCALLBACK]),
+    Method(HRESULT, "Flip", [LPDIRECTDRAWSURFACE, DWORD]),
+    Method(HRESULT, "GetAttachedSurface", [LPDDSCAPS, Pointer(LPDIRECTDRAWSURFACE) ]),
+    Method(HRESULT, "GetBltStatus", [DWORD]),
+    Method(HRESULT, "GetCaps", [LPDDSCAPS]),
+    Method(HRESULT, "GetClipper", [Pointer(LPDIRECTDRAWCLIPPER) ]),
+    Method(HRESULT, "GetColorKey", [DWORD, LPDDCOLORKEY]),
+    Method(HRESULT, "GetDC", [Pointer(HDC) ]),
+    Method(HRESULT, "GetFlipStatus", [DWORD]),
+    Method(HRESULT, "GetOverlayPosition", [LPLONG, LPLONG ]),
+    Method(HRESULT, "GetPalette", [Pointer(LPDIRECTDRAWPALETTE) ]),
+    Method(HRESULT, "GetPixelFormat", [LPDDPIXELFORMAT]),
+    Method(HRESULT, "GetSurfaceDesc", [LPDDSURFACEDESC]),
+    Method(HRESULT, "Initialize", [LPDIRECTDRAW, LPDDSURFACEDESC]),
+    Method(HRESULT, "IsLost", []),
+    Method(HRESULT, "Lock", [LPRECT,LPDDSURFACEDESC,DWORD,HANDLE]),
+    Method(HRESULT, "ReleaseDC", [HDC]),
+    Method(HRESULT, "Restore", []),
+    Method(HRESULT, "SetClipper", [LPDIRECTDRAWCLIPPER]),
+    Method(HRESULT, "SetColorKey", [DWORD, LPDDCOLORKEY]),
+    Method(HRESULT, "SetOverlayPosition", [LONG, LONG ]),
+    Method(HRESULT, "SetPalette", [LPDIRECTDRAWPALETTE]),
+    Method(HRESULT, "Unlock", [LPVOID]),
+    Method(HRESULT, "UpdateOverlay", [LPRECT, LPDIRECTDRAWSURFACE,LPRECT,DWORD, LPDDOVERLAYFX]),
+    Method(HRESULT, "UpdateOverlayDisplay", [DWORD]),
+    Method(HRESULT, "UpdateOverlayZOrder", [DWORD, LPDIRECTDRAWSURFACE]),
+]
+
+IDirectDrawSurface2.methods += [
+    Method(HRESULT, "AddAttachedSurface", [LPDIRECTDRAWSURFACE2]),
+    Method(HRESULT, "AddOverlayDirtyRect", [LPRECT]),
+    Method(HRESULT, "Blt", [LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX]),
+    Method(HRESULT, "BltBatch", [LPDDBLTBATCH, DWORD, DWORD ]),
+    Method(HRESULT, "BltFast", [DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD]),
+    Method(HRESULT, "DeleteAttachedSurface", [DWORD,LPDIRECTDRAWSURFACE2]),
+    Method(HRESULT, "EnumAttachedSurfaces", [LPVOID,LPDDENUMSURFACESCALLBACK]),
+    Method(HRESULT, "EnumOverlayZOrders", [DWORD,LPVOID,LPDDENUMSURFACESCALLBACK]),
+    Method(HRESULT, "Flip", [LPDIRECTDRAWSURFACE2, DWORD]),
+    Method(HRESULT, "GetAttachedSurface", [LPDDSCAPS, Pointer(LPDIRECTDRAWSURFACE2) ]),
+    Method(HRESULT, "GetBltStatus", [DWORD]),
+    Method(HRESULT, "GetCaps", [LPDDSCAPS]),
+    Method(HRESULT, "GetClipper", [Pointer(LPDIRECTDRAWCLIPPER) ]),
+    Method(HRESULT, "GetColorKey", [DWORD, LPDDCOLORKEY]),
+    Method(HRESULT, "GetDC", [Pointer(HDC) ]),
+    Method(HRESULT, "GetFlipStatus", [DWORD]),
+    Method(HRESULT, "GetOverlayPosition", [LPLONG, LPLONG ]),
+    Method(HRESULT, "GetPalette", [Pointer(LPDIRECTDRAWPALETTE) ]),
+    Method(HRESULT, "GetPixelFormat", [LPDDPIXELFORMAT]),
+    Method(HRESULT, "GetSurfaceDesc", [LPDDSURFACEDESC]),
+    Method(HRESULT, "Initialize", [LPDIRECTDRAW, LPDDSURFACEDESC]),
+    Method(HRESULT, "IsLost", []),
+    Method(HRESULT, "Lock", [LPRECT,LPDDSURFACEDESC,DWORD,HANDLE]),
+    Method(HRESULT, "ReleaseDC", [HDC]),
+    Method(HRESULT, "Restore", []),
+    Method(HRESULT, "SetClipper", [LPDIRECTDRAWCLIPPER]),
+    Method(HRESULT, "SetColorKey", [DWORD, LPDDCOLORKEY]),
+    Method(HRESULT, "SetOverlayPosition", [LONG, LONG ]),
+    Method(HRESULT, "SetPalette", [LPDIRECTDRAWPALETTE]),
+    Method(HRESULT, "Unlock", [LPVOID]),
+    Method(HRESULT, "UpdateOverlay", [LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX]),
+    Method(HRESULT, "UpdateOverlayDisplay", [DWORD]),
+    Method(HRESULT, "UpdateOverlayZOrder", [DWORD, LPDIRECTDRAWSURFACE2]),
+    Method(HRESULT, "GetDDInterface", [Pointer(LPVOID) ]),
+    Method(HRESULT, "PageLock", [DWORD]),
+    Method(HRESULT, "PageUnlock", [DWORD]),
+]
+
+IDirectDrawSurface3.methods += [
+    Method(HRESULT, "AddAttachedSurface", [LPDIRECTDRAWSURFACE3]),
+    Method(HRESULT, "AddOverlayDirtyRect", [LPRECT]),
+    Method(HRESULT, "Blt", [LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX]),
+    Method(HRESULT, "BltBatch", [LPDDBLTBATCH, DWORD, DWORD ]),
+    Method(HRESULT, "BltFast", [DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD]),
+    Method(HRESULT, "DeleteAttachedSurface", [DWORD,LPDIRECTDRAWSURFACE3]),
+    Method(HRESULT, "EnumAttachedSurfaces", [LPVOID,LPDDENUMSURFACESCALLBACK]),
+    Method(HRESULT, "EnumOverlayZOrders", [DWORD,LPVOID,LPDDENUMSURFACESCALLBACK]),
+    Method(HRESULT, "Flip", [LPDIRECTDRAWSURFACE3, DWORD]),
+    Method(HRESULT, "GetAttachedSurface", [LPDDSCAPS, Pointer(LPDIRECTDRAWSURFACE3) ]),
+    Method(HRESULT, "GetBltStatus", [DWORD]),
+    Method(HRESULT, "GetCaps", [LPDDSCAPS]),
+    Method(HRESULT, "GetClipper", [Pointer(LPDIRECTDRAWCLIPPER) ]),
+    Method(HRESULT, "GetColorKey", [DWORD, LPDDCOLORKEY]),
+    Method(HRESULT, "GetDC", [Pointer(HDC) ]),
+    Method(HRESULT, "GetFlipStatus", [DWORD]),
+    Method(HRESULT, "GetOverlayPosition", [LPLONG, LPLONG ]),
+    Method(HRESULT, "GetPalette", [Pointer(LPDIRECTDRAWPALETTE) ]),
+    Method(HRESULT, "GetPixelFormat", [LPDDPIXELFORMAT]),
+    Method(HRESULT, "GetSurfaceDesc", [LPDDSURFACEDESC]),
+    Method(HRESULT, "Initialize", [LPDIRECTDRAW, LPDDSURFACEDESC]),
+    Method(HRESULT, "IsLost", []),
+    Method(HRESULT, "Lock", [LPRECT,LPDDSURFACEDESC,DWORD,HANDLE]),
+    Method(HRESULT, "ReleaseDC", [HDC]),
+    Method(HRESULT, "Restore", []),
+    Method(HRESULT, "SetClipper", [LPDIRECTDRAWCLIPPER]),
+    Method(HRESULT, "SetColorKey", [DWORD, LPDDCOLORKEY]),
+    Method(HRESULT, "SetOverlayPosition", [LONG, LONG ]),
+    Method(HRESULT, "SetPalette", [LPDIRECTDRAWPALETTE]),
+    Method(HRESULT, "Unlock", [LPVOID]),
+    Method(HRESULT, "UpdateOverlay", [LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX]),
+    Method(HRESULT, "UpdateOverlayDisplay", [DWORD]),
+    Method(HRESULT, "UpdateOverlayZOrder", [DWORD, LPDIRECTDRAWSURFACE3]),
+    Method(HRESULT, "GetDDInterface", [Pointer(LPVOID) ]),
+    Method(HRESULT, "PageLock", [DWORD]),
+    Method(HRESULT, "PageUnlock", [DWORD]),
+    Method(HRESULT, "SetSurfaceDesc", [LPDDSURFACEDESC, DWORD]),
+]
+
+IDirectDrawSurface4.methods += [
+    Method(HRESULT, "AddAttachedSurface", [LPDIRECTDRAWSURFACE4]),
+    Method(HRESULT, "AddOverlayDirtyRect", [LPRECT]),
+    Method(HRESULT, "Blt", [LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX]),
+    Method(HRESULT, "BltBatch", [LPDDBLTBATCH, DWORD, DWORD ]),
+    Method(HRESULT, "BltFast", [DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD]),
+    Method(HRESULT, "DeleteAttachedSurface", [DWORD,LPDIRECTDRAWSURFACE4]),
+    Method(HRESULT, "EnumAttachedSurfaces", [LPVOID,LPDDENUMSURFACESCALLBACK2]),
+    Method(HRESULT, "EnumOverlayZOrders", [DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2]),
+    Method(HRESULT, "Flip", [LPDIRECTDRAWSURFACE4, DWORD]),
+    Method(HRESULT, "GetAttachedSurface", [LPDDSCAPS2, Pointer(LPDIRECTDRAWSURFACE4) ]),
+    Method(HRESULT, "GetBltStatus", [DWORD]),
+    Method(HRESULT, "GetCaps", [LPDDSCAPS2]),
+    Method(HRESULT, "GetClipper", [Pointer(LPDIRECTDRAWCLIPPER) ]),
+    Method(HRESULT, "GetColorKey", [DWORD, LPDDCOLORKEY]),
+    Method(HRESULT, "GetDC", [Pointer(HDC) ]),
+    Method(HRESULT, "GetFlipStatus", [DWORD]),
+    Method(HRESULT, "GetOverlayPosition", [LPLONG, LPLONG ]),
+    Method(HRESULT, "GetPalette", [Pointer(LPDIRECTDRAWPALETTE) ]),
+    Method(HRESULT, "GetPixelFormat", [LPDDPIXELFORMAT]),
+    Method(HRESULT, "GetSurfaceDesc", [LPDDSURFACEDESC2]),
+    Method(HRESULT, "Initialize", [LPDIRECTDRAW, LPDDSURFACEDESC2]),
+    Method(HRESULT, "IsLost", []),
+    Method(HRESULT, "Lock", [LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE]),
+    Method(HRESULT, "ReleaseDC", [HDC]),
+    Method(HRESULT, "Restore", []),
+    Method(HRESULT, "SetClipper", [LPDIRECTDRAWCLIPPER]),
+    Method(HRESULT, "SetColorKey", [DWORD, LPDDCOLORKEY]),
+    Method(HRESULT, "SetOverlayPosition", [LONG, LONG ]),
+    Method(HRESULT, "SetPalette", [LPDIRECTDRAWPALETTE]),
+    Method(HRESULT, "Unlock", [LPRECT]),
+    Method(HRESULT, "UpdateOverlay", [LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX]),
+    Method(HRESULT, "UpdateOverlayDisplay", [DWORD]),
+    Method(HRESULT, "UpdateOverlayZOrder", [DWORD, LPDIRECTDRAWSURFACE4]),
+    Method(HRESULT, "GetDDInterface", [Pointer(LPVOID) ]),
+    Method(HRESULT, "PageLock", [DWORD]),
+    Method(HRESULT, "PageUnlock", [DWORD]),
+    Method(HRESULT, "SetSurfaceDesc", [LPDDSURFACEDESC2, DWORD]),
+    Method(HRESULT, "SetPrivateData", [REFGUID, LPVOID, DWORD, DWORD]),
+    Method(HRESULT, "GetPrivateData", [REFGUID, LPVOID, LPDWORD]),
+    Method(HRESULT, "FreePrivateData", [REFGUID]),
+    Method(HRESULT, "GetUniquenessValue", [LPDWORD]),
+    Method(HRESULT, "ChangeUniquenessValue", []),
+]
+
+IDirectDrawSurface7.methods += [
+    Method(HRESULT, "AddAttachedSurface", [LPDIRECTDRAWSURFACE7]),
+    Method(HRESULT, "AddOverlayDirtyRect", [LPRECT]),
+    Method(HRESULT, "Blt", [LPRECT,LPDIRECTDRAWSURFACE7, LPRECT,DWORD, LPDDBLTFX]),
+    Method(HRESULT, "BltBatch", [LPDDBLTBATCH, DWORD, DWORD ]),
+    Method(HRESULT, "BltFast", [DWORD,DWORD,LPDIRECTDRAWSURFACE7, LPRECT,DWORD]),
+    Method(HRESULT, "DeleteAttachedSurface", [DWORD,LPDIRECTDRAWSURFACE7]),
+    Method(HRESULT, "EnumAttachedSurfaces", [LPVOID,LPDDENUMSURFACESCALLBACK7]),
+    Method(HRESULT, "EnumOverlayZOrders", [DWORD,LPVOID,LPDDENUMSURFACESCALLBACK7]),
+    Method(HRESULT, "Flip", [LPDIRECTDRAWSURFACE7, DWORD]),
+    Method(HRESULT, "GetAttachedSurface", [LPDDSCAPS2, Pointer(LPDIRECTDRAWSURFACE7) ]),
+    Method(HRESULT, "GetBltStatus", [DWORD]),
+    Method(HRESULT, "GetCaps", [LPDDSCAPS2]),
+    Method(HRESULT, "GetClipper", [Pointer(LPDIRECTDRAWCLIPPER) ]),
+    Method(HRESULT, "GetColorKey", [DWORD, LPDDCOLORKEY]),
+    Method(HRESULT, "GetDC", [Pointer(HDC) ]),
+    Method(HRESULT, "GetFlipStatus", [DWORD]),
+    Method(HRESULT, "GetOverlayPosition", [LPLONG, LPLONG ]),
+    Method(HRESULT, "GetPalette", [Pointer(LPDIRECTDRAWPALETTE) ]),
+    Method(HRESULT, "GetPixelFormat", [LPDDPIXELFORMAT]),
+    Method(HRESULT, "GetSurfaceDesc", [LPDDSURFACEDESC2]),
+    Method(HRESULT, "Initialize", [LPDIRECTDRAW, LPDDSURFACEDESC2]),
+    Method(HRESULT, "IsLost", []),
+    Method(HRESULT, "Lock", [LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE]),
+    Method(HRESULT, "ReleaseDC", [HDC]),
+    Method(HRESULT, "Restore", []),
+    Method(HRESULT, "SetClipper", [LPDIRECTDRAWCLIPPER]),
+    Method(HRESULT, "SetColorKey", [DWORD, LPDDCOLORKEY]),
+    Method(HRESULT, "SetOverlayPosition", [LONG, LONG ]),
+    Method(HRESULT, "SetPalette", [LPDIRECTDRAWPALETTE]),
+    Method(HRESULT, "Unlock", [LPRECT]),
+    Method(HRESULT, "UpdateOverlay", [LPRECT, LPDIRECTDRAWSURFACE7,LPRECT,DWORD, LPDDOVERLAYFX]),
+    Method(HRESULT, "UpdateOverlayDisplay", [DWORD]),
+    Method(HRESULT, "UpdateOverlayZOrder", [DWORD, LPDIRECTDRAWSURFACE7]),
+    Method(HRESULT, "GetDDInterface", [Pointer(LPVOID) ]),
+    Method(HRESULT, "PageLock", [DWORD]),
+    Method(HRESULT, "PageUnlock", [DWORD]),
+    Method(HRESULT, "SetSurfaceDesc", [LPDDSURFACEDESC2, DWORD]),
+    Method(HRESULT, "SetPrivateData", [REFGUID, LPVOID, DWORD, DWORD]),
+    Method(HRESULT, "GetPrivateData", [REFGUID, LPVOID, LPDWORD]),
+    Method(HRESULT, "FreePrivateData", [REFGUID]),
+    Method(HRESULT, "GetUniquenessValue", [LPDWORD]),
+    Method(HRESULT, "ChangeUniquenessValue", []),
+    Method(HRESULT, "SetPriority", [DWORD]),
+    Method(HRESULT, "GetPriority", [LPDWORD]),
+    Method(HRESULT, "SetLOD", [DWORD]),
+    Method(HRESULT, "GetLOD", [LPDWORD]),
+]
+
+IDirectDrawColorControl.methods += [
+    Method(HRESULT, "GetColorControls", [LPDDCOLORCONTROL]),
+    Method(HRESULT, "SetColorControls", [LPDDCOLORCONTROL]),
+]
+
+IDirectDrawGammaControl.methods += [
+    Method(HRESULT, "GetGammaRamp", [DWORD, LPDDGAMMARAMP]),
+    Method(HRESULT, "SetGammaRamp", [DWORD, LPDDGAMMARAMP]),
+]
+
+#LPDDENUMCALLBACKA   = WrapPointer(Function(BOOL, "LPDDENUMCALLBACKA", [Pointer(GUID), LPSTR, LPSTR, LPVOID]))
+#LPDDENUMCALLBACKW   = WrapPointer(Function(BOOL, "LPDDENUMCALLBACKW", [Pointer(GUID), LPWSTR, LPWSTR, LPVOID]))
+#LPDDENUMCALLBACKEXA = WrapPointer(Function(BOOL, "LPDDENUMCALLBACKEXA", [Pointer(GUID), LPSTR, LPSTR, LPVOID, HMONITOR]))
+#LPDDENUMCALLBACKEXW = WrapPointer(Function(BOOL, "LPDDENUMCALLBACKEXW", [Pointer(GUID), LPWSTR, LPWSTR, LPVOID, HMONITOR]))
+LPDDENUMCALLBACKA   = Alias("LPDDENUMCALLBACKA", Pointer(Void))
+LPDDENUMCALLBACKW   = Alias("LPDDENUMCALLBACKW", Pointer(Void))
+LPDDENUMCALLBACKEXA = Alias("LPDDENUMCALLBACKEXA", Pointer(Void))
+LPDDENUMCALLBACKEXW = Alias("LPDDENUMCALLBACKEXW", Pointer(Void))
+
+DDENUM = Flags(DWORD, [
+    "DDENUM_ATTACHEDSECONDARYDEVICES",
+    "DDENUM_DETACHEDSECONDARYDEVICES",
+    "DDENUM_NONDISPLAYDEVICES",
+])
+
+DDCREATE = Flags(DWORD, [
+    "DDCREATE_HARDWAREONLY",
+    "DDCREATE_EMULATIONONLY",
+])
+
+ddraw = Dll("ddraw")
+ddraw.functions += [
+    Function(HRESULT, "DirectDrawEnumerateW", [(LPDDENUMCALLBACKW, "lpCallback"), (LPVOID, "lpContext")]),
+    Function(HRESULT, "DirectDrawEnumerateA", [(LPDDENUMCALLBACKA, "lpCallback"), (LPVOID, "lpContext")]),
+    Function(HRESULT, "DirectDrawEnumerateExW", [(LPDDENUMCALLBACKEXW, "lpCallback"), (LPVOID, "lpContext"), (DDENUM, "dwFlags")]),
+    Function(HRESULT, "DirectDrawEnumerateExA", [(LPDDENUMCALLBACKEXA, "lpCallback"), (LPVOID, "lpContext"), (DDENUM, "dwFlags")]),
+    Function(HRESULT, "DirectDrawCreate", [(Pointer(GUID), "lpGUID"), (OutPointer(LPDIRECTDRAW), "lplpDD"), (Pointer(IUnknown), "pUnkOuter")]),
+    Function(HRESULT, "DirectDrawCreateEx", [(Pointer(GUID), "lpGuid"), (OutPointer(LPVOID), "lplpDD"), (REFIID, "iid"), (Pointer(IUnknown), "pUnkOuter")]),
+    Function(HRESULT, "DirectDrawCreateClipper", [(DWORD, "dwFlags"), (OutPointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (Pointer(IUnknown), "pUnkOuter")]),
+]
+
+if __name__ == '__main__':
+    print '#include <windows.h>'
+    print '#include <tchar.h>'
+    print '#include <ddraw.h>'
+    print
+    print '#include "log.hpp"'
+    print
+    wrap()