#pragma once #include "Graphics/RenderTarget.h" #include "Graphics.h" #include "Texture.h" #include "Resources.h" namespace Seele { namespace Vulkan { class Window : public Gfx::Window { public: Window(PGraphics graphics, const WindowCreateInfo &createInfo); virtual ~Window(); virtual void beginFrame() override; virtual void endFrame() override; virtual Gfx::PTexture2D getBackBuffer() override; virtual void onWindowCloseEvent() override; virtual void setKeyCallback(std::function callback) override; virtual void setMouseMoveCallback(std::function callback) override; virtual void setMouseButtonCallback(std::function callback) override; virtual void setScrollCallback(std::function callback) override; virtual void setFileCallback(std::function callback) override; virtual void setCloseCallback(std::function callback); virtual void setResizeCallback(std::function callback) override; 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(); void resize(int width, int height); protected: void querySurface(); void chooseSwapSurfaceFormat(); void chooseSwapPresentMode(); void chooseSwapExtent(); void createSwapChain(); PGraphics graphics; WindowCreateInfo preferences; VkInstance instance; VkSwapchainKHR swapchain; VkSampleCountFlags numSamples; VkSurfaceKHR surface; VkSurfaceCapabilitiesKHR capabilities; Array supportedFormats; Array supportedPresentModes; // the values used for the current swapchain VkSurfaceFormatKHR format; VkPresentModeKHR presentMode; VkExtent2D extent; void *windowHandle; StaticArray swapChainImages; StaticArray swapChainTextures; StaticArray imageAvailableSemaphores; StaticArray renderingDoneSemaphores; uint32 currentImageIndex = 0; uint32 currentSemaphoreIndex = 0; std::function keyCallback; std::function mouseMoveCallback; std::function mouseButtonCallback; std::function scrollCallback; std::function fileCallback; std::function closeCallback; std::function resizeCallback; }; DEFINE_REF(Window) class Viewport : public Gfx::Viewport { public: Viewport(PGraphics graphics, PWindow owner, const ViewportCreateInfo &createInfo); virtual ~Viewport(); virtual void resize(uint32 newX, uint32 newY); virtual void move(uint32 newOffsetX, uint32 newOffsetY); VkViewport getHandle() const { return handle; } private: VkViewport handle; PGraphics graphics; friend class Graphics; }; DECLARE_REF(Viewport) } }