X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=effect_chain.cpp;h=b3c9099ed4a864aa6bbb498d926fc35236bd764b;hb=873b60b640a96c8fb4c2d8c88c85d20e0a2dca6b;hp=5c1ba69e64a71ad65fe34ad3d7c53d76f4471fd9;hpb=db1fbb73b18b68850f61d1c8b89f2e4d3f7aadc1;p=movit diff --git a/effect_chain.cpp b/effect_chain.cpp index 5c1ba69..b3c9099 100644 --- a/effect_chain.cpp +++ b/effect_chain.cpp @@ -155,9 +155,26 @@ void EffectChain::finalize() effects.push_back(gamma_conversion); current_gamma_curve = output_format.gamma_curve; } + + std::string vert_shader = read_file("vs-header.glsl"); + for (unsigned i = 0; i < effects.size(); ++i) { + char effect_id[256]; + sprintf(effect_id, "eff%d", i); + + vert_shader += "\n"; + vert_shader += std::string("#define FUNCNAME ") + effect_id + "\n"; + vert_shader += replace_prefix(effects[i]->output_convenience_uniforms(), effect_id); + vert_shader += replace_prefix(effects[i]->output_vertex_shader(), effect_id); + vert_shader += "#undef PREFIX\n"; + vert_shader += "#undef FUNCNAME\n"; + vert_shader += "#undef LAST_INPUT\n"; + vert_shader += std::string("#define LAST_INPUT ") + effect_id + "\n"; + vert_shader += "\n"; + } + vert_shader.append(read_file("vs-footer.glsl")); + printf("%s\n", vert_shader.c_str()); - std::string frag_shader = read_file("header.glsl"); - + std::string frag_shader = read_file("fs-header.glsl"); for (unsigned i = 0; i < effects.size(); ++i) { char effect_id[256]; sprintf(effect_id, "eff%d", i); @@ -172,11 +189,11 @@ void EffectChain::finalize() frag_shader += std::string("#define LAST_INPUT ") + effect_id + "\n"; frag_shader += "\n"; } - frag_shader.append(read_file("footer.glsl")); + frag_shader.append(read_file("fs-footer.glsl")); printf("%s\n", frag_shader.c_str()); glsl_program_num = glCreateProgram(); - GLuint vs_obj = compile_shader(read_file("vs.glsl"), GL_VERTEX_SHADER); + GLuint vs_obj = compile_shader(vert_shader, GL_VERTEX_SHADER); GLuint fs_obj = compile_shader(frag_shader, GL_FRAGMENT_SHADER); glAttachShader(glsl_program_num, vs_obj); check_error();