mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 14:19:46 -06:00
Move Presenting, Dumping and ImGui out of Renderer
This commit is contained in:
78
Source/Core/VideoCommon/OnScreenUI.h
Normal file
78
Source/Core/VideoCommon/OnScreenUI.h
Normal file
@ -0,0 +1,78 @@
|
||||
// Copyright 2023 Dolphin Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <span>
|
||||
#include <vector>
|
||||
|
||||
#include "Common/CommonTypes.h"
|
||||
|
||||
class NativeVertexFormat;
|
||||
class AbstractTexture;
|
||||
class AbstractPipeline;
|
||||
|
||||
namespace VideoCommon
|
||||
{
|
||||
class OnScreenUI
|
||||
{
|
||||
public:
|
||||
OnScreenUI() = default;
|
||||
~OnScreenUI();
|
||||
|
||||
// ImGui initialization depends on being able to create textures and pipelines, so do it last.
|
||||
bool Initialize(u32 width, u32 height, float scale);
|
||||
|
||||
// Returns a lock for the ImGui mutex, enabling data structures to be modified from outside.
|
||||
// Use with care, only non-drawing functions should be called from outside the video thread,
|
||||
// as the drawing is tied to a "frame".
|
||||
std::unique_lock<std::mutex> GetImGuiLock();
|
||||
|
||||
bool IsReady() { return m_ready; }
|
||||
|
||||
// Sets up ImGui state for the next frame.
|
||||
// This function itself acquires the ImGui lock, so it should not be held.
|
||||
void BeginImGuiFrame(u32 width, u32 height);
|
||||
|
||||
// Same as above but without locking the ImGui lock.
|
||||
void BeginImGuiFrameUnlocked(u32 width, u32 height);
|
||||
|
||||
// Renders ImGui windows to the currently-bound framebuffer.
|
||||
// Should be called with the ImGui lock held.
|
||||
void DrawImGui();
|
||||
|
||||
// Recompiles ImGui pipeline - call when stereo mode changes.
|
||||
bool RecompileImGuiPipeline();
|
||||
|
||||
void SetScale(float backbuffer_scale);
|
||||
|
||||
void Finalize();
|
||||
|
||||
// Receive keyboard and mouse from QT
|
||||
void SetKeyMap(std::span<const std::array<int, 2>> key_map);
|
||||
void SetKey(u32 key, bool is_down, const char* chars);
|
||||
void SetMousePos(float x, float y);
|
||||
void SetMousePress(u32 button_mask);
|
||||
|
||||
private:
|
||||
// Destroys all ImGui GPU resources, must do before shutdown.
|
||||
void ShutdownImGui();
|
||||
|
||||
void DrawDebugText();
|
||||
|
||||
// ImGui resources.
|
||||
std::unique_ptr<NativeVertexFormat> m_imgui_vertex_format;
|
||||
std::vector<std::unique_ptr<AbstractTexture>> m_imgui_textures;
|
||||
std::unique_ptr<AbstractPipeline> m_imgui_pipeline;
|
||||
std::mutex m_imgui_mutex;
|
||||
u64 m_imgui_last_frame_time;
|
||||
|
||||
u32 m_backbuffer_width = 1;
|
||||
u32 m_backbuffer_height = 1;
|
||||
float m_backbuffer_scale = 1.0;
|
||||
|
||||
bool m_ready = false;
|
||||
};
|
||||
} // namespace VideoCommon
|
Reference in New Issue
Block a user