From f1903de9ab68f053eabea831566c0bb9e6804adc Mon Sep 17 00:00:00 2001 From: antopilo Date: Wed, 11 Sep 2024 17:41:39 -0400 Subject: [PATCH] Fixed input manager for UI + WorldSpace UI --- Nuake/src/Rendering/SceneRenderer.cpp | 51 +++++++++++++++--------- Nuake/src/Resource/Serializable.h | 4 +- Nuake/src/Resource/UI.cpp | 1 + Nuake/src/Scene/Components/UIComponent.h | 2 + Nuake/src/UI/UIInputManager.h | 25 +++++------- 5 files changed, 48 insertions(+), 35 deletions(-) diff --git a/Nuake/src/Rendering/SceneRenderer.cpp b/Nuake/src/Rendering/SceneRenderer.cpp index 9d770748..4b9f5ba0 100644 --- a/Nuake/src/Rendering/SceneRenderer.cpp +++ b/Nuake/src/Rendering/SceneRenderer.cpp @@ -16,6 +16,7 @@ #include #include #include +#include namespace Nuake @@ -436,20 +437,23 @@ namespace Nuake continue; } - // Fetch resource from resource manager using UUID - Ref uiResource = ResourceManager::GetResource(uiComponent.UIResource); - uiResource->Resize(framebuffer.GetSize()); - - // Copy UI onto final viewport - framebuffer.Bind(); + if (!uiComponent.IsWorldSpace) { - Shader* shader = ShaderManager::GetShader("Resources/Shaders/add.shader"); - shader->Bind(); - shader->SetUniform("u_Source", mTempFrameBuffer->GetTexture().get(), 0); - shader->SetUniform("u_Source2", uiResource->GetOutputTexture().get(), 1); - Renderer::DrawQuad(); + // Fetch resource from resource manager using UUID + Ref uiResource = ResourceManager::GetResource(uiComponent.UIResource); + uiResource->Resize(framebuffer.GetSize()); + + // Copy UI onto final viewport + framebuffer.Bind(); + { + Shader* shader = ShaderManager::GetShader("Resources/Shaders/add.shader"); + shader->Bind(); + shader->SetUniform("u_Source", mTempFrameBuffer->GetTexture().get(), 0); + shader->SetUniform("u_Source2", uiResource->GetOutputTexture().get(), 1); + Renderer::DrawQuad(); + } + framebuffer.Unbind(); } - framebuffer.Unbind(); } glDepthMask(true); @@ -909,14 +913,25 @@ namespace Nuake Renderer::QuadMesh->SetMaterial(previousMaterial); } + auto uiView = scene.m_Registry.view(); + for (auto e : uiView) + { + auto [transform, uiComponent] = uiView.get(e); + if (!uiComponent.IsWorldSpace) + { + continue; + } - // Temp models - - - - + Ref uiResource = ResourceManager::GetResource(uiComponent.UIResource); + Matrix4 finalTransform = transform.GetGlobalTransform(); + Renderer::QuadMesh->GetMaterial()->SetAlbedo(uiResource->GetOutputTexture()); + Renderer::SubmitMesh(Renderer::QuadMesh, finalTransform, (uint32_t)e); + Renderer::Flush(gBufferShader, false); + //Renderer::DrawQuad(finalTransform); + } + // Reset material on quadmesh - // Renderer::QuadMesh->SetMaterial(previousMaterial); + Renderer::QuadMesh->SetMaterial(previousMaterial); // Skinned mesh at the end because we switch shader gBufferSkinnedMeshShader->Bind(); diff --git a/Nuake/src/Resource/Serializable.h b/Nuake/src/Resource/Serializable.h index 0d0b45ff..54a79b81 100644 --- a/Nuake/src/Resource/Serializable.h +++ b/Nuake/src/Resource/Serializable.h @@ -56,8 +56,8 @@ p = j[#p]; \ } \ } -#define SERIALIZE_OBJECT(v) j[#v] = v->Serialize(); -#define SERIALIZE_OBJECT_REF(v) j[#v] = v.Serialize(); +#define SERIALIZE_OBJECT(v) j[#v] = v->Serialize(); +#define SERIALIZE_OBJECT_REF(v) j[#v] = v.Serialize(); #define SERIALIZE_OBJECT_REF_LBL(lbl, v) j[lbl] = v.Serialize(); #define END_SERIALIZE() return j; #define DUMP_SERIALIZE() j.dump(4); diff --git a/Nuake/src/Resource/UI.cpp b/Nuake/src/Resource/UI.cpp index 8c584144..18e47a26 100644 --- a/Nuake/src/Resource/UI.cpp +++ b/Nuake/src/Resource/UI.cpp @@ -34,6 +34,7 @@ void UIResource::Draw() { framebuffer->Bind(); { + RenderCommand::SetClearColor({ 0, 0, 0, 0 }); RenderCommand::Clear(); if (canvas) diff --git a/Nuake/src/Scene/Components/UIComponent.h b/Nuake/src/Scene/Components/UIComponent.h index edbcedc2..12245ec6 100644 --- a/Nuake/src/Scene/Components/UIComponent.h +++ b/Nuake/src/Scene/Components/UIComponent.h @@ -19,12 +19,14 @@ namespace Nuake { BEGIN_SERIALIZE(); SERIALIZE_VAL(UIFilePath); + SERIALIZE_VAL(IsWorldSpace); END_SERIALIZE(); } bool Deserialize(const json& j) { DESERIALIZE_VAL(UIFilePath); + DESERIALIZE_VAL(IsWorldSpace); return true; } }; diff --git a/Nuake/src/UI/UIInputManager.h b/Nuake/src/UI/UIInputManager.h index c8801cf0..cddea33b 100644 --- a/Nuake/src/UI/UIInputManager.h +++ b/Nuake/src/UI/UIInputManager.h @@ -1,6 +1,7 @@ #pragma once #include "InputManager.h" +#include "src/Core/Input.h" #include @@ -16,45 +17,39 @@ namespace Nuake { mWindow = window.GetHandle(); - glfwSetScrollCallback(mWindow, MyInputManager::scroll_callback); - glfwSetCharCallback(mWindow, MyInputManager::char_callback); - glfwSetKeyCallback(mWindow, MyInputManager::key_callback); + //glfwSetScrollCallback(mWindow, MyInputManager::scroll_callback); + //glfwSetCharCallback(mWindow, MyInputManager::char_callback); + //glfwSetKeyCallback(mWindow, MyInputManager::key_callback); } bool IsMouseInputDown() override { - auto state = glfwGetMouseButton(mWindow, GLFW_MOUSE_BUTTON_1); - return state == GLFW_PRESS; + return Input::IsMouseButtonDown(1); } bool IsKeyPressed(uint32_t key) override { - auto states = glfwGetKey(mWindow, key); - return states == GLFW_PRESS; + return Input::IsKeyPressed((Nuake::Key)key); } float GetMouseX() override { - double xpos, ypos; - glfwGetCursorPos(mWindow, &xpos, &ypos); - return (float)xpos; + return Input::GetMouseX(); } float GetMouseY() override { - double xpos, ypos; - glfwGetCursorPos(mWindow, &xpos, &ypos); - return (float)ypos; + return Input::GetMouseY(); } float GetScrollX() override { - return ScrollX; + return 0.0f; } float GetScrollY() override { - return ScrollY; + return 0.0f; } static void scroll_callback(GLFWwindow* window, double xoffset, double yoffset)