zengine/engine/modules/render/vulkan/include/vkn/vulkan_api.h
2024-10-21 16:31:02 +08:00

58 lines
1.5 KiB
C++

#pragma once
#include "type.h"
#include "asset/res/guid.h"
#include "render/renderapi.h"
#include "wrapper/commandbuffer.h"
#include "backend.h"
namespace vkn {
class Backend;
class VulkanWindow;
struct MeshVAO;
struct RenderPassKey;
using api::Guid;
using api::Mesh;
using api::Shader;
using api::RenderPassNode;
struct VulkanContext : public api::RenderContext {
VkFence surfaceFence;;
VkSemaphore surfaceSemaphore;
VkSemaphore presentSemaphore;
CommandBuffer command;
};
class VULKAN_API VulkanAPI : public api::RenderAPI {
private:
VulkanWindow& window;
Backend backend;
table<Guid, MeshVAO> MeshTable;
table<RenderPassKey, VkRenderPass> RenderPassCache;
table<FramebufferKey, VkFramebuffer> FramebufferCache;
public:
VulkanAPI();
void Init() override;
void Shutdown() override;
void SetStaticMesh(Mesh& mesh)override;
void DrawStaticMesh(Mesh& mesh)override;
void LoadShader(Shader& shader)override;
ImagePtr CreateTexture(TextureDesc desc)override;
ImageViewPtr CreateTextureView(TextureViewDesc desc)override;
void BeginFrame()override;
void EndFrame()override;
void BeginRenderPass(RenderPassNode* node) override;
void EndRenderPass(RenderPassNode* node) override;
void ExecuteResourceBarriers(const ResourceBarrierDesc& desc) override;
VkPipeline GetPipeline() { return nullptr; };
VkRenderPass GetRenderPass(RenderPassKey& config);
Backend& GetBackend() {
return backend;
}
static VulkanAPI* Ptr() {
return (VulkanAPI*)api::RenderAPI::Ptr();
}
};
}