All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ChunkedInteriorsBuilder.h
1 // Copyright eeGeo Ltd (2012-2015), All Rights Reserved
2 
3 #pragma once
4 
5 #include "IResourceBuilder.h"
6 #include "Types.h"
7 #include "Interiors.h"
8 #include "InteriorsMaterials.h"
9 #include "Collision.h"
10 #include "Rendering.h"
11 #include "Space.h"
12 #include "ChunkedFileFormat.h"
13 #include "CollisionBvhFactory.h"
14 #include "InteriorMetadataChunkDto.h"
15 #include "Fonts.h"
16 #include "Labels.h"
17 #include "PropResource.h"
18 
19 #include <string>
20 
21 namespace Eegeo
22 {
23  namespace Resources
24  {
25  namespace Interiors
26  {
27  namespace Builder
28  {
29  namespace GeometryType
30  {
31  enum Values {
32  Default,
33  Highlight,
34  Instance
35  };
36  }
37 
39  {
40  public:
41 
43  InteriorsModelRepository& interiorsModelRepository,
44  Entities::InteriorsEntitiesRepository& interiorsEntitiesRepository,
45  Materials::IInteriorRenderablesRepository& interiorRenderablesRepository,
46  Collision::CollisionMeshResourceRepository& collisionMeshResourceRepository,
47  Collision::CollisionMeshResourceRepository& highlightCollisionMeshResourceRepository,
48  InteriorsCellResourceObserver& interiorsCellResourceObserver,
49  IInteriorLabelBuilder& interiorLabelBuilder,
50  Labels::ILabelCellResourceObserver& labelCellResourceObserver,
51  const Fonts::FontInstance& labelFont,
52  bool buildLabels,
53  const std::string& defaultInteriorMaterialName,
54  InteriorRenderableService& interiorRenderableService,
56 
57  bool Flush(const Streaming::MortonKey& key, void* input, TBuiltResources& result);
58  void DestroyBuiltResource(const Streaming::MortonKey& key, void* input);
59 
60  void* BuildResource(const Streaming::MortonKey& key, const Byte* data, size_t length);
61 
62  bool AcceptsErroredRequests();
63 
64  InteriorInstanceChunkDto BuildInteriorInstanceChunk(
67  const Space::CubeMap::CubeMapCellInfo& cellInfo,
68  const std::string& interiorId,
69  std::vector<InstanceSourceMeshData>& out_meshDatas);
70 
71  private:
72 
73  InteriorGeometryReader& m_geometryReader;
74 
75  Collision::CollisionBvhFactory m_collisionBvhFactory;
76  Collision::CollisionBvhFactory m_highlightCollisionBvhFactory;
77  Collision::CollisionBvhFactory m_instancesCollisionBvhFactory;
78 
79  InteriorsModelRepository& m_interiorsModelRepository;
80  Entities::InteriorsEntitiesRepository& m_interiorsEntitiesRepository;
81  Materials::IInteriorRenderablesRepository& m_interiorRenderablesRepository;
82  Collision::CollisionMeshResourceRepository& m_collisionMeshResourceRepository;
83  Collision::CollisionMeshResourceRepository& m_highlightCollisionMeshResourceRepository;
84  InteriorsCellResourceObserver& m_interiorsCellResourceObserver;
85 
86  IInteriorLabelBuilder& m_interiorLabelBuilder;
87  const Fonts::FontInstance& m_labelFont;
88  const bool m_buildLabels;
89  const std::string m_defaultInteriorMaterialName;
90  InteriorRenderableService& m_interiorRenderableService;
92 
93  Eegeo::Collision::CollisionBvhFactory* GetCollisionBvhFactoryForGeometryType(GeometryType::Values geometryType);
94 
95  void CreateFloorResourcesFromQuantizedMeshSet(IO::ChunkedFileFormat::QuantizedMeshSetChunkReader::QCMSChunkReader& qcmsChunkReader,
96  const Space::CubeMap::CubeMapCellInfo& cellInfo,
99  const int floorDrawOrder,
100  GeometryType::Values geometryType,
101  const std::string& meshNamePrefix,
102  std::vector<InteriorRenderableCreationData*>& out_renderableCreationDatas,
103  std::vector<Collision::CollisionBvh*>& out_collisionBvhs);
104 
105  void ExtractFloorGeometryData(
107  const Eegeo::dv3& cellOrigin,
108  const int floorDrawOrder,
109  GeometryType::Values geometryType,
110  std::vector<InteriorRenderableCreationData*> &out_renderableCreationDatas,
111  std::vector<Collision::CollisionBvh*> &out_collisionBvhs);
112 
113  InteriorsCellResource* CreateInteriorsCellResource(const Streaming::MortonKey& key, const InteriorData& interiorData);
114 
115  std::vector<const InteriorsFloorCell*> CreateInteriorsFloorCells(const Streaming::MortonKey& key,
116  const InteriorData& interiorData,
117  const InteriorsModel& interiorModel);
118 
119  InteriorRenderableCreationData* CreateInteriorRenderableCreationData(const Eegeo::dv3& ecefOrigin,
121  const InteriorMaterialData& interiorMaterialData,
122  Rendering::LayerIds::Values layerId,
123  int floorIndex);
124 
125 
126  };
127  }
128  }
129  }
130 }