74 lines
1.6 KiB
C++
74 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include <glm/glm.hpp>
|
|
#include <memory>
|
|
|
|
#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<ImageData> takeScreenshot() = 0;
|
|
|
|
const glm::ivec2& getSize() const {
|
|
return size;
|
|
}
|
|
|
|
static std::tuple<
|
|
std::unique_ptr<Window>,
|
|
std::unique_ptr<Input>
|
|
> 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);
|
|
};
|