From 237602a33faf1efdc889670da33c24eb84a693b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Sun, 14 Nov 2021 19:54:47 +0100 Subject: [PATCH] Widgets/Canvas: Add render mask parameter --- examples/PhysicsDemo/main.cpp | 13 +++++--- include/Nazara/Widgets/Canvas.hpp | 50 ++++++++++++++++-------------- include/Nazara/Widgets/Canvas.inl | 8 ++++- src/Nazara/Widgets/LabelWidget.cpp | 9 +++--- 4 files changed, 46 insertions(+), 34 deletions(-) diff --git a/examples/PhysicsDemo/main.cpp b/examples/PhysicsDemo/main.cpp index c54f89caf..06948216a 100644 --- a/examples/PhysicsDemo/main.cpp +++ b/examples/PhysicsDemo/main.cpp @@ -144,17 +144,20 @@ int main() Nz::Physics3DSystem physSytem(registry); Nz::RenderSystem renderSystem(registry); - Nz::Canvas canvas(registry, window.GetEventHandler(), window.GetCursorController().CreateHandle()); - Nz::LabelWidget* labelWidget = canvas.Add(); + Nz::Canvas canvas2D(registry, window.GetEventHandler(), window.GetCursorController().CreateHandle(), 2); + Nz::LabelWidget* labelWidget = canvas2D.Add(); + labelWidget->SetPosition(0.f, 300.f, 0.f); //labelWidget->EnableBackground(true); - labelWidget->UpdateText(Nz::SimpleTextDrawer::Draw("Bonjour Paris !", 72), 0.1f); + labelWidget->UpdateText(Nz::SimpleTextDrawer::Draw("Bonjour Paris !", 72)); - /*entt::entity viewer2D = registry.create(); + entt::entity viewer2D = registry.create(); { registry.emplace(viewer2D); auto& cameraComponent = registry.emplace(viewer2D, window.GetRenderTarget(), Nz::ProjectionType::Orthographic); + cameraComponent.UpdateZNear(1.f); + cameraComponent.UpdateZFar(1000.f); cameraComponent.UpdateRenderMask(2); - }*/ + } entt::entity text2D = registry.create(); { diff --git a/include/Nazara/Widgets/Canvas.hpp b/include/Nazara/Widgets/Canvas.hpp index 12091e63e..d4115e325 100644 --- a/include/Nazara/Widgets/Canvas.hpp +++ b/include/Nazara/Widgets/Canvas.hpp @@ -19,19 +19,20 @@ namespace Nz friend BaseWidget; public: - inline Canvas(entt::registry& registry, Nz::EventHandler& eventHandler, Nz::CursorControllerHandle cursorController); + inline Canvas(entt::registry& registry, EventHandler& eventHandler, CursorControllerHandle cursorController, UInt32 renderMask); Canvas(const Canvas&) = delete; Canvas(Canvas&&) = delete; inline ~Canvas(); inline entt::registry& GetRegistry(); inline const entt::registry& GetRegistry() const; + inline UInt32 GetRenderMask() const; Canvas& operator=(const Canvas&) = delete; Canvas& operator=(Canvas&&) = delete; - NazaraSignal(OnUnhandledKeyPressed, const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::KeyEvent& /*event*/); - NazaraSignal(OnUnhandledKeyReleased, const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::KeyEvent& /*event*/); + NazaraSignal(OnUnhandledKeyPressed, const EventHandler* /*eventHandler*/, const WindowEvent::KeyEvent& /*event*/); + NazaraSignal(OnUnhandledKeyReleased, const EventHandler* /*eventHandler*/, const WindowEvent::KeyEvent& /*event*/); protected: inline void ClearKeyboardOwner(std::size_t canvasIndex); @@ -48,38 +49,39 @@ namespace Nz void UnregisterWidget(std::size_t index); private: - void OnEventMouseButtonPressed(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::MouseButtonEvent& event); - void OnEventMouseButtonRelease(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::MouseButtonEvent& event); - void OnEventMouseLeft(const Nz::EventHandler* eventHandler); - void OnEventMouseMoved(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::MouseMoveEvent& event); - void OnEventMouseWheelMoved(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::MouseWheelEvent& event); - void OnEventKeyPressed(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::KeyEvent& event); - void OnEventKeyReleased(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::KeyEvent& event); - void OnEventTextEntered(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::TextEvent& event); - void OnEventTextEdited(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::EditEvent& event); + void OnEventMouseButtonPressed(const EventHandler* eventHandler, const WindowEvent::MouseButtonEvent& event); + void OnEventMouseButtonRelease(const EventHandler* eventHandler, const WindowEvent::MouseButtonEvent& event); + void OnEventMouseLeft(const EventHandler* eventHandler); + void OnEventMouseMoved(const EventHandler* eventHandler, const WindowEvent::MouseMoveEvent& event); + void OnEventMouseWheelMoved(const EventHandler* eventHandler, const WindowEvent::MouseWheelEvent& event); + void OnEventKeyPressed(const EventHandler* eventHandler, const WindowEvent::KeyEvent& event); + void OnEventKeyReleased(const EventHandler* eventHandler, const WindowEvent::KeyEvent& event); + void OnEventTextEntered(const EventHandler* eventHandler, const WindowEvent::TextEvent& event); + void OnEventTextEdited(const EventHandler* eventHandler, const WindowEvent::EditEvent& event); struct WidgetEntry { BaseWidget* widget; - Nz::Boxf box; - Nz::SystemCursor cursor; + Boxf box; + SystemCursor cursor; }; - NazaraSlot(Nz::EventHandler, OnKeyPressed, m_keyPressedSlot); - NazaraSlot(Nz::EventHandler, OnKeyReleased, m_keyReleasedSlot); - NazaraSlot(Nz::EventHandler, OnMouseButtonPressed, m_mouseButtonPressedSlot); - NazaraSlot(Nz::EventHandler, OnMouseButtonReleased, m_mouseButtonReleasedSlot); - NazaraSlot(Nz::EventHandler, OnMouseLeft, m_mouseLeftSlot); - NazaraSlot(Nz::EventHandler, OnMouseMoved, m_mouseMovedSlot); - NazaraSlot(Nz::EventHandler, OnMouseWheelMoved, m_mouseWheelMovedSlot); - NazaraSlot(Nz::EventHandler, OnTextEntered, m_textEnteredSlot); - NazaraSlot(Nz::EventHandler, OnTextEdited, m_textEditedSlot); + NazaraSlot(EventHandler, OnKeyPressed, m_keyPressedSlot); + NazaraSlot(EventHandler, OnKeyReleased, m_keyReleasedSlot); + NazaraSlot(EventHandler, OnMouseButtonPressed, m_mouseButtonPressedSlot); + NazaraSlot(EventHandler, OnMouseButtonReleased, m_mouseButtonReleasedSlot); + NazaraSlot(EventHandler, OnMouseLeft, m_mouseLeftSlot); + NazaraSlot(EventHandler, OnMouseMoved, m_mouseMovedSlot); + NazaraSlot(EventHandler, OnMouseWheelMoved, m_mouseWheelMovedSlot); + NazaraSlot(EventHandler, OnTextEntered, m_textEnteredSlot); + NazaraSlot(EventHandler, OnTextEdited, m_textEditedSlot); + CursorControllerHandle m_cursorController; + UInt32 m_renderMask; std::size_t m_keyboardOwner; std::size_t m_hoveredWidget; std::vector m_widgetEntries; entt::registry& m_registry; - Nz::CursorControllerHandle m_cursorController; }; } diff --git a/include/Nazara/Widgets/Canvas.inl b/include/Nazara/Widgets/Canvas.inl index a792d7c85..3efc005cc 100644 --- a/include/Nazara/Widgets/Canvas.inl +++ b/include/Nazara/Widgets/Canvas.inl @@ -8,7 +8,8 @@ namespace Nz { - inline Canvas::Canvas(entt::registry& registry, Nz::EventHandler& eventHandler, Nz::CursorControllerHandle cursorController) : + inline Canvas::Canvas(entt::registry& registry, Nz::EventHandler& eventHandler, Nz::CursorControllerHandle cursorController, UInt32 renderMask) : + m_renderMask(renderMask), m_keyboardOwner(InvalidCanvasIndex), m_hoveredWidget(InvalidCanvasIndex), m_registry(registry), @@ -51,6 +52,11 @@ namespace Nz return m_registry; } + inline UInt32 Canvas::GetRenderMask() const + { + return m_renderMask; + } + inline void Canvas::ClearKeyboardOwner(std::size_t canvasIndex) { if (m_keyboardOwner == canvasIndex) diff --git a/src/Nazara/Widgets/LabelWidget.cpp b/src/Nazara/Widgets/LabelWidget.cpp index ef9362486..8b74e793b 100644 --- a/src/Nazara/Widgets/LabelWidget.cpp +++ b/src/Nazara/Widgets/LabelWidget.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include namespace Nz @@ -16,12 +17,12 @@ namespace Nz BaseWidget(parent) { auto materialPass = std::make_shared(BasicMaterial::GetSettings()); - materialPass->EnableFlag(Nz::MaterialPassFlag::Transparent); + materialPass->EnableFlag(MaterialPassFlag::Transparent); materialPass->EnableDepthBuffer(true); materialPass->EnableDepthWrite(false); materialPass->EnableBlending(true); - materialPass->SetBlendEquation(Nz::BlendEquation::Add, Nz::BlendEquation::Add); - materialPass->SetBlendFunc(Nz::BlendFunc::SrcAlpha, Nz::BlendFunc::InvSrcAlpha, Nz::BlendFunc::One, Nz::BlendFunc::Zero); + materialPass->SetBlendEquation(BlendEquation::Add, BlendEquation::Add); + materialPass->SetBlendFunc(BlendFunc::SrcAlpha, BlendFunc::InvSrcAlpha, BlendFunc::One, BlendFunc::Zero); auto material = std::make_shared(); material->AddPass("ForwardPass", std::move(materialPass)); @@ -29,7 +30,7 @@ namespace Nz m_textSprite = std::make_shared(std::move(material)); m_textEntity = CreateEntity(); - GetRegistry().emplace(m_textEntity).AttachRenderable(m_textSprite); + GetRegistry().emplace(m_textEntity).AttachRenderable(m_textSprite, GetCanvas()->GetRenderMask()); GetRegistry().emplace(m_textEntity).SetParent(this); Layout();