gfx-effect-source: Allow overriding value and visibility of parameters

This commit is contained in:
Michael Fabian 'Xaymar' Dirks 2019-08-07 17:37:34 +02:00
parent ff4a556f3f
commit 335847945d
2 changed files with 26 additions and 1 deletions

View file

@ -726,9 +726,12 @@ void gfx::effect_source::effect_source::load_file(std::string file)
break; break;
} }
} }
if (_cb_valid)
skip = skip || _cb_valid(prm);
if (skip) if (skip)
continue; continue;
_params.emplace(identity, parameter::create(_effect, prm)); _params.emplace(identity, parameter::create(_effect, prm));
} }
} }
@ -861,6 +864,10 @@ void gfx::effect_source::effect_source::render()
} }
} }
if (_cb_override) {
_cb_override(_effect);
}
gs_blend_state_push(); gs_blend_state_push();
gs_matrix_push(); gs_matrix_push();
@ -881,3 +888,11 @@ void gfx::effect_source::effect_source::render()
gs_matrix_pop(); gs_matrix_pop();
gs_blend_state_pop(); gs_blend_state_pop();
} }
void gfx::effect_source::effect_source::set_valid_property_cb(valid_property_cb_t cb) {
_cb_valid = cb;
}
void gfx::effect_source::effect_source::set_override_cb(param_override_cb_t cb) {
_cb_override = cb;
}

View file

@ -227,6 +227,8 @@ namespace gfx {
}; };
typedef std::pair<gs::effect_parameter::type, std::string> param_ident_t; typedef std::pair<gs::effect_parameter::type, std::string> param_ident_t;
typedef std::function<bool(std::shared_ptr<gs::effect_parameter> param)> valid_property_cb_t;
typedef std::function<void(std::shared_ptr<gs::effect> effect)> param_override_cb_t;
class effect_source { class effect_source {
std::string _file; std::string _file;
@ -248,6 +250,9 @@ namespace gfx {
std::uniform_real_distribution<float_t> _random_dist{0.f, 1.f}; std::uniform_real_distribution<float_t> _random_dist{0.f, 1.f};
std::default_random_engine _random_generator; std::default_random_engine _random_generator;
valid_property_cb_t _cb_valid;
param_override_cb_t _cb_override;
bool modified2(obs_properties_t* props, obs_property_t* property, obs_data_t* settings); bool modified2(obs_properties_t* props, obs_property_t* property, obs_data_t* settings);
void load_file(std::string file); void load_file(std::string file);
@ -263,6 +268,11 @@ namespace gfx {
void tick(float_t time); void tick(float_t time);
void render(); void render();
public:
void set_valid_property_cb(valid_property_cb_t cb);
void set_override_cb(param_override_cb_t cb);
}; };
} // namespace effect_source } // namespace effect_source
} // namespace gfx } // namespace gfx