public static DescriptorHeap CreateRenderTargetViewHeap(Config config, SwapChain3 swapchain, out Resource[] renderTargets) { var Heap = Engine.Instance.Core.Device.CreateDescriptorHeap(new DescriptorHeapDescription() { DescriptorCount = config.FrameCount, Flags = DescriptorHeapFlags.None, Type = DescriptorHeapType.RenderTargetView }); renderTargets = new Resource[config.FrameCount]; int Step = Engine.Instance.Core.Device.GetDescriptorHandleIncrementSize(DescriptorHeapType.RenderTargetView); for (int n = 0; n < config.FrameCount; n++) { renderTargets[n] = swapchain.GetBackBuffer<Resource>(n); Engine.Instance.Core.Device.CreateRenderTargetView(renderTargets[n], null, Heap.CPUDescriptorHandleForHeapStart + n* Step); } return Heap; }
public static SwapChain3 CreateSwapchain(RenderForm form, CommandQueue queue,Config config) { using (var Factory = new Factory4()) { var swapChainDesc = new SwapChainDescription() { BufferCount = config.FrameCount, ModeDescription = new ModeDescription(config.Width, config.Height, new Rational(config.RefreshRate, 1), config.Format), Usage = Usage.RenderTargetOutput, SwapEffect = SwapEffect.FlipDiscard, OutputHandle = form.Handle, SampleDescription = new SampleDescription(config.SampleCount, config.SampleQuality), IsWindowed = true }; var tempSwapChain = new SwapChain(Factory, queue, swapChainDesc); var SwapChain = tempSwapChain.QueryInterface<SwapChain3>(); tempSwapChain.Dispose(); return SwapChain; } }
public Engine(RenderForm form, Config config) { Instance = this; Core = new Core(form, config); ResourceManager = new ResourceManager(); }
public Core(RenderForm form, Config config) { Form = form; Config = config; }