Exemple #1
0
static void gl_glsl_destroy_resources(glsl_shader_data_t *glsl)
{
   unsigned i;

   if (!glsl)
      return;

   current_idx = 0;
   glUseProgram(0);
   for (i = 0; i < GFX_MAX_SHADERS; i++)
   {
      if (glsl->prg[i].id == 0 || (i && glsl->prg[i].id == glsl->prg[0].id))
         continue;
      if (!glIsProgram(glsl->prg[i].id))
         continue;

      glDeleteProgram(glsl->prg[i].id);
   }

   if (glsl->shader && glsl->shader->luts)
      glDeleteTextures(glsl->shader->luts, glsl->lut_textures);

   memset(glsl->prg, 0, sizeof(glsl->prg));
   memset(glsl->uniforms, 0, sizeof(glsl->uniforms));
   glsl->active_idx = 0;

   gl_glsl_deinit_shader(glsl);

   if (glsl->state_tracker)
      state_tracker_free(glsl->state_tracker);
   glsl->state_tracker = NULL;

   gl_glsl_reset_attrib(glsl);

   for (i = 0; i < GFX_MAX_SHADERS; i++)
   {
      if (glsl->vbo[i].vbo_primary)
         glDeleteBuffers(1, &glsl->vbo[i].vbo_primary);
      if (glsl->vbo[i].vbo_secondary)
         glDeleteBuffers(1, &glsl->vbo[i].vbo_secondary);

      free(glsl->vbo[i].buffer_primary);
      free(glsl->vbo[i].buffer_secondary);
   }
   memset(&glsl->vbo, 0, sizeof(glsl->vbo));
}
Exemple #2
0
static void gl_glsl_destroy_resources(glsl_shader_data_t *glsl)
{
    unsigned i;

    if (!glsl)
        return;

    glUseProgram(0);
    for (i = 0; i < GFX_MAX_SHADERS; i++)
    {
        if (glsl->gl_program[i] == 0 || (i && glsl->gl_program[i] == glsl->gl_program[0]))
            continue;

        glDeleteProgram(glsl->gl_program[i]);
    }

    if (glsl->shader && glsl->shader->luts)
        glDeleteTextures(glsl->shader->luts, glsl->gl_teximage);

    memset(glsl->gl_program, 0, sizeof(glsl->gl_program));
    memset(glsl->gl_uniforms, 0, sizeof(glsl->gl_uniforms));
    glsl->glsl_active_index = 0;

    gl_glsl_deinit_shader(glsl);

    if (glsl->gl_state_tracker)
        state_tracker_free(glsl->gl_state_tracker);
    glsl->gl_state_tracker = NULL;

    gl_glsl_reset_attrib(glsl);

    for (i = 0; i < GFX_MAX_SHADERS; i++)
    {
        if (glsl->glsl_vbo[i].vbo_primary)
            glDeleteBuffers(1, &glsl->glsl_vbo[i].vbo_primary);
        if (glsl->glsl_vbo[i].vbo_secondary)
            glDeleteBuffers(1, &glsl->glsl_vbo[i].vbo_secondary);

        free(glsl->glsl_vbo[i].buffer_primary);
        free(glsl->glsl_vbo[i].buffer_secondary);
    }
    memset(&glsl->glsl_vbo, 0, sizeof(glsl->glsl_vbo));
}