Пример #1
0
static bool gl_glsl_load_shader(unsigned index, const char *path)
{
   pglUseProgram(0);

   if (gl_program[index] != gl_program[0])
   {
      gl_glsl_delete_shader(gl_program[index]);
      gl_program[index] = 0;
   }

   if (path)
   {
      struct shader_program prog = {0};
      unsigned progs = get_xml_shaders(path, &prog, 1);
      if (progs != 1)
         return false;

      if (!compile_programs(&gl_program[index], &prog, 1))
      {
         RARCH_ERR("Failed to compile shader: %s.\n", path);
         return false;
      }

      find_uniforms(gl_program[index], &gl_uniforms[index]);
   }
   else
   {
      gl_program[index]  = gl_program[0];
      gl_uniforms[index] = gl_uniforms[0];
   }

   pglUseProgram(gl_program[active_index]);
   return true;
}
Пример #2
0
static void gl_glsl_deinit(void)
{
   if (glsl_enable)
   {
      pglUseProgram(0);
      for (unsigned i = 0; i < GFX_MAX_SHADERS; i++)
      {
         if (gl_program[i] == 0 || (i && gl_program[i] == gl_program[0]))
            continue;

         gl_glsl_delete_shader(gl_program[i]);
      }

      if (glsl_shader)
         glDeleteTextures(glsl_shader->luts, gl_teximage);
   }

   memset(gl_program, 0, sizeof(gl_program));
   glsl_enable  = false;
   active_index = 0;

   gl_glsl_free_shader();

   if (gl_state_tracker)
      state_tracker_free(gl_state_tracker);
   gl_state_tracker = NULL;

   gl_glsl_reset_attrib();
}
Пример #3
0
void gl_glsl_deinit(void)
{
   if (glsl_enable)
   {
      pglUseProgram(0);
      for (unsigned i = 0; i <= gl_num_programs; i++)
      {
         if (gl_program[i] == 0 || (i && gl_program[i] == gl_program[0]))
            continue;

         gl_glsl_delete_shader(gl_program[i]);
      }

      glDeleteTextures(gl_teximage_cnt, gl_teximage);
      gl_teximage_cnt = 0;
      memset(gl_teximage_uniforms, 0, sizeof(gl_teximage_uniforms));
   }

   memset(gl_program, 0, sizeof(gl_program));
   glsl_enable  = false;
   active_index = 0;

   gl_tracker_info_cnt = 0;
   memset(gl_tracker_info, 0, sizeof(gl_tracker_info));
   memset(gl_tracker_script_class, 0, sizeof(gl_tracker_script_class));

   free(gl_script_program);
   gl_script_program = NULL;

   if (gl_state_tracker)
   {
      state_tracker_free(gl_state_tracker);
      gl_state_tracker = NULL;
   }

   gl_glsl_reset_attrib();
}
Пример #4
0
static void gl_glsl_deinit(void)
{
   glUseProgram(0);
   for (unsigned i = 0; i < GFX_MAX_SHADERS; i++)
   {
      if (gl_program[i] == 0 || (i && gl_program[i] == gl_program[0]))
         continue;

      gl_glsl_delete_shader(gl_program[i]);
   }

   if (glsl_shader && glsl_shader->luts)
      glDeleteTextures(glsl_shader->luts, gl_teximage);

   memset(gl_program, 0, sizeof(gl_program));
   memset(gl_uniforms, 0, sizeof(gl_uniforms));
   glsl_enable  = false;
   active_index = 0;

   gl_glsl_free_shader();

   if (gl_state_tracker)
      state_tracker_free(gl_state_tracker);
   gl_state_tracker = NULL;

   gl_glsl_reset_attrib();

   for (unsigned 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);
   }
   memset(&glsl_vbo, 0, sizeof(glsl_vbo));
}