From 32eb03771062d385ce76e32bad9305dfcf671247 Mon Sep 17 00:00:00 2001 From: klemek Date: Sun, 28 Sep 2025 16:33:50 +0200 Subject: [PATCH] fix shared context with fixed-size memory units --- src/args.c | 5 +++++ src/config.h | 6 +++++- src/shaders.c | 9 ++++++++- src/types.h | 12 ++++++------ 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/args.c b/src/args.c index fb73808..8aeba60 100644 --- a/src/args.c +++ b/src/args.c @@ -122,6 +122,11 @@ Parameters args_parse(int argc, char **argv) { invalid_value(arg, value); } } else if (is_arg(arg, "-v") || is_arg(arg, "--video-in")) { + if (params.video_in_count == MAX_VIDEO) { + log_error("maximum video input reached"); + exit(EXIT_FAILURE); + } + params.video_in[params.video_in_count++] = value; } else if (is_arg(arg, "-vs") || is_arg(arg, "--video-size")) { params.video_size = parse_uint(arg, value); diff --git a/src/config.h b/src/config.h index cbf934f..03b0cb3 100644 --- a/src/config.h +++ b/src/config.h @@ -10,7 +10,11 @@ #endif /* VERSION */ #ifndef MAX_VIDEO -#define MAX_VIDEO 256 +#define MAX_VIDEO 16 +#endif + +#ifndef MAX_FRAG +#define MAX_FRAG 64 #endif #endif /* CONFIG_H */ \ No newline at end of file diff --git a/src/shaders.c b/src/shaders.c index 1226d74..7a19c4e 100644 --- a/src/shaders.c +++ b/src/shaders.c @@ -4,6 +4,7 @@ #include #include +#include "config.h" #include "config_file.h" #include "constants.h" #include "shaders.h" @@ -377,7 +378,7 @@ ShaderProgram shaders_init(File *fragment_shaders, ConfigFile config, program.last_width = context->width; program.last_height = context->height; program.tex_count = config_file_get_int(config, "TEX_COUNT", 9); - program.frag_count = config_file_get_int(config, "FRAG_COUNT", 6); + program.frag_count = config_file_get_int(config, "FRAG_COUNT", 10); program.frag_output_index = config_file_get_int(config, "FRAG_OUTPUT", 1) - 1; program.frag_monitor_index = @@ -387,6 +388,12 @@ ShaderProgram shaders_init(File *fragment_shaders, ConfigFile config, config_file_get_int(config, "SUB_VARIANT_COUNT", 0); program.in_count = config_file_get_int(config, "IN_COUNT", 0); + if (program.frag_count > MAX_FRAG) { + log_error("FRAG_COUNT over %d", MAX_FRAG); + program.error = true; + return program; + } + init_gl(&program); init_shaders(&program, fragment_shaders); diff --git a/src/types.h b/src/types.h index 89a1a03..c2467f4 100644 --- a/src/types.h +++ b/src/types.h @@ -125,14 +125,14 @@ typedef struct SharedContext { double time; unsigned int fps; float tempo; - unsigned int sub_state[256]; // TODO + unsigned int sub_state[MAX_FRAG * MAX_FRAG]; bool demo; - unsigned int seeds[256]; + unsigned int seeds[MAX_FRAG]; bool monitor; - unsigned int input_widths[256]; - unsigned int input_heights[256]; - unsigned int input_formats[256]; - unsigned int input_fps[256]; + unsigned int input_widths[MAX_VIDEO]; + unsigned int input_heights[MAX_VIDEO]; + unsigned int input_formats[MAX_VIDEO]; + unsigned int input_fps[MAX_VIDEO]; bool stop; } SharedContext;