Skip to content

Commit b9603ac

Browse files
committed
Mesh: Started with the pipeline initialization.
Serialized the root signature
1 parent 2f7309c commit b9603ac

File tree

10 files changed

+84
-1
lines changed

10 files changed

+84
-1
lines changed

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

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Mesh::Mesh(std::string name) : Component::Component(name) {
1111
this->m_renderer = this->m_core->GetRenderer();
1212

1313
this->m_bMeshLoaded = false;
14+
this->m_nTotalVertices = 0;
1415
}
1516

1617
void Mesh::Init() {
@@ -66,21 +67,64 @@ void Mesh::UploadVertices() {
6667
void Mesh::Update() {
6768
Component::Update();
6869

70+
}
71+
72+
void Mesh::Render() {
73+
this->m_list->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
6974
this->m_list->IASetVertexBuffers(0, this->m_VBVs.size(), &this->m_VBVs[0]);
75+
76+
this->m_list->DrawInstanced(this->m_nTotalVertices, 1, 0, 0);
77+
//for (D3D12_VERTEX_BUFFER_VIEW vbv : this->m_VBVs) {
78+
// //this->m_list->DrawInstanced(nVertexCount, )
79+
//}
80+
}
81+
82+
void Mesh::InitPipeline() {
83+
this->m_shader = new Shader("GBufferPass.hlsl", "VertexMain", "PixelMain");
84+
85+
LPVOID lpVertex, lpPixel = nullptr;
86+
UINT nVertexSize = this->m_shader->GetBuffer(SHADER_BUFFER::VERTEX, lpVertex);
87+
UINT nPixelSize = this->m_shader->GetBuffer(SHADER_BUFFER::VERTEX, lpVertex);
88+
89+
D3D12_ROOT_SIGNATURE_DESC rootDesc = { };
90+
rootDesc.pParameters = nullptr;
91+
rootDesc.NumParameters = 0;
92+
rootDesc.pStaticSamplers = nullptr;
93+
rootDesc.NumStaticSamplers = 0;
94+
rootDesc.Flags = D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT;
95+
96+
ComPtr<ID3DBlob> rsBlob, rsErrBlob;
97+
ThrowIfFailed(D3D12SerializeRootSignature(&rootDesc, D3D_ROOT_SIGNATURE_VERSION_1, rsBlob.GetAddressOf(), rsErrBlob.GetAddressOf()));
98+
99+
if (rsErrBlob) {
100+
spdlog::error("{0}: Error serializing root signature. {1}", this->m_name, (char*)rsErrBlob->GetBufferPointer());
101+
return;
102+
}
103+
104+
D3D12_INPUT_ELEMENT_DESC layout[] = {
105+
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, NULL },
106+
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, NULL }
107+
};
108+
109+
D3D12_GRAPHICS_PIPELINE_STATE_DESC plDesc = { };
70110
}
71111

72112
void Mesh::D3D12Init(D3D12* renderer) {
73113
renderer->GetDevice(this->m_dev);
74114
renderer->GetCommandList(this->m_list);
75115

76116
this->UploadVertices();
117+
this->InitPipeline();
77118
}
78119

79120
/*
80121
Load a model from an FBX file with assimp.
81122
*/
82123
void Mesh::LoadModel(std::string filename) {
83-
if (this->m_bMeshLoaded) return;
124+
if (this->m_bMeshLoaded) {
125+
spdlog::error("{0}: Tried to load another file when meshes already loaded", this->m_name);
126+
return;
127+
};
84128

85129
Assimp::Importer importer;
86130
const aiScene* scene = importer.ReadFile(filename, NULL);
@@ -89,6 +133,7 @@ void Mesh::LoadModel(std::string filename) {
89133
aiMesh* mesh = scene->mMeshes[i];
90134
aiMaterial* material = scene->mMaterials[mesh->mMaterialIndex];
91135
std::vector<Vertex> vertices;
136+
this->m_nTotalVertices += mesh->mNumVertices;
92137

93138
for (UINT x = 0; x < mesh->mNumVertices; x++) {
94139
aiVector3D vec = mesh->mVertices[x];

src/private/Core/GameObject/GameObject.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,12 @@ void GameObject::Update() {
1818
for (Component* component : this->m_components) {
1919
component->Update();
2020
}
21+
}
22+
23+
void GameObject::Render() {
24+
for (Component* component : this->m_components) {
25+
if (Mesh* mesh = dynamic_cast<Mesh*>(component)) {
26+
mesh->Render();
27+
}
28+
}
2129
}

src/private/Core/Renderer/D3D12.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "Core/Renderer/D3D12.h"
22
#include "Core/Renderer/ScreenQuad.h"
3+
#include "Core/Scene/SceneManager.h"
34

45
D3D12::D3D12() : Renderer::Renderer() {
56
this->m_nBackBuffers = 2;
@@ -10,6 +11,7 @@ D3D12::D3D12() : Renderer::Renderer() {
1011
this->m_nAlbedoIndex = 0;
1112
this->m_nUVIndex = 0;
1213
this->m_nPositionIndex = 0;
14+
this->sceneMgr = SceneManager::GetInstance();
1315
}
1416

1517
void D3D12::Init(HWND hwnd) {
@@ -215,6 +217,8 @@ void D3D12::Update() {
215217
};
216218
this->m_list->OMSetRenderTargets(_countof(gbuffers), gbuffers, FALSE, &dsv.cpuHandle);
217219

220+
this->sceneMgr->Render();
221+
218222
Descriptor rtv = this->m_rtvHeap->GetDescriptor(this->m_nActualBackBuffer);
219223
this->m_list->OMSetRenderTargets(1, &rtv.cpuHandle, FALSE, nullptr);
220224
this->m_list->ClearRenderTargetView(rtv.cpuHandle, RGBA{ 0.f, 0.f, 0.f, 1.f }, 0, nullptr);

src/private/Core/Scene/Scene.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ void Scene::Update() {
1818
}
1919
}
2020

21+
void Scene::Render() {
22+
for (GameObject* object : this->m_gameObjects) {
23+
object->Render();
24+
}
25+
}
26+
2127
void Scene::AddGameObject(GameObject* object) {
2228
this->m_gameObjects.push_back(object);
2329
}

src/private/Core/Scene/SceneManager.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ void SceneManager::LoadScene(std::string name) {
4747
this->m_actualScene = this->m_scenes[name];
4848
}
4949

50+
void SceneManager::Render() {
51+
this->m_actualScene->Render();
52+
}
53+
5054
SceneManager* SceneManager::GetInstance() {
5155
if (SceneManager::m_instance == nullptr)
5256
SceneManager::m_instance = new SceneManager();

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "Util.h"
1212

1313
#include "Core/GameObject/Component/Component.h"
14+
#include "Core/Renderer/Shader.h"
1415

1516
using namespace Microsoft::WRL;
1617

@@ -42,13 +43,19 @@ class Mesh : public Component {
4243

4344
std::map<UINT, ComPtr<ID3D12Resource>> m_VBOs;
4445
std::map<UINT, ComPtr<ID3D12Resource>> m_IBOs;
46+
Shader* m_shader;
47+
48+
UINT m_nTotalVertices;
4549

4650
void UploadVertices();
51+
void InitPipeline();
4752
public:
4853
Mesh(std::string name);
4954

5055
void Init();
5156
void Update();
5257

58+
void Render();
59+
5360
void LoadModel(std::string filename);
5461
};

src/public/Core/GameObject/GameObject.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ class GameObject {
1212

1313
std::vector<Component*> m_components;
1414
Mesh* m_mesh;
15+
1516
public:
1617
GameObject(std::string name);
1718

1819
void Init();
1920
void Update();
21+
void Render();
2022
};

src/public/Core/Renderer/D3D12.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@ enum VSYNC {
1818
};
1919

2020
class ScreenQuad;
21+
class SceneManager;
2122

2223
class D3D12 : public Renderer {
2324
friend ScreenQuad;
2425
friend class ResourceManager;
2526
friend class Mesh;
2627
private:
28+
2729
ComPtr<IDXGIFactory4> m_factory;
2830
ComPtr<IDXGIAdapter1> m_adapter;
2931

@@ -66,6 +68,7 @@ class D3D12 : public Renderer {
6668
D3D12_RECT m_scissor;
6769

6870
ScreenQuad* m_screenQuad;
71+
SceneManager* sceneMgr;
6972

7073
void ResourceBarrier(ComPtr<ID3D12Resource> resource, D3D12_RESOURCE_STATES oldState, D3D12_RESOURCE_STATES newState);
7174

src/public/Core/Scene/Scene.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,7 @@ class Scene {
1717
void Init();
1818
void Update();
1919

20+
void Render();
21+
2022
void AddGameObject(GameObject* object);
2123
};

src/public/Core/Scene/SceneManager.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,7 @@ class SceneManager {
2424
Scene* GetScene(std::string name);
2525
void AddScene(Scene* scene);
2626

27+
void Render();
28+
2729
void LoadScene(std::string name);
2830
};

0 commit comments

Comments
 (0)