From c895aa82dd405146f648e5ca3fcfaa326eab9b87 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Thu, 5 Jul 2018 21:29:29 +0300 Subject: [PATCH 1/1] Add a utility class for switching renderables --- source/slot.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++++ source/slot.h | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 source/slot.cpp create mode 100644 source/slot.h diff --git a/source/slot.cpp b/source/slot.cpp new file mode 100644 index 00000000..07dabf07 --- /dev/null +++ b/source/slot.cpp @@ -0,0 +1,45 @@ +#include +#include "slot.h" + +namespace Msp { +namespace GL { + +Slot::Slot(): + renderable(0) +{ } + +void Slot::set(Renderable *r) +{ + renderable = r; +} + +const Matrix *Slot::get_matrix() const +{ + return renderable ? renderable->get_matrix() : 0; +} + +const Geometry::BoundingSphere *Slot::get_bounding_sphere() const +{ + return renderable ? renderable->get_bounding_sphere() : 0; +} + +void Slot::setup_frame(Renderer &renderer) +{ + if(renderable) + renderable->setup_frame(renderer); +} + +void Slot::finish_frame() +{ + if(renderable) + renderable->finish_frame(); +} + +void Slot::render(Renderer &renderer, const Tag &tag) const +{ + if(renderable) + renderer.render(*renderable, tag); +} + +} // namespace GL +} // namespace Msp diff --git a/source/slot.h b/source/slot.h new file mode 100644 index 00000000..ad863017 --- /dev/null +++ b/source/slot.h @@ -0,0 +1,34 @@ +#ifndef MSP_GL_SLOT_H_ +#define MSP_GL_SLOT_H_ + +#include "renderable.h" + +namespace Msp { +namespace GL { + +/** +A container for a single renderable. Can be used if a part of the scene graph +needs to be switched without affecting the rest. +*/ +class Slot: public Renderable +{ +private: + Renderable *renderable; + +public: + Slot(); + + void set(Renderable *); + Renderable *get() const { return renderable; } + + virtual const Matrix *get_matrix() const; + virtual const Geometry::BoundingSphere *get_bounding_sphere() const; + virtual void setup_frame(Renderer &); + virtual void finish_frame(); + virtual void render(Renderer &, const Tag &) const; +}; + +} // namespace GL +} // namespace Msp + +#endif -- 2.43.0