54 lines
1.3 KiB
C++
54 lines
1.3 KiB
C++
#pragma once
|
|
#include "type.h"
|
|
#include "asset/res/guid.h"
|
|
#include "render/renderapi.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;
|
|
using api::ResourceBarrierDesc;
|
|
struct VulkanContext : public api::RenderContext {
|
|
VkSemaphore surfaceSemaphore;
|
|
VkSemaphore presentSemaphore;
|
|
VkCommandBuffer command;
|
|
};
|
|
class VULKAN_API VulkanAPI : public api::RenderAPI {
|
|
private:
|
|
VulkanWindow& window;
|
|
Backend backend;
|
|
table<Guid, MeshVAO> MeshTable;
|
|
table<RenderPassKey, VkRenderPass> RenderPassCache;
|
|
public:
|
|
VulkanAPI();
|
|
|
|
void Init() override;
|
|
void Shutdown() override;
|
|
|
|
void SetStaticMesh(Mesh& mesh)override;
|
|
void DrawStaticMesh(Mesh& mesh)override;
|
|
|
|
void LoadShader(Shader& shader)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();
|
|
VkRenderPass GetRenderPass(RenderPassKey& config);
|
|
|
|
Backend& GetBackend() {
|
|
return backend;
|
|
}
|
|
static VulkanAPI* Ptr() {
|
|
return (VulkanAPI*)api::RenderAPI::Ptr();
|
|
}
|
|
};
|
|
} |