Fling Engine  0.00.1
Fling Engine is a game engine written in Vulkan
Cubemap.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "Model.h"
4 #include "Texture.h"
5 #include "FlingVulkan.h"
6 #include "Buffer.h"
7 #include "FlingTypes.h"
8 #include "FlingMath.h"
9 #include "File.h"
10 #include "LogicalDevice.h"
11 #include "UniformBufferObject.h"
12 #include "Camera.h"
13 #include "GraphicsPipeline.h"
14 #include "MultiSampler.h"
15 
16 namespace Fling
17 {
18  class LogicalDevice;
19 
20  class Cubemap
21  {
22  public:
23  Cubemap(
24  Guid t_PosX_ID,
25  Guid t_NegX_ID,
26  Guid t_PosY_ID,
27  Guid t_NegY_ID,
28  Guid t_PosZ_ID,
29  Guid t_NegZ_ID,
30  Guid t_VertexShader,
31  Guid t_FragShader,
32  VkRenderPass t_RenderPass,
33  LogicalDevice* t_LogicalDevice);
34 
35  Cubemap(
36  Guid t_CubeMap_ID,
37  VkRenderPass t_Renderpass,
38  VkDevice t_LogicalDevice);
39 
40  ~Cubemap();
41 
42  void Init(Camera* t_Camera, UINT32 t_CurrentImage, size_t t_NumeFramesInFlight, Multisampler* t_Sampler);
43 
44  void UpdateUniformBuffer(UINT32 t_CurrentImage, const glm::mat4& t_ProjectionMatrix, const glm::mat4& t_ViewMatrix);
45 
46  void BindCmdBuffer(VkCommandBuffer& t_CommandBuffer);
47 
48  std::unique_ptr<GraphicsPipeline> GetGraphicsPipeline() const { return std::unique_ptr<GraphicsPipeline>(m_GraphicsPipeline); }
49 
55  VkDescriptorSet& GetDescriptorSet() { return m_DescriptorSet; }
56 
62  Buffer* GetVertexBuffer() const { return m_Cube->GetVertexBuffer(); }
63 
69  Buffer* GetIndexBuffer() const { return m_Cube->GetIndexBuffer(); }
70 
76  UINT32 GetIndexCount() const { return m_Cube->GetIndexCount(); }
77 
78  VkIndexType GetIndexType() const { return m_Cube->GetIndexType(); }
79 
80  VkImage GetImage() const { return m_Image; }
81  VkDeviceMemory GetImageMemory() const{ return m_ImageMemory; }
82  VkDescriptorImageInfo& GetImageInfo() { return m_DescriptorImageInfo; }
83 
84  private:
85 
86  void PreparePipeline(Multisampler* t_Sampler);
87 
89  void LoadCubeMapImage(Guid t_CubeMap_ID);
90 
91  void LoadCubemapImages(
92  Guid t_PosX_ID,
93  Guid t_NegX_ID,
94  Guid t_PosY_ID,
95  Guid t_NegY_ID,
96  Guid t_PosZ_ID,
97  Guid t_NegZ_ID);
98 
99  void SetupDescriptors();
100 
101  std::vector<Texture> m_cubeMapImages;
102  std::vector<std::shared_ptr<class Buffer>> m_UniformBuffers;
103 
104  VkImage m_Image;
105  VkImageView m_Imageview;
106  VkImageLayout m_ImageLayout;
107  VkDeviceMemory m_ImageMemory;
108  VkSampler m_Sampler;
109 
110  VkDescriptorSetLayout m_DescriptorSetLayout;
111  VkDescriptorImageInfo m_DescriptorImageInfo;
112  VkDescriptorSet m_DescriptorSet;
113  VkDescriptorPool m_DescriptorPool;
114  VkRenderPass m_RenderPass;
116  VkDescriptorBufferInfo m_UniformBufferDescriptor;
117 
118  VkDeviceSize m_ImageSize;
119  VkDeviceSize m_LayerSize;
120  VkFormat m_Format;
124 
126  std::shared_ptr<Model> m_Cube;
128 
131  };
132 }
size_t m_numsFrameInFlight
Definition: Cubemap.h:123
VkIndexType GetIndexType() const
Definition: Cubemap.h:78
std::unique_ptr< GraphicsPipeline > GetGraphicsPipeline() const
Definition: Cubemap.h:48
void Init(Camera *t_Camera, UINT32 t_CurrentImage, size_t t_NumeFramesInFlight, Multisampler *t_Sampler)
Definition: Cubemap.cpp:66
GraphicsPipeline * m_GraphicsPipeline
Definition: Cubemap.h:127
Base class for camera, meant to be overridden.
Definition: Camera.h:10
VkDescriptorImageInfo m_DescriptorImageInfo
Definition: Cubemap.h:111
UINT32 m_NumChannels
Definition: Cubemap.h:121
Definition: UniformBufferObject.h:20
VkDeviceMemory m_ImageMemory
Definition: Cubemap.h:107
void BindCmdBuffer(VkCommandBuffer &t_CommandBuffer)
Definition: Cubemap.cpp:507
Definition: GraphicsPipeline.h:9
void UpdateUniformBuffer(UINT32 t_CurrentImage, const glm::mat4 &t_ProjectionMatrix, const glm::mat4 &t_ViewMatrix)
Definition: Cubemap.cpp:494
A logical device represents the application view of the device.
Definition: LogicalDevice.h:13
void LoadCubeMapImage(Guid t_CubeMap_ID)
Loads cubemaps with file format .hdr for ibl.
Definition: Cubemap.cpp:106
void SetupDescriptors()
Definition: Cubemap.cpp:407
A multi-sampler will allow us to enable MSAA.
Definition: MultiSampler.h:14
LogicalDevice * m_Device
Definition: Cubemap.h:115
UINT32 GetIndexCount() const
Get the Index Count object.
Definition: Cubemap.h:76
VkDescriptorSet m_DescriptorSet
Definition: Cubemap.h:112
std::vector< std::shared_ptr< class Buffer > > m_UniformBuffers
Definition: Cubemap.h:102
UINT32 m_MipLevels
Definition: Cubemap.h:122
VkDescriptorBufferInfo m_UniformBufferDescriptor
Definition: Cubemap.h:116
VkImage m_Image
Definition: Cubemap.h:104
Guid m_FragShader
Definition: Cubemap.h:129
VkDescriptorImageInfo & GetImageInfo()
Definition: Cubemap.h:82
VkImageView m_Imageview
Definition: Cubemap.h:105
Buffer * GetVertexBuffer() const
Get the Vertex Buffer object.
Definition: Cubemap.h:62
entt::hashed_string Guid
Definition: FlingTypes.h:26
~Cubemap()
Definition: Cubemap.cpp:45
VkSampler m_Sampler
Definition: Cubemap.h:108
VkDescriptorSetLayout m_DescriptorSetLayout
Definition: Cubemap.h:110
UboSkyboxVS m_UboVS
Definition: Cubemap.h:125
VkDescriptorPool m_DescriptorPool
Definition: Cubemap.h:113
std::vector< Texture > m_cubeMapImages
Definition: Cubemap.h:101
VkImage GetImage() const
Definition: Cubemap.h:80
Buffer * GetIndexBuffer() const
Get the Index Buffer object.
Definition: Cubemap.h:69
VkDeviceMemory GetImageMemory() const
Definition: Cubemap.h:81
void PreparePipeline(Multisampler *t_Sampler)
Definition: Cubemap.cpp:86
A Buffer represents a Vulkan buffer with a size, buffer pointer, and buffer memory.
Definition: Buffer.h:11
uint32_t UINT32
Definition: FlingTypes.h:13
VkDeviceSize m_LayerSize
Definition: Cubemap.h:119
VkRenderPass m_RenderPass
Definition: Cubemap.h:114
Definition: Engine.h:29
Cubemap(Guid t_PosX_ID, Guid t_NegX_ID, Guid t_PosY_ID, Guid t_NegY_ID, Guid t_PosZ_ID, Guid t_NegZ_ID, Guid t_VertexShader, Guid t_FragShader, VkRenderPass t_RenderPass, LogicalDevice *t_LogicalDevice)
Definition: Cubemap.cpp:11
Definition: Cubemap.h:20
VkDescriptorSet & GetDescriptorSet()
Get the Descriptor Sets object.
Definition: Cubemap.h:55
Guid m_VertexShader
Definition: Cubemap.h:130
void LoadCubemapImages(Guid t_PosX_ID, Guid t_NegX_ID, Guid t_PosY_ID, Guid t_NegY_ID, Guid t_PosZ_ID, Guid t_NegZ_ID)
Definition: Cubemap.cpp:248
std::shared_ptr< Model > m_Cube
Definition: Cubemap.h:126
VkDeviceSize m_ImageSize
Definition: Cubemap.h:118
VkFormat m_Format
Definition: Cubemap.h:120
VkImageLayout m_ImageLayout
Definition: Cubemap.h:106