public Graphics(DX11 dx11, CoreSettings settings) { LowLevel = dx11; _settings = settings; ImGuiRender = dx11.ImGuiRender; SpritesRender = dx11.SpritesRender; }
public Graphics(RenderForm form, int width, int height) { reset = () => form.Invoke(new Action(() => { device.Reset(presentParameters); fontRenderer.Flush(); textureRenderer.Flush(); resized = false; })); form.UserResized += (sender, args) => Resize(form.ClientSize.Width, form.ClientSize.Height); presentParameters = new PresentParameters { Windowed = true, SwapEffect = SwapEffect.Discard, BackBufferFormat = Format.A8R8G8B8, BackBufferCount = 1, BackBufferWidth = width, BackBufferHeight = height, PresentationInterval = PresentInterval.One, MultiSampleType = MultisampleType.None, MultiSampleQuality = 0, PresentFlags = PresentFlags.LockableBackBuffer }; direct3D = new Direct3DEx(); device = new DeviceEx(direct3D, 0, DeviceType.Hardware, form.Handle, CREATE_FLAGS, presentParameters); fontRenderer = new FontRenderer(device); textureRenderer = new TextureRenderer(device); imguiRenderer = new ImGuiRender(device, form); renderLocker.Reset(); }
/// <summary> /// Implementation of capturing from the render target of the Direct3D9 Device (or DeviceEx) /// </summary> /// <param name="device"></param> private void DoCaptureRenderTarget(Device device, string hook) { if (CaptureThisFrame) #region CompasRenderLoop { try { if (imGuiRender == null && device != null && device.NativePointer != IntPtr.Zero) { Trace.Write("Creating ImGui"); var handle = CurrentProcess.MainWindowHandle; var rect = new NativeMethods.Rect(); NativeMethods.GetWindowRect(handle, ref rect); _sprite = ToDispose(new Sprite(device)); IntialiseElementResources(device); imGuiRender = ToDispose(new ImGuiRender(device, rect, Interface, handle)); } else if (imGuiRender != null) { if (Services.CompassSettings.ShowFPS) { PerfomanseTester.Reset(); PerfomanseTester.Start(); } _sprite.Begin(SpriteFlags.AlphaBlend); imGuiRender.GetNewFrame(); var CompassViewModel = PacketProcessor.Instance?.CompassViewModel; CompassViewModel?.Render(_sprite); //if (UIState.SettingsOpened) // ImGuiNative.igShowDemoWindow(ref UIState.OverlayOpened); if (Services.CompassSettings.ShowFPS) { var draw_list = ImGui.GetOverlayDrawList(); draw_list.AddText(new Vector2(10, 100), $"RenderingTime(ms) = {Elapsed.Milliseconds}", Color.Red.ToDx9ARGB()); draw_list.AddImageRounded((IntPtr)_imageCache["incombat.png"], new Vector2(64, 64), new Vector2(100, 100), new Vector2(100, 100), Vector2.One, Color.Red.ToDx9ARGB(), 2, 4); //bool r=true; // ImGuiNative.igShowDemoWindow(ref r); } imGuiRender.Draw(); _sprite.End(); if (Services.CompassSettings.ShowFPS && PerfomanseTester.IsRunning) { PerfomanseTester.Stop(); Elapsed = PerfomanseTester.Elapsed; } } } catch (Exception e) { DebugMessage(e.ToString()); } } #endregion }
/// <summary> /// Implementation of capturing from the render target of the Direct3D9 Device (or DeviceEx) /// </summary> /// <param name="device"></param> private void DoCaptureRenderTarget(Device device, string hook) { FPS.Frame(); if (CaptureThisFrame) #region CompasRenderLoop { try { if (imGuiRender == null && device != null && device.NativePointer != IntPtr.Zero) { Trace.Write("Creating ImGui"); var handle = CurrentProcess.MainWindowHandle; var rect = new NativeMethods.Rect(); NativeMethods.GetWindowRect(handle, ref rect); _sprite = ToDispose(new Sprite(device)); IntialiseElementResources(device); imGuiRender = ToDispose(new ImGuiRender(device, rect, Interface, CurrentProcess)); } else if (imGuiRender != null) { if (Services.CompassSettings.ShowRenderTime) { PerfomanseTester.Reset(); PerfomanseTester.Start(); } else if (PerfomanseTester.IsRunning) { PerfomanseTester.Stop(); } _sprite.Begin(SpriteFlags.AlphaBlend); imGuiRender.GetNewFrame(); var CompassViewModel = PacketProcessor.Instance?.CompassViewModel; CompassViewModel?.Render(_sprite); //ImGui.ShowDemoWindow(); if (Services.CompassSettings.ShowRenderTime) { var draw_list = ImGui.GetOverlayDrawList(); draw_list.AddText(new Vector2(10, 100), $"RenderingTime(ms) = {Elapsed.Milliseconds}", Color.Red.ToDx9ARGB()); draw_list.AddText(new Vector2(10, 50), DateTime.Now.ToString("HH: mm:ss.fff"), Color.White.ToDx9ARGB()); } if (Services.CompassSettings.ShowFPS) { ImGui.SetNextWindowBgAlpha(0); if (ImGui.Begin("FPS counter", ref Services.CompassSettings._showFps, ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.AlwaysAutoResize)) { ImGui.SetWindowFontScale(1.3F); ImGui.Text($"{FPS.GetFPS():n0} fps"); } ImGui.End(); } _sprite.End(); imGuiRender.Draw(); if (Services.CompassSettings.ShowRenderTime && PerfomanseTester.IsRunning) { PerfomanseTester.Stop(); Elapsed = PerfomanseTester.Elapsed; } } } catch (Exception e) { DebugMessage(e.ToString()); _sprite.End(); } } #endregion }