using DirectShowLib; using System; using System.Drawing; using System.Runtime.InteropServices; using System.Security; namespace WPFMediaKit.DirectX; [StructLayout(LayoutKind.Sequential)] public class RECT { public int left; public int top; public int right; public int bottom; } /// /// CLSID_IDirect3DDevice9 /// [ComImport, Guid("D0223B96-BF7A-43fd-92BD-A43B0D82B9EB"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), SuppressUnmanagedCodeSecurity] public interface IDirect3DDevice9 { [PreserveSig, SuppressUnmanagedCodeSecurity] int TestCooperativeLevel(); [PreserveSig, SuppressUnmanagedCodeSecurity] uint GetAvailableTextureMem(); [PreserveSig, SuppressUnmanagedCodeSecurity] int EvictManagedResources(); [PreserveSig, SuppressUnmanagedCodeSecurity] int GetDirect3D([Out] out IDirect3D9 ppD3D9); [PreserveSig, SuppressUnmanagedCodeSecurity] int GetDeviceCaps([In, Out] ref D3DCAPS9 pCaps); [PreserveSig, SuppressUnmanagedCodeSecurity] int GetDisplayMode(uint iSwapChain, D3DDISPLAYMODE pMode); [PreserveSig, SuppressUnmanagedCodeSecurity] int GetCreationParameters([In, Out] ref D3DDEVICE_CREATION_PARAMETERS pParameters); int SetCursorProperties(); int SetCursorPosition(); int ShowCursor(bool bShow); int CreateAdditionalSwapChain(); int GetSwapChain(); uint GetNumberOfSwapChains(); [PreserveSig, SuppressUnmanagedCodeSecurity] int Reset([In, Out] ref D3DPRESENT_PARAMETERS pPresentationParameters); int Present(); int GetBackBuffer(); int GetRasterStatus(); int SetDialogBoxMode(); int SetGammaRamp(); int GetGammaRamp(); [PreserveSig, SuppressUnmanagedCodeSecurity] int CreateTexture(int Width, int Height, int Levels, int Usage, D3DFORMAT Format, int Pool, out IDirect3DTexture9 ppTexture, IntPtr pSharedHandle); int CreateVolumeTexture(); int CreateCubeTexture(); int CreateVertexBuffer(); int CreateIndexBuffer(); [PreserveSig, SuppressUnmanagedCodeSecurity] int CreateRenderTarget(int width, int height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, uint MultisampleQuality, [MarshalAs(UnmanagedType.Bool)] bool Lockable, [Out] out IntPtr pSurface, IntPtr pSharedSurface); int CreateDepthStencilSurface(); int UpdateSurface(); int UpdateTexture(); int GetRenderTargetData(); int GetFrontBufferData(); [PreserveSig, SuppressUnmanagedCodeSecurity] int StretchRect(IntPtr pSourceSurface, DsRect pSourceRect, IDirect3DSurface9 pDestSurface, DsRect pDestRect, int Filter); int ColorFill(); int CreateOffscreenPlainSurface(); int SetRenderTarget(); [PreserveSig, SuppressUnmanagedCodeSecurity] int GetRenderTarget([Out] out IntPtr pSurface); int SetDepthStencilSurface(); int GetDepthStencilSurface(); int BeginScene(); int EndScene(); int Clear(); int SetTransform(); int GetTransform(); int MultiplyTransform(); int SetViewport(); int GetViewport(); int SetMaterial(); int GetMaterial(); int SetLight(); int GetLight(); int LightEnable(); int GetLightEnable(); int SetClipPlane(); int GetClipPlane(); int SetRenderState(); int GetRenderState(); int CreateStateBlock(); int BeginStateBlock(); int EndStateBlock(); int SetClipStatus(); int GetClipStatus(); int GetTexture(); int SetTexture(); int GetTextureStageState(); int SetTextureStageState(); int GetSamplerState(); int SetSamplerState(); int ValidateDevice(); int SetPaletteEntries(); int GetPaletteEntries(); int SetCurrentTexturePalette(); int GetCurrentTexturePalette(); int SetScissorRect(); int GetScissorRect(); int SetSoftwareVertexProcessing(bool bSoftware); bool GetSoftwareVertexProcessing(); int SetNPatchMode(float nSegments); float GetNPatchMode(); int DrawPrimitive(); int DrawIndexedPrimitive(); int DrawPrimitiveUP(); int DrawIndexedPrimitiveUP(); int ProcessVertices(); int CreateVertexDeclaration(); int SetVertexDeclaration(); int GetVertexDeclaration(); int SetFVF(); int GetFVF(); int CreateVertexShader(); int SetVertexShader(); int GetVertexShader(); int SetVertexShaderConstantF(); int GetVertexShaderConstantF(); int SetVertexShaderConstantI(); int GetVertexShaderConstantI(); int SetVertexShaderConstantB(); int GetVertexShaderConstantB(); int SetStreamSource(); int GetStreamSource(); int SetStreamSourceFreq(); int GetStreamSourceFreq(); int SetIndices(); int GetIndices(); int CreatePixelShader(); int SetPixelShader(); int GetPixelShader(); int SetPixelShaderConstantF(); int GetPixelShaderConstantF(); int SetPixelShaderConstantI(); int GetPixelShaderConstantI(); int SetPixelShaderConstantB(); int GetPixelShaderConstantB(); int DrawRectPatch(); int DrawTriPatch(); int DeletePatch(uint Handle); int CreateQuery(); } [ComImport, Guid("B18B10CE-2649-405a-870F-95F777D4313A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), SuppressUnmanagedCodeSecurity] public interface IDirect3DDevice9Ex : IDirect3DDevice9 { [PreserveSig, SuppressUnmanagedCodeSecurity] new int TestCooperativeLevel(); [PreserveSig, SuppressUnmanagedCodeSecurity] new int GetAvailableTextureMem(); [PreserveSig, SuppressUnmanagedCodeSecurity] new int EvictManagedResources(); [PreserveSig, SuppressUnmanagedCodeSecurity] new int GetDirect3D([Out] out IDirect3D9 ppD3D9); [PreserveSig, SuppressUnmanagedCodeSecurity] new int GetDeviceCaps([In, Out] ref D3DCAPS9 pCaps); [PreserveSig, SuppressUnmanagedCodeSecurity] new int GetDisplayMode(uint iSwapChain, D3DDISPLAYMODE pMode); [PreserveSig, SuppressUnmanagedCodeSecurity] new int GetCreationParameters([In, Out] ref D3DDEVICE_CREATION_PARAMETERS pParameters); new int SetCursorProperties(); new int SetCursorPosition(); new int ShowCursor(bool bShow); new int CreateAdditionalSwapChain(); new int GetSwapChain(); new int GetNumberOfSwapChains(); [PreserveSig, SuppressUnmanagedCodeSecurity] new int Reset([In, Out] ref D3DPRESENT_PARAMETERS pPresentationParameters); new int Present(); new int GetBackBuffer(); new int GetRasterStatus(); new int SetDialogBoxMode(); new int SetGammaRamp(); new int GetGammaRamp(); [PreserveSig, SuppressUnmanagedCodeSecurity] new int CreateTexture(int Width, int Height, int Levels, int Usage, D3DFORMAT Format, int Pool, out IDirect3DTexture9 ppTexture, IntPtr pSharedHandle); new int CreateVolumeTexture(); new int CreateCubeTexture(); new int CreateVertexBuffer(); new int CreateIndexBuffer(); [PreserveSig, SuppressUnmanagedCodeSecurity] new int CreateRenderTarget(int width, int height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, uint MultisampleQuality, [MarshalAs(UnmanagedType.Bool)] bool Lockable, [Out] out IntPtr pSurface, IntPtr pSharedSurface); new int CreateDepthStencilSurface(); new int UpdateSurface(); new int UpdateTexture(); new int GetRenderTargetData(); new int GetFrontBufferData(); new int StretchRect(IntPtr pSourceSurface, DsRect pSourceRect, IDirect3DSurface9 pDestSurface, DsRect pDestRect, int Filter); new int ColorFill(); new int CreateOffscreenPlainSurface(); new int SetRenderTarget(); [PreserveSig, SuppressUnmanagedCodeSecurity] new int GetRenderTarget([Out] out IntPtr pSurface); new int SetDepthStencilSurface(); new int GetDepthStencilSurface(); new int BeginScene(); new int EndScene(); new int Clear(); new int SetTransform(); new int GetTransform(); new int MultiplyTransform(); new int SetViewport(); new int GetViewport(); new int SetMaterial(); new int GetMaterial(); new int SetLight(); new int GetLight(); new int LightEnable(); new int GetLightEnable(); new int SetClipPlane(); new int GetClipPlane(); new int SetRenderState(); new int GetRenderState(); new int CreateStateBlock(); new int BeginStateBlock(); new int EndStateBlock(); new int SetClipStatus(); new int GetClipStatus(); new int GetTexture(); new int SetTexture(); new int GetTextureStageState(); new int SetTextureStageState(); new int GetSamplerState(); new int SetSamplerState(); new int ValidateDevice(); new int SetPaletteEntries(); new int GetPaletteEntries(); new int SetCurrentTexturePalette(); new int GetCurrentTexturePalette(); new int SetScissorRect(); new int GetScissorRect(); new int SetSoftwareVertexProcessing(bool bSoftware); new bool GetSoftwareVertexProcessing(); new int SetNPatchMode(float nSegments); new float GetNPatchMode(); new int DrawPrimitive(); new int DrawIndexedPrimitive(); new int DrawPrimitiveUP(); new int DrawIndexedPrimitiveUP(); new int ProcessVertices(); new int CreateVertexDeclaration(); new int SetVertexDeclaration(); new int GetVertexDeclaration(); new int SetFVF(); new int GetFVF(); new int CreateVertexShader(); new int SetVertexShader(); new int GetVertexShader(); new int SetVertexShaderConstantF(); new int GetVertexShaderConstantF(); new int SetVertexShaderConstantI(); new int GetVertexShaderConstantI(); new int SetVertexShaderConstantB(); new int GetVertexShaderConstantB(); new int SetStreamSource(); new int GetStreamSource(); new int SetStreamSourceFreq(); new int GetStreamSourceFreq(); new int SetIndices(); new int GetIndices(); new int CreatePixelShader(); new int SetPixelShader(); new int GetPixelShader(); new int SetPixelShaderConstantF(); new int GetPixelShaderConstantF(); new int SetPixelShaderConstantI(); new int GetPixelShaderConstantI(); new int SetPixelShaderConstantB(); new int GetPixelShaderConstantB(); new int DrawRectPatch(); new int DrawTriPatch(); new int DeletePatch(uint Handle); new int CreateQuery(); [PreserveSig, SuppressUnmanagedCodeSecurity] int SetConvolutionMonoKernel(int width, int height, IntPtr rows, IntPtr columns); int ComposeRects(); int PresentEx(); int GetGPUThreadPriority(); int SetGPUThreadPriority(); int WaitForVBlank(); int CheckResourceResidency(); int SetMaximumFrameLatency(); int GetMaximumFrameLatency(); [PreserveSig, SuppressUnmanagedCodeSecurity] int CheckDeviceState(IntPtr hWnd); [PreserveSig, SuppressUnmanagedCodeSecurity] int CreateRenderTargetEx(int width, int height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, uint MultisampleQuality, [MarshalAs(UnmanagedType.Bool)] bool Lockable, [Out] out IntPtr pSurface, [In, Out] ref IntPtr pSharedSurface, uint Usage); /* STDMETHOD(SetConvolutionMonoKernel)(THIS_ UINT width,UINT height,float* rows,float* columns) PURE; STDMETHOD(ComposeRects)(THIS_ IDirect3DSurface9* pSrc,IDirect3DSurface9* pDst,IDirect3DVertexBuffer9* pSrcRectDescs,UINT NumRects,IDirect3DVertexBuffer9* pDstRectDescs,D3DCOMPOSERECTSOP Operation,int Xoffset,int Yoffset) PURE; STDMETHOD(PresentEx)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion,DWORD dwFlags) PURE; STDMETHOD(GetGPUThreadPriority)(THIS_ INT* pPriority) PURE; STDMETHOD(SetGPUThreadPriority)(THIS_ INT Priority) PURE; STDMETHOD(WaitForVBlank)(THIS_ UINT iSwapChain) PURE; STDMETHOD(CheckResourceResidency)(THIS_ IDirect3DResource9** pResourceArray,UINT32 NumResources) PURE; STDMETHOD(SetMaximumFrameLatency)(THIS_ UINT MaxLatency) PURE; STDMETHOD(GetMaximumFrameLatency)(THIS_ UINT* pMaxLatency) PURE; STDMETHOD(CheckDeviceState)(THIS_ HWND hDestinationWindow) PURE; STDMETHOD(CreateRenderTargetEx)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Lockable,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle,DWORD Usage) PURE; STDMETHOD(CreateOffscreenPlainSurfaceEx)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DPOOL Pool,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle,DWORD Usage) PURE; STDMETHOD(CreateDepthStencilSurfaceEx)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Discard,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle,DWORD Usage) PURE; STDMETHOD(ResetEx)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters,D3DDISPLAYMODEEX *pFullscreenDisplayMode) PURE; STDMETHOD(GetDisplayModeEx)(THIS_ UINT iSwapChain,D3DDISPLAYMODEEX* pMode,D3DDISPLAYROTATION* pRotation) PURE; */ } [ComImport, SuppressUnmanagedCodeSecurity, Guid("0CFBAF3A-9FF6-429a-99B3-A2796AF8B89B"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), SuppressUnmanagedCodeSecurity] public interface IDirect3DSurface9 { [PreserveSig, SuppressUnmanagedCodeSecurity] void GetDevice(out IDirect3DDevice9 ppDevice); [PreserveSig, SuppressUnmanagedCodeSecurity] void SetPrivateData(Guid refguid, IntPtr pData, int SizeOfData, int Flags); [PreserveSig, SuppressUnmanagedCodeSecurity] void GetPrivateData(Guid refguid, IntPtr pData, out int pSizeOfData); [PreserveSig, SuppressUnmanagedCodeSecurity] void FreePrivateData(Guid refguid); [PreserveSig, SuppressUnmanagedCodeSecurity] int SetPriority(int PriorityNew); [PreserveSig, SuppressUnmanagedCodeSecurity] int GetPriority(); void PreLoad(); [PreserveSig, SuppressUnmanagedCodeSecurity] D3DRESOURCETYPE GetType(); void GetContainer(Guid riid, out object ppContainer); void GetDesc(out D3DSURFACE_DESC pDesc); void LockRect(D3DLOCKED_RECT pLockedRect, Rectangle pRect, int Flags); void UnlockRect(); [PreserveSig, SuppressUnmanagedCodeSecurity] int GetDC(out IntPtr phdc); [PreserveSig, SuppressUnmanagedCodeSecurity] int ReleaseDC(IntPtr hdc); } public enum D3DRESOURCETYPE { D3DRTYPE_SURFACE = 1, D3DRTYPE_VOLUME = 2, D3DRTYPE_TEXTURE = 3, D3DRTYPE_VOLUMETEXTURE = 4, D3DRTYPE_CUBETEXTURE = 5, D3DRTYPE_VERTEXBUFFER = 6, D3DRTYPE_INDEXBUFFER = 7, //if this changes, change _D3DDEVINFO_RESOURCEMANAGER definition D3DRTYPE_FORCE_DWORD = 0x7fffffff } [StructLayout(LayoutKind.Sequential)] public struct D3DLOCKED_RECT { } [StructLayout(LayoutKind.Sequential)] public struct D3DSURFACE_DESC { } [StructLayout(LayoutKind.Sequential)] public struct D3DDEVICE_CREATION_PARAMETERS { private uint AdapterOrdinal; private D3DDEVTYPE DeviceType; private IntPtr hFocusWindow; private int BehaviorFlags; } [StructLayout(LayoutKind.Sequential)] public struct D3DCAPS9 { /* Device Info */ public D3DDEVTYPE DeviceType; public uint AdapterOrdinal; /* Caps from DX7 Draw */ public int Caps; public int Caps2; public int Caps3; public int PresentationIntervals; /* Cursor Caps */ public int CursorCaps; /* 3D Device Caps */ public int DevCaps; public int PrimitiveMiscCaps; public int RasterCaps; public int ZCmpCaps; public int SrcBlendCaps; public int DestBlendCaps; public int AlphaCmpCaps; public int ShadeCaps; public int TextureCaps; public int TextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DTexture9's public int CubeTextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DCubeTexture9's public int VolumeTextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DVolumeTexture9's public int TextureAddressCaps; // D3DPTADDRESSCAPS for IDirect3DTexture9's public int VolumeTextureAddressCaps; // D3DPTADDRESSCAPS for IDirect3DVolumeTexture9's public int LineCaps; // D3DLINECAPS public int MaxTextureWidth, MaxTextureHeight; public int MaxVolumeExtent; public int MaxTextureRepeat; public int MaxTextureAspectRatio; public int MaxAnisotropy; private float MaxVertexW; private float GuardBandLeft; private float GuardBandTop; private float GuardBandRight; private float GuardBandBottom; private float ExtentsAdjust; public int StencilCaps; public int FVFCaps; public int TextureOpCaps; public int MaxTextureBlendStages; public int MaxSimultaneousTextures; public int VertexProcessingCaps; public int MaxActiveLights; public int MaxUserClipPlanes; public int MaxVertexBlendMatrices; public int MaxVertexBlendMatrixIndex; private float MaxPointSize; public int MaxPrimitiveCount; // max number of primitives per DrawPrimitive call public int MaxVertexIndex; public int MaxStreams; public int MaxStreamStride; // max stride for SetStreamSource public int VertexShaderVersion; public int MaxVertexShaderConst; // number of vertex shader constant registers public int PixelShaderVersion; private float PixelShader1xMaxValue; // max value storable in registers of ps.1.x shaders // Here are the DX9 specific ones public int DevCaps2; private float MaxNpatchTessellationLevel; public int Reserved5; public uint MasterAdapterOrdinal; // ordinal of master adaptor for adapter group public uint AdapterOrdinalInGroup; // ordinal inside the adapter group public uint NumberOfAdaptersInGroup; // number of adapters in this adapter group (only if master) public int DeclTypes; // Data types, supported in vertex declarations public int NumSimultaneousRTs; // Will be at least 1 public int StretchRectFilterCaps; // Filter caps supported by StretchRect private D3DVSHADERCAPS2_0 VS20Caps; private D3DPSHADERCAPS2_0 PS20Caps; public int VertexTextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DTexture9's for texture, used in vertex shaders public int MaxVShaderInstructionsExecuted; // maximum number of vertex shader instructions that can be executed public int MaxPShaderInstructionsExecuted; // maximum number of pixel shader instructions that can be executed public int MaxVertexShader30InstructionSlots; public int MaxPixelShader30InstructionSlots; } [StructLayout(LayoutKind.Sequential)] public struct D3DVSHADERCAPS2_0 { private int Caps; private int DynamicFlowControlDepth; private int NumTemps; private int StaticFlowControlDepth; } [StructLayout(LayoutKind.Sequential)] public struct D3DPSHADERCAPS2_0 { private int Caps; private int DynamicFlowControlDepth; private int NumTemps; private int StaticFlowControlDepth; private int NumInstructionSlots; } public enum D3DSCANLINEORDERING { D3DSCANLINEORDERING_UNKNOWN = 0, D3DSCANLINEORDERING_PROGRESSIVE = 1, D3DSCANLINEORDERING_INTERLACED = 2, } [StructLayout(LayoutKind.Sequential)] public struct D3DDISPLAYMODEEX { public uint Size; public uint Width; public uint Height; public uint RefreshRate; public D3DFORMAT Format; public D3DSCANLINEORDERING ScanLineOrdering; } [ComImport, SuppressUnmanagedCodeSecurity, Guid("85C31227-3DE5-4f00-9B3A-F11AC38C18B5"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), SuppressUnmanagedCodeSecurity] public interface IDirect3DTexture9 { [PreserveSig, SuppressUnmanagedCodeSecurity] void GetDevice(); [PreserveSig, SuppressUnmanagedCodeSecurity] void SetPrivateData(Guid refguid, IntPtr pData, int SizeOfData, int Flags); [PreserveSig, SuppressUnmanagedCodeSecurity] void GetPrivateData(Guid refguid, IntPtr pData, IntPtr pSizeOfData); [PreserveSig, SuppressUnmanagedCodeSecurity] void FreePrivateData(Guid refguid); [PreserveSig, SuppressUnmanagedCodeSecurity] void SetPriority(int PriorityNew); void GetPriority(); void PreLoad(); void GetType(); void SetLOD(int LODNew); void GetLOD(); void GetLevelCount(); void SetAutoGenFilterType(int FilterType); int GetAutoGenFilterType(); void GenerateMipSubLevels(); [PreserveSig, SuppressUnmanagedCodeSecurity] void GetLevelDesc(int Level, IntPtr pDesc); [PreserveSig, SuppressUnmanagedCodeSecurity] int GetSurfaceLevel(int Level, out IDirect3DSurface9 ppSurfaceLevel); [PreserveSig, SuppressUnmanagedCodeSecurity] void LockRect(int Level, ref D3DLOCKED_RECT pLockedRect, RECT pRect, int Flags); [PreserveSig, SuppressUnmanagedCodeSecurity] void UnlockRect(int Level); [PreserveSig, SuppressUnmanagedCodeSecurity] void AddDirtyRect(RECT pDirtyRect); } [ComImport, SuppressUnmanagedCodeSecurity, Guid("02177241-69FC-400C-8FF1-93A44DF6861D"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), SuppressUnmanagedCodeSecurity] public interface IDirect3D9Ex : IDirect3D9 { [PreserveSig, SuppressUnmanagedCodeSecurity] new int RegisterSoftwareDevice([In, Out] IntPtr pInitializeFunction); [PreserveSig, SuppressUnmanagedCodeSecurity] new int GetAdapterCount(); [PreserveSig, SuppressUnmanagedCodeSecurity] new int GetAdapterIdentifier(uint Adapter, uint Flags, uint pIdentifier); [PreserveSig, SuppressUnmanagedCodeSecurity] new uint GetAdapterModeCount(uint Adapter, D3DFORMAT Format); [PreserveSig, SuppressUnmanagedCodeSecurity] new int EnumAdapterModes(uint Adapter, D3DFORMAT Format, uint Mode, [Out] out D3DDISPLAYMODE pMode); [PreserveSig, SuppressUnmanagedCodeSecurity] new int GetAdapterDisplayMode(ushort Adapter, [Out] out D3DFORMAT Format); #region Method Placeholders [PreserveSig] new int CheckDeviceType(); [PreserveSig] new int CheckDeviceFormat(); [PreserveSig] new int CheckDeviceMultiSampleType(); [PreserveSig] new int CheckDepthStencilMatch(); [PreserveSig] new int CheckDeviceFormatConversion(); [PreserveSig] new int GetDeviceCaps(); #endregion Method Placeholders [PreserveSig, SuppressUnmanagedCodeSecurity] new IntPtr GetAdapterMonitor(uint Adapter); [PreserveSig, SuppressUnmanagedCodeSecurity] new int CreateDevice(int Adapter, D3DDEVTYPE DeviceType, IntPtr hFocusWindow, CreateFlags BehaviorFlags, [In, Out] ref D3DPRESENT_PARAMETERS pPresentationParameters, [Out] out IntPtr ppReturnedDeviceInterface); [PreserveSig, SuppressUnmanagedCodeSecurity] uint GetAdapterModeCountEx(); [PreserveSig, SuppressUnmanagedCodeSecurity] int EnumAdapterModesEx(); [PreserveSig, SuppressUnmanagedCodeSecurity] int GetAdapterDisplayModeEx(); [PreserveSig, SuppressUnmanagedCodeSecurity] int CreateDeviceEx(int Adapter, D3DDEVTYPE DeviceType, IntPtr hFocusWindow, CreateFlags BehaviorFlags, [In, Out] ref D3DPRESENT_PARAMETERS pPresentationParameters, [In, Out] IntPtr pFullscreenDisplayMode, [Out] out IntPtr ppReturnedDeviceInterface); [PreserveSig, SuppressUnmanagedCodeSecurity] int GetAdapterLUID(); } [ComImport, SuppressUnmanagedCodeSecurity, Guid("81BDCBCA-64D4-426d-AE8D-AD0147F4275C"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), SuppressUnmanagedCodeSecurity] public interface IDirect3D9 { [PreserveSig, SuppressUnmanagedCodeSecurity] int RegisterSoftwareDevice([In, Out] IntPtr pInitializeFunction); [PreserveSig, SuppressUnmanagedCodeSecurity] int GetAdapterCount(); [PreserveSig, SuppressUnmanagedCodeSecurity] int GetAdapterIdentifier(uint Adapter, uint Flags, uint pIdentifier); [PreserveSig, SuppressUnmanagedCodeSecurity] uint GetAdapterModeCount(uint Adapter, D3DFORMAT Format); [PreserveSig, SuppressUnmanagedCodeSecurity] int EnumAdapterModes(uint Adapter, D3DFORMAT Format, uint Mode, [Out] out D3DDISPLAYMODE pMode); [PreserveSig, SuppressUnmanagedCodeSecurity] int GetAdapterDisplayMode(ushort Adapter, [Out] out D3DFORMAT Format); #region Method Placeholders [PreserveSig] int CheckDeviceType(); [PreserveSig] int CheckDeviceFormat(); [PreserveSig] int CheckDeviceMultiSampleType(); [PreserveSig] int CheckDepthStencilMatch(); [PreserveSig] int CheckDeviceFormatConversion(); [PreserveSig] int GetDeviceCaps(); #endregion Method Placeholders [PreserveSig, SuppressUnmanagedCodeSecurity] IntPtr GetAdapterMonitor(uint Adapter); [PreserveSig, SuppressUnmanagedCodeSecurity] int CreateDevice(int Adapter, D3DDEVTYPE DeviceType, IntPtr hFocusWindow, CreateFlags BehaviorFlags, [In, Out] ref D3DPRESENT_PARAMETERS pPresentationParameters, [Out] out IntPtr ppReturnedDeviceInterface); } [StructLayout(LayoutKind.Sequential)] public struct D3DDISPLAYMODE { public uint Width; public uint Height; public uint RefreshRate; public D3DFORMAT Format; } [Flags] public enum CreateFlags { D3DCREATE_FPU_PRESERVE = 0x00000002, D3DCREATE_MULTITHREADED = 0x00000004, D3DCREATE_PUREDEVICE = 0x00000010, D3DCREATE_SOFTWARE_VERTEXPROCESSING = 0x00000020, D3DCREATE_HARDWARE_VERTEXPROCESSING = 0x00000040, D3DCREATE_MIXED_VERTEXPROCESSING = 0x00000080, D3DCREATE_DISABLE_DRIVER_MANAGEMENT = 0x00000100, D3DCREATE_ADAPTERGROUP_DEVICE = 0x00000200, D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX = 0x00000400 } [Flags] public enum D3DDEVTYPE { D3DDEVTYPE_HAL = 1, D3DDEVTYPE_REF = 2, D3DDEVTYPE_SW = 3, D3DDEVTYPE_NULLREF = 4, } [Flags] public enum D3DFORMAT { D3DFMT_UNKNOWN = 0, D3DFMT_R8G8B8 = 20, D3DFMT_A8R8G8B8 = 21, D3DFMT_X8R8G8B8 = 22, D3DFMT_R5G6B5 = 23, D3DFMT_X1R5G5B5 = 24, D3DFMT_A1R5G5B5 = 25, D3DFMT_A4R4G4B4 = 26, D3DFMT_R3G3B2 = 27, D3DFMT_A8 = 28, D3DFMT_A8R3G3B2 = 29, D3DFMT_X4R4G4B4 = 30, D3DFMT_A2B10G10R10 = 31, D3DFMT_A8B8G8R8 = 32, D3DFMT_X8B8G8R8 = 33, D3DFMT_G16R16 = 34, D3DFMT_A2R10G10B10 = 35, D3DFMT_A16B16G16R16 = 36, D3DFMT_A8P8 = 40, D3DFMT_P8 = 41, D3DFMT_L8 = 50, D3DFMT_A8L8 = 51, D3DFMT_A4L4 = 52, D3DFMT_V8U8 = 60, D3DFMT_L6V5U5 = 61, D3DFMT_X8L8V8U8 = 62, D3DFMT_Q8W8V8U8 = 63, D3DFMT_V16U16 = 64, D3DFMT_A2W10V10U10 = 67, D3DFMT_D16_LOCKABLE = 70, D3DFMT_D32 = 71, D3DFMT_D15S1 = 73, D3DFMT_D24S8 = 75, D3DFMT_D24X8 = 77, D3DFMT_D24X4S4 = 79, D3DFMT_D16 = 80, D3DFMT_D32F_LOCKABLE = 82, D3DFMT_D24FS8 = 83, /* Z-Stencil formats valid for CPU access */ D3DFMT_D32_LOCKABLE = 84, D3DFMT_S8_LOCKABLE = 85, D3DFMT_L16 = 81, D3DFMT_VERTEXDATA = 100, D3DFMT_INDEX16 = 101, D3DFMT_INDEX32 = 102, D3DFMT_Q16W16V16U16 = 110, // Floating point surface formats // s10e5 formats (16-bits per channel) D3DFMT_R16F = 111, D3DFMT_G16R16F = 112, D3DFMT_A16B16G16R16F = 113, // IEEE s23e8 formats (32-bits per channel) D3DFMT_R32F = 114, D3DFMT_G32R32F = 115, D3DFMT_A32B32G32R32F = 116, D3DFMT_CxV8U8 = 117, // Monochrome 1 bit per pixel format D3DFMT_A1 = 118, // Binary format indicating that the data has no inherent type D3DFMT_BINARYBUFFER = 199, } [Flags] public enum D3DSWAPEFFECT { D3DSWAPEFFECT_DISCARD = 1, D3DSWAPEFFECT_FLIP = 2, D3DSWAPEFFECT_COPY = 3, } [Flags] public enum D3DMULTISAMPLE_TYPE { D3DMULTISAMPLE_NONE = 0, D3DMULTISAMPLE_NONMASKABLE = 1, D3DMULTISAMPLE_2_SAMPLES = 2, D3DMULTISAMPLE_3_SAMPLES = 3, D3DMULTISAMPLE_4_SAMPLES = 4, D3DMULTISAMPLE_5_SAMPLES = 5, D3DMULTISAMPLE_6_SAMPLES = 6, D3DMULTISAMPLE_7_SAMPLES = 7, D3DMULTISAMPLE_8_SAMPLES = 8, D3DMULTISAMPLE_9_SAMPLES = 9, D3DMULTISAMPLE_10_SAMPLES = 10, D3DMULTISAMPLE_11_SAMPLES = 11, D3DMULTISAMPLE_12_SAMPLES = 12, D3DMULTISAMPLE_13_SAMPLES = 13, D3DMULTISAMPLE_14_SAMPLES = 14, D3DMULTISAMPLE_15_SAMPLES = 15, D3DMULTISAMPLE_16_SAMPLES = 16, } [Flags] public enum D3DPRESENTFLAG { D3DPRESENTFLAG_LOCKABLE_BACKBUFFER = 0x00000001, D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL = 0x00000002, D3DPRESENTFLAG_DEVICECLIP = 0x00000004, D3DPRESENTFLAG_VIDEO = 0x00000010 } [StructLayout(LayoutKind.Sequential)] public struct D3DPRESENT_PARAMETERS { public uint BackBufferWidth; public uint BackBufferHeight; public D3DFORMAT BackBufferFormat; public uint BackBufferCount; public D3DMULTISAMPLE_TYPE MultiSampleType; public int MultiSampleQuality; public D3DSWAPEFFECT SwapEffect; public IntPtr hDeviceWindow; public int Windowed; public int EnableAutoDepthStencil; public D3DFORMAT AutoDepthStencilFormat; public int Flags; /* FullScreen_RefreshRateInHz must be zero for Windowed mode */ public uint FullScreen_RefreshRateInHz; public uint PresentationInterval; } public class Direct3D { [DllImport("d3d9.dll", EntryPoint = "Direct3DCreate9", CallingConvention = CallingConvention.StdCall), SuppressUnmanagedCodeSecurity] [return: MarshalAs(UnmanagedType.Interface)] public static extern IDirect3D9 Direct3DCreate9(ushort SDKVersion); [DllImport("d3d9.dll", EntryPoint = "Direct3DCreate9Ex", CallingConvention = CallingConvention.StdCall), SuppressUnmanagedCodeSecurity] public static extern int Direct3DCreate9Ex(ushort SDKVersion, [Out] out IDirect3D9Ex ex); }