From f2266b843959413277767a990bb9a9c5593f3489 Mon Sep 17 00:00:00 2001 From: LaG1924 Date: Sun, 13 Jun 2021 13:47:33 +0500 Subject: Implemented basic RmlUi integration --- src/Render.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'src/Render.cpp') diff --git a/src/Render.cpp b/src/Render.cpp index d583205..7835b98 100644 --- a/src/Render.cpp +++ b/src/Render.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "imgui_impl_sdl_gl3.h" #include "Shader.hpp" @@ -16,6 +17,7 @@ #include "Settings.hpp" #include "Framebuffer.hpp" #include "Plugin.hpp" +#include "Rml.hpp" Render::Render(unsigned int windowWidth, unsigned int windowHeight, std::string windowTitle) { @@ -30,6 +32,8 @@ Render::Render(unsigned int windowWidth, unsigned int windowHeight, AssetManager::InitAssetManager(); glCheckError(); PrepareToRendering(); + glCheckError(); + InitRml(); glCheckError(); //Read settings @@ -73,6 +77,10 @@ Render::~Render() { Settings::WriteDouble("resolutionScale", fieldResolutionScale); Settings::Save(); + Rml::RemoveContext("default"); + rmlRender.reset(); + rmlSystem.reset(); + PluginSystem::Init(); framebuffer.reset(); @@ -125,6 +133,7 @@ void Render::InitGlew() { glViewport(0, 0, width, height); glClearColor(0.8,0.8,0.8, 1.0f); glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LEQUAL); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); @@ -220,6 +229,8 @@ void Render::HandleEvents() { SDL_GL_GetDrawableSize(window, &width, &height); renderState.WindowWidth = width; renderState.WindowHeight = height; + rmlRender->Update(width, height); + rmlContext->SetDimensions(Rml::Vector2i(width, height)); framebuffer->Resize(width * fieldResolutionScale, height * fieldResolutionScale); Framebuffer::GetDefault().Resize(width, height); break; @@ -331,6 +342,7 @@ void Render::HandleEvents() { break; } } + rmlContext->Update(); } void Render::HandleMouseCapture() { @@ -366,6 +378,9 @@ void Render::Update() { void Render::RenderGui() { OPTICK_EVENT(); + + rmlContext->Render(); + ImGui_ImplSdlGL3_NewFrame(window); if (isMouseCaptured) { @@ -750,3 +765,28 @@ void Render::InitEvents() { } }); } + +void Render::InitRml() { + LOG(INFO) << "Initializing Rml"; + + rmlSystem = std::make_unique(); + Rml::SetSystemInterface(rmlSystem.get()); + + rmlRender = std::make_unique(renderState); + Rml::SetRenderInterface(rmlRender.get()); + rmlRender->Update(renderState.WindowWidth, renderState.WindowHeight); + + if (!Rml::Initialise()) + LOG(WARNING) << "Rml not initialized"; + + rmlContext = Rml::CreateContext("default", Rml::Vector2i(renderState.WindowWidth, renderState.WindowHeight)); + + if (!Rml::LoadFontFace("OpenSans-Regular.ttf")) + LOG(WARNING) << "Rml font not loaded"; + + Rml::ElementDocument* document = rmlContext->LoadDocument("test.rml"); + if (document) + document->Show(); + else + LOG(WARNING) << "Rml document not loaded"; +} -- cgit v1.2.3