Polyphase Game Engine
Loading...
Searching...
No Matches
VulkanUtils.h
Go to the documentation of this file.
1#pragma once
2
3#if API_VULKAN
4
6#include "Vertex.h"
7
11
12#include <vulkan/vulkan.h>
13
14class World;
15class DestroyQueue;
16class Pipeline;
17
18class Texture;
19class Material;
20class MaterialLite;
21class MaterialBase;
23class StaticMesh;
24class SkeletalMesh;
25class StaticMesh3D;
26class SkeletalMesh3D;
27class ShadowMesh3D;
28class InstancedMesh3D;
29class TextMesh3D;
30class Voxel3D;
31class Terrain3D;
32class TileMap2D;
33class Particle3D;
34class Primitive3D;
35class Node3D;
36class Quad;
37class Text;
38class Poly;
39
40struct Bounds;
41struct AABB;
42
43VkFormat ConvertPixelFormat(PixelFormat pixelFormat, bool srgb = false);
44
45UniformBlock WriteUniformBlock(void* data, uint32_t size);
46
47void CreateBuffer(
48 VkDeviceSize size,
49 VkBufferUsageFlags usage,
50 VkMemoryPropertyFlags properties,
51 VkBuffer& buffer,
52 VramAllocation& bufferMemory);
53
55 VkImage image,
56 VkFormat format,
57 VkImageLayout oldLayout,
58 VkImageLayout newLayout,
59 int32_t mipLevels = 1,
60 int32_t layerCount = 1,
61 VkCommandBuffer commandBuffer = VK_NULL_HANDLE);
62
63void CopyBuffer(
64 VkBuffer srcBuffer,
65 VkBuffer dstBuffer,
66 VkDeviceSize size);
67
69 VkBuffer buffer,
70 VkImage image,
71 uint32_t width,
72 uint32_t height);
73
74uint32_t GetFrameIndex();
75uint32_t GetFrameNumber();
76DestroyQueue* GetDestroyQueue();
77VkDevice GetVulkanDevice();
78VkCommandBuffer GetCommandBuffer();
79
80void DeviceWaitIdle();
81
82VkCommandBuffer BeginCommandBuffer();
83void EndCommandBuffer(VkCommandBuffer commandBuffer);
84uint32_t FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties);
85
86uint32_t GetFormatPixelSize(VkFormat format);
87uint32_t GetFormatBlockSize(VkFormat format);
88bool IsFormatBlockCompressed(VkFormat format);
89VkImageAspectFlags GetFormatImageAspect(VkFormat format);
90
91std::vector<VkVertexInputBindingDescription> GetVertexBindingDescription(VertexType type);
92std::vector<VkVertexInputAttributeDescription> GetVertexAttributeDescriptions(VertexType type);
93
94void SetDebugObjectName(VkObjectType objectType, uint64_t object, const char* name);
95void BeginDebugLabel(const char* name, glm::vec4 color = { 1.0f, 1.0f, 1.0f, 1.0f });
96void EndDebugLabel();
97
98void WriteGeometryUniformData(GeometryData& outData, World* world, Node3D* comp, const glm::mat4& transform);
101void GatherGeometryLightUniformData(GeometryData& outData, Primitive3D* primitive, Material* material, bool isStaticMesh);
102
103VkPipelineColorBlendAttachmentState GetBasicBlendState(BasicBlendState basicBlendState);
104
105#if _DEBUG
106void FullPipelineBarrier();
107#endif
108
109// Texture
110void CreateTextureResource(Texture* texture, uint8_t* pixels);
111void DestroyTextureResource(Texture* texture);
112
113// Material
114void CreateMaterialResource(Material* material);
115void DestroyMaterialResource(Material* material);
116void BindMaterialResource(Material* material);
117
118// StaticMesh
119void CreateStaticMeshResource(StaticMesh* staticMesh, bool hasColor, uint32_t numVertices, void* vertices, uint32_t numIndices, IndexType* indices);
120void DestroyStaticMeshResource(StaticMesh* staticMesh);
121void BindStaticMeshResource(StaticMesh* staticMesh);
122
123// SkeletalMesh
124void CreateSkeletalMeshResource(SkeletalMesh* skeletalMesh, uint32_t numVertices, VertexSkinned* vertices, uint32_t numIndices, IndexType* indices);
125void DestroySkeletalMeshResource(SkeletalMesh* skeletalMesh);
126void BindSkeletalMeshResource(SkeletalMesh* skeletalMesh);
128
129// StaticMeshComp
130void BindGeometryDescriptorSet(StaticMesh3D* staticMeshComp);
132void DestroyStaticMeshCompResource(StaticMesh3D* staticMeshComp);
133void DrawStaticMeshComp(StaticMesh3D* staticMeshComp, StaticMesh* meshOverride = nullptr);
134
135// SkeletalMeshComp
136void DestroySkeletalMeshCompResource(SkeletalMesh3D* skeletalMeshComp);
137void ReallocateSkeletalMeshCompVertexBuffer(SkeletalMesh3D* skeletalMeshComp, uint32_t numVertices);
138void UpdateSkeletalMeshCompVertexBuffer(SkeletalMesh3D* skeletalMeshComp, const std::vector<Vertex>& skinnedVertices);
139void BindGeometryDescriptorSet(SkeletalMesh3D* skeletalMeshComp);
140void DrawSkeletalMeshComp(SkeletalMesh3D* skeletalMeshComp);
141bool IsCpuSkinningRequired(SkeletalMesh3D* skeletalMeshComp);
142
143// ShadowMeshComp
144void DrawShadowMeshComp(ShadowMesh3D* shadowMeshComp);
145
146// InstancedMeshComp
147void DrawInstancedMeshComp(InstancedMesh3D* instancedMeshComp);
148
149// TextMeshComp
150void DestroyTextMeshCompResource(TextMesh3D* textMeshComp);
151void UpdateTextMeshCompVertexBuffer(TextMesh3D* textMeshComp, const std::vector<Vertex>& vertices);
152void DrawTextMeshComp(TextMesh3D* textMeshComp);
153void BindGeometryDescriptorSet(TextMesh3D* textMeshComp);
154
155// Voxel3D
156void CreateVoxel3DResource(Voxel3D* voxel);
158void UpdateVoxel3DResource(Voxel3D* voxel, const std::vector<VertexColor>& vertices, const std::vector<IndexType>& indices);
159void DrawVoxel3D(Voxel3D* voxel);
161
162// Terrain3D
165void UpdateTerrain3DResource(Terrain3D* terrain, const std::vector<VertexColor>& vertices, const std::vector<IndexType>& indices);
166void DrawTerrain3D(Terrain3D* terrain);
168
169// TileMap2D
172void UpdateTileMap2DResource(TileMap2D* tileMap, const std::vector<VertexColor>& vertices, const std::vector<IndexType>& indices);
173void DrawTileMap2D(TileMap2D* tileMap);
175
176// ParticleComp
177void DestroyParticleCompResource(Particle3D* particleComp);
178void BindGeometryDescriptorSet(Particle3D* particleComp);
179void UpdateParticleCompVertexBuffer(Particle3D* particleComp, const std::vector<VertexParticle>& vertices);
180void DrawParticleComp(Particle3D* particleComp);
181
182// Quad
183void CreateQuadResource(Quad* quad);
184void DestroyQuadResource(Quad* quad);
187void DrawQuad(Quad* quad);
188
189// Quad Border
193void DrawQuadBorder(Quad* quad);
194
195// Text
196void CreateTextResource(Text* text);
197void DestroyTextResource(Text* text);
202void DrawTextWidget(Text* text);
203
204// Poly
205void CreatePolyResource(Poly* poly);
206void DestroyPolyResource(Poly* poly);
209void DrawPoly(Poly* poly);
210
211// Arbitrary mesh draw
212void DrawStaticMesh(StaticMesh* mesh, Material* material, const glm::mat4& transform, glm::vec4 color, uint32_t hitCheckId = 0);
213
214#endif
uint16_t IndexType
Definition GraphicsTypes.h:122
PixelFormat
Definition GraphicsTypes.h:45
VertexType
Definition Vertex.h:7
BasicBlendState
Definition VulkanTypes.h:21
void CreateQuadResource(Quad *quad)
Definition VulkanUtils.cpp:2763
void WriteMaterialCustomUniformData(MaterialData &outData, Material *material)
Definition VulkanUtils.cpp:1030
void CopyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size)
Definition VulkanUtils.cpp:282
VkPipelineColorBlendAttachmentState GetBasicBlendState(BasicBlendState basicBlendState)
Definition VulkanUtils.cpp:1035
void CreatePolyResource(Poly *poly)
Definition VulkanUtils.cpp:3016
uint32_t GetFrameNumber()
Definition VulkanUtils.cpp:326
void UpdateTextResourceVertexData(Text *text)
Definition VulkanUtils.cpp:2973
void DestroySkeletalMeshResource(SkeletalMesh *skeletalMesh)
Definition VulkanUtils.cpp:1535
void ReallocateSkeletalMeshCompVertexBuffer(SkeletalMesh3D *skeletalMeshComp, uint32_t numVertices)
Definition VulkanUtils.cpp:1779
void DestroyTextMeshCompResource(TextMesh3D *textMeshComp)
Definition VulkanUtils.cpp:2192
void UpdateParticleCompVertexBuffer(Particle3D *particleComp, const std::vector< VertexParticle > &vertices)
Definition VulkanUtils.cpp:2658
void DestroyQuadResource(Quad *quad)
Definition VulkanUtils.cpp:2771
uint32_t GetFormatPixelSize(VkFormat format)
Definition VulkanUtils.cpp:412
VkCommandBuffer GetCommandBuffer()
Definition VulkanUtils.cpp:341
void DrawQuadBorder(Quad *quad)
Definition VulkanUtils.cpp:2858
void DestroyTextureResource(Texture *texture)
Definition VulkanUtils.cpp:1189
void UpdateTextMeshCompVertexBuffer(TextMesh3D *textMeshComp, const std::vector< Vertex > &vertices)
Definition VulkanUtils.cpp:2203
void UpdateTerrain3DResource(Terrain3D *terrain, const std::vector< VertexColor > &vertices, const std::vector< IndexType > &indices)
Definition VulkanUtils.cpp:2412
void DrawQuad(Quad *quad)
Definition VulkanUtils.cpp:2813
void DestroyStaticMeshResource(StaticMesh *staticMesh)
Definition VulkanUtils.cpp:1500
void BeginDebugLabel(const char *name, glm::vec4 color)
Definition VulkanUtils.cpp:812
void UpdateQuadResourceVertexData(Quad *quad)
Definition VulkanUtils.cpp:2782
void DestroyPolyResource(Poly *poly)
Definition VulkanUtils.cpp:3031
void BindGeometryDescriptorSet(StaticMesh3D *staticMeshComp)
Definition VulkanUtils.cpp:1572
void EndCommandBuffer(VkCommandBuffer commandBuffer)
Definition VulkanUtils.cpp:376
uint32_t FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties)
Definition VulkanUtils.cpp:392
bool IsCpuSkinningRequired(SkeletalMesh3D *skeletalMeshComp)
Definition VulkanUtils.cpp:1975
void DrawTerrain3D(Terrain3D *terrain)
Definition VulkanUtils.cpp:2453
void UpdateVoxel3DResource(Voxel3D *voxel, const std::vector< VertexColor > &vertices, const std::vector< IndexType > &indices)
Definition VulkanUtils.cpp:2299
void DestroyStaticMeshCompResource(StaticMesh3D *staticMeshComp)
Definition VulkanUtils.cpp:1648
bool IsFormatBlockCompressed(VkFormat format)
Definition VulkanUtils.cpp:468
void CreateTextResource(Text *text)
Definition VulkanUtils.cpp:2892
void DrawTextMeshComp(TextMesh3D *textMeshComp)
Definition VulkanUtils.cpp:2226
uint32_t GetFrameIndex()
Definition VulkanUtils.cpp:321
void DrawParticleComp(Particle3D *particleComp)
Definition VulkanUtils.cpp:2720
void DrawTileMap2D(TileMap2D *tileMap)
Definition VulkanUtils.cpp:2566
void CreateTextResourceVertexBuffer(Text *text)
Definition VulkanUtils.cpp:2907
void UpdateTileMap2DResource(TileMap2D *tileMap, const std::vector< VertexColor > &vertices, const std::vector< IndexType > &indices)
Definition VulkanUtils.cpp:2527
void DestroyParticleCompResource(Particle3D *particleComp)
Definition VulkanUtils.cpp:2616
DestroyQueue * GetDestroyQueue()
Definition VulkanUtils.cpp:331
void DrawStaticMeshComp(StaticMesh3D *staticMeshComp, StaticMesh *meshOverride)
Definition VulkanUtils.cpp:1675
void DrawTextWidget(Text *text)
Definition VulkanUtils.cpp:2990
void BindSkeletalMeshResource(SkeletalMesh *skeletalMesh)
Definition VulkanUtils.cpp:1552
void DrawShadowMeshComp(ShadowMesh3D *shadowMeshComp)
Definition VulkanUtils.cpp:1997
void DestroyVoxel3DResource(Voxel3D *voxel)
Definition VulkanUtils.cpp:2282
void CreateTerrain3DResource(Terrain3D *terrain)
Definition VulkanUtils.cpp:2390
void WriteMaterialLiteUniformData(MaterialData &outData, MaterialLite *material)
Definition VulkanUtils.cpp:978
void CreateTextureResource(Texture *texture, uint8_t *pixels)
Definition VulkanUtils.cpp:1125
void DestroyMaterialResource(Material *material)
Definition VulkanUtils.cpp:1294
void DestroyTileMap2DResource(TileMap2D *tileMap)
Definition VulkanUtils.cpp:2510
void DrawPoly(Poly *poly)
Definition VulkanUtils.cpp:3096
void UpdateSkeletalMeshCompVertexBuffer(SkeletalMesh3D *skeletalMeshComp, const std::vector< Vertex > &skinnedVertices)
Definition VulkanUtils.cpp:1795
void DeviceWaitIdle()
Definition VulkanUtils.cpp:346
VkCommandBuffer BeginCommandBuffer()
Definition VulkanUtils.cpp:351
void UpdatePolyResourceVertexData(Poly *poly)
Definition VulkanUtils.cpp:3069
void CopyBufferToImage(VkBuffer buffer, VkImage image, uint32_t width, uint32_t height)
Definition VulkanUtils.cpp:293
void DrawVoxel3D(Voxel3D *voxel)
Definition VulkanUtils.cpp:2340
void DestroyTextResourceVertexBuffer(Text *text)
Definition VulkanUtils.cpp:2918
void CreateVoxel3DResource(Voxel3D *voxel)
Definition VulkanUtils.cpp:2277
std::vector< VkVertexInputBindingDescription > GetVertexBindingDescription(VertexType type)
Definition VulkanUtils.cpp:503
void UpdateStaticMeshCompResourceColors(StaticMesh3D *staticMeshComp)
Definition VulkanUtils.cpp:1610
void DestroyQuadBorderResource(Quad *quad)
Definition VulkanUtils.cpp:2841
void CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer &buffer, VramAllocation &bufferMemory)
Definition VulkanUtils.cpp:100
void WriteGeometryUniformData(GeometryData &outData, World *world, Node3D *comp, const glm::mat4 &transform)
Definition VulkanUtils.cpp:841
void CreateMaterialResource(Material *material)
Definition VulkanUtils.cpp:1248
void BindStaticMeshResource(StaticMesh *staticMesh)
Definition VulkanUtils.cpp:1517
void DrawSkeletalMeshComp(SkeletalMesh3D *skeletalMeshComp)
Definition VulkanUtils.cpp:1858
VkImageAspectFlags GetFormatImageAspect(VkFormat format)
Definition VulkanUtils.cpp:481
void GatherGeometryLightUniformData(GeometryData &outData, Primitive3D *primitive, Material *material, bool isStaticMesh)
Definition VulkanUtils.cpp:879
void SetDebugObjectName(VkObjectType objectType, uint64_t object, const char *name)
Definition VulkanUtils.cpp:794
std::vector< VkVertexInputAttributeDescription > GetVertexAttributeDescriptions(VertexType type)
Definition VulkanUtils.cpp:560
uint32_t GetFormatBlockSize(VkFormat format)
Definition VulkanUtils.cpp:448
VkFormat ConvertPixelFormat(PixelFormat pixelFormat, bool srgb)
Definition VulkanUtils.cpp:40
void EndDebugLabel()
Definition VulkanUtils.cpp:831
UniformBlock WriteUniformBlock(void *data, uint32_t size)
Definition VulkanUtils.cpp:91
void DestroySkeletalMeshCompResource(SkeletalMesh3D *skeletalMeshComp)
Definition VulkanUtils.cpp:1768
void CreateSkeletalMeshResource(SkeletalMesh *skeletalMesh, uint32_t numVertices, VertexSkinned *vertices, uint32_t numIndices, IndexType *indices)
Definition VulkanUtils.cpp:1528
void CreateStaticMeshResource(StaticMesh *staticMesh, bool hasColor, uint32_t numVertices, void *vertices, uint32_t numIndices, IndexType *indices)
Definition VulkanUtils.cpp:1491
void DestroyTerrain3DResource(Terrain3D *terrain)
Definition VulkanUtils.cpp:2395
void BindSkeletalMeshResourceIndices(SkeletalMesh *skeletalMesh)
Definition VulkanUtils.cpp:1564
void UpdateQuadBorderResourceVertexData(Quad *quad)
Definition VulkanUtils.cpp:2852
void DrawInstancedMeshComp(InstancedMesh3D *instancedMeshComp)
Definition VulkanUtils.cpp:2071
void DrawStaticMesh(StaticMesh *mesh, Material *material, const glm::mat4 &transform, glm::vec4 color, uint32_t hitCheckId)
Definition VulkanUtils.cpp:3124
void BindMaterialResource(Material *material)
Definition VulkanUtils.cpp:1316
void CreateQuadBorderResource(Quad *quad)
Definition VulkanUtils.cpp:2833
void CreateTileMap2DResource(TileMap2D *tileMap)
Definition VulkanUtils.cpp:2505
void TransitionImageLayout(VkImage image, VkFormat format, VkImageLayout oldLayout, VkImageLayout newLayout, int32_t mipLevels, int32_t layerCount, VkCommandBuffer commandBuffer)
Definition VulkanUtils.cpp:131
VkDevice GetVulkanDevice()
Definition VulkanUtils.cpp:336
void DestroyTextResource(Text *text)
Definition VulkanUtils.cpp:2900
Definition InstancedMesh3d.h:17
Definition MaterialBase.h:14
Definition MaterialInstance.h:8
Definition MaterialLite.h:51
Definition Material.h:48
Definition Node3d.h:14
Definition Particle3d.h:34
Definition Poly.h:10
Definition Primitive3d.h:46
Definition Quad.h:20
Definition ShadowMesh3d.h:6
Definition SkeletalMesh3d.h:116
Definition SkeletalMesh.h:99
Definition StaticMesh3d.h:12
Definition StaticMesh.h:18
Definition Terrain3d.h:13
Definition TextMesh3d.h:10
Definition Text.h:24
Definition Texture.h:10
Definition TileMap2d.h:23
Definition Voxel3d.h:61
Definition World.h:24
Definition EngineTypes.h:210
Definition EngineTypes.h:201
Definition VulkanTypes.h:194
Definition VulkanTypes.h:261
Definition Vertex.h:50