Shader_Preset_Remove_parameters_line

This commit is contained in:
HyperspaceMadness 2020-11-14 21:23:18 -05:00
parent 4d961b0970
commit deb8e2b88c
1 changed files with 51 additions and 130 deletions

View File

@ -416,46 +416,40 @@ static struct video_shader_parameter *video_shader_parse_find_parameter(
* @conf : Preset file to read from. * @conf : Preset file to read from.
* @shader : Shader passes handle. * @shader : Shader passes handle.
* *
* Reads the current value for all parameters from config file. * For each parameter in the shader, if a value is set in the config file
* Checks for parameters in the parameter list which don't have a value set * load this value to the parameter's current value.
* *
* Returns: true (1) if successful, otherwise false (0). * Returns: true (1) if successful, otherwise false (0).
**/ **/
bool video_shader_resolve_current_parameters(config_file_t *conf, bool video_shader_resolve_current_parameters(config_file_t *conf,
struct video_shader *shader) struct video_shader *shader)
{ {
char parameters[4096]; unsigned i;
const char *id = NULL; const struct config_entry_list *entry = NULL;
char *save = NULL;
if (!conf) if (!conf)
return false; return false;
parameters[0] = '\0'; /* For all parameters in the shader see if there is any config value set */
for (i = 0; i < shader->num_parameters; i++)
/* Read in parameters which override the defaults. */ {
if (!config_get_array(conf, "parameters", entry = config_get_entry(conf, shader->parameters[i].id);
parameters, sizeof(parameters)))
return true; /* Only try to load the parameter value if an entry exists in the config */
if (entry)
for ( id = strtok_r(parameters, ";", &save); id;
id = strtok_r(NULL, ";", &save))
{ {
/* Get the parameter in the shader matching this name */
struct video_shader_parameter *parameter = struct video_shader_parameter *parameter =
(struct video_shader_parameter*) (struct video_shader_parameter*)
video_shader_parse_find_parameter( video_shader_parse_find_parameter(
shader->parameters, shader->num_parameters, id); shader->parameters, shader->num_parameters, shader->parameters[i].id);
if (!parameter) if (config_get_float(conf, shader->parameters[i].id, &parameter->current))
{ RARCH_LOG("[Shaders-Load]: Preset Parameter Loaded: %s = %f.\n",
RARCH_WARN("[CGP/GLSLP]: Parameter %s is set in the preset," shader->parameters[i].id, parameter->current);
" but no shader uses this parameter, ignoring.\n", id); else
continue; RARCH_WARN("[Shaders-Load]: Preset Parameter Name %s is set in preset "
"but couldn't load its value.\n", shader->parameters[i].id);
} }
if (!config_get_float(conf, id, &parameter->current))
RARCH_WARN("[CGP/GLSLP]: Parameter %s is not set in preset.\n", id);
} }
return true; return true;
@ -468,7 +462,8 @@ bool video_shader_resolve_current_parameters(config_file_t *conf,
* *
* Resolves all shader parameters belonging to shaders. * Resolves all shader parameters belonging to shaders.
* Fills the parameter definition list of the shader * Fills the parameter definition list of the shader
* Does not read any of the config parameter values * then calls video_shader_resolve_current_parameters to
* read in the config parameter values
* *
* Returns: true (1) if successful, otherwise false (0). * Returns: true (1) if successful, otherwise false (0).
**/ **/
@ -814,18 +809,10 @@ bool video_shader_write_referenced_preset(const char *path,
/* If the shader has parameters */ /* If the shader has parameters */
if (shader->num_parameters) if (shader->num_parameters)
{
size_t param_size = 4096 * sizeof(char);
char *override_parameters = (char*)malloc(param_size);
float parameter_value_reference;
param_size = 4096 * sizeof(char);
override_parameters[0] = '\0';
parameter_value_reference = 0.0f;
if (override_parameters)
{ {
unsigned i; unsigned i;
float parameter_value_reference = 0.0f;
for (i = 0; i < shader->num_parameters; i++) for (i = 0; i < shader->num_parameters; i++)
{ {
@ -846,22 +833,12 @@ bool video_shader_write_referenced_preset(const char *path,
else if (shader->parameters[i].current != shader->parameters[i].initial) else if (shader->parameters[i].current != shader->parameters[i].initial)
add_param_to_override = true; add_param_to_override = true;
/* Add the parameter name to the parameters list */ /* Add the parameter value to the config */
if (add_param_to_override) if (add_param_to_override)
{
config_set_float(conf, shader->parameters[i].id, shader->parameters[i].current); config_set_float(conf, shader->parameters[i].id, shader->parameters[i].current);
strlcat(override_parameters, ";", param_size);
strlcat(override_parameters, shader->parameters[i].id, param_size);
} }
} }
/* Write the list of override parameter names if there are any*/
if (!string_is_empty(override_parameters))
config_set_string(conf, "parameters", override_parameters);
}
free(override_parameters);
}
/* If the shader has textures */ /* If the shader has textures */
if (shader->luts) if (shader->luts)
{ {
@ -1019,9 +996,7 @@ bool override_config_values(config_file_t *conf, config_file_t *override_conf)
char *tmp_rel = tmp + tmp_size; char *tmp_rel = tmp + tmp_size;
char *tmp_base = tmp + 2*tmp_size; char *tmp_base = tmp + 2*tmp_size;
struct config_entry_list *override_entry = NULL; struct config_entry_list *override_entry = NULL;
char *override_parameters = (char*)malloc(param_size);
override_parameters[0] = '\0';
textures_in_conf[0] = '\0'; textures_in_conf[0] = '\0';
strlcpy(tmp_base, conf->path, tmp_size); strlcpy(tmp_base, conf->path, tmp_size);
@ -1062,62 +1037,23 @@ bool override_config_values(config_file_t *conf, config_file_t *override_conf)
} }
} }
/* ---------------------------------------------------------------------------------
* -------------Update Parameter List to include Override Parameters----------------
* --------------------------------------------------------------------------------- */
/* If there is a 'parameters' entry in the override config we want to add these parameters
* to the referenced config if they are not already there */
if (config_get_array(override_conf, "parameters", override_parameters, param_size))
{
/* Get the string for the parameters from the root config */
char *parameters = NULL;
parameters = (char*)malloc(param_size);
parameters[0] = '\0';
/* If there are is no parameters entry in the root config, add one */
if (!config_get_array(conf, "parameters", parameters, param_size))
{
config_set_string(conf, "parameters", "");
config_get_array(conf, "parameters", parameters, param_size);
}
/* Step through each parameter in override config */
for ( id = strtok_r(override_parameters, ";", &save);
id;
id = strtok_r(NULL, ";", &save))
{
/* Add the parameter to the parameter list */
strlcat(parameters, ";", param_size);
strlcat(parameters, id, param_size);
return_val = 1;
}
config_set_string(conf, "parameters", parameters);
free(parameters);
}
/* --------------------------------------------------------------------------------- /* ---------------------------------------------------------------------------------
* ------------- Update entries to match the override entries ---------------------- * ------------- Update entries to match the override entries ----------------------
* --------------------------------------------------------------------------------- */ * --------------------------------------------------------------------------------- */
for (override_entry = override_conf->entries; override_entry; override_entry = override_entry->next) for (override_entry = override_conf->entries; override_entry; override_entry = override_entry->next)
/* Only override an entry if the its key is not "textures" */
if (!string_is_empty(override_entry->key) && !string_is_equal(override_entry->key, "textures"))
{ {
/* Only override an entry if the it's key is not "parameters", and not in list of textures */ RARCH_LOG("[Shaders-Load Simple Preset]: Parameter/Entry overridden %s = %s.\n",
if (!string_is_empty(override_entry->key) && !string_is_equal(override_entry->key, "parameters") && !string_is_equal(override_entry->key, "textures"))
{
RARCH_LOG("[Shaders-Load Reference]: Entry overridden %s = %s.\n",
override_entry->key, override_entry->value); override_entry->key, override_entry->value);
config_set_string(conf, override_entry->key, override_entry->value); config_set_string(conf, override_entry->key, override_entry->value);
return_val = 1; return_val = 1;
} }
}
free(tmp); free(tmp);
free(resolved_path); free(resolved_path);
free(override_texture_path); free(override_texture_path);
free(override_parameters);
free(textures_in_conf); free(textures_in_conf);
return return_val; return return_val;
@ -1426,28 +1362,13 @@ void video_shader_write_conf_preset(config_file_t *conf,
shader_write_fbo(conf, &pass->fbo, i); shader_write_fbo(conf, &pass->fbo, i);
} }
/* Write shader parameters which are different than the default
* shader values */
if (shader->num_parameters) if (shader->num_parameters)
{
char parameters[4096];
parameters[0] = '\0';
strlcpy(parameters, shader->parameters[0].id, sizeof(parameters));
for (i = 1; i < shader->num_parameters; i++)
{
/* O(n^2), but number of parameters is very limited. */
strlcat(parameters, ";", sizeof(parameters));
strlcat(parameters, shader->parameters[i].id, sizeof(parameters));
}
config_set_string(conf, "parameters", parameters);
for (i = 0; i < shader->num_parameters; i++) for (i = 0; i < shader->num_parameters; i++)
if (shader->parameters[i].current != shader->parameters[i].initial)
config_set_float(conf, shader->parameters[i].id, config_set_float(conf, shader->parameters[i].id,
shader->parameters[i].current); shader->parameters[i].current);
}
if (shader->luts) if (shader->luts)
{ {