55 lines
1.3 KiB
C++
55 lines
1.3 KiB
C++
#include "HelpersGLFW.h"
|
|
|
|
GLFWwindow* initWindow(const char* windowTitle, uint32_t& outWidth, uint32_t& outHeight)
|
|
{
|
|
glfwSetErrorCallback([](int error, const char* description) { printf("GLFW Error (%i): %s\n", error, description); });
|
|
|
|
if (!glfwInit()) {
|
|
return nullptr;
|
|
}
|
|
|
|
const bool wantsWholeArea = !outWidth || !outHeight;
|
|
|
|
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
|
|
glfwWindowHint(GLFW_RESIZABLE, wantsWholeArea ? GLFW_FALSE : GLFW_TRUE);
|
|
|
|
// render full screen without overlapping taskbar
|
|
GLFWmonitor* monitor = glfwGetPrimaryMonitor();
|
|
const GLFWvidmode* mode = glfwGetVideoMode(monitor);
|
|
|
|
int x = 0;
|
|
int y = 0;
|
|
int w = mode->width;
|
|
int h = mode->height;
|
|
|
|
if (wantsWholeArea) {
|
|
glfwGetMonitorWorkarea(monitor, &x, &y, &w, &h);
|
|
} else {
|
|
w = outWidth;
|
|
h = outHeight;
|
|
}
|
|
|
|
GLFWwindow* window = glfwCreateWindow(w, h, windowTitle, nullptr, nullptr);
|
|
|
|
if (!window) {
|
|
glfwTerminate();
|
|
return nullptr;
|
|
}
|
|
|
|
if (wantsWholeArea) {
|
|
glfwSetWindowPos(window, x, y);
|
|
}
|
|
|
|
glfwGetWindowSize(window, &w, &h);
|
|
|
|
glfwSetKeyCallback(window, [](GLFWwindow* window, int key, int, int action, int) {
|
|
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) {
|
|
glfwSetWindowShouldClose(window, GLFW_TRUE);
|
|
}
|
|
});
|
|
|
|
outWidth = (uint32_t)w;
|
|
outHeight = (uint32_t)h;
|
|
|
|
return window;
|
|
}
|