From 335847945d452d1a527b16f3d09bbbd3b209e727 Mon Sep 17 00:00:00 2001 From: Michael Fabian 'Xaymar' Dirks Date: Wed, 7 Aug 2019 17:37:34 +0200 Subject: [PATCH] gfx-effect-source: Allow overriding value and visibility of parameters --- source/gfx/gfx-effect-source.cpp | 15 +++++++++++++++ source/gfx/gfx-effect-source.hpp | 12 +++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/source/gfx/gfx-effect-source.cpp b/source/gfx/gfx-effect-source.cpp index f7d4584..a215b0f 100644 --- a/source/gfx/gfx-effect-source.cpp +++ b/source/gfx/gfx-effect-source.cpp @@ -726,9 +726,12 @@ void gfx::effect_source::effect_source::load_file(std::string file) break; } } + if (_cb_valid) + skip = skip || _cb_valid(prm); if (skip) continue; + _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_matrix_push(); @@ -881,3 +888,11 @@ void gfx::effect_source::effect_source::render() gs_matrix_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; +} diff --git a/source/gfx/gfx-effect-source.hpp b/source/gfx/gfx-effect-source.hpp index ccfd5c4..1be6c52 100644 --- a/source/gfx/gfx-effect-source.hpp +++ b/source/gfx/gfx-effect-source.hpp @@ -226,7 +226,9 @@ namespace gfx { virtual void assign() override; }; - typedef std::pair param_ident_t; + typedef std::pair param_ident_t; + typedef std::function param)> valid_property_cb_t; + typedef std::function effect)> param_override_cb_t; class effect_source { std::string _file; @@ -248,6 +250,9 @@ namespace gfx { std::uniform_real_distribution _random_dist{0.f, 1.f}; 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); void load_file(std::string file); @@ -263,6 +268,11 @@ namespace gfx { void tick(float_t time); 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 gfx