/// <summary> /// Initializes the capture monitors. /// </summary> private void InitializeCaptureMonitors() { var factory = new Factory1(); for (int i = 0; i < factory.GetAdapterCount(); i++) { for (int j = 0; j < factory.GetAdapter(i).GetOutputCount(); j++) { var output = factory.GetAdapter(i).GetOutput(j); CaptureSettings settings = new CaptureSettings(); settings.m_Adapter = i; settings.m_Output = j; settings.m_Rect = new DsRect( output.Description.DesktopBounds.Left, output.Description.DesktopBounds.Top, output.Description.DesktopBounds.Right, output.Description.DesktopBounds.Bottom ); CaptureItem captureItem = new CaptureItem(output.Description.DeviceName, settings); captureMethodCombo.Items.Add(captureItem); } } }
public RenderContainer(SwapChainDescription swapChainDescription, RenderControl control) { try { _swapChainDescription = swapChainDescription; using (Factory1 factory = new Factory1()) using (Adapter adapter = factory.GetAdapter(0)) { Device11 = new Dx11ChainedDevice(adapter, _swapChainDescription); Device10 = new Dx10Device(adapter); } GraphicsDevice = new GenericGraphicsDevice(Device11.Device); SpriteBatch = new SpriteBatch(GraphicsDevice); Reset(control.Width, control.Height); control.Resize += OnRenderControlResize; } catch { Dispose(); throw; } }
public override void Hook() { DebugMessage("Hook: Begin"); // Determine method addresses in Direct3D10.Device, and DXGI.SwapChain if (_d3d10_1VTblAddresses == null) { _d3d10_1VTblAddresses = new List <IntPtr>(); _dxgiSwapChainVTblAddresses = new List <IntPtr>(); DebugMessage("Hook: Before device creation"); using (var factory = new Factory1()) { using ( var device = new Device1(factory.GetAdapter(0), DeviceCreationFlags.None, FeatureLevel.Level_10_1)) { DebugMessage("Hook: Device created"); _d3d10_1VTblAddresses.AddRange(GetVTblAddresses(device.NativePointer, D3D10_1_DEVICE_METHOD_COUNT)); using (var renderForm = new RenderForm()) { using ( var sc = new SwapChain(factory, device, DXGI.CreateSwapChainDescription(renderForm.Handle))) { _dxgiSwapChainVTblAddresses.AddRange(GetVTblAddresses(sc.NativePointer, DXGI.DXGI_SWAPCHAIN_METHOD_COUNT)); } } } } } // We will capture the backbuffer here DXGISwapChain_PresentHook = new Hook <DXGISwapChain_PresentDelegate>( _dxgiSwapChainVTblAddresses[(int)DXGI.DXGISwapChainVTbl.Present], new DXGISwapChain_PresentDelegate(PresentHook), this); // We will capture target/window resizes here DXGISwapChain_ResizeTargetHook = new Hook <DXGISwapChain_ResizeTargetDelegate>( _dxgiSwapChainVTblAddresses[(int)DXGI.DXGISwapChainVTbl.ResizeTarget], new DXGISwapChain_ResizeTargetDelegate(ResizeTargetHook), this); /* * Don't forget that all hooks will start deactivated... * The following ensures that all threads are intercepted: * Note: you must do this for each hook. */ DXGISwapChain_PresentHook.Activate(); DXGISwapChain_ResizeTargetHook.Activate(); Hooks.Add(DXGISwapChain_PresentHook); Hooks.Add(DXGISwapChain_ResizeTargetHook); }
/// <summary> /// /// </summary> /// <param name="dg"></param> /// <returns></returns> public static IEnumerable <Adapter> GetAdapters(DisposeGroup dg) { // NOTE: SharpDX 1.3 requires explicit Dispose() of everything // hence the DisposeGroup, to enforce it using (var f = new Factory1()) { int n = AdapterCount; for (int i = 0; i < n; i++) { yield return(dg.Add(f.GetAdapter(i))); } } }
public void CreateDeviceTest() { Adapter adapter; using (var factory = new Factory1()) { adapter = factory.GetAdapter(0); } using (var device = new SharpDX.Direct3D11.Device(adapter, SharpDX.Direct3D11.DeviceCreationFlags.BgraSupport, FeatureLevel.Level_10_0)) { Console.WriteLine(adapter.Description.Description); Console.WriteLine(device.FeatureLevel); } }
public DeviceContext10_1(DeviceSettings10_1 settings) { m_settings = settings; Direct3DFactory = new Factory1(); /* Create a Direct3D device using our passed settings */ Device = new SlimDX.Direct3D10_1.Device1(Direct3DFactory.GetAdapter(m_settings.AdapterOrdinal), DriverType.Hardware, settings.CreationFlags, FeatureLevel.Level_10_0); /* Create a Direct2D factory while we are at it...*/ Direct2DFactory = new SlimDX.Direct2D.Factory(FactoryType.Multithreaded); MakeBothSidesRendered(); }
static void Main(string[] args) { var factory = new Factory1(); for (var i = 0; i < factory.GetAdapterCount(); i++) { var adapter = factory.GetAdapter(i); Console.WriteLine(adapter.Description.Description.Trim('\0') + ":"); for (var j = 0; j < adapter.Outputs.Length; j++) { var output = adapter.Outputs[j]; Console.WriteLine(output.Description.DeviceName); Console.WriteLine("Desktop: " + output.Description.IsAttachedToDesktop); Console.WriteLine("Bounds: " + output.Description.DesktopBounds.Right); } Console.WriteLine(); } var wnd = new AdapterConfig(); wnd.ShowDialog(); }
public override void Hook() { this.DebugMessage("Hook: Begin"); // Determine method addresses in Direct3D10.Device, and DXGI.SwapChain if (_d3d10_1VTblAddresses == null) { _d3d10_1VTblAddresses = new List<IntPtr>(); _dxgiSwapChainVTblAddresses = new List<IntPtr>(); this.DebugMessage("Hook: Before device creation"); using (Factory1 factory = new Factory1()) { using (var device = new SlimDX.Direct3D10_1.Device1(factory.GetAdapter(0), DriverType.Hardware, SlimDX.Direct3D10.DeviceCreationFlags.None, FeatureLevel.Level_10_1)) { this.DebugMessage("Hook: Device created"); _d3d10_1VTblAddresses.AddRange(GetVTblAddresses(device.ComPointer, D3D10_1_DEVICE_METHOD_COUNT)); using (var renderForm = new SlimDX.Windows.RenderForm()) { using (var sc = new SwapChain(factory, device, DXGI.CreateSwapChainDescription(renderForm.Handle))) { _dxgiSwapChainVTblAddresses.AddRange(GetVTblAddresses(sc.ComPointer, DXGI.DXGI_SWAPCHAIN_METHOD_COUNT)); } } } } } // We will capture the backbuffer here DXGISwapChain_PresentHook = LocalHook.Create( _dxgiSwapChainVTblAddresses[(int)DXGI.DXGISwapChainVTbl.Present], new DXGISwapChain_PresentDelegate(PresentHook), this); // We will capture target/window resizes here DXGISwapChain_ResizeTargetHook = LocalHook.Create( _dxgiSwapChainVTblAddresses[(int)DXGI.DXGISwapChainVTbl.ResizeTarget], new DXGISwapChain_ResizeTargetDelegate(ResizeTargetHook), this); /* * Don't forget that all hooks will start deactivated... * The following ensures that all threads are intercepted: * Note: you must do this for each hook. */ DXGISwapChain_PresentHook.ThreadACL.SetExclusiveACL(new Int32[1]); DXGISwapChain_ResizeTargetHook.ThreadACL.SetExclusiveACL(new Int32[1]); }
public GraphicsManager(Form win) { if (GraphicsManager._instance == null) { GraphicsManager._instance = this; } _win = win; // Check for available settings Factory1 fac = new Factory1(); Adapter adapter = fac.GetAdapter(0); Output mon = adapter.GetOutput(0); ModeDescription[] modeList = mon.GetDisplayModeList(Format.B8G8R8A8_UNorm, DisplayModeEnumerationFlags.Interlaced); Rational rational = new Rational(0, 1); foreach (ModeDescription mode in modeList) { if (mode.Width == win.ClientSize.Width) { rational = new Rational(mode.RefreshRate.Numerator, mode.RefreshRate.Numerator); } } /* * SwapChainDescription1 scd1 = new SwapChainDescription1 * { * BufferCount = 2, * Flags = SwapChainFlags.None, * SampleDescription = new SampleDescription(1, 0), * SwapEffect = SwapEffect.Discard * }; */ // Create swap chain descirpiom object SwapChainDescription scd = new SwapChainDescription { BufferCount = 2, Flags = SwapChainFlags.None, IsWindowed = true, ModeDescription = new ModeDescription(win.ClientSize.Width, win.ClientSize.Height, rational, Format.R8G8B8A8_UNorm), OutputHandle = win.Handle, SampleDescription = new SampleDescription(1, 0), SwapEffect = SwapEffect.FlipSequential, Usage = Usage.RenderTargetOutput }; /* Reference * https://stackoverflow.com/questions/26220964/sharpdxhow-to-place-sharpdx-window-in-winforms-window * https://github.com/sharpdx/SharpDX-Samples/blob/master/Desktop/Direct2D1/MiniRect/Program.cs * https://github.com/r2d2rigo/MyFirstDirect2D-SharpDX/blob/master/MyFirstDirect2D/MyViewProvider.cs */ try { // Create our DirectX 11 device object and swap chain SharpDX.Direct3D11.Device.CreateWithSwapChain( SharpDX.Direct3D.DriverType.Hardware, DeviceCreationFlags.Debug | DeviceCreationFlags.BgraSupport, scd, out d3dDevice, out swapChain); }catch (Exception e) { MessageBox.Show(e.ToString()); return; } // Get access to the DirectX 11 context d3dContext = d3dDevice.ImmediateContext; // Create the Direct2D factory object, used in building a render target d2dFactory = new SharpDX.Direct2D1.Factory(); dwFactory = new SharpDX.DirectWrite.Factory(); // Create a texture target target = Texture2D.FromSwapChain <Texture2D>(swapChain, 0); targetView = new RenderTargetView(d3dDevice, target); // Create a surface from target surface = target.QueryInterface <Surface>(); // Finally create the important Direct2D render target d2dRenderTarget = new SharpDX.Direct2D1.RenderTarget(d2dFactory, surface, new SharpDX.Direct2D1.RenderTargetProperties( new SharpDX.Direct2D1.PixelFormat(scd.ModeDescription.Format, SharpDX.Direct2D1.AlphaMode.Premultiplied) )); // Initiallize the Graphic Manager internal parameters _inRender = false; _lock = new Object(); // Set initial tranformation of graphics system d2dRenderTarget.Transform = Identity; }
public static Dx11Device CreateDefaultAdapter() { using (Factory1 factory = new Factory1()) using (Adapter adapter = factory.GetAdapter(0)) return(new Dx11Device(adapter)); }