Fixed input manager for UI + WorldSpace UI

This commit is contained in:
antopilo
2024-09-11 17:41:39 -04:00
parent 40da75eeeb
commit f1903de9ab
5 changed files with 48 additions and 35 deletions

View File

@@ -16,6 +16,7 @@
#include <glad/glad.h>
#include <src/Vendors/imgui/imgui.h>
#include <Tracy.hpp>
#include <src/UI/Renderer.h>
namespace Nuake
@@ -436,20 +437,23 @@ namespace Nuake
continue;
}
// Fetch resource from resource manager using UUID
Ref<UIResource> uiResource = ResourceManager::GetResource<UIResource>(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> uiResource = ResourceManager::GetResource<UIResource>(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<TransformComponent, UIComponent>();
for (auto e : uiView)
{
auto [transform, uiComponent] = uiView.get<TransformComponent, UIComponent>(e);
if (!uiComponent.IsWorldSpace)
{
continue;
}
// Temp models
Ref<UIResource> uiResource = ResourceManager::GetResource<UIResource>(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();

View File

@@ -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);

View File

@@ -34,6 +34,7 @@ void UIResource::Draw()
{
framebuffer->Bind();
{
RenderCommand::SetClearColor({ 0, 0, 0, 0 });
RenderCommand::Clear();
if (canvas)

View File

@@ -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;
}
};

View File

@@ -1,6 +1,7 @@
#pragma once
#include "InputManager.h"
#include "src/Core/Input.h"
#include <src/Window.h>
@@ -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)