diff --git a/shaders/frag0.glsl b/shaders/frag0.glsl index d4e754f..c1985df 100644 --- a/shaders/frag0.glsl +++ b/shaders/frag0.glsl @@ -805,8 +805,6 @@ float write_int(vec2 uv, vec2 pos, int value, int magnitude) if (i == 0 || value >= m) { d += char_at(uv, pos + vec2(magnitude - i - 1, 0), int(0x30 + (value % (m * 10)) / m)); m *= 10; - } else { - break; } } return d; @@ -1254,12 +1252,20 @@ subroutine(src_stage_sub) vec4 src_16(vec2 vUV, int seed) // logic + const int texts[3][5] = { + {0x46, 0x50, 0x53, 0x00, 0x00}, // FPS + {0x54, 0x45, 0x4D, 0x50, 0x4F}, // TEMPO + {0x54, 0x49, 0x4D, 0x45, 0x00}, // TIME + }; + vec2 uv2 = uv1; uv2 *= 10; uv2.x -= 0.5; uv2.y += 0.5; + vec2 uv3 = uv1 * 30; + // base frame float f = h_rect(uv2, vec2(-5, -2), vec2(1), 0.1) + @@ -1316,7 +1322,32 @@ subroutine(src_stage_sub) vec4 src_16(vec2 vUV, int seed) // show mix f += char_at(uv2, vec2(1.55, -0.6), mix_type > 0 ? 0x4B : 0x4D); f = mix(f, 1 - f, rect(uv2, vec2(2, -0.9 + 0.9 * mix_value), vec2(0.9, 0.9 * mix_value))); + + // show debug info + float v = 0; + float x = 0; + + x = -15; + f += write_5(uv3, vec2(x,13), texts[0]); + f += write_int(uv3, vec2(x - 4,13), iFPS, 3); + v = min(1, iFPS/60.0); + f += h_rect(uv3, vec2(x, 12), vec2(4, 0.5), 0.2); + f += rect(uv3, vec2(x + 4 * v - 4, 12), vec2(4 * v, 0.4)); + x = 0; + f += write_5(uv3, vec2(x,13), texts[1]); + f += write_int(uv3, vec2(x - 4,13), int(iTempo), 3); + v = modTime(1); + f += h_rect(uv3, vec2(x, 12), vec2(4, 0.5), 0.2); + f += rect(uv3, vec2(x + 4 * v - 4, 12), vec2(4 * v, 0.4)); + + x = 15; + f += write_5(uv3, vec2(x,13), texts[2]); + f += write_int(uv3, vec2(x - 6,13), int(iTime), 5); + v = fract(iTime); + f += h_rect(uv3, vec2(x, 12), vec2(4, 0.5), 0.2); + f += rect(uv3, vec2(x + 4 * v - 4, 12), vec2(4 * v, 0.4)); + return vec4(f); } diff --git a/shaders/frag8.glsl b/shaders/frag8.glsl index ac121f8..6a60789 100644 --- a/shaders/frag8.glsl +++ b/shaders/frag8.glsl @@ -9,7 +9,7 @@ float s(vec2 uv, float x0, float y0) { step(-y0 - 1, -uv.y); } -const int texts[11][5] = { +const int texts[8][5] = { {0x49, 0x4E, 0x20, 0x41, 0x00}, // IN A {0x49, 0x4E, 0x20, 0x42, 0x00}, // IN B {0x53, 0x52, 0x43, 0x20, 0x41}, // SRC A @@ -18,9 +18,6 @@ const int texts[11][5] = { {0x46, 0x58, 0x20, 0x42, 0x00}, // FX B {0x41, 0x2B, 0x42, 0x00, 0x00}, // A+B {0x4D, 0x46, 0x58, 0x00, 0x00}, // MFX - {0x46, 0x50, 0x53, 0x00, 0x00}, // FPS - {0x54, 0x45, 0x4D, 0x50, 0x4F}, // TEMPO - {0x54, 0x49, 0x4D, 0x45, 0x00}, // TIME }; void main() { @@ -54,14 +51,5 @@ void main() { t += write_5(uv3, vec2(-17,8), texts[6]); t += write_5(uv3, vec2(19,8), texts[7]); - t += write_5(uv3, vec2(-23,8), texts[8]); - t += write_int(uv3, vec2(-27,8), iFPS, 3); - - t += write_5(uv3, vec2(-23,6), texts[9]); - t += write_int(uv3, vec2(-27,6), int(iTempo), 3); - - t += write_5(uv3, vec2(-23,4), texts[10]); - t += write_int(uv3, vec2(-29,4), int(iTime), 5); - fragColor = mix(c, 1 - c, t); } \ No newline at end of file diff --git a/src/args.c b/src/args.c index f7f30ce..6d6a545 100644 --- a/src/args.c +++ b/src/args.c @@ -22,8 +22,9 @@ static void print_help(int status_code) { "[-fc=CFG_PATH] " "[-is=SIZE] " "[-t=TEMPO] " - "[--monitor] " + "[-m] " "[--demo] " + "[-w] " "\n\n" "Fusion Of Real-time Generative Effects.\n\n" "options:\n" @@ -36,7 +37,8 @@ static void print_help(int status_code) { " -is, --internal-size internal texture height (default: 720)\n" " -t, --tempo base tempo (default: 60)\n" " -m, --monitor output monitor\n" - " --demo demonstration mode\n"); + " --demo demonstration mode\n" + " -w, --windowed not fullscreen\n"); exit(status_code); } @@ -82,6 +84,7 @@ Parameters args_parse(int argc, char **argv) { params.base_tempo = 60.0f; params.monitor = false; params.demo = false; + params.windowed = false; for (i = 1; i < argc; i++) { arg = argv[i]; @@ -107,6 +110,8 @@ Parameters args_parse(int argc, char **argv) { params.monitor = true; } else if (is_arg(arg, "--demo")) { params.demo = true; + } else if (is_arg(arg, "-w") || is_arg(arg, "--windowed")) { + params.windowed = true; } else { invalid_arg(arg); } diff --git a/src/forge.c b/src/forge.c index 71ae234..5bfa2e4 100644 --- a/src/forge.c +++ b/src/forge.c @@ -169,8 +169,8 @@ void forge_run(Parameters params) { init_files(params.frag_path, &common_shader_code, fragment_shaders, frag_count); - window = window_init(PACKAGE " " VERSION, params.screen, error_callback, - key_callback); + window = window_init(PACKAGE " " VERSION, params.screen, params.windowed, + error_callback, key_callback); window_get_context(window, &context); diff --git a/src/types.h b/src/types.h index 0ec205f..7cae450 100644 --- a/src/types.h +++ b/src/types.h @@ -18,6 +18,7 @@ typedef struct Parameters { float base_tempo; bool monitor; bool demo; + bool windowed; } Parameters; typedef struct Vertex { diff --git a/src/window.c b/src/window.c index 7109857..74c6a0e 100644 --- a/src/window.c +++ b/src/window.c @@ -93,7 +93,7 @@ static void use_window(GLFWwindow *window) { glfwSwapInterval(1); } -Window *window_init(char *title, unsigned char monitor_index, +Window *window_init(char *title, unsigned char monitor_index, bool windowed, void (*error_callback)(int, const char *), void (*key_callback)(Window *, int, int, int, int)) { GLFWwindow *window; @@ -101,7 +101,7 @@ Window *window_init(char *title, unsigned char monitor_index, init_glfw(error_callback); - monitor = get_monitor(monitor_index); + monitor = windowed ? NULL : get_monitor(monitor_index); window = create_window(monitor, title, key_callback); diff --git a/src/window.h b/src/window.h index d650d4f..6c9f185 100644 --- a/src/window.h +++ b/src/window.h @@ -3,7 +3,7 @@ #ifndef WINDOW_H #define WINDOW_H -Window *window_init(char *title, unsigned char monitor_index, +Window *window_init(char *title, unsigned char monitor_index, bool windowed, void (*error_callback)(int, const char *), void (*key_callback)(Window *, int, int, int, int));