]> git.localhorst.tv Git - blank.git/blobdiff - src/model/Shape.hpp
composite model is the canonical model
[blank.git] / src / model / Shape.hpp
index c6964f9c410110d10e4ed48933b07bce0512eb42..d2e06952ed2eae5410ae4657e6a5d6af7c5249de 100644 (file)
@@ -1,11 +1,10 @@
 #ifndef BLANK_MODEL_SHAPE_HPP_
 #define BLANK_MODEL_SHAPE_HPP_
 
-#include "BlockModel.hpp"
-#include "EntityModel.hpp"
-#include "OutlineModel.hpp"
+#include "../graphics/BlockMesh.hpp"
+#include "../graphics/EntityMesh.hpp"
+#include "../graphics/OutlineMesh.hpp"
 
-#include <vector>
 #include <glm/glm.hpp>
 
 
@@ -21,32 +20,30 @@ struct Shape {
        /// the number of vertex indices this shape has
        size_t VertexIndexCount() const noexcept { return vtx_idx.size(); }
 
-       const EntityModel::Normal &VertexNormal(size_t idx) const noexcept { return vtx_nrm[idx]; }
-       EntityModel::Normal VertexNormal(
+       const EntityMesh::Normal &VertexNormal(size_t idx) const noexcept { return vtx_nrm[idx]; }
+       EntityMesh::Normal VertexNormal(
                size_t idx, const glm::mat4 &transform
        ) const noexcept {
-               return EntityModel::Normal(transform * glm::vec4(vtx_nrm[idx], 0.0f));
+               return EntityMesh::Normal(transform * glm::vec4(vtx_nrm[idx], 0.0f));
        }
 
        /// fill given buffers with this shape's elements with an
        /// optional transform and offset
        void Vertices(
-               EntityModel::Positions &vertex,
-               EntityModel::Normals &normal,
-               EntityModel::Indices &index
+               EntityMesh::Buffer &out,
+               float tex_offset = 0.0f
        ) const;
        void Vertices(
-               EntityModel::Positions &vertex,
-               EntityModel::Normals &normal,
-               EntityModel::Indices &index,
+               EntityMesh::Buffer &out,
                const glm::mat4 &transform,
-               EntityModel::Index idx_offset = 0
+               float tex_offset = 0.0f,
+               EntityMesh::Index idx_offset = 0
        ) const;
        void Vertices(
-               BlockModel::Positions &vertex,
-               BlockModel::Indices &index,
+               BlockMesh::Buffer &out,
                const glm::mat4 &transform,
-               BlockModel::Index idx_offset = 0
+               float tex_offset = 0.0f,
+               BlockMesh::Index idx_offset = 0
        ) const;
 
        /// the number of vertices this shape's outline has
@@ -54,14 +51,8 @@ struct Shape {
        /// the number of vertex indices this shape's outline has
        size_t OutlineIndexCount() const { return out_idx.size(); }
 
-       /// fill given buffers with this shape's outline's elements with
-       /// an optional offset
-       void Outline(
-               OutlineModel::Positions &vertex,
-               OutlineModel::Indices &index,
-               const OutlineModel::Position &offset = { 0.0f, 0.0f, 0.0f },
-               OutlineModel::Index idx_offset = 0
-       ) const;
+       /// fill given buffers with this shape's outline's elements
+       void Outline(OutlineMesh::Buffer &out) const;
 
        /// Check if given ray would pass though this shape if it were
        /// transformed with given matrix.
@@ -85,23 +76,25 @@ struct Shape {
        ) const noexcept = 0;
 
 protected:
-       void SetShape(const EntityModel::Positions &pos, const EntityModel::Normals &nrm, const EntityModel::Indices &idx) {
-               vtx_pos = pos;
-               vtx_nrm = nrm;
-               vtx_idx = idx;
-       }
-       void SetOutline(const OutlineModel::Positions &pos, const OutlineModel::Indices &idx) {
-               out_pos = pos;
-               out_idx = idx;
-       }
+       void SetShape(
+               const EntityMesh::Positions &pos,
+               const EntityMesh::Normals &nrm,
+               const EntityMesh::Indices &idx);
+       void SetTexture(
+               const BlockMesh::TexCoords &tex_coords);
+       void SetOutline(
+               const OutlineMesh::Positions &pos,
+               const OutlineMesh::Indices &idx);
 
 private:
-       EntityModel::Positions vtx_pos;
-       EntityModel::Normals vtx_nrm;
-       EntityModel::Indices vtx_idx;
+       EntityMesh::Positions vtx_pos;
+       EntityMesh::Normals vtx_nrm;
+       EntityMesh::Indices vtx_idx;
+
+       BlockMesh::TexCoords vtx_tex_coords;
 
-       OutlineModel::Positions out_pos;
-       OutlineModel::Indices out_idx;
+       OutlineMesh::Positions out_pos;
+       OutlineMesh::Indices out_idx;
 
 };