static void find_uniforms(glsl_shader_data_t *glsl, unsigned pass, GLuint prog, struct shader_uniforms *uni) { unsigned i; char frame_base[64] = {0}; glUseProgram(prog); uni->mvp = get_uniform(glsl, prog, "MVPMatrix"); uni->tex_coord = get_attrib(glsl, prog, "TexCoord"); uni->vertex_coord = get_attrib(glsl, prog, "VertexCoord"); uni->color = get_attrib(glsl, prog, "Color"); uni->lut_tex_coord = get_attrib(glsl, prog, "LUTTexCoord"); uni->input_size = get_uniform(glsl, prog, "InputSize"); uni->output_size = get_uniform(glsl, prog, "OutputSize"); uni->texture_size = get_uniform(glsl, prog, "TextureSize"); uni->frame_count = get_uniform(glsl, prog, "FrameCount"); uni->frame_direction = get_uniform(glsl, prog, "FrameDirection"); for (i = 0; i < glsl->shader->luts; i++) uni->lut_texture[i] = glGetUniformLocation(prog, glsl->shader->lut[i].id); clear_uniforms_frame(&uni->orig); find_uniforms_frame(glsl, prog, &uni->orig, "Orig"); clear_uniforms_frame(&uni->feedback); find_uniforms_frame(glsl, prog, &uni->feedback, "Feedback"); if (pass > 1) { snprintf(frame_base, sizeof(frame_base), "PassPrev%u", pass); find_uniforms_frame(glsl, prog, &uni->orig, frame_base); } for (i = 0; i + 1 < pass; i++) { snprintf(frame_base, sizeof(frame_base), "Pass%u", i + 1); clear_uniforms_frame(&uni->pass[i]); find_uniforms_frame(glsl, prog, &uni->pass[i], frame_base); snprintf(frame_base, sizeof(frame_base), "PassPrev%u", pass - (i + 1)); find_uniforms_frame(glsl, prog, &uni->pass[i], frame_base); if (*glsl->shader->pass[i].alias) find_uniforms_frame(glsl, prog, &uni->pass[i], glsl->shader->pass[i].alias); } clear_uniforms_frame(&uni->prev[0]); find_uniforms_frame(glsl, prog, &uni->prev[0], "Prev"); for (i = 1; i < PREV_TEXTURES; i++) { snprintf(frame_base, sizeof(frame_base), "Prev%u", i); clear_uniforms_frame(&uni->prev[i]); find_uniforms_frame(glsl, prog, &uni->prev[i], frame_base); } glUseProgram(0); }
static void find_uniforms(unsigned pass, GLuint prog, struct shader_uniforms *uni) { glUseProgram(prog); uni->mvp = get_uniform(prog, "MVPMatrix"); uni->tex_coord = get_attrib(prog, "TexCoord"); uni->vertex_coord = get_attrib(prog, "VertexCoord"); uni->color = get_attrib(prog, "Color"); uni->lut_tex_coord = get_attrib(prog, "LUTTexCoord"); uni->input_size = get_uniform(prog, "InputSize"); uni->output_size = get_uniform(prog, "OutputSize"); uni->texture_size = get_uniform(prog, "TextureSize"); uni->frame_count = get_uniform(prog, "FrameCount"); uni->frame_direction = get_uniform(prog, "FrameDirection"); for (unsigned i = 0; i < glsl_shader->luts; i++) uni->lut_texture[i] = glGetUniformLocation(prog, glsl_shader->lut[i].id); char frame_base[64]; clear_uniforms_frame(&uni->orig); find_uniforms_frame(prog, &uni->orig, "Orig"); if (pass > 1) { snprintf(frame_base, sizeof(frame_base), "PassPrev%u", pass); find_uniforms_frame(prog, &uni->orig, frame_base); } for (unsigned i = 0; i < GFX_MAX_SHADERS; i++) { snprintf(frame_base, sizeof(frame_base), "Pass%u", i + 1); clear_uniforms_frame(&uni->pass[i]); find_uniforms_frame(prog, &uni->pass[i], frame_base); if (i && pass > i + 1) { snprintf(frame_base, sizeof(frame_base), "PassPrev%u", pass - i); find_uniforms_frame(prog, &uni->pass[i], frame_base); } } clear_uniforms_frame(&uni->prev[0]); find_uniforms_frame(prog, &uni->prev[0], "Prev"); for (unsigned i = 1; i < PREV_TEXTURES; i++) { snprintf(frame_base, sizeof(frame_base), "Prev%u", i); clear_uniforms_frame(&uni->prev[i]); find_uniforms_frame(prog, &uni->prev[i], frame_base); } glUseProgram(0); }