This source file includes following definitions.
- die
- error_callback
- key_callback
- focus_callback
- terminate
- set_opengl_context
#include <stdio.h>
#include <stdlib.h>
#include <GLFW/glfw3.h>
#include <unistd.h>
#include "glfw_helpers.h"
using namespace GlfwHelpers;
static GLFWwindow *window;
static void die(const char *msg)
{
fprintf(stderr, "%s\n", msg);
exit(EXIT_FAILURE);
}
static void error_callback(int error, const char* description)
{
die(description);
}
static void key_callback(GLFWwindow *window, int key, int scancode, int action, int mods)
{
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GL_TRUE);
}
static bool first_focus = false;
static void focus_callback(GLFWwindow *window, int)
{
first_focus = true;
}
struct info GlfwHelpers::setup(int width, int height)
{
struct info info;
glfwSetErrorCallback(error_callback);
if (!glfwInit()) die("couldn't init glfw!");
glfwWindowHint(GLFW_DOUBLEBUFFER, GL_FALSE);
window = glfwCreateWindow(width, height, "opengl_halide_test", NULL, NULL);
if (!window) die("couldn't create window!");
glfwSetKeyCallback(window, key_callback);
glfwSetWindowFocusCallback(window, focus_callback);
glfwMakeContextCurrent(window);
while (!first_focus) {
glfwWaitEvents();
}
int framebuffer_width, framebuffer_height;
glfwGetFramebufferSize(window, &framebuffer_width, &framebuffer_height);
info.dpi_scale = float(framebuffer_width) / float(width);
return info;
}
void GlfwHelpers::terminate()
{
while (!glfwWindowShouldClose(window))
{
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
}
void GlfwHelpers::set_opengl_context()
{
glfwMakeContextCurrent(window);
}