1 /* RetroArch - A frontend for libretro. 2 * Copyright (C) 2010-2014 - Hans-Kristian Arntzen 3 * Copyright (C) 2011-2017 - Daniel De Matteis 4 * 5 * RetroArch is free software: you can redistribute it and/or modify it under the terms 6 * of the GNU General Public License as published by the Free Software Found- 7 * ation, either version 3 of the License, or (at your option) any later version. 8 * 9 * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 10 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 11 * PURPOSE. See the GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License along with RetroArch. 14 * If not, see <http://www.gnu.org/licenses/>. 15 */ 16 17 #ifndef _MENU_SHADER_MANAGER_H 18 #define _MENU_SHADER_MANAGER_H 19 20 #include <retro_common_api.h> 21 22 #include "../gfx/video_shader_parse.h" 23 24 RETRO_BEGIN_DECLS 25 26 enum auto_shader_type 27 { 28 SHADER_PRESET_GLOBAL, 29 SHADER_PRESET_CORE, 30 SHADER_PRESET_PARENT, 31 SHADER_PRESET_GAME 32 }; 33 34 struct video_shader *menu_shader_get(void); 35 36 void menu_shader_manager_free(void *data); 37 38 /** 39 * menu_shader_manager_init: 40 * 41 * Initializes shader manager. 42 **/ 43 bool menu_shader_manager_init(void); 44 45 /** 46 * menu_shader_manager_set_preset: 47 * @shader : Shader handle. 48 * @type : Type of shader. 49 * @preset_path : Preset path to load from. 50 * @apply : Whether to apply the shader or just update shader information 51 * 52 * Sets shader preset. 53 **/ 54 bool menu_shader_manager_set_preset( 55 struct video_shader *shader, 56 enum rarch_shader_type type, const char *preset_path, bool apply); 57 58 /** 59 * menu_shader_manager_save_auto_preset: 60 * @shader : shader to save 61 * @type : type of shader preset which determines save path 62 * @apply : immediately set preset after saving 63 * 64 * Save a shader as an auto-shader to it's appropriate path: 65 * SHADER_PRESET_GLOBAL: <shader dir>/presets/global 66 * SHADER_PRESET_CORE: <shader dir>/presets/<core name>/<core name> 67 * SHADER_PRESET_PARENT: <shader dir>/presets/<core name>/<parent> 68 * SHADER_PRESET_GAME: <shader dir>/presets/<core name>/<game name> 69 * Needs to be consistent with retroarch_load_shader_preset() 70 * Auto-shaders will be saved as a reference if possible 71 **/ 72 bool menu_shader_manager_save_auto_preset( 73 const struct video_shader *shader, 74 enum auto_shader_type type, 75 const char *dir_video_shader, 76 const char *dir_menu_config, 77 bool apply); 78 79 /** 80 * menu_shader_manager_save_preset: 81 * @shader : shader to save 82 * @basename : basename of preset 83 * @apply : immediately set preset after saving 84 * 85 * Save a shader preset to disk. 86 **/ 87 bool menu_shader_manager_save_preset(const struct video_shader *shader, 88 const char *basename, 89 const char *dir_video_shader, 90 const char *dir_menu_config, 91 bool apply); 92 93 /** 94 * menu_shader_manager_get_type: 95 * @shader : shader handle 96 * 97 * Gets type of shader. 98 * 99 * Returns: type of shader. 100 **/ 101 enum rarch_shader_type menu_shader_manager_get_type( 102 const struct video_shader *shader); 103 104 /** 105 * menu_shader_manager_apply_changes: 106 * 107 * Apply shader state changes. 108 **/ 109 void menu_shader_manager_apply_changes( 110 struct video_shader *shader, 111 const char *dir_video_shader, 112 const char *dir_menu_config); 113 114 int menu_shader_manager_clear_num_passes(struct video_shader *shader); 115 116 int menu_shader_manager_clear_parameter(struct video_shader *shader, 117 unsigned i); 118 119 int menu_shader_manager_clear_pass_filter(struct video_shader *shader, 120 unsigned i); 121 122 void menu_shader_manager_clear_pass_scale(struct video_shader *shader, 123 unsigned i); 124 125 void menu_shader_manager_clear_pass_path(struct video_shader *shader, 126 unsigned i); 127 128 /** 129 * menu_shader_manager_remove_auto_preset: 130 * @type : type of shader preset to delete 131 * 132 * Deletes an auto-shader. 133 **/ 134 bool menu_shader_manager_remove_auto_preset( 135 enum auto_shader_type type, 136 const char *dir_video_shader, 137 const char *dir_menu_config); 138 139 bool menu_shader_manager_auto_preset_exists( 140 enum auto_shader_type type, 141 const char *dir_video_shader, 142 const char *dir_menu_config); 143 144 RETRO_END_DECLS 145 146 #endif 147