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