SpiecsEngine
 
Loading...
Searching...
No Matches
Mesh.cpp
Go to the documentation of this file.
1/**
2* @file Mesh.cpp.
3* @brief The Mesh Class Implementation.
4* @author Spices.
5*/
6
7#include "Pchheader.h"
8#include "Mesh.h"
9
10namespace Spices {
11
12 Mesh::Mesh(std::shared_ptr<scl::linked_unordered_map<uint32_t, std::shared_ptr<MeshPack>>> meshPack)
14 {}
15
16 void Mesh::AddMaterialToHitGroup(std::unordered_map<std::string, uint32_t>& hitGroup)
17 {
19
20 m_Pack->for_each([&](const uint32_t& k, const std::shared_ptr<MeshPack>& v) {
21
22 auto& stages = v->GetMaterial()->GetShaderPath("rchit");
23 if (stages.empty())
24 {
25 std::stringstream ss;
26 ss << "Material: " << v->GetMaterial()->GetName() << " do not has valid rchit shader.";
27
28 SPICES_CORE_ERROR(ss.str())
29 }
30
31 if (hitGroup.find(stages[0]) == hitGroup.end())
32 {
33 hitGroup[stages[0]] = static_cast<uint32_t>(hitGroup.size());
34
35 v->SetHitShaderHandle(hitGroup[stages[0]]);
36 }
37 else
38 {
39 v->SetHitShaderHandle(hitGroup[stages[0]]);
40 }
41
42 return false;
43 });
44 }
45
47 {
49
50 m_Pack = std::make_shared<scl::linked_unordered_map<uint32_t, std::shared_ptr<MeshPack>>>();
51 }
52
53 Mesh::Builder& Mesh::Builder::AddPack(std::shared_ptr<MeshPack> meshPack)
54 {
56
57 meshPack->OnCreatePack();
58
59 m_Pack->push_back(m_PackNums, meshPack);
60 m_PackNums++;
61 return *this;
62 }
63
64 std::shared_ptr<Mesh> Mesh::Builder::Build() const
65 {
67
68 return std::make_shared<Mesh>(m_Pack);
69 }
70
71}
#define SPICES_PROFILE_ZONE
MeshPack Class. This class defines some basic behaves and variables. This class need to be inherited ...
Definition MeshPack.h:156
Builder & AddPack(std::shared_ptr< MeshPack > meshPack)
Add pack to mesh.
Definition Mesh.cpp:53
uint32_t m_PackNums
The packs nums.
Definition Mesh.h:65
Builder()
Constructor Function.
Definition Mesh.cpp:46
std::shared_ptr< Mesh > Build() const
Build a mesh shared pointer.
Definition Mesh.cpp:64
Builder Class. This class helps to create a mesh.
Definition Mesh.h:29
Mesh(std::shared_ptr< scl::linked_unordered_map< uint32_t, std::shared_ptr< MeshPack > > > meshPacks)
Constructor Function. Init member variables.
Definition Mesh.cpp:12
void AddMaterialToHitGroup(std::unordered_map< std::string, uint32_t > &hitGroup)
Add Mesh's material to hit group.
Definition Mesh.cpp:16
MeshRenderer Class. This class is a wrapper of mashpack.
Definition Mesh.h:21
The container combines hashmap and list together. Used in the case that we want iter a hashmap in ord...