namespace GL {
/**
-Scenes are containers for other Renderables. This is a base class that can't
-be instantiated. Examples of available Scene types are SimpleScene,
-InstancedScene and OrderedScene.
+Container for other renderables. Subclasses provide different ways of
+rendering the contents.
+
+All types of Scenes perform frustum culling on the contents, skipping
+renderables whose bounding sphere is fully outside the view volume. If a
+bounding sphere cannot be determined, culling is not performed on that
+renderable.
+
+SimpleScene is a good default choice if there are no specific requirements.
*/
class Scene: public Renderable
{
private:
ContentMap *content;
- unsigned inst_counter;
+
+ static unsigned inline_counter;
public:
Loader(Scene &s, Collection &c): Loader(s, c, 0) { }
private:
Loader(Scene &, Collection &, ContentMap *);
+ void array(const std::string &);
void object(const std::string &);
void object_tagged(const std::string &, const std::string &);
void scene(const std::string &);
+ void scene_inline();
};
public:
};
protected:
- mutable Matrix culling_matrix;
- mutable Vector4 frustum_edges[6];
-
- Scene() { }
-private:
- Scene(const Scene &);
- Scene &operator=(const Scene &);
+ Scene() = default;
public:
- virtual ~Scene() { }
+ virtual ~Scene() = default;
virtual void add(Renderable &) = 0;
virtual void remove(Renderable &) = 0;
-protected:
- bool setup_frustum(const Renderer &) const;
- bool frustum_cull(const Renderable &) const;
-
-public:
template<typename T>
static void register_type(const std::string &);
private: