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-12-20 10:29:52 +08:00
|
|
|
#ifdef API_DEBUG
|
|
|
|
|
#define gLogSemaphore(...) //zlog::info(__VA_ARGS__)
|
|
|
|
|
#else
|
|
|
|
|
#define gLogSemaphore(...)
|
|
|
|
|
#endif
|
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-12-12 22:20:56 +08:00
|
|
|
using api::RenderPassType;
|
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-12-19 17:23:52 +08:00
|
|
|
table<Guid, MeshVAO> MeshTable;
|
|
|
|
|
table<Guid, VulkanPipeline> PipelineTable;
|
|
|
|
|
table<size_t, RenderPassInfo> RenderPassCache;
|
|
|
|
|
table<Name, RenderPassInfo> RenderPassNameCache;
|
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-12-19 17:23:52 +08:00
|
|
|
void CreateTexture(TextureDesc& desc)override;
|
|
|
|
|
ImageViewPtr CreateTextureView(TextureViewKey desc)override;
|
2024-12-20 10:29:52 +08:00
|
|
|
SamplerPtr CreateTextureSampler(TextureSampler sampler) override;
|
2024-08-30 22:09:05 +08:00
|
|
|
void BeginFrame()override;
|
|
|
|
|
void EndFrame()override;
|
2024-12-12 22:20:56 +08:00
|
|
|
void BeginRenderPass(RenderPassNode* node, FnEnterRenderPass callback) override;
|
2024-09-21 17:19:22 +08:00
|
|
|
void EndRenderPass(RenderPassNode* node) override;
|
|
|
|
|
void ExecuteResourceBarriers(const ResourceBarrierDesc& desc) override;
|
2024-10-21 16:31:02 +08:00
|
|
|
VkPipeline GetPipeline() { return nullptr; };
|
2024-12-14 17:57:33 +08:00
|
|
|
RenderPassInfo* GetRenderPassInfo(Name name, size_t hash);
|
|
|
|
|
RenderPassInfo* GetRenderPassInfo(size_t& hash, const RenderPassKey& config);
|
2024-12-15 17:24:35 +08:00
|
|
|
void SetRenderPassInfo(Name name, VkRenderPass pass);
|
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
|
|
|
};
|
|
|
|
|
}
|