Skip to content

Instantly share code, notes, and snippets.

@jdarpinian
Last active February 13, 2018 00:00
Show Gist options
  • Save jdarpinian/d8fbaf7360be754016a287450364d738 to your computer and use it in GitHub Desktop.
Save jdarpinian/d8fbaf7360be754016a287450364d738 to your computer and use it in GitHub Desktop.
A minimal test app for OpenGL using GLFW, with nice defaults for debugging (ASAN, glDebugMessageCallback)
//usr/bin/make LDLIBS="-lGL -lglfw" CPPFLAGS="-Wall -Wextra -g -O1 -fno-omit-frame-pointer -fsanitize=address,undefined" -s "${0%.*}"&&exec "${0%.*}" "$@";exit
#define GLFW_INCLUDE_GLCOREARB
#define GL_GLEXT_PROTOTYPES
#include <GLFW/glfw3.h>
#include <stdio.h>
static GLFWwindow *window = NULL;
static int swapAndPollInput();
static void run() {
glClearColor(0, 0, 1, 0);
do {
int display_w, display_h;
glfwGetFramebufferSize(window, &display_w, &display_h);
glViewport(0, 0, display_w, display_h);
glClear(GL_COLOR_BUFFER_BIT);
} while (swapAndPollInput());
}
static int swapAndPollInput() {
glfwSwapBuffers(window);
glfwPollEvents();
return !glfwWindowShouldClose(window);
}
static void glfwErrorCallback(int, const char *message) {
fprintf(stderr, "%s\n", message);
}
static void glMessageCallback(GLenum, GLenum, GLuint, GLenum, GLsizei,
const GLchar *message, const void *) {
glfwErrorCallback(0, message);
}
int main() {
// GLFW + OpenGL init
glfwInit();
glfwSetErrorCallback(glfwErrorCallback);
glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE);
glfwWindowHint(GLFW_CONTEXT_ROBUSTNESS, GLFW_LOSE_CONTEXT_ON_RESET);
window = glfwCreateWindow(1024, 768, "GL test app", NULL, NULL);
glfwMakeContextCurrent(window);
glDebugMessageCallback(glMessageCallback, NULL);
glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_FALSE);
glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH, 0, NULL, GL_TRUE);
glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_MEDIUM, 0, NULL, GL_TRUE);
// Event loop
run();
// Cleanup
glfwTerminate();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment