Skip to content

Commit c57f8ea

Browse files
committed
Mesh: Vertex buffer upload to GPU
1 parent 88d3031 commit c57f8ea

File tree

4 files changed

+33
-6
lines changed

4 files changed

+33
-6
lines changed

src/private/Core/GameObject/Component/Mesh.cpp

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,40 @@ Mesh::Mesh(std::string name) : Component::Component(name) {
88
this->m_dev = nullptr;
99
this->m_list = nullptr;
1010

11-
this->m_renderer = nullptr;
11+
this->m_renderer = this->m_core->GetRenderer();
1212

1313
this->m_bMeshLoaded = false;
1414
}
1515

1616
void Mesh::Init() {
1717
Component::Init();
1818

19-
this->m_renderer = this->m_core->GetRenderer();
2019

2120
if (D3D12* d3d12 = dynamic_cast<D3D12*>(this->m_renderer)) {
2221
this->D3D12Init(d3d12);
2322
}
2423
}
2524

25+
void Mesh::UploadVertices() {
26+
D3D12* d3d12 = dynamic_cast<D3D12*>(this->m_renderer);
27+
28+
if (!d3d12) {
29+
spdlog::error("{0}: Failed uploading vertices. D3D12 Renderer not initialized.", this->m_name);
30+
throw std::exception();
31+
return;
32+
}
33+
34+
spdlog::debug("{0}: Uploading vertices to GPU.", this->m_name);
35+
for (std::pair<UINT, std::vector<Vertex>> object : this->m_vertices) {
36+
ComPtr<ID3D12Resource> VBO;
37+
d3d12->CreateBuffer(&object.second[0], object.second.size() * sizeof(Vertex), VBO);
38+
VBO->SetName(L"StaticMesh VBO");
39+
spdlog::debug("{0}: {1:d} vertices uploaded for mesh {2:d}", this->m_name, object.second.size(), object.first);
40+
}
41+
42+
spdlog::debug("{0}: Vertex Buffer Object initialized", this->m_name);
43+
}
44+
2645
void Mesh::Update() {
2746
Component::Update();
2847

@@ -33,7 +52,7 @@ void Mesh::D3D12Init(D3D12* renderer) {
3352
renderer->GetDevice(this->m_dev);
3453
renderer->GetCommandList(this->m_list);
3554

36-
55+
this->UploadVertices();
3756
}
3857

3958
/*
@@ -80,7 +99,8 @@ void Mesh::LoadModel(std::string filename) {
8099
const aiTexture* texture = scene->GetEmbeddedTexture(texPath.C_Str());
81100
ResourceManager* resMgr = ResourceManager::GetInstance();
82101
ComPtr<ID3D12Resource> resource;
83-
resMgr->LoadTexture((BYTE*)texture->pcData, texture->mWidth, texture->mFilename.C_Str(), resource.GetAddressOf());
102+
resMgr->LoadTexture((BYTE*)texture->pcData, texture->mWidth, texture->mFilename.C_Str(), resource);
103+
this->m_textures[i] = resource;
84104
}
85105
}
86106
}

src/private/Core/GameObject/GameObject.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@
22

33
GameObject::GameObject(std::string name) {
44
this->m_name = name;
5+
56
}
67

78
void GameObject::Init() {
89
this->m_mesh = new Mesh("StaticMeshComponent");
910
this->m_components.push_back(this->m_mesh);
11+
this->m_mesh->LoadModel("f16.fbx");
1012
for (Component* component : this->m_components) {
1113
component->Init();
1214
}
13-
this->m_mesh->LoadModel("f16.fbx");
1415
}
1516

1617
void GameObject::Update() {

src/private/Core/Renderer/ResourceManager.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ bool ResourceManager::AddResource(std::string resource, ComPtr<ID3D12Resource>&
6666

6767
spdlog::debug("Adding resource {0} to the resource manager.", resource);
6868
this->m_resources[resource] = res;
69-
spdlog::info("Resource wiht name {0} added to the resource manager.", resource);
69+
spdlog::info("Resource with name {0} added to the resource manager.", resource);
7070

7171
return true;
7272
}

src/public/Core/GameObject/Component/Mesh.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ class Mesh : public Component {
3535
bool m_bMeshLoaded;
3636

3737
std::map<UINT, std::vector<Vertex>> m_vertices;
38+
std::map <UINT, ComPtr<ID3D12Resource>> m_textures;
39+
40+
std::map<UINT, ComPtr<ID3D12Resource>> m_VBOs;
41+
std::map<UINT, ComPtr<ID3D12Resource>> m_IBOs;
42+
43+
void UploadVertices();
3844
public:
3945
Mesh(std::string name);
4046

0 commit comments

Comments
 (0)