Polyphase Game Engine
Loading...
Searching...
No Matches
InstancedMesh3d.h
Go to the documentation of this file.
1#pragma once
2
4
6{
7 glm::vec3 mPosition = {0.0f, 0.0f, 0.0f};
8 glm::vec3 mRotation = {0.0f, 0.0f, 0.0f};
9 glm::vec3 mScale = {1.0f, 1.0f, 1.0f};
10};
11
13{
14public:
15
17
20
21 virtual const char* GetTypeName() const override;
22 virtual void GatherProperties(std::vector<Property>& outProps) override;
23
24 virtual void Create() override;
25 virtual void Destroy() override;
26 virtual void Render() override;
27 virtual void Tick(float deltaTime) override;
28 virtual void EditorTick(float deltaTime) override;
29
30 virtual void SaveStream(Stream& stream, Platform platform) override;
31 virtual void LoadStream(Stream& stream, Platform platform, uint32_t version) override;
32
33 virtual bool IsInstancedMesh3D() const override;
34
35 virtual void SetStaticMesh(StaticMesh* staticMesh);
36
37 virtual Bounds GetLocalBounds() const override;
38
39 virtual void GatherProxyDraws(std::vector<DebugDraw>& inoutDraws) override;
40
41 uint32_t GetNumInstances() const;
42 const MeshInstanceData& GetInstanceData(int32_t index) const;
43 const std::vector<MeshInstanceData>& GetInstanceData() const;
44 void SetInstanceData(int32_t index, const MeshInstanceData& data);
45 void SetInstanceData(const std::vector<MeshInstanceData>& data);
46 void AddInstanceData(const MeshInstanceData& data, int32_t index = -1);
47 void RemoveInstanceData(int32_t index);
48
49 uint32_t GetTotalVertexCount() const;
50
51 bool IsInstanceDataDirty() const;
53 void UpdateInstanceData();
55
56 bool ShouldUnroll() const;
57
59
60 btTransform CalculateInstanceBulletTransform(int32_t instanceIndex);
61 glm::mat4 CalculateInstanceTransform(int32_t instanceIndex);
62 Bounds CalculateInstanceBounds(int32_t instanceIndex);
63
64 btCompoundShape* GeneratePaintCollisionShape();
65 btCompoundShape* GenerateTriangleCollisionShape();
66
67protected:
68
69 virtual void RecreateCollisionShape() override;
71
72 void Unroll();
73
74 std::vector<MeshInstanceData> mInstanceData;
76 float mUnrolledCellSize = 25.0f;
77 bool mAlwaysUnroll = false;
78
79 bool mInstanceDataDirty = true;
81 bool mUnrolled = false;
83
85};
Platform
Definition EngineTypes.h:31
Definition InstancedMesh3d.h:13
bool IsInstanceDataDirty() const
Definition InstancedMesh3d.cpp:204
virtual void LoadStream(Stream &stream, Platform platform, uint32_t version) override
Definition InstancedMesh3d.cpp:76
void MarkInstanceDataDirty()
Definition InstancedMesh3d.cpp:209
InstancedMeshCompResource mInstancedMeshResource
Definition InstancedMesh3d.h:84
bool mInstanceDataUpdatedThisFrame
Definition InstancedMesh3d.h:80
virtual void RecreateCollisionShape() override
Definition InstancedMesh3d.cpp:385
virtual void Tick(float deltaTime) override
Definition InstancedMesh3d.cpp:49
DECLARE_NODE(InstancedMesh3D, StaticMesh3D)
bool mUnrolled
Definition InstancedMesh3d.h:81
virtual bool IsInstancedMesh3D() const override
Definition InstancedMesh3d.cpp:95
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition InstancedMesh3d.cpp:22
virtual void Render() override
Definition InstancedMesh3d.cpp:41
void CalculateLocalBounds()
Definition InstancedMesh3d.cpp:403
Bounds CalculateInstanceBounds(int32_t instanceIndex)
Definition InstancedMesh3d.cpp:298
Bounds mBounds
Definition InstancedMesh3d.h:82
bool ShouldUnroll() const
Definition InstancedMesh3d.cpp:232
const std::vector< MeshInstanceData > & GetInstanceData() const
Definition InstancedMesh3d.cpp:135
virtual void SaveStream(Stream &stream, Platform platform) override
Definition InstancedMesh3d.cpp:63
virtual const char * GetTypeName() const override
Definition InstancedMesh3d.cpp:17
virtual void GatherProxyDraws(std::vector< DebugDraw > &inoutDraws) override
Definition InstancedMesh3d.cpp:119
btCompoundShape * GeneratePaintCollisionShape()
Definition InstancedMesh3d.cpp:317
virtual void Create() override
Definition InstancedMesh3d.cpp:31
void RemoveInstanceData(int32_t index)
Definition InstancedMesh3d.cpp:179
btTransform CalculateInstanceBulletTransform(int32_t instanceIndex)
Definition InstancedMesh3d.cpp:264
virtual void SetStaticMesh(StaticMesh *staticMesh)
Definition InstancedMesh3d.cpp:100
uint32_t GetTotalVertexCount() const
Definition InstancedMesh3d.cpp:194
btCompoundShape * GenerateTriangleCollisionShape()
Definition InstancedMesh3d.cpp:350
uint32_t GetNumInstances() const
Definition InstancedMesh3d.cpp:124
bool WasInstanceDataUpdatedThisFrame() const
Definition InstancedMesh3d.cpp:227
~InstancedMesh3D()
Definition InstancedMesh3d.cpp:12
InstancedMesh3D()
Definition InstancedMesh3d.cpp:7
bool mInstanceDataDirty
Definition InstancedMesh3d.h:79
bool mAlwaysUnroll
Definition InstancedMesh3d.h:77
float mUnrolledCullDistance
Definition InstancedMesh3d.h:75
void AddInstanceData(const MeshInstanceData &data, int32_t index=-1)
Definition InstancedMesh3d.cpp:157
std::vector< MeshInstanceData > mInstanceData
Definition InstancedMesh3d.h:74
virtual void EditorTick(float deltaTime) override
Definition InstancedMesh3d.cpp:56
virtual void Destroy() override
Definition InstancedMesh3d.cpp:36
float mUnrolledCellSize
Definition InstancedMesh3d.h:76
void Unroll()
Definition InstancedMesh3d.cpp:455
void SetInstanceData(int32_t index, const MeshInstanceData &data)
Definition InstancedMesh3d.cpp:140
InstancedMeshCompResource * GetInstancedMeshResource()
Definition InstancedMesh3d.cpp:259
void UpdateInstanceData()
Definition InstancedMesh3d.cpp:215
glm::mat4 CalculateInstanceTransform(int32_t instanceIndex)
Definition InstancedMesh3d.cpp:277
virtual Bounds GetLocalBounds() const override
Definition InstancedMesh3d.cpp:109
Definition StaticMesh3d.h:12
Definition StaticMesh.h:18
Definition Stream.h:21
Definition EngineTypes.h:193
Definition GraphicsTypes.h:198
Definition InstancedMesh3d.h:6
glm::vec3 mScale
Definition InstancedMesh3d.h:9
glm::vec3 mPosition
Definition InstancedMesh3d.h:7
glm::vec3 mRotation
Definition InstancedMesh3d.h:8