Initial integration of docking that saves layout and does not crash
parent
45efe57988
commit
a47adeaa20
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace ImGui
|
namespace ImGui
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -17,4 +16,4 @@ IMGUI_API void SaveDock();
|
||||||
IMGUI_API void Print();
|
IMGUI_API void Print();
|
||||||
|
|
||||||
|
|
||||||
} // namespace ImGui
|
} // namespace ImGui
|
||||||
|
|
|
@ -64,6 +64,7 @@ INCLUDE_DIRECTORIES (
|
||||||
3rdparty/bgfx/3rdparty/glsl-optimizer/src/
|
3rdparty/bgfx/3rdparty/glsl-optimizer/src/
|
||||||
3rdparty/bgfx/3rdparty/glsl-optimizer/src/mesa/
|
3rdparty/bgfx/3rdparty/glsl-optimizer/src/mesa/
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui_docking_minimal/include
|
${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui_docking_minimal/include
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/bgfx/3rdparty/ocornut-imgui
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/src
|
${CMAKE_CURRENT_BINARY_DIR}/src
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -86,7 +87,7 @@ SET ( protot_SRCS
|
||||||
src/RuntimeModuleManager.cc
|
src/RuntimeModuleManager.cc
|
||||||
|
|
||||||
3rdparty/glfw/deps/glad.c
|
3rdparty/glfw/deps/glad.c
|
||||||
3rdparty/imgui_docking_minimal/imgui/imgui_dock.cpp
|
3rdparty/imgui_docking_minimal/src/imgui_dock.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
SET (PROTOT_SOURCE_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
|
SET (PROTOT_SOURCE_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include "Timer.h"
|
#include "Timer.h"
|
||||||
#include "RuntimeModuleManager.h"
|
#include "RuntimeModuleManager.h"
|
||||||
#include "imgui/imgui.h"
|
#include "imgui/imgui.h"
|
||||||
|
#include "imgui_dock.h"
|
||||||
|
|
||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
#include "Serializer.h"
|
#include "Serializer.h"
|
||||||
|
@ -143,6 +144,7 @@ int main(void)
|
||||||
imguiCreate();
|
imguiCreate();
|
||||||
GuiInputState gui_input_state;
|
GuiInputState gui_input_state;
|
||||||
gGuiInputState = &gui_input_state;
|
gGuiInputState = &gui_input_state;
|
||||||
|
ImGui::LoadDock();
|
||||||
|
|
||||||
// Timer
|
// Timer
|
||||||
Timer timer;
|
Timer timer;
|
||||||
|
@ -228,6 +230,9 @@ int main(void)
|
||||||
|
|
||||||
gRenderer = nullptr;
|
gRenderer = nullptr;
|
||||||
|
|
||||||
|
ImGui::SaveDock();
|
||||||
|
ImGui::ShutdownDock();
|
||||||
imguiDestroy();
|
imguiDestroy();
|
||||||
|
|
||||||
bgfx::shutdown();
|
bgfx::shutdown();
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,9 @@
|
||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
#include "RenderModule.h"
|
#include "RenderModule.h"
|
||||||
#include "3rdparty/ocornut-imgui/imgui.h"
|
#include "3rdparty/ocornut-imgui/imgui.h"
|
||||||
|
#include "3rdparty/ocornut-imgui/imgui_internal.h"
|
||||||
#include "imgui/imgui.h"
|
#include "imgui/imgui.h"
|
||||||
|
#include "imgui_dock.h"
|
||||||
#define GLFW_EXPOSE_NATIVE_GLX
|
#define GLFW_EXPOSE_NATIVE_GLX
|
||||||
#define GLFW_EXPOSE_NATIVE_X11
|
#define GLFW_EXPOSE_NATIVE_X11
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
|
@ -43,6 +45,10 @@ typedef Vector3f Vector3f;
|
||||||
typedef MatrixNNf MatrixNNf;
|
typedef MatrixNNf MatrixNNf;
|
||||||
typedef VectorNf VectorNf;
|
typedef VectorNf VectorNf;
|
||||||
|
|
||||||
|
static bool show_scene0 = true;
|
||||||
|
static bool show_scene1 = true;
|
||||||
|
static bool show_scene2 = true;
|
||||||
|
|
||||||
struct Renderer;
|
struct Renderer;
|
||||||
|
|
||||||
struct module_state {
|
struct module_state {
|
||||||
|
@ -128,7 +134,7 @@ static bool module_step(struct module_state *state, float dt) {
|
||||||
bgfx::reset (width, height);
|
bgfx::reset (width, height);
|
||||||
|
|
||||||
int dock_top_offset = 0.0f;
|
int dock_top_offset = 0.0f;
|
||||||
int dock_width = 400;
|
int dock_width = 0;
|
||||||
// ImGui::RootDock(
|
// ImGui::RootDock(
|
||||||
// ImVec2(width - dock_width, dock_top_offset),
|
// ImVec2(width - dock_width, dock_top_offset),
|
||||||
// ImVec2(dock_width, height - dock_top_offset)
|
// ImVec2(dock_width, height - dock_top_offset)
|
||||||
|
@ -139,6 +145,7 @@ static bool module_step(struct module_state *state, float dt) {
|
||||||
ImGuizmo::Enable(true);
|
ImGuizmo::Enable(true);
|
||||||
|
|
||||||
state->renderer->paintGL();
|
state->renderer->paintGL();
|
||||||
|
state->renderer->DrawGui();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1700,10 +1707,6 @@ void Renderer::paintGL() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Advance to next frame. Rendering thread will be kicked to
|
|
||||||
// process submitted rendering primitives.
|
|
||||||
bgfx::frame();
|
|
||||||
|
|
||||||
// if (ImGui::BeginDock("Render Settings")) {
|
// if (ImGui::BeginDock("Render Settings")) {
|
||||||
if(ImGui::DragFloat3 ("Light0 Pos", lights[0].pos.data(), 1.0f, -10.0f, 10.0f)) {
|
if(ImGui::DragFloat3 ("Light0 Pos", lights[0].pos.data(), 1.0f, -10.0f, 10.0f)) {
|
||||||
}
|
}
|
||||||
|
@ -1739,10 +1742,45 @@ void Renderer::paintGL() {
|
||||||
|
|
||||||
// ImGui::EndDock();
|
// ImGui::EndDock();
|
||||||
|
|
||||||
|
// Advance to next frame. Rendering thread will be kicked to
|
||||||
|
// process submitted rendering primitives.
|
||||||
|
bgfx::frame();
|
||||||
|
|
||||||
// clear debug commands as they have to be issued every frame
|
// clear debug commands as they have to be issued every frame
|
||||||
debugCommands.clear();
|
debugCommands.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Renderer::DrawGui() {
|
||||||
|
ImGuiStyle& style = ImGui::GetStyle();
|
||||||
|
if (ImGui::GetIO().DisplaySize.y > 0) {
|
||||||
|
ImVec2 pos = ImVec2(0, 25);
|
||||||
|
ImVec2 size = ImGui::GetIO().DisplaySize;
|
||||||
|
size.y -= pos.y;
|
||||||
|
ImGui::RootDock(pos, ImVec2(size.x, size.y - 25.0f));
|
||||||
|
|
||||||
|
// Draw status bar (no docking)
|
||||||
|
ImGui::SetNextWindowSize(ImVec2(size.x, 25.0f), ImGuiSetCond_Always);
|
||||||
|
ImGui::SetNextWindowPos(ImVec2(0, size.y - 32.0f), ImGuiSetCond_Always);
|
||||||
|
ImGui::Begin("statusbar", nullptr, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoResize);
|
||||||
|
ImGui::Text("FPS: %f", ImGui::GetIO().Framerate);
|
||||||
|
ImGui::End();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ImGui::BeginDock("Docks", &show_scene0)) {
|
||||||
|
ImGui::Print();
|
||||||
|
}
|
||||||
|
ImGui::EndDock();
|
||||||
|
|
||||||
|
if (ImGui::BeginDock("Dummy1", &show_scene1)) {
|
||||||
|
ImGui::Text("Placeholder!");
|
||||||
|
}
|
||||||
|
ImGui::EndDock();
|
||||||
|
// if (ImGui::BeginDock("Dummy2", &show_scene2)) {
|
||||||
|
// ImGui::Text("Placeholder2!");
|
||||||
|
// }
|
||||||
|
// ImGui::EndDock();
|
||||||
|
}
|
||||||
|
|
||||||
bool Renderer::updateShaders() {
|
bool Renderer::updateShaders() {
|
||||||
bool result = true;
|
bool result = true;
|
||||||
for (int i = 0; i < RenderState::Count; i++) {
|
for (int i = 0; i < RenderState::Count; i++) {
|
||||||
|
|
|
@ -417,6 +417,7 @@ struct Renderer {
|
||||||
void initialize(int width, int height);
|
void initialize(int width, int height);
|
||||||
void shutdown();
|
void shutdown();
|
||||||
void paintGL();
|
void paintGL();
|
||||||
|
void DrawGui();
|
||||||
void resize (int x, int y, int width, int height);
|
void resize (int x, int y, int width, int height);
|
||||||
|
|
||||||
// check whether shader files were modified and reload them. Returns
|
// check whether shader files were modified and reload them. Returns
|
||||||
|
|
Loading…
Reference in New Issue