This commit is contained in:
2025-09-21 11:47:46 +02:00
parent 6714decf17
commit 06181782bf
4 changed files with 51 additions and 50 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
TARGET ?= forge TARGET ?= forge
INSTALL_DIR ?= $(HOME)/.local/bin INSTALL_DIR ?= $(HOME)/.local/bin
TEST_ARGS ?= --frag=./shaders --monitor=1 --frag-config=./config/shaders.cfg --tempo=30 TEST_ARGS ?= --frag=./shaders --frag-config=./config/shaders.cfg --tempo=30
SHELL := /bin/bash SHELL := /bin/bash
.PHONY: build .PHONY: build
+4 -2
View File
@@ -1308,9 +1308,11 @@ subroutine(src_stage_sub) vec4 src_16(vec2 vUV, int seed)
f += selected_fx == 4 ? h_rect(uv2, vec2(-2, -3.2), vec2(1, 0), 0.1) : 0; f += selected_fx == 4 ? h_rect(uv2, vec2(-2, -3.2), vec2(1, 0), 0.1) : 0;
// show inputs / feedback // show inputs / feedback
f += (selected_srca == 5 || selected_srca == 10) ? rect(uv2, vec2(-8, 2), vec2(2, 0.1)) : 0; f += selected_srca == 5 ? rect(uv2, vec2(-8, 2), vec2(2, 0.1)) : 0;
f += selected_srca == 10 ? rect(uv2, vec2(-7, 2), vec2(1, 0.1)) + rect(uv2, vec2(-8, 0.5), vec2(0.1, 1.6)) + rect(uv2, vec2(-9, -1), vec2(1, 0.1)) : 0;
f += (selected_srca == 0 || selected_srca % 5 != 0 && selected_srca >= 8) ? rect(uv2, vec2(-6.5, 2), vec2(0.5, 0.1)) + rect(uv2, vec2(0, 4), vec2(7, 0.1)) + rect(uv2, vec2(-7, 3), vec2(0.1, 1.1)) + rect(uv2, vec2(7, 2), vec2(0.1, 2.1)) : 0; f += (selected_srca == 0 || selected_srca % 5 != 0 && selected_srca >= 8) ? rect(uv2, vec2(-6.5, 2), vec2(0.5, 0.1)) + rect(uv2, vec2(0, 4), vec2(7, 0.1)) + rect(uv2, vec2(-7, 3), vec2(0.1, 1.1)) + rect(uv2, vec2(7, 2), vec2(0.1, 2.1)) : 0;
f += (selected_srcb == 5 || selected_srcb == 10) ? rect(uv2, vec2(-8, -2), vec2(2, 0.1)) : 0; f += selected_srcb == 5 ? rect(uv2, vec2(-6.5, -2), vec2(0.5, 0.1)) + rect(uv2, vec2(-7, -0.5), vec2(0.1, 1.6)) + rect(uv2, vec2(-8.5, 1), vec2(1.5, 0.1)) : 0;
f += selected_srcb == 10 ? rect(uv2, vec2(-8, -2), vec2(2, 0.1)) : 0;
f += (selected_srcb == 0 || selected_srcb % 5 != 0 && selected_srcb >= 8) ? rect(uv2, vec2(-6.5, -2), vec2(0.5, 0.1)) + rect(uv2, vec2(0, -4), vec2(7, 0.1)) + rect(uv2, vec2(-7, -3), vec2(0.1, 1.1)) + rect(uv2, vec2(7, -2), vec2(0.1, 2.1)) : 0; f += (selected_srcb == 0 || selected_srcb % 5 != 0 && selected_srcb >= 8) ? rect(uv2, vec2(-6.5, -2), vec2(0.5, 0.1)) + rect(uv2, vec2(0, -4), vec2(7, 0.1)) + rect(uv2, vec2(-7, -3), vec2(0.1, 1.1)) + rect(uv2, vec2(7, -2), vec2(0.1, 2.1)) : 0;
// show page // show page
+44 -36
View File
@@ -1,3 +1,4 @@
#include <GLFW/glfw3.h>
#include <glad/gl.h> #include <glad/gl.h>
#include <linmath.h> #include <linmath.h>
#include <stddef.h> #include <stddef.h>
@@ -10,30 +11,10 @@
#include "shaders.h" #include "shaders.h"
#include "types.h" #include "types.h"
static bool compile_shader(GLuint shader_id, char *name, char *source_code) { #define GLAD_GL_IMPLEMENTATION
GLint status_params; #include <glad/gl.h>
char log[1024];
log_info("Compiling '%s'...", name); static void init_gl() { gladLoadGL(glfwGetProcAddress); }
// update shader source code
glShaderSource(shader_id, 1, (const GLchar **)&source_code, NULL);
// compile shader
glCompileShader(shader_id);
// get compilation status
glGetShaderiv(shader_id, GL_COMPILE_STATUS, &status_params);
glGetShaderInfoLog(shader_id, 1024, NULL, (GLchar *)&log);
if (status_params == GL_FALSE) {
log_error("Failed to compile\n%s", log);
} else {
log_success("Compilation successful");
}
return status_params == GL_TRUE;
}
static void init_textures(ShaderProgram *program, Context context) { static void init_textures(ShaderProgram *program, Context context) {
unsigned int i; unsigned int i;
@@ -62,6 +43,8 @@ static void init_textures(ShaderProgram *program, Context context) {
// setup mipmap context // setup mipmap context
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
log_success("Texture %d initialized", i);
} }
} }
@@ -111,25 +94,22 @@ static void init_framebuffers(ShaderProgram *program,
return; return;
} }
static void init_vertices(ShaderProgram *program, bool rebind) { static void init_vertices(ShaderProgram *program) {
unsigned int i; unsigned int i;
// create vertex buffer and setup vertices
if (!rebind) {
glGenBuffers(1, &program->vertex_buffer); glGenBuffers(1, &program->vertex_buffer);
}
glBindBuffer(GL_ARRAY_BUFFER, program->vertex_buffer); glBindBuffer(GL_ARRAY_BUFFER, program->vertex_buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// create vertex array
if (!rebind) {
glGenVertexArrays(1, &program->vertex_array[0]);
glBindVertexArray(program->vertex_array[0]);
} else {
glGenVertexArrays(1, &program->vertex_array[1]);
glBindVertexArray(program->vertex_array[1]);
} }
static void bind_vertices(ShaderProgram *program, unsigned int index) {
unsigned int i;
glBindBuffer(GL_ARRAY_BUFFER, program->vertex_buffer);
glGenVertexArrays(1, &program->vertex_array[index]);
glBindVertexArray(program->vertex_array[index]);
for (i = 0; i < program->frag_count; i++) { for (i = 0; i < program->frag_count; i++) {
// enable attribute pointer // enable attribute pointer
glEnableVertexAttribArray(program->vpos_locations[i]); glEnableVertexAttribArray(program->vpos_locations[i]);
@@ -140,6 +120,31 @@ static void init_vertices(ShaderProgram *program, bool rebind) {
} }
} }
static bool compile_shader(GLuint shader_id, char *name, char *source_code) {
GLint status_params;
char log[1024];
log_info("Compiling '%s'...", name);
// update shader source code
glShaderSource(shader_id, 1, (const GLchar **)&source_code, NULL);
// compile shader
glCompileShader(shader_id);
// get compilation status
glGetShaderiv(shader_id, GL_COMPILE_STATUS, &status_params);
glGetShaderInfoLog(shader_id, 1024, NULL, (GLchar *)&log);
if (status_params == GL_FALSE) {
log_error("Failed to compile\n%s", log);
} else {
log_success("Compilation successful");
}
return status_params == GL_TRUE;
}
static void init_shaders(ShaderProgram *program, File *fragment_shaders) { static void init_shaders(ShaderProgram *program, File *fragment_shaders) {
unsigned int i; unsigned int i;
@@ -285,6 +290,8 @@ ShaderProgram shaders_init(File *fragment_shaders, ConfigFile shader_config,
program.sub_variant_count = program.sub_variant_count =
config_file_get_int(shader_config, "SUB_VARIANT_COUNT", 1); config_file_get_int(shader_config, "SUB_VARIANT_COUNT", 1);
init_gl();
init_shaders(&program, fragment_shaders); init_shaders(&program, fragment_shaders);
if (program.error) { if (program.error) {
@@ -297,11 +304,12 @@ ShaderProgram shaders_init(File *fragment_shaders, ConfigFile shader_config,
init_programs(&program, shader_config); init_programs(&program, shader_config);
init_vertices(&program);
} else { } else {
program = *previous; program = *previous;
} }
init_vertices(&program, previous != NULL); bind_vertices(&program, previous != NULL ? 1 : 0);
return program; return program;
} }
+1 -10
View File
@@ -7,9 +7,6 @@
#include "types.h" #include "types.h"
#include "window.h" #include "window.h"
#define GLAD_GL_IMPLEMENTATION
#include <glad/gl.h>
static 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...");
@@ -84,12 +81,7 @@ create_window(GLFWmonitor *monitor, char *title, Window *shared_context,
return window; return window;
} }
static void use_window(GLFWwindow *window) { static void use_window(GLFWwindow *window) { glfwMakeContextCurrent(window); }
// use current window
glfwMakeContextCurrent(window);
// link GLAD and GLFW window
gladLoadGL(glfwGetProcAddress);
}
void window_startup(void (*error_callback)(int, const char *)) { void window_startup(void (*error_callback)(int, const char *)) {
init_glfw(error_callback); init_glfw(error_callback);
@@ -125,7 +117,6 @@ double window_get_time() { return glfwGetTime(); }
void window_use(Window *window, Context *context) { void window_use(Window *window, Context *context) {
glfwMakeContextCurrent(window); glfwMakeContextCurrent(window);
gladLoadGL(glfwGetProcAddress);
glfwGetFramebufferSize(window, &context->width, &context->height); glfwGetFramebufferSize(window, &context->width, &context->height);
} }