clarify code
This commit is contained in:
@@ -103,9 +103,8 @@ make -f Makefile.dev release-arch
|
|||||||
- [x] Test 2 stages with render to texture
|
- [x] Test 2 stages with render to texture
|
||||||
- [x] 2 in 2 fx 1 mix 1 fx layout
|
- [x] 2 in 2 fx 1 mix 1 fx layout
|
||||||
- [x] Include common code
|
- [x] Include common code
|
||||||
- [ ] 16 input + 16 fx definition and selection (with param)
|
- [ ] 16 input + 16 fx definition and selection (with const param)
|
||||||
- [x] Feedback texture
|
- [x] Feedback texture
|
||||||
- [ ] Free opengl memory
|
|
||||||
- [ ] Clean code
|
- [ ] Clean code
|
||||||
- [ ] Midi
|
- [ ] Midi
|
||||||
- [ ] Read Midi events
|
- [ ] Read Midi events
|
||||||
|
|||||||
+9
-9
@@ -7,7 +7,7 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "logs.h"
|
#include "logs.h"
|
||||||
|
|
||||||
void print_help(int status_code) {
|
static void print_help(int status_code) {
|
||||||
puts(PACKAGE
|
puts(PACKAGE
|
||||||
" " VERSION "\n\n"
|
" " VERSION "\n\n"
|
||||||
"usage: " PACKAGE " "
|
"usage: " PACKAGE " "
|
||||||
@@ -27,26 +27,26 @@ void print_help(int status_code) {
|
|||||||
exit(status_code);
|
exit(status_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
void invalid_arg(char *arg) {
|
static void invalid_arg(char *arg) {
|
||||||
log_error("invalid argument: '%s'", arg);
|
log_error("invalid argument: '%s'", arg);
|
||||||
print_help(EXIT_FAILURE);
|
print_help(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void invalid_value(char *arg, char *value) {
|
static void invalid_value(char *arg, char *value) {
|
||||||
log_error("invalid value for argument '%s': '%s'", arg, value);
|
log_error("invalid value for argument '%s': '%s'", arg, value);
|
||||||
print_help(EXIT_FAILURE);
|
print_help(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_arg(char *arg, char *ref) { return strcoll(arg, ref) == 0; }
|
static bool is_arg(char *arg, char *ref) { return strcoll(arg, ref) == 0; }
|
||||||
|
|
||||||
char *split_arg_value(char *arg) {
|
static char *split_arg_value(char *arg) {
|
||||||
strtok(arg, "=");
|
strtok(arg, "=");
|
||||||
return strtok(NULL, "=");
|
return strtok(NULL, "=");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_digit(char c) { return c >= '0' && c <= '9'; }
|
static bool is_digit(char c) { return c >= '0' && c <= '9'; }
|
||||||
|
|
||||||
bool is_number(char *value) {
|
static bool is_number(char *value) {
|
||||||
if (value == NULL) {
|
if (value == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -60,7 +60,7 @@ bool is_number(char *value) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char parse_uchar(char *arg, char *value) {
|
static unsigned char parse_uchar(char *arg, char *value) {
|
||||||
if (!is_number(value)) {
|
if (!is_number(value)) {
|
||||||
invalid_value(arg, value);
|
invalid_value(arg, value);
|
||||||
}
|
}
|
||||||
@@ -71,7 +71,7 @@ unsigned char parse_uchar(char *arg, char *value) {
|
|||||||
return (unsigned char)tmp_value;
|
return (unsigned char)tmp_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
Parameters parse_args(int argc, char **argv) {
|
Parameters args_parse(int argc, char **argv) {
|
||||||
Parameters params = {0, 0, false};
|
Parameters params = {0, 0, false};
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|||||||
+2
-2
@@ -3,6 +3,6 @@
|
|||||||
#ifndef ARGS_H
|
#ifndef ARGS_H
|
||||||
#define ARGS_H
|
#define ARGS_H
|
||||||
|
|
||||||
Parameters parse_args(int argc, char **argv);
|
Parameters args_parse(int argc, char **argv);
|
||||||
|
|
||||||
#endif
|
#endif /* ARGS_H */
|
||||||
+6
-6
@@ -3,22 +3,22 @@
|
|||||||
|
|
||||||
#ifndef PACKAGE
|
#ifndef PACKAGE
|
||||||
#define PACKAGE "forge"
|
#define PACKAGE "forge"
|
||||||
#endif
|
#endif /* PACKAGE */
|
||||||
|
|
||||||
#ifndef VERSION
|
#ifndef VERSION
|
||||||
#define VERSION "(dev)"
|
#define VERSION "(dev)"
|
||||||
#endif
|
#endif /* VERSION */
|
||||||
|
|
||||||
#ifndef FRAG_COUNT
|
#ifndef FRAG_COUNT
|
||||||
#define FRAG_COUNT 6
|
#define FRAG_COUNT 6
|
||||||
#endif
|
#endif /* FRAG_COUNT */
|
||||||
|
|
||||||
#ifndef TEX_COUNT
|
#ifndef TEX_COUNT
|
||||||
#define TEX_COUNT 8
|
#define TEX_COUNT 8
|
||||||
#endif
|
#endif /* TEXT_COUNT */
|
||||||
|
|
||||||
#ifndef SUB_COUNT
|
#ifndef SUB_COUNT
|
||||||
#define SUB_COUNT 16
|
#define SUB_COUNT 16
|
||||||
#endif
|
#endif /* SUB_COUNT */
|
||||||
|
|
||||||
#endif
|
#endif /* CONFIG_H */
|
||||||
+1
-1
@@ -29,4 +29,4 @@ static const Vertex vertices[6] = {{{0.0f, 0.0f}}, {{0.0f, 1.0f}},
|
|||||||
{{1.0f, 1.0f}}, {{0.0f, 0.0f}},
|
{{1.0f, 1.0f}}, {{0.0f, 0.0f}},
|
||||||
{{1.0f, 1.0f}}, {{1.0f, 0.0f}}};
|
{{1.0f, 1.0f}}, {{1.0f, 0.0f}}};
|
||||||
|
|
||||||
#endif
|
#endif /* CONSTANTS_H */
|
||||||
+11
-10
@@ -3,12 +3,13 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
#include "logs.h"
|
#include "logs.h"
|
||||||
#include "strings.h"
|
#include "strings.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
time_t get_file_time(File file) {
|
static time_t get_file_time(File file) {
|
||||||
struct stat attr;
|
struct stat attr;
|
||||||
if (stat(file.path, &attr) == 0) {
|
if (stat(file.path, &attr) == 0) {
|
||||||
return attr.st_mtim.tv_sec;
|
return attr.st_mtim.tv_sec;
|
||||||
@@ -16,11 +17,11 @@ time_t get_file_time(File file) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool should_update_file(File file) {
|
bool file_should_update(File file) {
|
||||||
return file.last_write != get_file_time(file);
|
return file.last_write != get_file_time(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_file(File *file) {
|
void file_update(File *file) {
|
||||||
// free remaining data
|
// free remaining data
|
||||||
if (file->content != 0) {
|
if (file->content != 0) {
|
||||||
free(file->content);
|
free(file->content);
|
||||||
@@ -32,7 +33,7 @@ void update_file(File *file) {
|
|||||||
long length;
|
long length;
|
||||||
// open file
|
// open file
|
||||||
FILE *file_pointer = fopen(file->path, "rb");
|
FILE *file_pointer = fopen(file->path, "rb");
|
||||||
if (!file_pointer) {
|
if (file_pointer == NULL) {
|
||||||
file->error = true;
|
file->error = true;
|
||||||
log_error("Cannot open file '%s'", file->path);
|
log_error("Cannot open file '%s'", file->path);
|
||||||
return;
|
return;
|
||||||
@@ -43,7 +44,7 @@ void update_file(File *file) {
|
|||||||
// init buffer
|
// init buffer
|
||||||
fseek(file_pointer, 0, SEEK_SET);
|
fseek(file_pointer, 0, SEEK_SET);
|
||||||
file->content = (char *)malloc((length + 1) * sizeof(char));
|
file->content = (char *)malloc((length + 1) * sizeof(char));
|
||||||
if (!file->content) {
|
if (file->content == NULL) {
|
||||||
file->error = true;
|
file->error = true;
|
||||||
fclose(file_pointer);
|
fclose(file_pointer);
|
||||||
log_error("Cannot read file '%s'", file->path);
|
log_error("Cannot read file '%s'", file->path);
|
||||||
@@ -59,19 +60,19 @@ void update_file(File *file) {
|
|||||||
file->last_write = get_file_time(*file);
|
file->last_write = get_file_time(*file);
|
||||||
}
|
}
|
||||||
|
|
||||||
File read_file(char *path) {
|
File file_read(char *path) {
|
||||||
File file = {path, 0, false, 0};
|
File file = {path, 0, false, 0};
|
||||||
update_file(&file);
|
file_update(&file);
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
void prepend_file(File *src, File extra) {
|
void file_prepend(File *src, File extra) {
|
||||||
char *old_src_content = src->content;
|
char *old_src_content = src->content;
|
||||||
src->content = concat(extra.content, src->content);
|
src->content = strings_concat(extra.content, src->content);
|
||||||
free(old_src_content);
|
free(old_src_content);
|
||||||
}
|
}
|
||||||
|
|
||||||
void free_file(File *file) {
|
void file_free(File *file) {
|
||||||
free(file->content);
|
free(file->content);
|
||||||
free(file->path);
|
free(file->path);
|
||||||
}
|
}
|
||||||
+6
-6
@@ -3,14 +3,14 @@
|
|||||||
#ifndef FILE_H
|
#ifndef FILE_H
|
||||||
#define FILE_H
|
#define FILE_H
|
||||||
|
|
||||||
File read_file(char *path);
|
File file_read(char *path);
|
||||||
|
|
||||||
bool should_update_file(File file);
|
bool file_should_update(File file);
|
||||||
|
|
||||||
void update_file(File *file);
|
void file_update(File *file);
|
||||||
|
|
||||||
void free_file(File *file);
|
void file_prepend(File *src, File extra);
|
||||||
|
|
||||||
void prepend_file(File *src, File extra);
|
void file_free(File *file);
|
||||||
|
|
||||||
#endif
|
#endif /* FILE_H */
|
||||||
+35
-34
@@ -11,9 +11,9 @@
|
|||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "window.h"
|
#include "window.h"
|
||||||
|
|
||||||
void error_callback(int error, const char *description) {
|
static void error_callback(int error, const char *description) {
|
||||||
log_error("[GLFW] %d: %s", error, description);
|
log_error("[GLFW] %d: %s", error, description);
|
||||||
close_window(0, true);
|
window_close(0, true);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -21,58 +21,59 @@ static void key_callback(Window *window, int key,
|
|||||||
__attribute__((unused)) int scancode, int action,
|
__attribute__((unused)) int scancode, int action,
|
||||||
__attribute__((unused)) int mods) {
|
__attribute__((unused)) int mods) {
|
||||||
// close window on escape key
|
// close window on escape key
|
||||||
if (escape_key(key, action)) {
|
if (window_escape_key(key, action)) {
|
||||||
close_window(window, false);
|
window_close(window, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int compute_fps(Window *window, Timer *timer) {
|
static int compute_fps(Window *window, Timer *timer) {
|
||||||
static double fps;
|
static double fps;
|
||||||
char title[100];
|
char title[100];
|
||||||
|
|
||||||
if (inc_timer(timer)) {
|
if (timer_inc(timer)) {
|
||||||
fps = reset_and_count(timer);
|
fps = timer_reset(timer);
|
||||||
sprintf(title, PACKAGE " " VERSION " - %.0ffps", fps);
|
sprintf(title, PACKAGE " " VERSION " - %.0ffps", fps);
|
||||||
update_window_title(window, title);
|
window_update_title(window, title);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (int)round(fps);
|
return (int)round(fps);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hot_reload(ShaderProgram program, File *common_shader_code,
|
static void hot_reload(ShaderProgram program, File *common_shader_code,
|
||||||
File *fragment_shaders) {
|
File *fragment_shaders) {
|
||||||
int i;
|
int i;
|
||||||
bool force_update = false;
|
bool force_update = false;
|
||||||
|
|
||||||
if (should_update_file(*common_shader_code)) {
|
if (file_should_update(*common_shader_code)) {
|
||||||
update_file(common_shader_code);
|
file_update(common_shader_code);
|
||||||
force_update = true;
|
force_update = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < FRAG_COUNT; i++) {
|
for (i = 0; i < FRAG_COUNT; i++) {
|
||||||
if (force_update || should_update_file(fragment_shaders[i])) {
|
if (force_update || file_should_update(fragment_shaders[i])) {
|
||||||
update_file(&fragment_shaders[i]);
|
file_update(&fragment_shaders[i]);
|
||||||
prepend_file(&fragment_shaders[i], *common_shader_code);
|
file_prepend(&fragment_shaders[i], *common_shader_code);
|
||||||
update_program(program, fragment_shaders, i);
|
shaders_update(program, fragment_shaders, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop(Window *window, ShaderProgram program, bool hr,
|
static void loop(Window *window, ShaderProgram program, bool hr,
|
||||||
File *common_shader_code, File *fragment_shaders, Timer *timer) {
|
File *common_shader_code, File *fragment_shaders,
|
||||||
|
Timer *timer) {
|
||||||
Context context;
|
Context context;
|
||||||
|
|
||||||
if (hr) {
|
if (hr) {
|
||||||
hot_reload(program, common_shader_code, fragment_shaders);
|
hot_reload(program, common_shader_code, fragment_shaders);
|
||||||
}
|
}
|
||||||
|
|
||||||
context = get_window_context(window);
|
context = window_get_context(window);
|
||||||
|
|
||||||
context.fps = compute_fps(window, timer);
|
context.fps = compute_fps(window, timer);
|
||||||
|
|
||||||
apply_program(program, context);
|
shaders_apply(program, context);
|
||||||
|
|
||||||
refresh_window(window);
|
window_refresh(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
File read_fragment_shader_file(char *frag_path, int i) {
|
File read_fragment_shader_file(char *frag_path, int i) {
|
||||||
@@ -80,7 +81,7 @@ File read_fragment_shader_file(char *frag_path, int i) {
|
|||||||
char *file_path = malloc(sizeof(char) * 1024);
|
char *file_path = malloc(sizeof(char) * 1024);
|
||||||
|
|
||||||
sprintf(file_path, "%s/frag%d.glsl", frag_path, i);
|
sprintf(file_path, "%s/frag%d.glsl", frag_path, i);
|
||||||
fragment_shader = read_file(file_path);
|
fragment_shader = file_read(file_path);
|
||||||
if (fragment_shader.error) {
|
if (fragment_shader.error) {
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@@ -88,8 +89,8 @@ File read_fragment_shader_file(char *frag_path, int i) {
|
|||||||
return fragment_shader;
|
return fragment_shader;
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_files(char *frag_path, File *common_shader_code,
|
static void init_files(char *frag_path, File *common_shader_code,
|
||||||
File *fragment_shaders) {
|
File *fragment_shaders) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < FRAG_COUNT + 1; i++) {
|
for (i = 0; i < FRAG_COUNT + 1; i++) {
|
||||||
@@ -98,19 +99,19 @@ void init_files(char *frag_path, File *common_shader_code,
|
|||||||
} else {
|
} else {
|
||||||
fragment_shaders[i - 1] = read_fragment_shader_file(frag_path, i);
|
fragment_shaders[i - 1] = read_fragment_shader_file(frag_path, i);
|
||||||
|
|
||||||
prepend_file(&fragment_shaders[i - 1], *common_shader_code);
|
file_prepend(&fragment_shaders[i - 1], *common_shader_code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void free_files(File *common_shader_code, File *fragment_shaders) {
|
static void free_files(File *common_shader_code, File *fragment_shaders) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < FRAG_COUNT; i++) {
|
for (i = 0; i < FRAG_COUNT; i++) {
|
||||||
free_file(&fragment_shaders[i]);
|
file_free(&fragment_shaders[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
free_file(common_shader_code);
|
file_free(common_shader_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
void forge_run(Parameters params) {
|
void forge_run(Parameters params) {
|
||||||
@@ -123,26 +124,26 @@ void forge_run(Parameters params) {
|
|||||||
|
|
||||||
init_files(params.frag_path, &common_shader_code, fragment_shaders);
|
init_files(params.frag_path, &common_shader_code, fragment_shaders);
|
||||||
|
|
||||||
window = init_window(PACKAGE " " VERSION, params.screen, error_callback,
|
window = window_init(PACKAGE " " VERSION, params.screen, error_callback,
|
||||||
key_callback);
|
key_callback);
|
||||||
|
|
||||||
context = get_window_context(window);
|
context = window_get_context(window);
|
||||||
|
|
||||||
program = init_program(fragment_shaders, context);
|
program = shaders_init(fragment_shaders, context);
|
||||||
|
|
||||||
if (program.error) {
|
if (program.error) {
|
||||||
close_window(window, true);
|
window_close(window, true);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
timer = create_timer(30);
|
timer = timer_init(30);
|
||||||
|
|
||||||
while (!window_should_close(window)) {
|
while (!window_should_close(window)) {
|
||||||
loop(window, program, params.hot_reload, &common_shader_code,
|
loop(window, program, params.hot_reload, &common_shader_code,
|
||||||
fragment_shaders, &timer);
|
fragment_shaders, &timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
close_window(window, true);
|
window_close(window, true);
|
||||||
|
|
||||||
free_files(&common_shader_code, fragment_shaders);
|
free_files(&common_shader_code, fragment_shaders);
|
||||||
}
|
}
|
||||||
+1
-1
@@ -5,4 +5,4 @@
|
|||||||
|
|
||||||
void forge_run(Parameters params);
|
void forge_run(Parameters params);
|
||||||
|
|
||||||
#endif
|
#endif /* FORGE_H */
|
||||||
+1
-1
@@ -26,4 +26,4 @@
|
|||||||
fprintf(stderr, ANSI_COLOR_RED "[FAIL] " format ANSI_COLOR_RESET \
|
fprintf(stderr, ANSI_COLOR_RED "[FAIL] " format ANSI_COLOR_RESET \
|
||||||
"\n" __VA_OPT__(, ) __VA_ARGS__)
|
"\n" __VA_OPT__(, ) __VA_ARGS__)
|
||||||
|
|
||||||
#endif
|
#endif /* LOG_H */
|
||||||
+1
-1
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
Parameters params;
|
Parameters params;
|
||||||
params = parse_args(argc, argv);
|
params = args_parse(argc, argv);
|
||||||
puts(PACKAGE " " VERSION);
|
puts(PACKAGE " " VERSION);
|
||||||
forge_run(params);
|
forge_run(params);
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#ifndef MAIN_H
|
#ifndef MAIN_H
|
||||||
#define MAIN_H
|
#define MAIN_H
|
||||||
|
|
||||||
#endif
|
#endif /* MAIN_H */
|
||||||
+9
-9
@@ -7,7 +7,7 @@
|
|||||||
#include "logs.h"
|
#include "logs.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
bool compile_shader(GLuint shader_id, char *name, char *source_code) {
|
static bool compile_shader(GLuint shader_id, char *name, char *source_code) {
|
||||||
GLint status_params;
|
GLint status_params;
|
||||||
char log[1024];
|
char log[1024];
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ bool compile_shader(GLuint shader_id, char *name, char *source_code) {
|
|||||||
return status_params == GL_TRUE;
|
return status_params == GL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_textures(ShaderProgram *program, Context context) {
|
static void init_textures(ShaderProgram *program, Context context) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
glGenTextures(TEX_COUNT, program->textures);
|
glGenTextures(TEX_COUNT, program->textures);
|
||||||
@@ -55,7 +55,7 @@ void init_textures(ShaderProgram *program, Context context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_framebuffers(ShaderProgram *program) {
|
static void init_framebuffers(ShaderProgram *program) {
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
glGenFramebuffers(FRAG_COUNT, program->frame_buffers);
|
glGenFramebuffers(FRAG_COUNT, program->frame_buffers);
|
||||||
@@ -86,7 +86,7 @@ void init_framebuffers(ShaderProgram *program) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_vertices(ShaderProgram *program) {
|
static void init_vertices(ShaderProgram *program) {
|
||||||
// create vertex buffer and setup vertices
|
// create vertex buffer and setup vertices
|
||||||
glGenBuffers(1, &program->vertex_buffer);
|
glGenBuffers(1, &program->vertex_buffer);
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, program->vertex_buffer);
|
glBindBuffer(GL_ARRAY_BUFFER, program->vertex_buffer);
|
||||||
@@ -97,7 +97,7 @@ void init_vertices(ShaderProgram *program) {
|
|||||||
glBindVertexArray(program->vertex_array);
|
glBindVertexArray(program->vertex_array);
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_shaders(ShaderProgram *program, File *fragment_shaders) {
|
static void init_shaders(ShaderProgram *program, File *fragment_shaders) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
// compile vertex shader
|
// compile vertex shader
|
||||||
@@ -124,7 +124,7 @@ void init_shaders(ShaderProgram *program, File *fragment_shaders) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_single_program(ShaderProgram *program, int i, bool output) {
|
static void init_single_program(ShaderProgram *program, int i, bool output) {
|
||||||
int j;
|
int j;
|
||||||
char name[32];
|
char name[32];
|
||||||
|
|
||||||
@@ -186,7 +186,7 @@ void init_single_program(ShaderProgram *program, int i, bool output) {
|
|||||||
log_success("Program %d initialized", i + 1);
|
log_success("Program %d initialized", i + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderProgram init_program(File *fragment_shaders, Context context) {
|
ShaderProgram shaders_init(File *fragment_shaders, Context context) {
|
||||||
int i;
|
int i;
|
||||||
ShaderProgram program = {.error = false,
|
ShaderProgram program = {.error = false,
|
||||||
.last_width = context.width,
|
.last_width = context.width,
|
||||||
@@ -217,7 +217,7 @@ ShaderProgram init_program(File *fragment_shaders, Context context) {
|
|||||||
return program;
|
return program;
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_program(ShaderProgram program, File *fragment_shaders, int i) {
|
void shaders_update(ShaderProgram program, File *fragment_shaders, int i) {
|
||||||
bool result;
|
bool result;
|
||||||
|
|
||||||
result = compile_shader(program.fragment_shaders[i], fragment_shaders[i].path,
|
result = compile_shader(program.fragment_shaders[i], fragment_shaders[i].path,
|
||||||
@@ -230,7 +230,7 @@ void update_program(ShaderProgram program, File *fragment_shaders, int i) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void apply_program(ShaderProgram program, Context context) {
|
void shaders_apply(ShaderProgram program, Context context) {
|
||||||
int i, j;
|
int i, j;
|
||||||
GLuint subroutines[3];
|
GLuint subroutines[3];
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -3,10 +3,10 @@
|
|||||||
#ifndef SHADERS_H
|
#ifndef SHADERS_H
|
||||||
#define SHADERS_H
|
#define SHADERS_H
|
||||||
|
|
||||||
ShaderProgram init_program(File *fragment_shader, Context context);
|
ShaderProgram shaders_init(File *fragment_shader, Context context);
|
||||||
|
|
||||||
void update_program(ShaderProgram program, File *fragment_shaders, int i);
|
void shaders_update(ShaderProgram program, File *fragment_shaders, int i);
|
||||||
|
|
||||||
void apply_program(ShaderProgram program, Context context);
|
void shaders_apply(ShaderProgram program, Context context);
|
||||||
|
|
||||||
#endif
|
#endif /* SHADERS_H */
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
char *concat(const char *s1, const char *s2) {
|
char *strings_concat(const char *s1, const char *s2) {
|
||||||
char *result =
|
char *result =
|
||||||
malloc(strlen(s1) + strlen(s2) + 1); // +1 for the null-terminator
|
malloc(strlen(s1) + strlen(s2) + 1); // +1 for the null-terminator
|
||||||
// in real code you would check for errors in malloc here
|
// in real code you would check for errors in malloc here
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
#ifndef STRINGS_H
|
#ifndef STRINGS_H
|
||||||
#define STRINGS_H
|
#define STRINGS_H
|
||||||
|
|
||||||
char *concat(const char *s1, const char *s2);
|
char *strings_concat(const char *s1, const char *s2);
|
||||||
|
|
||||||
#endif
|
#endif /* STRINGS_H */
|
||||||
+3
-3
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
Timer create_timer(const unsigned int target) {
|
Timer timer_init(const unsigned int target) {
|
||||||
Timer output = {
|
Timer output = {
|
||||||
.counter = 0,
|
.counter = 0,
|
||||||
.target = target,
|
.target = target,
|
||||||
@@ -13,12 +13,12 @@ Timer create_timer(const unsigned int target) {
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool inc_timer(Timer *timer) {
|
bool timer_inc(Timer *timer) {
|
||||||
timer->counter += 1;
|
timer->counter += 1;
|
||||||
return timer->counter >= timer->target;
|
return timer->counter >= timer->target;
|
||||||
}
|
}
|
||||||
|
|
||||||
double reset_and_count(Timer *timer) {
|
double timer_reset(Timer *timer) {
|
||||||
struct timeval stop;
|
struct timeval stop;
|
||||||
double secs, per_secs;
|
double secs, per_secs;
|
||||||
gettimeofday(&stop, NULL);
|
gettimeofday(&stop, NULL);
|
||||||
|
|||||||
+4
-4
@@ -3,10 +3,10 @@
|
|||||||
#ifndef TIMER_H
|
#ifndef TIMER_H
|
||||||
#define TIMER_H
|
#define TIMER_H
|
||||||
|
|
||||||
Timer create_timer(const unsigned int target);
|
Timer timer_init(const unsigned int target);
|
||||||
|
|
||||||
bool inc_timer(Timer *timer);
|
bool timer_inc(Timer *timer);
|
||||||
|
|
||||||
double reset_and_count(Timer *timer);
|
double timer_reset(Timer *timer);
|
||||||
|
|
||||||
#endif
|
#endif /* TIMER_H */
|
||||||
+1
-1
@@ -77,4 +77,4 @@ typedef struct Timer {
|
|||||||
unsigned int target;
|
unsigned int target;
|
||||||
} Timer;
|
} Timer;
|
||||||
|
|
||||||
#endif
|
#endif /* TYPES_H */
|
||||||
+13
-12
@@ -9,7 +9,7 @@
|
|||||||
#define GLAD_GL_IMPLEMENTATION
|
#define GLAD_GL_IMPLEMENTATION
|
||||||
#include <glad/gl.h>
|
#include <glad/gl.h>
|
||||||
|
|
||||||
void init_glfw(void (*error_callback)(int, const char *)) {
|
static void init_glfw(void (*error_callback)(int, const char *)) {
|
||||||
log_info("[GLFW] Initializing...");
|
log_info("[GLFW] Initializing...");
|
||||||
|
|
||||||
// set errors handler
|
// set errors handler
|
||||||
@@ -32,7 +32,7 @@ void init_glfw(void (*error_callback)(int, const char *)) {
|
|||||||
log_success("[GLFS] Initialized...");
|
log_success("[GLFS] Initialized...");
|
||||||
}
|
}
|
||||||
|
|
||||||
GLFWmonitor *get_monitor(unsigned char monitor_index) {
|
static GLFWmonitor *get_monitor(unsigned char monitor_index) {
|
||||||
// detect monitors
|
// detect monitors
|
||||||
int count;
|
int count;
|
||||||
GLFWmonitor **monitors = glfwGetMonitors(&count);
|
GLFWmonitor **monitors = glfwGetMonitors(&count);
|
||||||
@@ -48,8 +48,9 @@ GLFWmonitor *get_monitor(unsigned char monitor_index) {
|
|||||||
return monitors[monitor_index];
|
return monitors[monitor_index];
|
||||||
}
|
}
|
||||||
|
|
||||||
GLFWwindow *create_window(GLFWmonitor *monitor, char *title,
|
static GLFWwindow *create_window(GLFWmonitor *monitor, char *title,
|
||||||
void (*key_callback)(Window *, int, int, int, int)) {
|
void (*key_callback)(Window *, int, int, int,
|
||||||
|
int)) {
|
||||||
|
|
||||||
log_info("[GLFW] Creating window...");
|
log_info("[GLFW] Creating window...");
|
||||||
|
|
||||||
@@ -63,7 +64,7 @@ GLFWwindow *create_window(GLFWmonitor *monitor, char *title,
|
|||||||
GLFWwindow *window = glfwCreateWindow(1, 1, title, monitor, NULL);
|
GLFWwindow *window = glfwCreateWindow(1, 1, title, monitor, NULL);
|
||||||
|
|
||||||
// handle window creation fail
|
// handle window creation fail
|
||||||
if (!window) {
|
if (window == NULL) {
|
||||||
log_error("[GLFW] Window or context creation failed");
|
log_error("[GLFW] Window or context creation failed");
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
@@ -79,7 +80,7 @@ GLFWwindow *create_window(GLFWmonitor *monitor, char *title,
|
|||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
void use_window(GLFWwindow *window) {
|
static void use_window(GLFWwindow *window) {
|
||||||
// use current window
|
// use current window
|
||||||
glfwMakeContextCurrent(window);
|
glfwMakeContextCurrent(window);
|
||||||
// link GLAD and GLFW window
|
// link GLAD and GLFW window
|
||||||
@@ -88,7 +89,7 @@ void use_window(GLFWwindow *window) {
|
|||||||
glfwSwapInterval(1);
|
glfwSwapInterval(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
Window *init_window(char *title, unsigned char monitor_index,
|
Window *window_init(char *title, unsigned char monitor_index,
|
||||||
void (*error_callback)(int, const char *),
|
void (*error_callback)(int, const char *),
|
||||||
void (*key_callback)(Window *, int, int, int, int)) {
|
void (*key_callback)(Window *, int, int, int, int)) {
|
||||||
GLFWwindow *window;
|
GLFWwindow *window;
|
||||||
@@ -105,18 +106,18 @@ Window *init_window(char *title, unsigned char monitor_index,
|
|||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_window_title(Window *window, char *title) {
|
void window_update_title(Window *window, char *title) {
|
||||||
glfwSetWindowTitle(window, title);
|
glfwSetWindowTitle(window, title);
|
||||||
}
|
}
|
||||||
|
|
||||||
void refresh_window(Window *window) {
|
void window_refresh(Window *window) {
|
||||||
// swap front and back buffers
|
// swap front and back buffers
|
||||||
glfwSwapBuffers(window);
|
glfwSwapBuffers(window);
|
||||||
// listen to mouse and keyboard events
|
// listen to mouse and keyboard events
|
||||||
glfwPollEvents();
|
glfwPollEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
Context get_window_context(Window *window) {
|
Context window_get_context(Window *window) {
|
||||||
Context context;
|
Context context;
|
||||||
|
|
||||||
glfwGetFramebufferSize(window, &context.width, &context.height);
|
glfwGetFramebufferSize(window, &context.width, &context.height);
|
||||||
@@ -126,7 +127,7 @@ Context get_window_context(Window *window) {
|
|||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
void close_window(Window *window, bool hard) {
|
void window_close(Window *window, bool hard) {
|
||||||
if (hard) {
|
if (hard) {
|
||||||
log_info("[GLFW] Terminating library...");
|
log_info("[GLFW] Terminating library...");
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
@@ -140,6 +141,6 @@ bool window_should_close(Window *window) {
|
|||||||
return glfwWindowShouldClose(window) == GLFW_TRUE;
|
return glfwWindowShouldClose(window) == GLFW_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool escape_key(int key, int action) {
|
bool window_escape_key(int key, int action) {
|
||||||
return key == GLFW_KEY_ESCAPE && action == GLFW_PRESS;
|
return key == GLFW_KEY_ESCAPE && action == GLFW_PRESS;
|
||||||
}
|
}
|
||||||
+7
-7
@@ -3,20 +3,20 @@
|
|||||||
#ifndef WINDOW_H
|
#ifndef WINDOW_H
|
||||||
#define WINDOW_H
|
#define WINDOW_H
|
||||||
|
|
||||||
Window *init_window(char *title, unsigned char monitor_index,
|
Window *window_init(char *title, unsigned char monitor_index,
|
||||||
void (*error_callback)(int, const char *),
|
void (*error_callback)(int, const char *),
|
||||||
void (*key_callback)(Window *, int, int, int, int));
|
void (*key_callback)(Window *, int, int, int, int));
|
||||||
|
|
||||||
void update_window_title(Window *window, char *title);
|
void window_update_title(Window *window, char *title);
|
||||||
|
|
||||||
void refresh_window(Window *window);
|
void window_refresh(Window *window);
|
||||||
|
|
||||||
Context get_window_context(Window *window);
|
Context window_get_context(Window *window);
|
||||||
|
|
||||||
void close_window(Window *window, bool hard);
|
void window_close(Window *window, bool hard);
|
||||||
|
|
||||||
bool window_should_close(Window *window);
|
bool window_should_close(Window *window);
|
||||||
|
|
||||||
bool escape_key(int key, int action);
|
bool window_escape_key(int key, int action);
|
||||||
|
|
||||||
#endif
|
#endif /* WINDOW_H */
|
||||||
Reference in New Issue
Block a user