unsafe void InitializeInner(AntiAliasingMode antiAliasingMode) { worldMatrix = Matrix.Identity; textMatrix = Matrix.Identity; device = new D3D11.Device(DriverType.Hardware, D3D11.DeviceCreationFlags.None, new[] { FeatureLevel.Level_11_1, FeatureLevel.Level_11_0, FeatureLevel.Level_10_1, FeatureLevel.Level_10_0 }); tkDevice = TK.GraphicsDevice.New(device); deviceContext = device.ImmediateContext; deviceContext.Rasterizer.State = device.CreateRasterizerState(); //TODO: replace with precompiled bytecode const string shaderFile = @"..\..\..\GameUtils\Graphics\shaders.fx"; ShaderBytecode vertexShaderBytecode = ShaderBytecode.CompileFromFile(shaderFile, "VS", "vs_4_0", ShaderFlags.Debug); ShaderBytecode pixelShaderBytecode = ShaderBytecode.CompileFromFile(shaderFile, "PS", "ps_4_0", ShaderFlags.Debug); InitializeShaders(vertexShaderBytecode, pixelShaderBytecode); indexBuffers = new D3D11.Buffer[BufferCount]; vertexBuffers = new D3D11.Buffer[BufferCount]; for (int i = 0, indexBufferSize = IndexBufferStartSize, vertexBufferSize = VertexBufferStartSize; i < BufferCount; i++, indexBufferSize <<= BufferSizeStep, vertexBufferSize <<= BufferSizeStep) { indexBuffers[i] = device.CreateDynamicBuffer(sizeof(int) * indexBufferSize, D3D11.BindFlags.IndexBuffer); vertexBuffers[i] = device.CreateDynamicBuffer(sizeof(Vertex) * vertexBufferSize, D3D11.BindFlags.VertexBuffer); } currentBufferIndex = 0; indexBuffer = indexBuffers[0]; vertexBuffer = vertexBuffers[0]; //indexBuffer = device.CreateDynamicBuffer(sizeof(int) * IndexBufferSize, D3D11.BindFlags.IndexBuffer); //vertexBuffer = device.CreateDynamicBuffer(sizeof(Vertex) * VertexBufferSize, D3D11.BindFlags.VertexBuffer); matrixBuffer = device.CreateConstantBuffer(sizeof(MatrixBuffer)); brushBuffer = device.CreateConstantBuffer(sizeof(Brush.BrushBuffer)); deviceContext.InputAssembler.SetIndexBuffer(indexBuffer, DXGI.Format.R32_UInt, 0); deviceContext.InputAssembler.SetVertexBuffers(0, new D3D11.VertexBufferBinding(vertexBuffer, sizeof(Vertex), 0)); deviceContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; blendState = device.CreateBlendState(); deviceContext.OutputMerger.SetBlendState(blendState); currentWrapMode = WrapMode.Clamp; currentInterpolationMode = InterpolationMode.Linear; samplerState = device.CreateSamplerState(WrapMode.Clamp, InterpolationMode.Linear); deviceContext.PixelShader.SetSampler(0, samplerState); sampleDescription = device.GetMultisamplingLevel(antiAliasingMode); defaultDepthStencilState = device.CreateDepthStencilState(D3D11.Comparison.Always, D3D11.StencilOperation.Keep, D3D11.StencilOperation.Keep); clipDepthStencilState = device.CreateDepthStencilState(D3D11.Comparison.Never, D3D11.StencilOperation.Replace, D3D11.StencilOperation.Keep); clippingDepthStencilState = device.CreateDepthStencilState(D3D11.Comparison.Equal, D3D11.StencilOperation.Keep, D3D11.StencilOperation.Keep); deviceContext.OutputMerger.SetDepthStencilState(defaultDepthStencilState); }
public void Hook() { try { DeviceContext deviceContext = null; if (!InitializeSwapChain(out var swapChain)) { _server.Message("Failed to create swap chain"); } else { _server.Message("Swap chain created successfully!"); } _server.Message("Hooking Present()..."); using (var presentHook = new PresentHook(swapChain)) { presentHook.OnInitialized += (eDevice, eDeviceContext) => { _device = eDevice; deviceContext = eDeviceContext; }; while (!presentHook.Initialized) { } } lock (_lock) { _shaders = new Shaders(_device); } using (_drawIndexedHook = new DrawIndexedHook(deviceContext, _device.CreateDepthStencilState(false, false), _shaders)) { _server.NotifyHookStarted(); _server.Message("Ready for input..."); while (true) { if (_drawIndexedHook.IsLoggerEnabled) { if (Input.GetKey(Keys.NumPad2)) { _drawIndexedHook.ChangeModel(-1); } else if (Input.GetKey(Keys.NumPad5)) { _drawIndexedHook.ChangeModel(1); } if (Input.GetKey(Keys.NumPad1)) { _drawIndexedHook.ChangeSelectedByteWidth(-1); } else if (Input.GetKey(Keys.NumPad3)) { _drawIndexedHook.ChangeSelectedByteWidth(1); } Thread.Sleep(100); } if (Input.GetKey(Keys.End)) { _server.Message($"Logger enabled: {_drawIndexedHook.ToggleLogger()}"); Thread.Sleep(1000); } if (Input.GetKey(Keys.Insert)) { var selectedModel = _drawIndexedHook.GetSelectedModel(); _server.RequestSaveModel(selectedModel); Thread.Sleep(1000); } // Only render saved models - Immediate _drawIndexedHook.RenderSavedModelsOnly(Input.GetKey(Keys.NumPad0)); _server.Ping(); } } } catch (RemotingException) { // Host application has exited } catch (Exception e) { _server.Message(e.ToString()); } }
/// <summary> /// Constructs a new <see cref = "T:SharpDX.Direct3D11.DepthStencilState" /> based on the specified description. /// </summary> /// <param name = "device">The device with which to associate the state object.</param> /// <param name = "description">The state description.</param> /// <returns>The newly created object.</returns> /// <msdn-id>ff476506</msdn-id> /// <unmanaged>HRESULT ID3D11Device::CreateDepthStencilState([In] const D3D11_DEPTH_STENCIL_DESC* pDepthStencilDesc,[Out, Fast] ID3D11DepthStencilState** ppDepthStencilState)</unmanaged> /// <unmanaged-short>ID3D11Device::CreateDepthStencilState</unmanaged-short> public DepthStencilState(Device device, DepthStencilStateDescription description) : base(IntPtr.Zero) { device.CreateDepthStencilState(ref description, this); }