Feature & Fix: Feature Docking layout, Fix ImGUI & glfw submodule

This commit is contained in:
0x221E
2026-02-06 19:48:40 +01:00
parent 88721ee0da
commit 71f516b564
7 changed files with 49 additions and 6 deletions

4
.gitmodules vendored
View File

@@ -1,3 +1,7 @@
[submodule "external/gtest"]
path = external/gtest
url = https://github.com/google/googletest.git
[submodule "external/imgui"]
path = external/imgui
url = https://github.com/ocornut/imgui.git
branch = docking

View File

@@ -24,7 +24,14 @@ file(GLOB_RECURSE SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
file(GLOB IMGUI_SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/external/imgui/*.cpp")
add_executable(emulator ${SRC_FILES}
${CMAKE_CURRENT_SOURCE_DIR}/external/glad/src/glad.c ${IMGUI_SRC_FILES})
${CMAKE_CURRENT_SOURCE_DIR}/external/glad/src/glad.c
${IMGUI_SRC_FILES}
"${CMAKE_CURRENT_SOURCE_DIR}/external/imgui/backends/imgui_impl_glfw.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/external/imgui/backends/imgui_impl_glfw.h"
"${CMAKE_CURRENT_SOURCE_DIR}/external/imgui/backends/imgui_impl_opengl3.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/external/imgui/backends/imgui_impl_opengl3.h"
"${CMAKE_CURRENT_SOURCE_DIR}/external/imgui/backends/imgui_impl_opengl3_loader.h"
)
target_link_libraries(emulator PRIVATE glfw OpenGL::GL)
target_include_directories(emulator PRIVATE external/glfw/include

1
external/glfw vendored Submodule

Submodule external/glfw added at 232164f62b

1
external/imgui vendored Submodule

Submodule external/imgui added at 913a3c6056

1
external/imgui_club vendored Submodule

Submodule external/imgui_club added at 1e7facddfd

View File

@@ -1,8 +1,9 @@
#include "GUI.h"
#include <imgui.h>
#include <imgui_impl_glfw.h>
#include <imgui_impl_opengl3.h>
#include <imgui_internal.h>
#include <backends/imgui_impl_glfw.h>
#include <backends/imgui_impl_opengl3.h>
#include <imgui_memory_editor.h>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
@@ -48,17 +49,19 @@ void GUI::CreateWindow() {
ImGui_ImplOpenGL3_Init("#version 460");
ImGuiIO& io = ImGui::GetIO();
io.FontGlobalScale = 2.0f;
io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;
io.FontGlobalScale = 1.5f;
}
void GUI::Run() {
while (!glfwWindowShouldClose(m_Window))
{
while (!glfwWindowShouldClose(m_Window)) {
glfwPollEvents();
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplGlfw_NewFrame();
ImGui::NewFrame();
DockingSetup();
ControlGUI();
DebugInfoGUI();
@@ -85,6 +88,30 @@ void GUI::Terminate() {
glfwTerminate();
}
void GUI::DockingSetup() {
ImGuiID dockspace_id = ImGui::GetID("Dockspace");
ImGuiViewport* viewport = ImGui::GetMainViewport();
if (ImGui::DockBuilderGetNode(dockspace_id) == nullptr) {
ImGui::DockBuilderAddNode(dockspace_id, ImGuiDockNodeFlags_DockSpace);
ImGui::DockBuilderSetNodeSize(dockspace_id, viewport->Size);
ImGuiID dock_id_left = 0;
ImGuiID dock_id_main = dockspace_id;
ImGui::DockBuilderSplitNode(dock_id_main, ImGuiDir_Left, 0.40f, &dock_id_left, &dock_id_main);
ImGuiID dock_id_right = 0;
ImGui::DockBuilderSplitNode(dock_id_main, ImGuiDir_Right, 0.40f, &dock_id_right, &dock_id_main);
// ImGuiID dock_id_left_top = 0;
// ImGuiID dock_id_left_bottom = 0;
// ImGui::DockBuilderSplitNode(dock_id_left, ImGuiDir_Up, 0.50f, &dock_id_left_top, &dock_id_left_bottom);
ImGui::DockBuilderDockWindow("Process Memory", dock_id_main);
ImGui::DockBuilderDockWindow("Debug Information", dock_id_left);
ImGui::DockBuilderDockWindow("Emulator Control", dock_id_right);
ImGui::DockBuilderFinish(dockspace_id);
}
ImGui::DockSpaceOverViewport(dockspace_id, viewport, ImGuiDockNodeFlags_PassthruCentralNode);
}
void GUI::ControlGUI() {
ImGui::Begin("Emulator Control");
ImGui::Text("Current State: %s", m_Userspace.IsRunning() ? "Running" : "Stopped");

View File

@@ -14,6 +14,8 @@ private:
void CreateWindow();
void Terminate();
void DockingSetup();
void ControlGUI();
void DebugInfoGUI();