3D Repo Bouncer  1.4
repo_optimizer_multipart.h
1 
22 #pragma once
23 
24 #include "repo_optimizer_abstract.h"
25 #include "../../core/model/collection/repo_scene.h"
26 #include "../../core/model/bson/repo_node_mesh.h"
27 
28 #define REPO_MP_TEXTURE_WORK_AROUND
29 
30 namespace repo {
31  namespace manipulator {
32  namespace modeloptimizer {
34  {
35  public:
40 
44  virtual ~MultipartOptimizer();
45 
52 
53  private:
68 #ifdef REPO_MP_TEXTURE_WORK_AROUND
69  bool collectMeshData(
70  const repo::core::model::RepoScene *scene,
71  const repo::core::model::RepoNode *node,
72  const std::set<repoUUID> &meshGroup,
73  std::vector<float> &mat,
74  std::vector<std::vector<repo_vector_t>> &vertices,
75  std::vector<std::vector<repo_vector_t>> &normals,
76  std::vector<std::vector<repo_face_t>> &faces,
77  std::vector<std::vector<std::vector<repo_vector2d_t>>> &uvChannels,
78  std::vector<std::vector<repo_color4d_t>> &colors,
79  std::vector<std::vector<repo_mesh_mapping_t>> &meshMapping,
80  std::unordered_map<repoUUID, repoUUID, RepoUUIDHasher> &matIDMap
81  );
82 #endif
83  bool collectMeshData(
84  const repo::core::model::RepoScene *scene,
85  const repo::core::model::RepoNode *node,
86  const std::set<repoUUID> &meshGroup,
87  std::vector<float> &mat,
88  std::vector<repo_vector_t> &vertices,
89  std::vector<repo_vector_t> &normals,
90  std::vector<repo_face_t> &faces,
91  std::vector<std::vector<repo_vector2d_t>> &uvChannels,
92  std::vector<repo_color4d_t> &colors,
93  std::vector<repo_mesh_mapping_t> &meshMapping,
94  std::unordered_map<repoUUID, repoUUID, RepoUUIDHasher> &matIDMap
95  );
96 
105 #ifdef REPO_MP_TEXTURE_WORK_AROUND
106  std::vector<repo::core::model::MeshNode*>createSuperMesh(
107  const repo::core::model::RepoScene *scene,
108  const std::set<repoUUID> &meshGroup,
109  std::unordered_map<repoUUID, repoUUID, RepoUUIDHasher> &matIDs,
110  const bool &texture);
111 #endif
112  repo::core::model::MeshNode* createSuperMesh(
113  const repo::core::model::RepoScene *scene,
114  const std::set<repoUUID> &meshGroup,
115  std::unordered_map<repoUUID, repoUUID, RepoUUIDHasher> &matIDs);
116 
122  bool generateMultipartScene(repo::core::model::RepoScene *scene);
123 
130  repoUUID getMaterialID(
131  const repo::core::model::RepoScene *scene,
132  const repo::core::model::MeshNode *mesh
133  );
134 
142  bool hasTexture(
143  const repo::core::model::RepoScene *scene,
144  const repo::core::model::MeshNode *mesh,
145  repoUUID &texID);
146 
153  bool isTransparent(
154  const repo::core::model::RepoScene *scene,
155  const repo::core::model::MeshNode *mesh);
156 
164 #ifdef REPO_MP_TEXTURE_WORK_AROUND
165  bool processMeshGroup(
166  const repo::core::model::RepoScene *scene,
167  const std::set<repoUUID> & meshes,
168  const repoUUID &rootID,
169  repo::core::model::RepoNodeSet &mergedMeshes,
170  std::unordered_map<repoUUID, repo::core::model::RepoNode*, RepoUUIDHasher> &matNodes,
171  std::unordered_map<repoUUID, repoUUID, RepoUUIDHasher> &matIDs,
172  const bool &texture
173  );
174 #endif
175  bool processMeshGroup(
176  const repo::core::model::RepoScene *scene,
177  const std::set<repoUUID> & meshes,
178  const repoUUID &rootID,
179  repo::core::model::RepoNodeSet &mergedMeshes,
180  std::unordered_map<repoUUID, repo::core::model::RepoNode*, RepoUUIDHasher> &matNodes,
181  std::unordered_map<repoUUID, repoUUID, RepoUUIDHasher> &matIDs);
182 
191  void sortMeshes(
192  const repo::core::model::RepoScene *scene,
193  const repo::core::model::RepoNodeSet &meshes,
194  std::unordered_map<uint32_t, std::vector<std::set<repoUUID>>> &normalMeshes,
195  std::unordered_map<uint32_t, std::vector<std::set<repoUUID>>> &transparentMeshes,
196  std::unordered_map < uint32_t, std::unordered_map < repoUUID,
197  std::vector<std::set<repoUUID>>, RepoUUIDHasher >> &texturedMeshes);
198  };
199  }
200  }
201 }
Definition: repo_connection_pool_mongo.h:32
Definition: repo_optimizer_abstract.h:29
Definition: repo_scene.h:44
Definition: repo_node_utils.h:40
MultipartOptimizer()
Definition: repo_optimizer_multipart.cpp:32
virtual ~MultipartOptimizer()
Definition: repo_optimizer_multipart.cpp:37
bool apply(repo::core::model::RepoScene *scene)
Definition: repo_optimizer_multipart.cpp:41
Definition: repo_optimizer_multipart.h:33
Definition: repo_node_mesh.h:62
Definition: repo_node.h:33