From 13a59e3cdfe7b68b1bb05b87f4a2fe4e0bd0c41e Mon Sep 17 00:00:00 2001 From: klemek Date: Thu, 27 Aug 2026 16:10:44 +0200 Subject: [PATCH] can specify opengl version --- src/args.c | 27 ++++++++++++++++++++++++--- src/config.h | 19 +++++++++++++++++++ src/constants.h | 6 ------ src/types.h | 2 ++ src/window.c | 2 -- 5 files changed, 45 insertions(+), 11 deletions(-) diff --git a/src/args.c b/src/args.c index 3dc51c2..bacfe46 100644 --- a/src/args.c +++ b/src/args.c @@ -7,12 +7,13 @@ #include "types.h" -#include "constants.h" - #include "args.h" #include "config.h" #include "string.h" +#define STR_IMPL_(x) #x // stringify argument +#define STR(x) STR_IMPL_(x) // indirection to expand argument macros + static void print_help(int status_code) { puts( PACKAGE @@ -48,6 +49,8 @@ static void print_help(int status_code) { "[--wayland] " "[--cocoa] " "[--win32] " + "[-oma=MAJOR] " + "[-omi=MINOR] " "\n\n" "Fusion Of Real-time Generative Effects.\n\n" "options:\n" @@ -91,7 +94,13 @@ static void print_help(int status_code) { " --x11 force X11 GLFW backend\n" " --wayland force Wayland GLFW backend\n" " --cocoa force Cocoa GLFW backend\n" - " --win32 force Win32 GLFW backend\n"); + " --win32 force Win32 GLFW backend\n" + " -oma, --opengl-major-version OpenGL major version " + "(default: " STR( + OPENGL_MAJOR_VERSION) ")\n" + " -omi, --opengl-minor-version OpenGL " + "minor version (default: " STR( + OPENGL_MINOR_VERSION) ")\n"); exit(status_code); } @@ -163,6 +172,8 @@ void args_parse(Parameters *params, int argc, char **argv) { params->trace_midi = false; params->trace_fps = false; params->glfw_backend = GLFW_BACKEND_ANY; + params->opengl_major = OPENGL_MAJOR_VERSION; + params->opengl_minor = OPENGL_MINOR_VERSION; for (int i = 1; i < argc; i++) { arg = argv[i]; @@ -239,6 +250,16 @@ void args_parse(Parameters *params, int argc, char **argv) { params->glfw_backend = GLFW_BACKEND_COCOA; } else if (is_arg(arg, "--win32")) { params->glfw_backend = GLFW_BACKEND_WIN32; + } else if (is_arg(arg, "-oma") || is_arg(arg, "--opengl-major-version")) { + params->opengl_major = parse_uint(arg, value); + if (params->opengl_major == 0) { + invalid_value(arg, value); + } + } else if (is_arg(arg, "-omi") || is_arg(arg, "--opengl-minor-version")) { + params->opengl_minor = parse_uint(arg, value); + if (params->opengl_major == 0) { + invalid_value(arg, value); + } } else { #ifdef VIDEO_IN if (is_arg(arg, "-vi") || is_arg(arg, "--video-in")) { diff --git a/src/config.h b/src/config.h index 5aa076f..87489dd 100644 --- a/src/config.h +++ b/src/config.h @@ -87,4 +87,23 @@ #define MAX_TAP_VALUES 10 #endif +/* OPENGL */ + +#ifndef OPENGL_MAJOR_VERSION +#define OPENGL_MAJOR_VERSION 4 +#endif + +#ifndef OPENGL_MINOR_VERSION +#define OPENGL_MINOR_VERSION 6 +#endif + +/* GLFW CONSTANTS */ +#ifndef GLFW_BACKENDS +#define GLFW_BACKEND_ANY 0 +#define GLFW_BACKEND_X11 1 +#define GLFW_BACKEND_WAYLAND 2 +#define GLFW_BACKEND_COCOA 3 +#define GLFW_BACKEND_WIN32 4 +#endif + #endif /* CONFIG_H */ diff --git a/src/constants.h b/src/constants.h index 9cca3f2..2aa99cb 100644 --- a/src/constants.h +++ b/src/constants.h @@ -3,12 +3,6 @@ #ifndef CONSTANTS_H #define CONSTANTS_H -static const unsigned int GLFW_BACKEND_ANY = 0; -static const unsigned int GLFW_BACKEND_X11 = 1; -static const unsigned int GLFW_BACKEND_WAYLAND = 2; -static const unsigned int GLFW_BACKEND_COCOA = 3; -static const unsigned int GLFW_BACKEND_WIN32 = 4; - static const char *vertex_shader_text = "#version 460\n" "const mat4 mvp = " diff --git a/src/types.h b/src/types.h index 2f11524..98a18cf 100644 --- a/src/types.h +++ b/src/types.h @@ -59,6 +59,8 @@ typedef struct Parameters { bool trace_midi; bool trace_fps; unsigned int glfw_backend; + unsigned int opengl_major; + unsigned int opengl_minor; } Parameters; // file.c diff --git a/src/window.c b/src/window.c index 0984718..dd12bec 100644 --- a/src/window.c +++ b/src/window.c @@ -5,8 +5,6 @@ #include "types.h" -#include "constants.h" - #include "window.h" static void init_glfw(void (*error_callback)(int, const char *),