public override void Hook() { if (_d3d11VTblAddresses == null) { _d3d11VTblAddresses = new List <IntPtr>(); _dxgiSwapChainVTblAddresses = new List <IntPtr>(); #region Get Device and SwapChain method addresses // Create temporary device + swapchain and determine method addresses SlimDX.Direct3D11.Device device; SwapChain swapChain; using (SlimDX.Windows.RenderForm renderForm = new SlimDX.Windows.RenderForm()) { SlimDX.Result result = SlimDX.Direct3D11.Device.CreateWithSwapChain( DriverType.Hardware, DeviceCreationFlags.None, DXGI.CreateSwapChainDescription(renderForm.Handle), out device, out swapChain); if (result.IsSuccess) { this.DebugMessage("Hook: Device created"); using (device) { _d3d11VTblAddresses.AddRange(GetVTblAddresses(device.ComPointer, D3D11_DEVICE_METHOD_COUNT)); using (swapChain) { _dxgiSwapChainVTblAddresses.AddRange(GetVTblAddresses(swapChain.ComPointer, DXGI.DXGI_SWAPCHAIN_METHOD_COUNT)); } } } } #endregion } // 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]); }
private HResult TestCooperativeLevel() { if (m_pDevice == null) { return(HResult.E_FAIL); } HResult hr = HResult.S_OK; // Check the current status of D3D9 device. SlimDX.Result r = m_pDevice.TestCooperativeLevel(); hr = (HResult)r.Code; return(hr); }