public void UpdateFrame(SharpDX.Direct3D11.Device device, TimeSpan deltaTime, ref MouseState mouse) { var nextSize = new Vector2(200, 200); ImGui.SetNextWindowSize(ref nextSize, ImGuiCond.FirstUseEver); var padding = Vector2.Zero; ImGui.PushStyleVar(ImGuiStyleVar.WindowPadding, ref padding); if (ImGui.Begin(m_name)) { var size = ImGui.GetContentRegionAvail(); var pos = ImGui.GetWindowPos(); var frameHeight = ImGui.GetFrameHeight(); var localMouse = ImGui.GetMousePos() - pos - new Vector2(0, frameHeight); var width = (int)size.X; var height = (int)size.Y; if (localMouse.X >= 0 && localMouse.Y >= 0 && localMouse.X < size.X && localMouse.Y < size.Y) { m_mouse = mouse; // cursor on view m_mouse.X = (int)localMouse.X; m_mouse.Y = (int)localMouse.Y; } m_camera.MouseInput(m_mouse, width, height); // update m_im3d.Set(); Im3d.Im3dGui_NewFrame(ref m_camera.state, ref m_mouse, (float)deltaTime.TotalSeconds, -1); Im3d.Gizmo("gizmo", ref m_model.M11); Im3d.EndFrame(); if (m_renderTexture != null) { var desc = m_renderTexture.Description; if (desc.Width != width || desc.Height != height) { m_renderTexture.Dispose(); m_renderTexture = null; m_srv.Dispose(); m_srv = null; } } if (m_renderTexture == null) { m_renderTexture = new Texture2D(device, new Texture2DDescription { Format = SharpDX.DXGI.Format.B8G8R8X8_UNorm, ArraySize = 1, MipLevels = 1, Width = width, Height = height, SampleDescription = new SharpDX.DXGI.SampleDescription { Count = 1, Quality = 0 }, BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource }); m_srv = new ShaderResourceView(device, m_renderTexture); m_rt.FromTexture(device, m_renderTexture); } m_rt.Setup(device, m_clearColor); // render ImGui.DX11_DrawTeapot(device.ImmediateContext.NativePointer, ref m_camera.state.viewProjection.M11, ref m_model.M11); // im3d Im3d.Im3d_DX11_Draw(device.ImmediateContext.NativePointer, ref m_camera.state.viewProjection.M11, (int)m_camera.state.viewportWidth, (int)m_camera.state.viewportHeight, Im3d.GetDrawLists(), (int)Im3d.GetDrawListCount().Value); // // show render target // var uv0 = Vector2.Zero; var uv1 = Vector2.One; var bg = new Vector4(1, 1, 1, 1); var tint = new Vector4(1, 1, 1, 1); ImGui.ImageButton(m_srv.NativePointer, ref size, ref uv0, ref uv1, 0, ref bg, ref tint); } ImGui.End(); ImGui.PopStyleVar(); }