#pragma once #include "vulkan_context.h" #include "asset/res/guid.h" #include "backend.h" namespace vkn { class VulkanWindow; using api::Guid; using api::Mesh; using api::Shader; using api::Material; using api::MaterialInstance; using api::RenderPassNode; using api::RenderPassType; class VULKAN_API VulkanAPI final : public api::RenderAPI{ private: VulkanWindow& window; Backend backend; table MeshTable; table PipelineTable; table RenderPassCache; table FramebufferCache; public: VulkanAPI(); void Init() override; void Shutdown() override; void SetStaticMesh(Mesh& mesh)override; void DrawStaticMesh(Mesh& mesh)override; void SetUpMaterialInstance(MaterialInstance& material) override; void LoadShader(Shader& shader, size_t passKey)override; void CreateBuffer(BufferDesc& desc) override; ImagePtr CreateTexture(TextureDesc desc)override; ImageViewPtr CreateTextureView(TextureViewDesc desc)override; void BeginFrame()override; void EndFrame()override; void BeginRenderPass(RenderPassNode* node, FnEnterRenderPass callback) override; void EndRenderPass(RenderPassNode* node) override; void ExecuteResourceBarriers(const ResourceBarrierDesc& desc) override; VkPipeline GetPipeline() { return nullptr; }; const RenderPassInfo& GetRenderPassInfo(size_t hash, const RenderPassKey& config = {}); Backend& GetBackend() { return backend; } static VulkanAPI* Ptr() { return (VulkanAPI*)api::RenderAPI::Ptr(); } }; }