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

45 lines
1.1 KiB
C
Raw Normal View History

2024-08-17 18:01:21 +08:00
#pragma once
#include "type.h"
#include "render/window.h"
namespace vkn {
2024-08-30 22:09:05 +08:00
class Device;
struct VulkanWindowArgs {
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-08-17 18:01:21 +08:00
class VulkanWindow : public api::Window {
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-08-30 22:09:05 +08:00
void CreateRender(VulkanWindowArgs& args);
2024-08-23 22:13:05 +08:00
static VulkanWindow* Ptr() {
return (VulkanWindow*)api::Window::Ptr();
}
2024-08-17 18:01:21 +08:00
};
}