+DXGI_ADAPTER_FLAG = Enum("DXGI_ADAPTER_FLAG", [
+ "DXGI_ADAPTER_FLAG_NONE",
+ "DXGI_ADAPTER_FLAG_REMOTE",
+])
+
+DXGI_ADAPTER_DESC1 = Struct("DXGI_ADAPTER_DESC1", [
+ (WString, "Description"),
+ (UINT, "VendorId"),
+ (UINT, "DeviceId"),
+ (UINT, "SubSysId"),
+ (UINT, "Revision"),
+ (SIZE_T, "DedicatedVideoMemory"),
+ (SIZE_T, "DedicatedSystemMemory"),
+ (SIZE_T, "SharedSystemMemory"),
+ (LUID, "AdapterLuid"),
+ (UINT, "Flags"),
+])
+
+DXGI_DISPLAY_COLOR_SPACE = Struct("DXGI_DISPLAY_COLOR_SPACE", [
+ (Array(Array(FLOAT, 8), 2), "PrimaryCoordinates"),
+ (Array(Array(FLOAT, 16), 2), "WhitePoints"),
+])
+
+IDXGIFactory1.methods += [
+ StdMethod(HRESULT, "EnumAdapters1", [(UINT, "Adapter"), Out(Pointer(ObjPointer(IDXGIAdapter1)), "ppAdapter")]),
+ StdMethod(BOOL, "IsCurrent", []),
+]
+
+IDXGIAdapter1.methods += [
+ StdMethod(HRESULT, "GetDesc1", [Out(Pointer(DXGI_ADAPTER_DESC1), "pDesc")], sideeffects=False),
+]
+
+IDXGIDevice1.methods += [
+ StdMethod(HRESULT, "SetMaximumFrameLatency", [(UINT, "MaxLatency")]),
+ StdMethod(HRESULT, "GetMaximumFrameLatency", [Out(Pointer(UINT), "pMaxLatency")], sideeffects=False),
+]
+
+
+IDXGIFactoryDWM = Interface("IDXGIFactoryDWM", IUnknown)
+IDXGISwapChainDWM = Interface("IDXGISwapChainDWM", IDXGIDeviceSubObject)
+
+IDXGIFactoryDWM.methods += [
+ StdMethod(HRESULT, "CreateSwapChain", [(ObjPointer(IUnknown), "pDevice"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc"), (ObjPointer(IDXGIOutput), "pOutput"), Out(Pointer(ObjPointer(IDXGISwapChainDWM)), "ppSwapChain")]),
+]
+
+IDXGISwapChainDWM.methods += [
+ StdMethod(HRESULT, "Present", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]),
+ StdMethod(HRESULT, "GetBuffer", [(UINT, "Buffer"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppSurface")]),
+ StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc")], sideeffects=False),
+ StdMethod(HRESULT, "ResizeBuffers", [(UINT, "BufferCount"), (UINT, "Width"), (UINT, "Height"), (DXGI_FORMAT, "NewFormat"), (DXGI_SWAP_CHAIN_FLAG, "SwapChainFlags")]),
+ StdMethod(HRESULT, "ResizeTarget", [(Pointer(Const(DXGI_MODE_DESC)), "pNewTargetParameters")]),
+ StdMethod(HRESULT, "GetContainingOutput", [Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
+ StdMethod(HRESULT, "GetFrameStatistics", [(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
+ StdMethod(HRESULT, "GetLastPresentCount", [(Pointer(UINT), "pLastPresentCount")], sideeffects=False),
+ StdMethod(HRESULT, "SetFullscreenState", [(BOOL, "Fullscreen"), (ObjPointer(IDXGIOutput), "pTarget")]),
+ StdMethod(HRESULT, "GetFullscreenState", [Out(Pointer(BOOL), "pFullscreen"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppTarget")]),
+]
+
+
+dxgi = Module('dxgi')
+dxgi.addInterfaces([
+ IDXGIFactory1,
+ IDXGIFactoryDWM,
+])
+dxgi.addFunctions([
+ StdFunction(HRESULT, "CreateDXGIFactory", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
+ StdFunction(HRESULT, "CreateDXGIFactory1", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
+])