2024-08-17 18:01:21 +08:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								#pragma once
							 | 
						
					
						
							
								
									
										
										
										
											2024-10-30 15:15:25 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								#include "vulkan_context.h"
							 | 
						
					
						
							
								
									
										
										
										
											2024-08-27 20:21:32 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								#include "asset/res/guid.h"
							 | 
						
					
						
							
								
									
										
										
										
											2024-08-23 22:13:05 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								#include "backend.h"
							 | 
						
					
						
							
								
									
										
										
										
											2024-08-17 18:01:21 +08:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								namespace vkn {
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
									class VulkanWindow;
							 | 
						
					
						
							
								
									
										
										
										
											2024-08-27 20:21:32 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
									using api::Guid;
							 | 
						
					
						
							
								
									
										
										
										
											2024-08-25 22:41:25 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
									using api::Mesh;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
									using api::Shader;
							 | 
						
					
						
							
								
									
										
										
										
											2024-11-08 17:18:23 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
									using api::Material;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
									using api::MaterialInstance;
							 | 
						
					
						
							
								
									
										
										
										
											2024-09-21 17:19:22 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
									using api::RenderPassNode;
							 | 
						
					
						
							
								
									
										
										
										
											2024-11-08 17:18:23 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
									class VULKAN_API VulkanAPI final : public api::RenderAPI{
							 | 
						
					
						
							
								
									
										
										
										
											2024-08-17 18:01:21 +08:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
									private:
							 | 
						
					
						
							
								
									
										
										
										
											2024-08-23 22:13:05 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
										VulkanWindow& window;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
										Backend backend;
							 | 
						
					
						
							
								
									
										
										
										
											2024-08-27 20:21:32 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
										table<Guid, MeshVAO> MeshTable;
							 | 
						
					
						
							
								
									
										
										
										
											2024-10-26 17:54:54 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
										table<Guid, VulkanPipeline> PipelineTable;
							 | 
						
					
						
							
								
									
										
										
										
											2024-10-30 21:02:51 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
										table<size_t, RenderPassKey> RenderPassCache;
							 | 
						
					
						
							
								
									
										
										
										
											2024-10-21 16:31:02 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
										table<FramebufferKey, VkFramebuffer> FramebufferCache;
							 | 
						
					
						
							
								
									
										
										
										
											2024-08-17 18:01:21 +08:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
									public:
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
										VulkanAPI();
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
										void Init() override;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
										void Shutdown() override;
							 | 
						
					
						
							
								
									
										
										
										
											2024-08-25 22:41:25 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
										void SetStaticMesh(Mesh& mesh)override;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
										void DrawStaticMesh(Mesh& mesh)override;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2024-11-08 17:18:23 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
										void SetUpMaterialInstance(MaterialInstance& material) override;
							 | 
						
					
						
							
								
									
										
										
										
											2024-10-30 21:02:51 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
										void LoadShader(Shader& shader, size_t passKey)override;
							 | 
						
					
						
							
								
									
										
										
										
											2024-11-08 17:18:23 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
										void CreateBuffer(BufferDesc& desc) override;
							 | 
						
					
						
							
								
									
										
										
										
											2024-10-21 16:31:02 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
										ImagePtr CreateTexture(TextureDesc desc)override;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
										ImageViewPtr CreateTextureView(TextureViewDesc desc)override;
							 | 
						
					
						
							
								
									
										
										
										
											2024-08-30 22:09:05 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
										void BeginFrame()override;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
										void EndFrame()override;
							 | 
						
					
						
							
								
									
										
										
										
											2024-09-21 17:19:22 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
										void BeginRenderPass(RenderPassNode* node) override;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
										void EndRenderPass(RenderPassNode* node) override;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
										void ExecuteResourceBarriers(const ResourceBarrierDesc& desc) override;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2024-10-21 16:31:02 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
										VkPipeline	 GetPipeline() { return nullptr; };
							 | 
						
					
						
							
								
									
										
										
										
											2024-10-30 21:02:51 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
										VkRenderPass GetRenderPass(size_t hash, RenderPassKey& config);
							 | 
						
					
						
							
								
									
										
										
										
											2024-08-30 22:09:05 +08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
										Backend& GetBackend() {
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
											return backend;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
										}
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
										static VulkanAPI* Ptr() {
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
											return (VulkanAPI*)api::RenderAPI::Ptr();
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
										}
							 | 
						
					
						
							
								
									
										
										
										
											2024-08-17 18:01:21 +08:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
									};
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								}
							 |