Files
Seele/src/Engine/Graphics/Vulkan/Window.h
T

86 lines
3.4 KiB
C++
Raw Normal View History

2023-10-26 18:37:29 +02:00
#pragma once
#include "Graphics.h"
2024-06-09 12:20:04 +02:00
#include "Graphics/RenderTarget.h"
2023-10-26 18:37:29 +02:00
#include "Resources.h"
2024-06-09 12:20:04 +02:00
#include "Texture.h"
2023-10-26 18:37:29 +02:00
2024-06-09 12:20:04 +02:00
namespace Seele {
namespace Vulkan {
class Window : public Gfx::Window {
public:
Window(PGraphics graphics, const WindowCreateInfo& createInfo);
2023-10-26 18:37:29 +02:00
virtual ~Window();
2023-12-28 21:42:18 +01:00
virtual void pollInput() override;
2023-10-26 18:37:29 +02:00
virtual void beginFrame() override;
virtual void endFrame() override;
2024-04-10 08:43:56 +02:00
virtual Gfx::PTexture2D getBackBuffer() const override;
2023-10-26 18:37:29 +02:00
virtual void onWindowCloseEvent() override;
virtual void setKeyCallback(std::function<void(KeyCode, InputAction, KeyModifier)> callback) override;
virtual void setMouseMoveCallback(std::function<void(double, double)> callback) override;
virtual void setMouseButtonCallback(std::function<void(MouseButton, InputAction, KeyModifier)> callback) override;
virtual void setScrollCallback(std::function<void(double, double)> callback) override;
virtual void setFileCallback(std::function<void(int, const char**)> callback) override;
2024-01-16 19:24:49 +01:00
virtual void setCloseCallback(std::function<void()> callback) override;
2023-11-18 11:04:30 +01:00
virtual void setResizeCallback(std::function<void(uint32, uint32)> callback) override;
2024-06-09 12:20:04 +02:00
2023-11-18 11:04:30 +01:00
void keyPress(KeyCode code, InputAction action, KeyModifier modifier);
void mouseMove(double x, double y);
void mouseButton(MouseButton button, InputAction action, KeyModifier modifier);
void scroll(double x, double y);
void fileDrop(int num, const char** files);
void close();
2023-11-17 22:31:26 +01:00
void resize(int width, int height);
2024-06-09 12:20:04 +02:00
protected:
2023-11-17 22:31:26 +01:00
void querySurface();
2023-11-16 22:58:47 +01:00
void chooseSwapSurfaceFormat();
void chooseSwapPresentMode();
void chooseSwapExtent();
void createSwapChain();
2023-10-26 18:37:29 +02:00
PGraphics graphics;
2023-11-16 22:58:47 +01:00
WindowCreateInfo preferences;
2023-10-26 18:37:29 +02:00
VkInstance instance;
VkSwapchainKHR swapchain;
VkSampleCountFlags numSamples;
VkSurfaceKHR surface;
2023-11-16 22:58:47 +01:00
VkSurfaceCapabilitiesKHR capabilities;
Array<VkSurfaceFormatKHR> supportedFormats;
Array<VkPresentModeKHR> supportedPresentModes;
// the values used for the current swapchain
VkSurfaceFormatKHR format;
VkPresentModeKHR presentMode;
VkExtent2D extent;
2024-06-09 12:20:04 +02:00
void* windowHandle;
2023-11-16 22:58:47 +01:00
StaticArray<VkImage, Gfx::numFramesBuffered> swapChainImages;
StaticArray<OTexture2D, Gfx::numFramesBuffered> swapChainTextures;
2024-01-24 23:10:33 +01:00
StaticArray<OFence, Gfx::numFramesBuffered> imageAvailableFences;
2023-11-16 22:58:47 +01:00
StaticArray<OSemaphore, Gfx::numFramesBuffered> imageAvailableSemaphores;
StaticArray<OSemaphore, Gfx::numFramesBuffered> renderingDoneSemaphores;
uint32 currentImageIndex = 0;
uint32 currentSemaphoreIndex = 0;
2023-11-18 11:04:30 +01:00
std::function<void(KeyCode, InputAction, KeyModifier)> keyCallback;
std::function<void(double, double)> mouseMoveCallback;
std::function<void(MouseButton, InputAction, KeyModifier)> mouseButtonCallback;
std::function<void(double, double)> scrollCallback;
std::function<void(int, const char**)> fileCallback;
std::function<void()> closeCallback;
std::function<void(uint32, uint32)> resizeCallback;
2023-10-26 18:37:29 +02:00
};
DEFINE_REF(Window)
2024-06-09 12:20:04 +02:00
class Viewport : public Gfx::Viewport {
public:
Viewport(PWindow owner, const ViewportCreateInfo& createInfo);
2023-10-26 18:37:29 +02:00
virtual ~Viewport();
virtual void resize(uint32 newX, uint32 newY);
virtual void move(uint32 newOffsetX, uint32 newOffsetY);
VkViewport getHandle() const { return handle; }
2024-06-09 12:20:04 +02:00
private:
2023-10-26 18:37:29 +02:00
VkViewport handle;
};
DECLARE_REF(Viewport)
2024-06-09 12:20:04 +02:00
} // namespace Vulkan
} // namespace Seele