zengine/engine/modules/render/vulkan/include/vkn/vulkan_window.h

54 lines
1.5 KiB
C
Raw Normal View History

2024-08-17 18:01:21 +08:00
#pragma once
#include "type.h"
#include "render/window.h"
2024-09-01 22:32:29 +08:00
#include <SDL2/SDL_vulkan.h>
namespace api {
class RenderContext;
}
2024-08-17 18:01:21 +08:00
namespace vkn {
2024-08-30 22:09:05 +08:00
class Device;
2024-09-01 22:32:29 +08:00
using RenderContext = api::RenderContext;
struct VULKAN_API VulkanWindowArgs {
2024-08-30 22:09:05 +08:00
uint32_t frames;
uint32_t width;
uint32_t height;
VkFormat imageFormat;
VkColorSpaceKHR imageColorSpace;
VkPresentModeKHR presentMode;
VkImageUsageFlags imageUsage;
uint32_t maxFrameInFlightCount;
VkExtent2D EnableImageExtent2D(VkSurfaceCapabilitiesKHR& capabilities);
static VulkanWindowArgs Default();
};
class VulkanSwapchain {
private:
Device& mDevice;
VkSwapchainKHR mPtr;
int mFrames;
//pmr::vector<Image*> mSurfaces{GlobalPool()};
pmr::vector<VkFence> mFences{ GlobalPool() };
pmr::vector<VkSemaphore> mSemaphores{ GlobalPool() };
public:
VulkanSwapchain(Device& device, VkSurfaceKHR surface, VulkanWindowArgs& args);
2024-09-01 22:32:29 +08:00
void Aquire(RenderContext& ctx);
void Present(RenderContext& ctx);
2024-08-30 22:09:05 +08:00
};
2024-09-01 22:32:29 +08:00
class VULKAN_API VulkanWindow : public api::Window {
2024-08-17 18:01:21 +08:00
private:
2024-08-30 22:09:05 +08:00
VulkanSwapchain* mSwapchain;
2024-08-23 22:13:05 +08:00
public:
void* operator new(size_t size) {
return ::operator new(size, GlobalPool());
}
void operator delete(void* p) {}
2024-08-17 18:01:21 +08:00
public:
using api::Window::Window;
2024-09-01 22:32:29 +08:00
using CreatePFN = decltype(&SDL_Vulkan_CreateSurface);
bool CreateRender(CreatePFN createPFN, VulkanWindowArgs& args);
2024-08-23 22:13:05 +08:00
static VulkanWindow* Ptr() {
return (VulkanWindow*)api::Window::Ptr();
}
2024-09-01 22:32:29 +08:00
void Aquire(RenderContext& ctx) { mSwapchain->Aquire(ctx); }
void Present(RenderContext& ctx) { mSwapchain->Present(ctx); };
2024-08-17 18:01:21 +08:00
};
}