76 lines
3.2 KiB
C++
76 lines
3.2 KiB
C++
#pragma once
|
|
|
|
#include "MetaEditor/IEditorShell.h"
|
|
|
|
#include <filesystem>
|
|
#include <cstdint>
|
|
|
|
#include <windows.h>
|
|
|
|
namespace metacore::editor {
|
|
|
|
class DearImGuiEditorShell final : public IEditorShell {
|
|
public:
|
|
bool initialize() override;
|
|
void shutdown() override;
|
|
void consume_snapshot(const EditorFrameSnapshot& snapshot) override;
|
|
|
|
[[nodiscard]] bool initialized() const override;
|
|
[[nodiscard]] const EditorFrameSnapshot& last_snapshot() const override;
|
|
[[nodiscard]] std::string summarize_snapshot() const override;
|
|
[[nodiscard]] std::string describe_workspace() const override;
|
|
[[nodiscard]] std::string shell_name() const override;
|
|
[[nodiscard]] PendingShellEdits consume_pending_edits() override;
|
|
[[nodiscard]] metacore::engine::render::UiDrawFrame consume_render_frame() override;
|
|
|
|
void configure_platform_window(std::uintptr_t native_window_handle, int width, int height);
|
|
void refresh_platform_window_metrics(int width, int height);
|
|
void set_debug_export_path(std::filesystem::path path);
|
|
|
|
private:
|
|
friend LRESULT CALLBACK metacore_imgui_shell_wnd_proc(HWND hwnd, UINT message, WPARAM w_param, LPARAM l_param);
|
|
|
|
void initialize_imgui_context();
|
|
void shutdown_imgui_context();
|
|
void enqueue_headless_gizmo_state_edit(const EditorFrameSnapshot& snapshot);
|
|
void enqueue_headless_transform_edit(const EditorFrameSnapshot& snapshot);
|
|
void render_imgui_frame(const EditorFrameSnapshot& snapshot);
|
|
void render_dockspace_frame(const EditorFrameSnapshot& snapshot);
|
|
void ensure_default_dock_layout(const EditorFrameSnapshot& snapshot, unsigned int dockspace_id);
|
|
void render_toolbar(const EditorFrameSnapshot& snapshot);
|
|
void render_panel(const metacore::engine::editor_core::DockPanel& panel, const EditorFrameSnapshot& snapshot);
|
|
void render_hierarchy_panel(const EditorFrameSnapshot& snapshot);
|
|
void render_project_panel(const EditorFrameSnapshot& snapshot);
|
|
void render_viewport_panel(const EditorFrameSnapshot& snapshot);
|
|
void render_inspector_panel(const EditorFrameSnapshot& snapshot);
|
|
void render_console_panel(const EditorFrameSnapshot& snapshot);
|
|
void render_runtime_preview_panel(const EditorFrameSnapshot& snapshot);
|
|
void export_debug_snapshot() const;
|
|
void export_viewport_snapshot(std::ostringstream& stream) const;
|
|
void capture_render_frame();
|
|
void fulfill_texture_requests();
|
|
|
|
bool initialized_ = false;
|
|
EditorFrameSnapshot last_snapshot_{};
|
|
std::filesystem::path debug_export_path_{};
|
|
int last_draw_command_count_ = 0;
|
|
int last_vertex_count_ = 0;
|
|
int last_index_count_ = 0;
|
|
int last_window_count_ = 0;
|
|
bool headless_frame_enabled_ = false;
|
|
bool dock_layout_initialized_ = false;
|
|
bool headless_gizmo_override_consumed_ = false;
|
|
bool headless_transform_override_consumed_ = false;
|
|
bool imgui_context_owned_ = false;
|
|
bool win32_backend_enabled_ = false;
|
|
HWND native_window_handle_ = nullptr;
|
|
int native_window_width_ = 0;
|
|
int native_window_height_ = 0;
|
|
WNDPROC previous_wnd_proc_ = nullptr;
|
|
PendingShellEdits pending_edits_{};
|
|
metacore::engine::render::UiDrawFrame pending_render_frame_{};
|
|
std::uintptr_t next_mock_texture_id_ = 1;
|
|
};
|
|
|
|
} // namespace metacore::editor
|