BLT-With-Graphics-Template/include/blt/gfx/window.h

97 lines
2.2 KiB
C++

#pragma once
/*
* Created by Brett on 28/11/23.
* Licensed under GNU General Public License V3.0
* See LICENSE file for license detail
*/
#ifndef BLT_WITH_GRAPHICS_TEMPLATE_WINDOW_H
#define BLT_WITH_GRAPHICS_TEMPLATE_WINDOW_H
#include <blt/gfx/gl_includes.h>
#include <GLFW/glfw3.h>
#include <functional>
#include <cstdint>
#include <string>
#include <utility>
namespace blt::gfx
{
struct window_context
{
std::int32_t GL_MAJOR = 4;
std::int32_t GL_MINOR = 6;
std::int32_t DOUBLE_BUFFER = GLFW_TRUE;
std::int32_t GL_PROFILE = GLFW_OPENGL_CORE_PROFILE;
};
struct window_data
{
std::string title;
std::int32_t width;
std::int32_t height;
std::function<void()> init;
std::function<void(std::int32_t, std::int32_t)> update;
window_context context{};
std::int32_t sync_interval = 0;
window_data(std::string title, std::function<void()> init, std::function<void(std::int32_t, std::int32_t)> update, std::int32_t width = 640,
std::int32_t height = 480):
title(std::move(title)), width(width), height(height), init(std::move(init)), update(std::move(update))
{}
window_data& setContext(const window_context& ctx)
{
context = ctx;
return *this;
}
window_data& setSyncInterval(std::int32_t sync)
{
sync_interval = sync;
return *this;
}
};
void init(const window_data& data);
double getMouseX();
double getMouseY();
double getMouseDX();
double getMouseDY();
void lockCursor();
void unlockCursor();
bool isCursorLocked();
bool isCursorInWindow();
void setRawInput(bool state);
bool isRawInput();
void setClipboard(const std::string& str);
std::string getClipboard();
bool isMousePressed(int button);
bool isKeyPressed(int key);
double getFrameDeltaSeconds();
double getFrameDeltaMilliseconds();
std::int64_t getFrameDelta();
void cleanup();
}
#endif //BLT_WITH_GRAPHICS_TEMPLATE_WINDOW_H