#pragma once #include #include #include "graphics/core/commons.hpp" #include "typedefs.hpp" class ImageData; class Input; struct DisplaySettings; enum class WindowMode { WINDOWED, FULLSCREEN, BORDERLESS }; class Window { public: static inline constexpr int FPS_UNLIMITED = 0; Window(glm::ivec2 size) : size(std::move(size)) {} virtual ~Window() = default; virtual void swapBuffers() = 0; virtual bool isMaximized() const = 0; virtual bool isFocused() const = 0; virtual bool isIconified() const = 0; virtual bool isShouldClose() const = 0; virtual void setShouldClose(bool flag) = 0; virtual void setCursor(CursorShape shape) = 0; virtual void setMode(WindowMode mode) = 0; virtual WindowMode getMode() const = 0; virtual void setIcon(const ImageData* image) = 0; virtual void pushScissor(glm::vec4 area) = 0; virtual void popScissor() = 0; virtual void resetScissor() = 0; virtual void setShouldRefresh() = 0; virtual bool checkShouldRefresh() = 0; virtual double time() = 0; virtual void setFramerate(int framerate) = 0; // todo: move somewhere virtual std::unique_ptr takeScreenshot() = 0; const glm::ivec2& getSize() const { return size; } static std::tuple< std::unique_ptr, std::unique_ptr > initialize(DisplaySettings* settings, std::string title); protected: glm::ivec2 size; WindowMode mode = WindowMode::WINDOWED; }; namespace display { void clear(); void clearDepth(); void setBgColor(glm::vec3 color); void setBgColor(glm::vec4 color); };