1 // Copyright © 2008-2021 Pioneer Developers. See AUTHORS.txt for details 2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt 3 4 #ifndef _STATICGEOMETRY_H 5 #define _STATICGEOMETRY_H 6 /* 7 * Geometry node containing one or more meshes. 8 */ 9 #include "Aabb.h" 10 #include "Node.h" 11 #include "graphics/Renderer.h" 12 #include "graphics/VertexBuffer.h" 13 #include "libs.h" 14 15 namespace SceneGraph { 16 17 class NodeVisitor; 18 19 class StaticGeometry : public Node { 20 public: 21 struct Mesh { 22 RefCountedPtr<Graphics::VertexBuffer> vertexBuffer; 23 RefCountedPtr<Graphics::IndexBuffer> indexBuffer; 24 RefCountedPtr<Graphics::Material> material; 25 }; 26 StaticGeometry(Graphics::Renderer *r); 27 StaticGeometry(const StaticGeometry &, NodeCopyCache *cache = 0); 28 virtual Node *Clone(NodeCopyCache *cache = 0) override; GetTypeName()29 virtual const char *GetTypeName() const override { return "StaticGeometry"; } 30 virtual void Accept(NodeVisitor &nv) override; 31 virtual void Render(const matrix4x4f &trans, const RenderData *rd) override; 32 virtual void Render(const std::vector<matrix4x4f> &trans, const RenderData *rd) override; 33 34 virtual void Save(NodeDatabase &) override; 35 static StaticGeometry *Load(NodeDatabase &); 36 37 void AddMesh(RefCountedPtr<Graphics::VertexBuffer>, 38 RefCountedPtr<Graphics::IndexBuffer>, 39 RefCountedPtr<Graphics::Material>); GetNumMeshes()40 unsigned int GetNumMeshes() const { return static_cast<Uint32>(m_meshes.size()); } 41 Mesh &GetMeshAt(unsigned int i); 42 SetRenderState(Graphics::RenderState * s)43 void SetRenderState(Graphics::RenderState *s) { m_renderState = s; } 44 45 Aabb m_boundingBox; 46 Graphics::BlendMode m_blendMode; 47 48 protected: 49 ~StaticGeometry(); 50 void DrawBoundingBox(const Aabb &bb); 51 std::vector<Mesh> m_meshes; 52 std::vector<RefCountedPtr<Graphics::Material>> m_instanceMaterials; 53 Graphics::RenderState *m_renderState; 54 RefCountedPtr<Graphics::InstanceBuffer> m_instBuffer; 55 }; 56 57 } // namespace SceneGraph 58 #endif 59