Widgets/Canvas: Add render mask parameter

This commit is contained in:
Jérôme Leclercq 2021-11-14 19:54:47 +01:00
parent 8c3a0a9200
commit 237602a33f
4 changed files with 46 additions and 34 deletions

View File

@ -144,17 +144,20 @@ int main()
Nz::Physics3DSystem physSytem(registry); Nz::Physics3DSystem physSytem(registry);
Nz::RenderSystem renderSystem(registry); Nz::RenderSystem renderSystem(registry);
Nz::Canvas canvas(registry, window.GetEventHandler(), window.GetCursorController().CreateHandle()); Nz::Canvas canvas2D(registry, window.GetEventHandler(), window.GetCursorController().CreateHandle(), 2);
Nz::LabelWidget* labelWidget = canvas.Add<Nz::LabelWidget>(); Nz::LabelWidget* labelWidget = canvas2D.Add<Nz::LabelWidget>();
labelWidget->SetPosition(0.f, 300.f, 0.f);
//labelWidget->EnableBackground(true); //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<Nz::NodeComponent>(viewer2D); registry.emplace<Nz::NodeComponent>(viewer2D);
auto& cameraComponent = registry.emplace<Nz::CameraComponent>(viewer2D, window.GetRenderTarget(), Nz::ProjectionType::Orthographic); auto& cameraComponent = registry.emplace<Nz::CameraComponent>(viewer2D, window.GetRenderTarget(), Nz::ProjectionType::Orthographic);
cameraComponent.UpdateZNear(1.f);
cameraComponent.UpdateZFar(1000.f);
cameraComponent.UpdateRenderMask(2); cameraComponent.UpdateRenderMask(2);
}*/ }
entt::entity text2D = registry.create(); entt::entity text2D = registry.create();
{ {

View File

@ -19,19 +19,20 @@ namespace Nz
friend BaseWidget; friend BaseWidget;
public: 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(const Canvas&) = delete;
Canvas(Canvas&&) = delete; Canvas(Canvas&&) = delete;
inline ~Canvas(); inline ~Canvas();
inline entt::registry& GetRegistry(); inline entt::registry& GetRegistry();
inline const entt::registry& GetRegistry() const; inline const entt::registry& GetRegistry() const;
inline UInt32 GetRenderMask() const;
Canvas& operator=(const Canvas&) = delete; Canvas& operator=(const Canvas&) = delete;
Canvas& operator=(Canvas&&) = delete; Canvas& operator=(Canvas&&) = delete;
NazaraSignal(OnUnhandledKeyPressed, const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::KeyEvent& /*event*/); NazaraSignal(OnUnhandledKeyPressed, const EventHandler* /*eventHandler*/, const WindowEvent::KeyEvent& /*event*/);
NazaraSignal(OnUnhandledKeyReleased, const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::KeyEvent& /*event*/); NazaraSignal(OnUnhandledKeyReleased, const EventHandler* /*eventHandler*/, const WindowEvent::KeyEvent& /*event*/);
protected: protected:
inline void ClearKeyboardOwner(std::size_t canvasIndex); inline void ClearKeyboardOwner(std::size_t canvasIndex);
@ -48,38 +49,39 @@ namespace Nz
void UnregisterWidget(std::size_t index); void UnregisterWidget(std::size_t index);
private: private:
void OnEventMouseButtonPressed(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::MouseButtonEvent& event); void OnEventMouseButtonPressed(const EventHandler* eventHandler, const WindowEvent::MouseButtonEvent& event);
void OnEventMouseButtonRelease(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::MouseButtonEvent& event); void OnEventMouseButtonRelease(const EventHandler* eventHandler, const WindowEvent::MouseButtonEvent& event);
void OnEventMouseLeft(const Nz::EventHandler* eventHandler); void OnEventMouseLeft(const EventHandler* eventHandler);
void OnEventMouseMoved(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::MouseMoveEvent& event); void OnEventMouseMoved(const EventHandler* eventHandler, const WindowEvent::MouseMoveEvent& event);
void OnEventMouseWheelMoved(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::MouseWheelEvent& event); void OnEventMouseWheelMoved(const EventHandler* eventHandler, const WindowEvent::MouseWheelEvent& event);
void OnEventKeyPressed(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::KeyEvent& event); void OnEventKeyPressed(const EventHandler* eventHandler, const WindowEvent::KeyEvent& event);
void OnEventKeyReleased(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::KeyEvent& event); void OnEventKeyReleased(const EventHandler* eventHandler, const WindowEvent::KeyEvent& event);
void OnEventTextEntered(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::TextEvent& event); void OnEventTextEntered(const EventHandler* eventHandler, const WindowEvent::TextEvent& event);
void OnEventTextEdited(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::EditEvent& event); void OnEventTextEdited(const EventHandler* eventHandler, const WindowEvent::EditEvent& event);
struct WidgetEntry struct WidgetEntry
{ {
BaseWidget* widget; BaseWidget* widget;
Nz::Boxf box; Boxf box;
Nz::SystemCursor cursor; SystemCursor cursor;
}; };
NazaraSlot(Nz::EventHandler, OnKeyPressed, m_keyPressedSlot); NazaraSlot(EventHandler, OnKeyPressed, m_keyPressedSlot);
NazaraSlot(Nz::EventHandler, OnKeyReleased, m_keyReleasedSlot); NazaraSlot(EventHandler, OnKeyReleased, m_keyReleasedSlot);
NazaraSlot(Nz::EventHandler, OnMouseButtonPressed, m_mouseButtonPressedSlot); NazaraSlot(EventHandler, OnMouseButtonPressed, m_mouseButtonPressedSlot);
NazaraSlot(Nz::EventHandler, OnMouseButtonReleased, m_mouseButtonReleasedSlot); NazaraSlot(EventHandler, OnMouseButtonReleased, m_mouseButtonReleasedSlot);
NazaraSlot(Nz::EventHandler, OnMouseLeft, m_mouseLeftSlot); NazaraSlot(EventHandler, OnMouseLeft, m_mouseLeftSlot);
NazaraSlot(Nz::EventHandler, OnMouseMoved, m_mouseMovedSlot); NazaraSlot(EventHandler, OnMouseMoved, m_mouseMovedSlot);
NazaraSlot(Nz::EventHandler, OnMouseWheelMoved, m_mouseWheelMovedSlot); NazaraSlot(EventHandler, OnMouseWheelMoved, m_mouseWheelMovedSlot);
NazaraSlot(Nz::EventHandler, OnTextEntered, m_textEnteredSlot); NazaraSlot(EventHandler, OnTextEntered, m_textEnteredSlot);
NazaraSlot(Nz::EventHandler, OnTextEdited, m_textEditedSlot); NazaraSlot(EventHandler, OnTextEdited, m_textEditedSlot);
CursorControllerHandle m_cursorController;
UInt32 m_renderMask;
std::size_t m_keyboardOwner; std::size_t m_keyboardOwner;
std::size_t m_hoveredWidget; std::size_t m_hoveredWidget;
std::vector<WidgetEntry> m_widgetEntries; std::vector<WidgetEntry> m_widgetEntries;
entt::registry& m_registry; entt::registry& m_registry;
Nz::CursorControllerHandle m_cursorController;
}; };
} }

View File

@ -8,7 +8,8 @@
namespace Nz 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_keyboardOwner(InvalidCanvasIndex),
m_hoveredWidget(InvalidCanvasIndex), m_hoveredWidget(InvalidCanvasIndex),
m_registry(registry), m_registry(registry),
@ -51,6 +52,11 @@ namespace Nz
return m_registry; return m_registry;
} }
inline UInt32 Canvas::GetRenderMask() const
{
return m_renderMask;
}
inline void Canvas::ClearKeyboardOwner(std::size_t canvasIndex) inline void Canvas::ClearKeyboardOwner(std::size_t canvasIndex)
{ {
if (m_keyboardOwner == canvasIndex) if (m_keyboardOwner == canvasIndex)

View File

@ -8,6 +8,7 @@
#include <Nazara/Graphics/MaterialPass.hpp> #include <Nazara/Graphics/MaterialPass.hpp>
#include <Nazara/Graphics/Components/GraphicsComponent.hpp> #include <Nazara/Graphics/Components/GraphicsComponent.hpp>
#include <Nazara/Utility/Components/NodeComponent.hpp> #include <Nazara/Utility/Components/NodeComponent.hpp>
#include <Nazara/Widgets/Canvas.hpp>
#include <Nazara/Widgets/Debug.hpp> #include <Nazara/Widgets/Debug.hpp>
namespace Nz namespace Nz
@ -16,12 +17,12 @@ namespace Nz
BaseWidget(parent) BaseWidget(parent)
{ {
auto materialPass = std::make_shared<MaterialPass>(BasicMaterial::GetSettings()); auto materialPass = std::make_shared<MaterialPass>(BasicMaterial::GetSettings());
materialPass->EnableFlag(Nz::MaterialPassFlag::Transparent); materialPass->EnableFlag(MaterialPassFlag::Transparent);
materialPass->EnableDepthBuffer(true); materialPass->EnableDepthBuffer(true);
materialPass->EnableDepthWrite(false); materialPass->EnableDepthWrite(false);
materialPass->EnableBlending(true); materialPass->EnableBlending(true);
materialPass->SetBlendEquation(Nz::BlendEquation::Add, Nz::BlendEquation::Add); materialPass->SetBlendEquation(BlendEquation::Add, BlendEquation::Add);
materialPass->SetBlendFunc(Nz::BlendFunc::SrcAlpha, Nz::BlendFunc::InvSrcAlpha, Nz::BlendFunc::One, Nz::BlendFunc::Zero); materialPass->SetBlendFunc(BlendFunc::SrcAlpha, BlendFunc::InvSrcAlpha, BlendFunc::One, BlendFunc::Zero);
auto material = std::make_shared<Material>(); auto material = std::make_shared<Material>();
material->AddPass("ForwardPass", std::move(materialPass)); material->AddPass("ForwardPass", std::move(materialPass));
@ -29,7 +30,7 @@ namespace Nz
m_textSprite = std::make_shared<TextSprite>(std::move(material)); m_textSprite = std::make_shared<TextSprite>(std::move(material));
m_textEntity = CreateEntity(); m_textEntity = CreateEntity();
GetRegistry().emplace<GraphicsComponent>(m_textEntity).AttachRenderable(m_textSprite); GetRegistry().emplace<GraphicsComponent>(m_textEntity).AttachRenderable(m_textSprite, GetCanvas()->GetRenderMask());
GetRegistry().emplace<NodeComponent>(m_textEntity).SetParent(this); GetRegistry().emplace<NodeComponent>(m_textEntity).SetParent(this);
Layout(); Layout();