Polyphase Game Engine
Loading...
Searching...
No Matches
StaticMesh.h
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4
5#include "Assets/Material.h"
6#include "Asset.h"
7#include "Vertex.h"
8
10
11#define CREATE_CONVEX_COLLISION_MESH (PLATFORM_WINDOWS || PLATFORM_LINUX)
12
13#if EDITOR
14#include <assimp/scene.h>
15#endif
16
18{
19public:
20
22
23 StaticMesh();
25
26 void CreateRaw(
27 uint32_t numVertices,
28 Vertex* vertices,
29 uint32_t numIndices,
30 IndexType* indices);
31
32 void CreateRawColor(
33 uint32_t numVertices,
34 VertexColor* vertices,
35 uint32_t numIndices,
36 IndexType* indices);
37
38 StaticMeshResource* GetResource();
39
40 // Asset Interface
41 virtual void LoadStream(Stream& stream, Platform platform) override;
42 virtual void SaveStream(Stream& stream, Platform platform) override;
43 virtual void Create() override;
44 virtual void Destroy() override;
45 virtual bool Import(const std::string& path, ImportOptions* options) override;
46 virtual void GatherProperties(std::vector<Property>& outProps) override;
47 virtual glm::vec4 GetTypeColor() override;
48 virtual const char* GetTypeName() override;
49 virtual const char* GetTypeImportExt() override;
50
51 class Material* GetMaterial();
52 void SetMaterial(class Material* newMaterial);
53
54 uint32_t GetNumIndices() const;
55 uint32_t GetNumFaces() const;
56 uint32_t GetNumVertices() const;
57 bool HasVertexColor() const;
58
59 Vertex* GetVertices();
60 VertexColor* GetColorVertices();
61 IndexType* GetIndices();
62
63 Bounds GetBounds() const;
64
65 btBvhTriangleMeshShape* GetTriangleCollisionShape();
66 btCollisionShape* GetCollisionShape();
67 void SetCollisionShape(btCollisionShape* shape);
68 void SetCollisionShapes(uint32_t numCollisionShapes, btCollisionShape** collisionShapes, btTransform* transforms, bool compound);
69
70 void SetGenerateTriangleCollisionMesh(bool generate);
71 bool IsTriangleCollisionMeshEnabled() const;
72 uint32_t GetVertexSize() const;
73
74 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
75
76private:
77
78 bool ShouldGenerateTriangleCollision() const;
79
80 void CreateTriangleCollisionShape();
81 void DestroyTriangleCollisionShape();
82
83 // Tear down the GPU resource and BVH on an already-loaded mesh and clear
84 // Asset::mLoaded so CreateRaw / CreateRawColor can rebuild via Create().
85 // Does NOT call Asset::Destroy (which would erase AssetRefs and break
86 // scene references to this mesh).
87 void PrepareForRebuild();
88
89 void ResizeVertexArray(uint32_t newSize);
90 void ResizeIndexArray(uint32_t newSize);
91
92 void ComputeBounds();
93
94 MaterialRef mMaterial;
95 uint32_t mNumVertices;
96 uint32_t mNumIndices;
97 uint32_t mNumUvMaps;
98
99 void* mVertices;
100 IndexType* mIndices;
101
102 Bounds mBounds;
103
104 btCollisionShape* mCollisionShape;
105 btBvhTriangleMeshShape* mTriangleCollisionShape;
106 btTriangleIndexVertexArray* mTriangleIndexVertexArray;
107 btTriangleInfoMap* mTriangleInfoMap;
108 bool mGenerateTriangleCollisionMesh;
109 bool mHasVertexColor;
110
111 // Graphics Resource
112 StaticMeshResource mResource;
113
114#if EDITOR
115public:
116 void Create(
117 const aiScene* scene,
118 const aiMesh& meshData,
119 uint32_t numCollisionMeshes,
120 const aiMesh** collisionMeshes);
121 void CreateCombined(
122 const aiScene* scene,
123 const std::vector<const aiMesh*>& renderMeshes,
124 uint32_t numCollisionMeshes,
125 const aiMesh** collisionMeshes);
126protected:
127 std::vector<uint32_t> mPureVertexColors;
128#endif
129
130#if CREATE_CONVEX_COLLISION_MESH
131public:
132 void CreateCollisionMesh(btCollisionShape* collisionShape);
133 std::vector<StaticMesh*> mCollisionMeshes;
134#endif // EDITOR
135};
Platform
Definition EngineTypes.h:31
uint16_t IndexType
Definition GraphicsTypes.h:122
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Bounds ComputeBounds(const std::vector< T > &vertices)
Definition Utilities.h:153
Definition AssetRef.h:18
Definition Asset.h:119
virtual bool Import(const std::string &path, ImportOptions *options=nullptr)
Definition Asset.cpp:292
virtual void Create()
Definition Asset.cpp:77
virtual void SaveStream(Stream &stream, Platform platform)
Definition Asset.cpp:284
virtual glm::vec4 GetTypeColor()
Definition Asset.cpp:302
virtual const char * GetTypeImportExt()
Definition Asset.cpp:312
virtual const char * GetTypeName()
Definition Asset.cpp:307
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Asset.cpp:297
virtual void LoadStream(Stream &stream, Platform platform)
Definition Asset.cpp:270
virtual void Destroy()
Definition Asset.cpp:92
Definition Datum.h:169
Definition Asset.h:108
Definition Material.h:48
Definition StaticMesh.h:18
DECLARE_ASSET(StaticMesh, Asset)
Definition Stream.h:21
Definition EngineTypes.h:200
Definition GraphicsTypes.h:172
Definition Vertex.h:28
Definition Vertex.h:20