any buffer to any tex

This commit is contained in:
2025-09-19 00:06:50 +02:00
parent b00b0d0f33
commit 1cf3c7eb50
8 changed files with 31 additions and 31 deletions
+1 -1
View File
@@ -5,7 +5,7 @@
// OUT: 2 (FX A)
in vec2 vUV;
layout(location = 2) out vec4 fragColor;
out vec4 fragColor;
void main() {
fragColor = src_stage(vUV);
+1 -1
View File
@@ -5,7 +5,7 @@
// OUT: 5 (FX B)
in vec2 vUV;
layout(location = 5) out vec4 fragColor;
out vec4 fragColor;
void main() {
fragColor = src_stage(vUV);
+1 -1
View File
@@ -5,7 +5,7 @@
// OUT: 3 (A+B)
in vec2 vUV;
layout(location = 3) out vec4 fragColor;
out vec4 fragColor;
void main() {
fragColor = fx_stage(vUV, tex2, tex3);
+1 -1
View File
@@ -5,7 +5,7 @@
// OUT: 6 (A+B)
in vec2 vUV;
layout(location = 6) out vec4 fragColor;
out vec4 fragColor;
void main() {
fragColor = fx_stage(vUV, tex5, tex6);
+1 -1
View File
@@ -5,7 +5,7 @@
// OUT: 7 (MFX)
in vec2 vUV;
layout(location = 7) out vec4 fragColor;
out vec4 fragColor;
void main() {
fragColor = mix_stage(vUV, tex3, tex6, sin(iTime * 0.25) * 0.3 + 0.3); // TODO tmp
+1 -1
View File
@@ -5,7 +5,7 @@
// OUT: 0 (OUT)
in vec2 vUV;
layout(location = 0) out vec4 fragColor;
out vec4 fragColor;
void main() {
fragColor = fx_stage(vUV, tex7, tex0);
+7 -1
View File
@@ -4,8 +4,14 @@ UNIFORM_FPS=iFPS
UNIFORM_RESOLUTION=iResolution
FRAG_COUNT=8
FRAG_OUT=7
FRAG_OUTPUT=7
FRAG_MONITOR=8
FRAG_1_OUT=2
FRAG_2_OUT=5
FRAG_3_OUT=3
FRAG_4_OUT=6
FRAG_5_OUT=7
FRAG_6_OUT=0
SUB_TYPE_COUNT=3
SUB_1_PREFIX=src_
+18 -24
View File
@@ -59,22 +59,27 @@ static void init_textures(ShaderProgram *program, Context context) {
}
}
static void init_framebuffers(ShaderProgram *program) {
static void init_framebuffers(ShaderProgram *program,
ConfigFile shader_config) {
unsigned int i, j;
unsigned tex_i;
char name[32];
program->frame_buffers = malloc(program->framebuffer_count * sizeof(GLuint));
program->frame_buffers = malloc(program->frag_count * sizeof(GLuint));
glGenFramebuffers(program->framebuffer_count, program->frame_buffers);
glGenFramebuffers(program->frag_count, program->frame_buffers);
for (i = 0; i < program->frag_count; i++) {
if (i == program->frag_output_index || i == program->frag_monitor_index) {
continue;
}
for (i = 0; i < program->framebuffer_count; i++) {
glBindFramebuffer(GL_FRAMEBUFFER, program->frame_buffers[i]);
for (j = 0; j < TEX_COUNT; j++) {
// attaches a selected mipmap level or image of a texture object as one of
// the logical buffers of the framebuffer object
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + j,
GL_TEXTURE_2D, program->textures[j], 0);
}
sprintf(name, "FRAG_%d_OUT", i + 1);
tex_i = config_file_get_int(shader_config, name, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
program->textures[tex_i], 0);
// check framebuffer status
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
@@ -206,14 +211,6 @@ static void init_programs(ShaderProgram *program, ConfigFile shader_config) {
}
}
static void init_drawbuffers(ShaderProgram *program) {
unsigned int i;
for (i = 0; i < TEX_COUNT; i++) {
program->draw_buffers[i] = GL_COLOR_ATTACHMENT0 + i;
}
}
ShaderProgram shaders_init(File *fragment_shaders, ConfigFile shader_config,
Context context) {
ShaderProgram program;
@@ -230,7 +227,7 @@ ShaderProgram shaders_init(File *fragment_shaders, ConfigFile shader_config,
init_textures(&program, context);
init_framebuffers(&program);
init_framebuffers(&program, shader_config);
init_shaders(&program, fragment_shaders);
@@ -242,8 +239,6 @@ ShaderProgram shaders_init(File *fragment_shaders, ConfigFile shader_config,
init_programs(&program, shader_config);
init_drawbuffers(&program);
return program;
}
@@ -300,6 +295,7 @@ static void use_program(ShaderProgram program, int i, bool output,
} else {
// use memory framebuffer
glBindFramebuffer(GL_FRAMEBUFFER, program.frame_buffers[i]);
glDrawBuffer(GL_COLOR_ATTACHMENT0);
}
// set fragment uniforms
glUniform1f(program.itime_locations[i], (const GLfloat)context.time);
@@ -320,8 +316,6 @@ static void use_program(ShaderProgram program, int i, bool output,
glUniform1i(program.textures_locations[j][i], j);
}
glDrawBuffers(TEX_COUNT, program.draw_buffers);
// draw output
glDrawArrays(GL_TRIANGLES, 0, 6);
}
@@ -337,5 +331,5 @@ void shaders_apply(ShaderProgram program, Context context) {
}
}
use_program(program, program.frag_output_index, true, context);
use_program(program, program.frag_monitor_index, true, context);
}