Пример #1
0
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);
}
Пример #2
0
static void find_uniforms(GLuint prog, struct shader_uniforms *uni)
{
   pglUseProgram(prog);

   uni->mvp           = pglGetUniformLocation(prog, "rubyMVPMatrix");
   uni->tex_coord     = pglGetAttribLocation(prog, "rubyTexCoord");
   uni->vertex_coord  = pglGetAttribLocation(prog, "rubyVertexCoord");
   uni->color         = pglGetAttribLocation(prog, "rubyColor");
   uni->lut_tex_coord = pglGetAttribLocation(prog, "rubyLUTTexCoord");

   uni->input_size    = pglGetUniformLocation(prog, "rubyInputSize");
   uni->output_size   = pglGetUniformLocation(prog, "rubyOutputSize");
   uni->texture_size  = pglGetUniformLocation(prog, "rubyTextureSize");

   uni->frame_count     = pglGetUniformLocation(prog, "rubyFrameCount");
   uni->frame_direction = pglGetUniformLocation(prog, "rubyFrameDirection");

   for (unsigned i = 0; i < gl_teximage_cnt; i++)
      uni->lut_texture[i] = pglGetUniformLocation(prog, gl_teximage_uniforms[i]);

   find_uniforms_frame(prog, &uni->orig, "rubyOrig");

   char frame_base[64];
   for (unsigned i = 0; i < RARCH_GLSL_MAX_SHADERS; i++)
   {
      snprintf(frame_base, sizeof(frame_base), "rubyPass%u", i + 1);
      find_uniforms_frame(prog, &uni->pass[i], frame_base);
   }

   find_uniforms_frame(prog, &uni->prev[0], "rubyPrev");
   for (unsigned i = 1; i < PREV_TEXTURES; i++)
   {
      snprintf(frame_base, sizeof(frame_base), "rubyPrev%u", i);
      find_uniforms_frame(prog, &uni->prev[i], frame_base);
   }

   pglUseProgram(0);
}
Пример #3
0
static void find_uniforms(GLuint prog, struct shader_uniforms *uni)
{
   pglUseProgram(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] = pglGetUniformLocation(prog, glsl_shader->lut[i].id);

   find_uniforms_frame(prog, &uni->orig, "Orig");

   char frame_base[64];
   for (unsigned i = 0; i < GFX_MAX_SHADERS; i++)
   {
      snprintf(frame_base, sizeof(frame_base), "Pass%u", i + 1);
      find_uniforms_frame(prog, &uni->pass[i], frame_base);
   }

   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);
      find_uniforms_frame(prog, &uni->prev[i], frame_base);
   }

   pglUseProgram(0);
}