Made window hinting/param system easier
This commit is contained in:
@@ -9,6 +9,8 @@
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <type_traits>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include <NBCore/Errors.hpp>
|
||||
@@ -126,21 +128,26 @@ class OGLWindow {
|
||||
static thread_local GLFWwindow* _currWindow;
|
||||
static thread_local const GLFWwindow* _currArena;
|
||||
|
||||
static void SetHintInteger(const std::array<int, 2>&);
|
||||
static void SetHintString(const std::tuple<int, std::string>&);
|
||||
|
||||
template<typename T>
|
||||
static void SetHint(std::pair<int, T> hint) {
|
||||
if constexpr ( std::is_same_v<T, std::string> ) {
|
||||
glfwWindowHintString(std::get<0>(hint), std::get<1>(hint).c_str());
|
||||
} else if constexpr ( std::is_same_v<T, int> ) {
|
||||
glfwWindowHint(std::get<0>(hint), std::get<1>(hint));
|
||||
}
|
||||
}
|
||||
|
||||
std::string _title;
|
||||
GLFWwindow* _window_ptr;
|
||||
const GLFWwindow* _arena;
|
||||
|
||||
OGLWindow(
|
||||
unsigned int,
|
||||
unsigned int,
|
||||
unsigned int x,
|
||||
unsigned int y,
|
||||
const std::string&,
|
||||
const std::vector<std::array<int, 2>>& integerWindowHints,
|
||||
const std::vector<std::tuple<int, std::string>>& stringWindowHints={},
|
||||
GLFWwindow* sharingContext = NULL
|
||||
);
|
||||
|
||||
GLFWwindow* makeCurrent() const;
|
||||
void detachWindow();
|
||||
|
||||
@@ -154,21 +161,37 @@ class OGLWindow {
|
||||
static GLFWwindow* MakeCurrent(const std::shared_ptr<OGLWindow>&);
|
||||
static inline GLFWwindow* DropCurrent() { return MakeCurrent(nullptr); }
|
||||
static void DestroyWindow(std::shared_ptr<OGLWindow>&);
|
||||
template <typename... T>
|
||||
static std::shared_ptr<OGLWindow> CreateWindow(
|
||||
unsigned int x,
|
||||
unsigned int y,
|
||||
const std::string& title,
|
||||
const std::vector<std::array<int, 2>>& integerHints={},
|
||||
const std::vector<std::tuple<int, std::string>>& stringHints={}
|
||||
);
|
||||
const std::pair<int, T>&... windowHints
|
||||
) {
|
||||
(SetHint(std::pair(windowHints)),... );
|
||||
return std::shared_ptr<OGLWindow>(new OGLWindow(
|
||||
x,
|
||||
y,
|
||||
title,
|
||||
nullptr
|
||||
) );
|
||||
}
|
||||
template<typename... T>
|
||||
static std::shared_ptr<OGLWindow> CreateSharedWindow(
|
||||
unsigned int x,
|
||||
unsigned int y,
|
||||
const std::string& title,
|
||||
std::shared_ptr<OGLWindow> sharingWindow,
|
||||
const std::vector<std::array<int, 2>>& integerHints={},
|
||||
const std::vector<std::tuple<int, std::string>>& stringHints={}
|
||||
);
|
||||
std::shared_ptr<OGLWindow> sharingWindow = NULL,
|
||||
const std::pair<int, T>&... windowHints
|
||||
) {
|
||||
(SetHint(std::pair(windowHints)),... );
|
||||
return std::shared_ptr<OGLWindow>(new OGLWindow(
|
||||
x,
|
||||
y,
|
||||
title,
|
||||
sharingWindow->_window_ptr
|
||||
) );
|
||||
}
|
||||
|
||||
OGLWindow(OGLWindow&&) = delete;
|
||||
OGLWindow(const OGLWindow&) = delete;
|
||||
|
||||
Reference in New Issue
Block a user