Files
tetris_clone/src/io/window.c
2025-09-10 11:59:38 +02:00

65 lines
1.6 KiB
C

#include "window.h"
#include <assert.h>
#include <glad/gl.h>
#include <GLFW/glfw3.h>
#include "../tetris.h"
#include "../util/error.h"
#include "input.h"
#include "render.h"
#define WIN_DPI 32
#define WIN_WIDTH (WIN_DPI * (TET_WIDTH + 3))
#define WIN_HEIGHT (WIN_DPI * TET_HEIGHT)
static GLFWwindow *win = NULL;
int window_init(void) {
#ifndef NDEBUG
glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GLFW_TRUE);
#endif
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);
glfwWindowHint(GLFW_RED_BITS, 3);
glfwWindowHint(GLFW_GREEN_BITS, 3);
glfwWindowHint(GLFW_BLUE_BITS, 2);
glfwWindowHint(GLFW_ALPHA_BITS, 0);
win = glfwCreateWindow(WIN_WIDTH, WIN_HEIGHT, "Quinn's tetris", NULL, NULL);
if (!win) return 1;
glfwMakeContextCurrent(win);
if (!gladLoadGL(glfwGetProcAddress)) return 1;
glfwSwapInterval(1); /* Wait one screen update for redraw. A.k.a. "vsync" */
glfwSetKeyCallback(win, key_callback);
debug(
"version info:\n"
"\tvendor: %s\n"
"\trenderer: %s\n"
"\tversion: %s\n"
"\tshading lang: %s\n",
glGetString(GL_VENDOR),
glGetString(GL_RENDERER),
glGetString(GL_VERSION),
glGetString(GL_SHADING_LANGUAGE_VERSION));
return 0; //render_init();
}
void window_loop(void) {
assert(win != NULL);
while (!glfwWindowShouldClose(win)) {
glfwWaitEventsTimeout(1.0 / 60.0);
// render_update(win);
glfwSwapBuffers(win);
}
glfwDestroyWindow(win);
}