static bool gl_xml_shader(void *data, const char *path) { gl_t *gl = (gl_t*)data; #ifdef HAVE_FBO gl_deinit_fbo(gl); glBindTexture(GL_TEXTURE_2D, gl->texture[gl->tex_index]); #endif gl_shader_deinit(); if (!gl_glsl_init(path)) return false; #ifdef HAVE_FBO // Set up render to texture again. gl_init_fbo(gl, gl->tex_w, gl->tex_h); #endif // Apparently need to set viewport for passes when we aren't using FBOs. gl_shader_use(0); gl_set_viewport(gl, gl->win_width, gl->win_height, false, true); gl_shader_use(1); gl_set_viewport(gl, gl->win_width, gl->win_height, false, true); return true; }
static void gl_free(void *data) { #ifdef RARCH_CONSOLE if (driver.video_data) return; #endif gl_t *gl = (gl_t*)data; gl_deinit_font(gl); gl_shader_deinit(); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_COLOR_ARRAY); glDeleteTextures(TEXTURES, gl->texture); #ifdef HAVE_OPENGL_TEXREF glBindBuffer(GL_TEXTURE_REFERENCE_BUFFER_SCE, 0); glDeleteBuffers(1, &gl->pbo); #endif #ifdef HAVE_FBO gl_deinit_fbo(gl); #endif gfx_ctx_destroy(); if (gl->empty_buf) free(gl->empty_buf); free(gl); }
static void gfx_ctx_set_fbo(unsigned mode) { gl_t *gl = driver.video_data; #ifdef HAVE_FBO switch(mode) { case FBO_DEINIT: gl_deinit_fbo(gl); break; case FBO_REINIT: gl_deinit_fbo(gl); /* fall-through */ case FBO_INIT: gl_init_fbo(gl, gl->tex_w, gl->tex_h); break; } #endif }
static void gl_free(void *data) { gl_t *gl = (gl_t*)data; gl_deinit_font(gl); gl_shader_deinit(); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_COLOR_ARRAY); glDeleteTextures(TEXTURES, gl->texture); #ifdef HAVE_FBO gl_deinit_fbo(gl); #endif sdlwrap_destroy(); if (gl->empty_buf) free(gl->empty_buf); free(gl); }
void gl_renderchain_free(gl_t *gl) { gl_deinit_fbo(gl); gl_deinit_hw_render(gl); }