All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
InteriorRenderableService.h
1 #pragma once
2 
3 #include "Interiors.h"
4 #include "Rendering.h"
5 #include "VectorMath.h"
6 #include <vector>
7 #include "InteriorsInstanceRepository.h"
8 #include "InteriorRenderableSet.h"
9 
10 namespace Eegeo
11 {
12  namespace Resources
13  {
14  namespace Interiors
15  {
16  namespace Builder
17  {
19  {
20  public:
21 
23  IInteriorRenderableFactory* pRenderableFactory,
24  IInteriorRenderableSetFactory* pRenderableSetFactory,
25  InteriorsInstanceRepository& interiorsInstanceRepository);
26 
28 
29  void CreateFloorRenderablesFromCreationData(
30  const std::string& interiorIdentifier,
31  const InteriorFloorData& floorData,
32  const int floorIndex,
33  const float interiorTerrainHeight,
34  std::map<std::string, InteriorRenderableSet*>& renderables,
35  std::vector<Rendering::Renderables::InteriorHighlightRenderable*>& interiorHighlightRenderables,
36  const std::vector<InstanceSourceMeshData>& instanceSourceRenderableDatas,
37  std::vector<bool>& isInstanceSourceMeshUsed);
38 
39  IInteriorRenderableFactory& GetInteriorRenderableFactory() { return *m_pRenderableFactory; }
40 
41  private:
42 
43  static std::vector<m44> GetTransformsForTag(int currentTagIndex, const std::vector<m44>& instanceTransformsForSourceMesh, const std::vector<int>& tagIndices, int tagIndexReadOffset);
44 
45  static int GetInstanceCountForTagIndex(int tagIndex, size_t instanceCount, const std::vector<int>& tagIndices);
46 
47  static std::vector<InteriorsInstanceRepository::InstanceData> ExtractInstanceDatasForTag(
48  int currentTagIndex,
49  int tagIndexOffset,
50  int instanceCount,
51  const std::vector<int>& tagIndices,
54  const std::vector<std::string>& instanceIds);
55 
56  InteriorRenderableSet& GetOrAddRenderableSetForTag(std::map<std::string, InteriorRenderableSet*> &renderables, const std::string& tag);
57 
58  std::vector<Rendering::Renderables::InteriorHighlightRenderable*> CreateInteriorHighlightRenderables(
59  const InteriorFloorData &floorData,
60  const std::string& interiorIdentifier,
61  const float interiorTerrainHeight);
62 
63  void CreateRenderableSetsForUntaggedGeometry(
64  std::map<std::string, InteriorRenderableSet*>& renderables,
65  const InteriorFloorData &floorData,
66  const std::string& interiorIdentifier,
67  const float interiorTerrainHeight);
68 
69  void CreateRenderableSetsFromTaggedGeometry(
70  std::map<std::string, InteriorRenderableSet*>& renderables,
71  const InteriorFloorData &floorData,
72  const std::string& interiorIdentifier,
73  const float interiorTerrainHeight,
74  const std::vector<InstanceSourceMeshData>& instanceSourceRenderableDatas,
75  std::vector<bool>& isInstanceSourceMeshUsed,
76  const int floorIndex);
77 
78  int AddInstancedGeometryForTag(
80  std::vector<InteriorsInstanceRepository::InstanceData>& instanceDatas,
81  std::vector<bool>& isInstanceSourceMeshUsed,
82  const std::vector<InstanceSourceMeshData>& instanceSourceRenderableDatas,
83  const int currentTagIndex,
84  const InteriorFloorData &floorData,
85  const int floorIndex);
86 
87  void AddNonInstancedGeometryForTag(
89  int tagIndexReadOffset,
90  int currentTagIndex,
91  const InteriorFloorData& floorData);
92 
93  IInteriorRenderableFactory* m_pRenderableFactory;
94  IInteriorRenderableSetFactory* m_pRenderableSetFactory;
95  InteriorsInstanceRepository& m_interiorsInstanceRepository;
96  };
97  }
98  }
99  }
100 }