Skip to content

Commit 418ee12

Browse files
author
warriormaster12
committed
Per object diffuse texture support
1 parent 9e331c0 commit 418ee12

File tree

5 files changed

+39
-17
lines changed

5 files changed

+39
-17
lines changed

Include/Engine/Components/Mesh.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
#include "../Renderer/VkSetup.h"
55
#include "../Renderer/Buffers/VkVertexbuffers.h"
66
#include "../Renderer/Buffers/VkIndexbuffers.h"
7+
#include "../Renderer/Buffers/VkBufferCreation.h"
8+
#include "../Renderer/VkMemory.h"
79
#include "../Math/Math3D.h"
10+
#include "../Renderer/VkTextureManager.h"
811

912

1013

@@ -23,12 +26,16 @@ namespace VkRenderer
2326

2427

2528
VkSetup *setup_ref;
29+
VkMemory *memory_ref;
30+
VkBufferCreation *buffer_ref;
2631

2732
Transform3D mesh_transform;
33+
VkTextureManager texture;
2834
std::string TEXTURE_PATH = "EngineAssets/Textures/viking_room.png";
2935

3036

31-
37+
void BindTexture(VkCommandPool& commandPool);
38+
void DestroyTexture();
3239
void InitMesh(VkCommandPool& commandPool);
3340
void update(uint32_t imageIndex);
3441
void DestroyMesh();

Include/Engine/Renderer/Buffers/VkUnfiormbuffers.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ namespace VkRenderer
2323
public:
2424
void createDescriptorSetLayout();
2525
void createDescriptorPool();
26-
void createDescriptorSets(VkImageView& textureImageView, VkSampler& textureSampler);
26+
void createDescriptorSets();
2727
void createUniformBuffer();
2828
void updateUniformBuffer(uint32_t DescriptorSetIndex, VkExtent2D& swapChainExtent);
2929

src/Engine/Components/Mesh.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,16 @@
22

33
namespace VkRenderer
44
{
5+
void Mesh::BindTexture(VkCommandPool& commandPool)
6+
{
7+
texture.setup_ref = setup_ref;
8+
texture.buffer_ref = buffer_ref;
9+
texture.memory_ref = memory_ref;
510

11+
texture.createTextureImage(TEXTURE_PATH, commandPool);
12+
texture.createTextureImageView();
13+
texture.createTextureSampler();
14+
}
615

716
void Mesh::InitMesh(VkCommandPool& commandPool)
817
{
@@ -19,6 +28,15 @@ namespace VkRenderer
1928

2029
}
2130

31+
void Mesh::DestroyTexture()
32+
{
33+
vkDestroySampler(setup_ref->device, texture.textureSampler, nullptr);
34+
vkDestroyImageView(setup_ref->device, texture.textureImageView, nullptr);
35+
36+
vkDestroyImage(setup_ref->device, texture.textureImage, nullptr);
37+
vkFreeMemory(setup_ref->device, texture.textureImageMemory, nullptr);
38+
}
39+
2240

2341
void Mesh::DestroyMesh()
2442
{

src/Engine/Renderer/Buffers/VkUniformbuffers.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ namespace VkRenderer
5858
throw std::runtime_error("failed to create descriptor pool!");
5959
}
6060
}
61-
void VkUbuffer::createDescriptorSets(VkImageView& textureImageView, VkSampler& textureSampler)
61+
void VkUbuffer::createDescriptorSets()
6262
{
6363
descriptorSets.resize(meshes.size());
6464
for (size_t i = 0; i < meshes.size(); i++) {
@@ -82,8 +82,8 @@ namespace VkRenderer
8282

8383
VkDescriptorImageInfo imageInfo{};
8484
imageInfo.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
85-
imageInfo.imageView = textureImageView;
86-
imageInfo.sampler = textureSampler;
85+
imageInfo.imageView = meshes[i]->texture.textureImageView;
86+
imageInfo.sampler = meshes[i]->texture.textureSampler;
8787
std::vector<VkWriteDescriptorSet> descriptorWrites = {
8888
writeDescriptorSet(descriptorSets[i], VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, nullptr, &bufferInfo, 1),
8989
writeDescriptorSet(descriptorSets[i], VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &imageInfo, nullptr, 1),

src/Engine/Renderer/VkRenderer.cpp

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,8 @@ namespace VkRenderer
2626
meshes.emplace_back();
2727

2828

29-
30-
texture_m_ref.createTextureImage("EngineAssets/Textures/viking_room.png", Cbuffer_ref.commandPool);
31-
texture_m_ref.createTextureImageView();
32-
texture_m_ref.createTextureSampler();
3329

30+
meshes[2].TEXTURE_PATH = "EngineAssets/Textures/chapel_diffuse.tga";
3431
meshes[2].model_ref.MODEL_PATH = "EngineAssets/Models/chapel_obj.obj";
3532

3633
for (int i = 0; i < meshes.size(); i++) {
@@ -44,7 +41,10 @@ namespace VkRenderer
4441

4542
//Mesh
4643
meshes[i].setup_ref = &setup_ref;
44+
meshes[i].memory_ref = &memory_ref;
45+
meshes[i].buffer_ref = &buffer_ref;
4746

47+
meshes[i].BindTexture(Cbuffer_ref.commandPool);
4848
meshes[i].InitMesh(Cbuffer_ref.commandPool);
4949
meshes[i].mesh_transform.rotation = glm::vec3(-90.0f,0.0f,0.0f);
5050
Ubuffer_ref.meshes.push_back(&meshes[i]);
@@ -56,7 +56,7 @@ namespace VkRenderer
5656
Ubuffer_ref.createUniformBuffer();
5757

5858
Ubuffer_ref.createDescriptorPool();
59-
Ubuffer_ref.createDescriptorSets(texture_m_ref.textureImageView, texture_m_ref.textureSampler);
59+
Ubuffer_ref.createDescriptorSets();
6060

6161

6262

@@ -65,8 +65,8 @@ namespace VkRenderer
6565

6666
meshes[0].mesh_transform.translate=glm::vec3(0.0f,-1.0f,0.0f);
6767
meshes[1].mesh_transform.translate=glm::vec3(0.0f,1.0f,0.0f);
68-
meshes[2].mesh_transform.translate=glm::vec3(0.0f,0.0f,1.0f);
69-
meshes[2].mesh_transform.scale = glm::vec3(0.001f);
68+
meshes[2].mesh_transform.translate=glm::vec3(0.0f,0.0f,3.0f);
69+
meshes[2].mesh_transform.scale = glm::vec3(0.002f);
7070
meshes[2].mesh_transform.rotation = glm::vec3(0.0f, 90.0f, 0.0f);
7171

7272
}
@@ -91,7 +91,7 @@ namespace VkRenderer
9191

9292
Ubuffer_ref.createUniformBuffer();
9393
Ubuffer_ref.createDescriptorPool();
94-
Ubuffer_ref.createDescriptorSets(texture_m_ref.textureImageView, texture_m_ref.textureSampler);
94+
Ubuffer_ref.createDescriptorSets();
9595

9696

9797
Cbuffer_ref.createCommandBuffers(Fbuffer_ref.swapChainFramebuffers,swap_ref.swapChainExtent, Ubuffer_ref.descriptorSets);
@@ -128,15 +128,12 @@ namespace VkRenderer
128128
{
129129
cleanupSwapChain();
130130

131-
vkDestroySampler(setup_ref.device, texture_m_ref.textureSampler, nullptr);
132-
vkDestroyImageView(setup_ref.device, texture_m_ref.textureImageView, nullptr);
133131

134-
vkDestroyImage(setup_ref.device, texture_m_ref.textureImage, nullptr);
135-
vkFreeMemory(setup_ref.device, texture_m_ref.textureImageMemory, nullptr);
136132

137133
vkDestroyDescriptorSetLayout(setup_ref.device, Ubuffer_ref.descriptorSetLayout, nullptr);
138134
for (int i=meshes.size()-1; i >= 0; i--)
139135
{
136+
meshes[i].DestroyTexture();
140137
meshes[i].DestroyMesh();
141138
}
142139

0 commit comments

Comments
 (0)