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; }
////////////////// Shaders static bool gl_shader_init(void) { switch (g_settings.video.shader_type) { case RARCH_SHADER_AUTO: { if (*g_settings.video.cg_shader_path && *g_settings.video.bsnes_shader_path) RARCH_WARN("Both Cg and bSNES XML shader are defined in config file. Cg shader will be selected by default.\n"); #ifdef HAVE_CG if (*g_settings.video.cg_shader_path) return gl_cg_init(g_settings.video.cg_shader_path); #endif #ifdef HAVE_XML if (*g_settings.video.bsnes_shader_path) return gl_glsl_init(g_settings.video.bsnes_shader_path); #endif break; } #ifdef HAVE_CG case RARCH_SHADER_CG: { return gl_cg_init(g_settings.video.cg_shader_path); break; } #endif #ifdef HAVE_XML case RARCH_SHADER_BSNES: { return gl_glsl_init(g_settings.video.bsnes_shader_path); break; } #endif default: break; } return true; }