add fps uniform

This commit is contained in:
2025-09-16 00:27:36 +02:00
parent c654ead8aa
commit 64ce067e4e
7 changed files with 35 additions and 9 deletions
+8 -5
View File
@@ -1,4 +1,5 @@
#include <linmath.h>
#include <math.h>
#include <stdbool.h>
#include <stdlib.h>
@@ -25,8 +26,8 @@ static void key_callback(Window *window, int key,
}
}
void compute_fps(Window *window, Timer *timer) {
double fps;
int compute_fps(Window *window, Timer *timer) {
static double fps;
char title[100];
if (inc_timer(timer)) {
@@ -34,6 +35,8 @@ void compute_fps(Window *window, Timer *timer) {
sprintf(title, PACKAGE " " VERSION " - %.0ffps", fps);
update_window_title(window, title);
}
return (int)round(fps);
}
void hot_reload(ShaderProgram program, File *common_shader_code,
@@ -59,14 +62,14 @@ void loop(Window *window, ShaderProgram program, bool hr,
File *common_shader_code, File *fragment_shaders, Timer *timer) {
Context context;
compute_fps(window, timer);
if (hr) {
hot_reload(program, common_shader_code, fragment_shaders);
}
context = get_window_context(window);
context.fps = compute_fps(window, timer);
apply_program(program, context);
refresh_window(window);
@@ -132,7 +135,7 @@ void forge_run(Parameters params) {
exit(EXIT_FAILURE);
}
timer = create_timer(60);
timer = create_timer(30);
while (!window_should_close(window)) {
loop(window, program, params.hot_reload, &common_shader_code,
+5 -1
View File
@@ -142,6 +142,8 @@ void init_single_program(ShaderProgram *program, int i, bool output) {
glGetUniformLocation(program->programs[i], "iTime");
program->itempo_locations[i] =
glGetUniformLocation(program->programs[i], "iTempo");
program->ifps_locations[i] =
glGetUniformLocation(program->programs[i], "iFPS");
program->ires_locations[i] =
glGetUniformLocation(program->programs[i], "iResolution");
}
@@ -245,7 +247,9 @@ void apply_program(ShaderProgram program, Context context) {
// set fragment uniforms
glUniform1f(program.itime_locations[i], (const GLfloat)context.time);
glUniform1f(program.itempo_locations[i], (const GLfloat)120); // TODO TMP
glUniform1f(program.itempo_locations[i],
(const GLfloat)120.0f); // TODO TMP
glUniform1i(program.ifps_locations[i], (const GLint)context.fps);
glUniform2fv(program.ires_locations[i], 1, (const GLfloat *)&resolution);
}
+2
View File
@@ -42,6 +42,7 @@ typedef struct ShaderProgram {
GLuint itime_locations[FRAG_COUNT];
GLuint itempo_locations[FRAG_COUNT];
GLuint ifps_locations[FRAG_COUNT];
GLuint ires_locations[FRAG_COUNT];
GLuint frames_locations[FRAG_COUNT + 1][TEX_COUNT];
GLuint vpos_locations[FRAG_COUNT + 1];
@@ -61,6 +62,7 @@ typedef struct Context {
int width;
int height;
double time;
int fps;
} Context;
typedef struct Timer {