예제 #1
0
파일: DX11.cs 프로젝트: zaafar/ExileApi
        public void Render(double sleepTime, Core core)
        {
            try
            {
                startFrameTime = sw.Elapsed.TotalSeconds;
                Clear(new Color(_clearColor.X, _clearColor.Y, _clearColor.Z, _clearColor.W));
                debugTime = sw.Elapsed.TotalMilliseconds;
                ImGui.NewFrame();

                // ImGuiRender.InputUpdate();
                ImGuiRender.BeginBackGroundWindow();
                core.Tick();
                debugTime = sw.Elapsed.TotalMilliseconds;
                SpritesRender.Render();
                SpritesDebug.Tick = sw.Elapsed.TotalMilliseconds - debugTime;
                debugTime         = sw.Elapsed.TotalMilliseconds;
                ImGuiRender.Render();
                ImGuiDebug.Tick = sw.Elapsed.TotalMilliseconds - debugTime;
                debugTime       = sw.Elapsed.TotalMilliseconds;
                _swapChain.Present(VSync ? 1 : 0, PresentFlags.None);
                SwapchainDebug.Tick = (float)(sw.Elapsed.TotalMilliseconds - debugTime);
                endFrameTime        = sw.Elapsed.TotalSeconds;
                ImGui.GetIO().DeltaTime = (float)Time.DeltaTime;
            }
            catch (Exception e)
            {
                Core.Logger.Error($"DX11.Render -> {e}");
            }
        }
예제 #2
0
파일: DX11.cs 프로젝트: zaafar/ExileApi
        public DX11(RenderForm form, CoreSettings coreSettings)
        {
            _form = form;
            sw    = Stopwatch.StartNew();
            LoadedTexturesByName = new Dictionary <string, ShaderResourceView>();
            LoadedTexturesByPtrs = new Dictionary <IntPtr, ShaderResourceView>();

            var swapChainDesc = new SwapChainDescription
            {
                Usage             = Usage.RenderTargetOutput,
                OutputHandle      = form.Handle,
                BufferCount       = 1,
                IsWindowed        = true,
                Flags             = SwapChainFlags.AllowModeSwitch,
                SwapEffect        = SwapEffect.Discard,
                SampleDescription = new SampleDescription(1, 0),
                ModeDescription   = new ModeDescription
                {
                    Format           = Format.R8G8B8A8_UNorm,
                    Width            = form.Width,
                    Height           = form.Height,
                    Scaling          = DisplayModeScaling.Unspecified,
                    RefreshRate      = new Rational(60, 1),
                    ScanlineOrdering = DisplayModeScanlineOrder.Unspecified
                }
            };

            Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.None,
                                       new[] { FeatureLevel.Level_11_0, FeatureLevel.Level_10_0 }, swapChainDesc, out var device,
                                       out var swapChain);

            D11Device     = device;
            DeviceContext = device.ImmediateContext;
            _swapChain    = swapChain;

            factory = swapChain.GetParent <Factory>();
            factory.MakeWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll);
            BackBuffer       = Resource.FromSwapChain <Texture2D>(swapChain, 0);
            RenderTargetView = new RenderTargetView(device, BackBuffer);

            using (new PerformanceTimer("Init ImGuiRender"))
            {
                ImGuiRender = new ImGuiRender(this, form, coreSettings);
            }

            using (new PerformanceTimer("Init SpriteRender"))
            {
                SpritesRender = new SpritesRender(this, form, coreSettings);
            }

            InitStates();

            form.UserResized += (sender, args) =>
            {
                RenderTargetView?.Dispose();
                BackBuffer.Dispose();

                swapChain.ResizeBuffers(1, form.Width, form.Height, Format.R8G8B8A8_UNorm, SwapChainFlags.None);
                BackBuffer       = Resource.FromSwapChain <Texture2D>(swapChain, 0);
                RenderTargetView = new RenderTargetView(device, BackBuffer);
                ImGuiRender.Resize(form.Bounds);
                ImGuiRender.UpdateConstantBuffer();
                SpritesRender.ResizeConstBuffer(BackBuffer.Description);
                var descp = BackBuffer.Description;
                Viewport.Height = form.Height;
                Viewport.Width  = form.Width;
                DeviceContext.Rasterizer.SetViewport(Viewport);
                DeviceContext.OutputMerger.SetRenderTargets(RenderTargetView);
            };

            ImGuiDebug     = new DebugInformation("ImGui");
            SpritesDebug   = new DebugInformation("Sprites");
            SwapchainDebug = new DebugInformation("Swapchain");

            // Core.DebugInformations.Add(ImGuiDebug);
            // Core.DebugInformations.Add(ImGuiInputDebug);
            // Core.DebugInformations.Add(SpritesDebug);
            // Core.DebugInformations.Add(SwapchainDebug);
        }