filter-shadow-sdf: Remove shadow_sdf namespace, rename shadow_sdf_instance to shadow_sdf

This commit is contained in:
Michael Fabian 'Xaymar' Dirks 2019-01-25 00:55:40 +01:00
parent 7708dd0792
commit 3ac7e46628
2 changed files with 116 additions and 120 deletions

View File

@ -41,11 +41,11 @@
// Initializer & Finalizer // Initializer & Finalizer
INITIALIZER(filterShadowFactoryInitializer) INITIALIZER(filterShadowFactoryInitializer)
{ {
initializerFunctions.push_back([] { filter::shadow_sdf::shadow_sdf_factory::initialize(); }); initializerFunctions.push_back([] { filter::shadow_sdf_factory::initialize(); });
finalizerFunctions.push_back([] { filter::shadow_sdf::shadow_sdf_factory::finalize(); }); finalizerFunctions.push_back([] { filter::shadow_sdf_factory::finalize(); });
} }
bool filter::shadow_sdf::shadow_sdf_instance::cb_modified_inside(void*, obs_properties_t* props, obs_property*, bool filter::shadow_sdf::cb_modified_inside(void*, obs_properties_t* props, obs_property*,
obs_data_t* settings) obs_data_t* settings)
{ {
bool v = obs_data_get_bool(settings, P_INNER); bool v = obs_data_get_bool(settings, P_INNER);
@ -58,7 +58,7 @@ bool filter::shadow_sdf::shadow_sdf_instance::cb_modified_inside(void*, obs_prop
return true; return true;
} }
bool filter::shadow_sdf::shadow_sdf_instance::cb_modified_outside(void*, obs_properties_t* props, obs_property*, bool filter::shadow_sdf::cb_modified_outside(void*, obs_properties_t* props, obs_property*,
obs_data_t* settings) obs_data_t* settings)
{ {
bool v = obs_data_get_bool(settings, P_OUTER); bool v = obs_data_get_bool(settings, P_OUTER);
@ -71,7 +71,7 @@ bool filter::shadow_sdf::shadow_sdf_instance::cb_modified_outside(void*, obs_pro
return true; return true;
} }
filter::shadow_sdf::shadow_sdf_instance::shadow_sdf_instance(obs_data_t* settings, obs_source_t* self) filter::shadow_sdf::shadow_sdf(obs_data_t* settings, obs_source_t* self)
: m_self(self), m_source_rendered(false) : m_self(self), m_source_rendered(false)
{ {
this->m_source_rt = std::make_shared<gs::rendertarget>(GS_RGBA, GS_ZS_NONE); this->m_source_rt = std::make_shared<gs::rendertarget>(GS_RGBA, GS_ZS_NONE);
@ -86,9 +86,9 @@ filter::shadow_sdf::shadow_sdf_instance::shadow_sdf_instance(obs_data_t* setting
this->update(settings); this->update(settings);
} }
filter::shadow_sdf::shadow_sdf_instance::~shadow_sdf_instance() {} filter::shadow_sdf::~shadow_sdf() {}
obs_properties_t* filter::shadow_sdf::shadow_sdf_instance::get_properties() obs_properties_t* filter::shadow_sdf::get_properties()
{ {
obs_properties_t* props = obs_properties_create(); obs_properties_t* props = obs_properties_create();
obs_property_t* p = nullptr; obs_property_t* p = nullptr;
@ -144,7 +144,7 @@ obs_properties_t* filter::shadow_sdf::shadow_sdf_instance::get_properties()
return props; return props;
} }
void filter::shadow_sdf::shadow_sdf_instance::update(obs_data_t* data) void filter::shadow_sdf::update(obs_data_t* data)
{ {
this->m_inner_shadow = obs_data_get_bool(data, P_INNER); this->m_inner_shadow = obs_data_get_bool(data, P_INNER);
this->m_inner_range_min = float_t(obs_data_get_double(data, P_INNER_RANGE_MINIMUM)); this->m_inner_range_min = float_t(obs_data_get_double(data, P_INNER_RANGE_MINIMUM));
@ -169,27 +169,27 @@ void filter::shadow_sdf::shadow_sdf_instance::update(obs_data_t* data)
| (int32_t(obs_data_get_double(data, P_OUTER_ALPHA) * 2.55) << 24); | (int32_t(obs_data_get_double(data, P_OUTER_ALPHA) * 2.55) << 24);
} }
uint32_t filter::shadow_sdf::shadow_sdf_instance::get_width() uint32_t filter::shadow_sdf::get_width()
{ {
return uint32_t(0); return uint32_t(0);
} }
uint32_t filter::shadow_sdf::shadow_sdf_instance::get_height() uint32_t filter::shadow_sdf::get_height()
{ {
return uint32_t(0); return uint32_t(0);
} }
void filter::shadow_sdf::shadow_sdf_instance::activate() {} void filter::shadow_sdf::activate() {}
void filter::shadow_sdf::shadow_sdf_instance::deactivate() {} void filter::shadow_sdf::deactivate() {}
void filter::shadow_sdf::shadow_sdf_instance::video_tick(float time) void filter::shadow_sdf::video_tick(float time)
{ {
this->m_tick += time; this->m_tick += time;
m_source_rendered = false; m_source_rendered = false;
} }
void filter::shadow_sdf::shadow_sdf_instance::video_render(gs_effect_t*) void filter::shadow_sdf::video_render(gs_effect_t*)
{ {
obs_source_t* parent = obs_filter_get_parent(this->m_self); obs_source_t* parent = obs_filter_get_parent(this->m_self);
obs_source_t* target = obs_filter_get_target(this->m_self); obs_source_t* target = obs_filter_get_target(this->m_self);
@ -239,7 +239,7 @@ void filter::shadow_sdf::shadow_sdf_instance::video_render(gs_effect_t*)
} }
std::shared_ptr<gs::effect> sdf_effect = std::shared_ptr<gs::effect> sdf_effect =
filter::shadow_sdf::shadow_sdf_factory::get()->get_sdf_generator_effect(); filter::shadow_sdf_factory::get()->get_sdf_generator_effect();
if (!sdf_effect) { if (!sdf_effect) {
throw std::runtime_error("SDF Effect no loaded"); throw std::runtime_error("SDF Effect no loaded");
} }
@ -275,7 +275,7 @@ void filter::shadow_sdf::shadow_sdf_instance::video_render(gs_effect_t*)
{ {
std::shared_ptr<gs::effect> shadow_effect = std::shared_ptr<gs::effect> shadow_effect =
filter::shadow_sdf::shadow_sdf_factory::get()->get_sdf_shadow_effect(); filter::shadow_sdf_factory::get()->get_sdf_shadow_effect();
if (!shadow_effect) { if (!shadow_effect) {
throw std::runtime_error("Shadow Effect no loaded"); throw std::runtime_error("Shadow Effect no loaded");
} }
@ -339,7 +339,7 @@ void filter::shadow_sdf::shadow_sdf_instance::video_render(gs_effect_t*)
gs_enable_depth_test(false); gs_enable_depth_test(false);
} }
filter::shadow_sdf::shadow_sdf_factory::shadow_sdf_factory() filter::shadow_sdf_factory::shadow_sdf_factory()
{ {
memset(&source_info, 0, sizeof(obs_source_info)); memset(&source_info, 0, sizeof(obs_source_info));
source_info.id = "obs-stream-effects-filter-shadow-sdf"; source_info.id = "obs-stream-effects-filter-shadow-sdf";
@ -360,9 +360,9 @@ filter::shadow_sdf::shadow_sdf_factory::shadow_sdf_factory()
obs_register_source(&source_info); obs_register_source(&source_info);
} }
filter::shadow_sdf::shadow_sdf_factory::~shadow_sdf_factory() {} filter::shadow_sdf_factory::~shadow_sdf_factory() {}
void filter::shadow_sdf::shadow_sdf_factory::on_list_fill() void filter::shadow_sdf_factory::on_list_fill()
{ {
{ {
char* file = obs_module_file("effects/sdf-generator.effect"); char* file = obs_module_file("effects/sdf-generator.effect");
@ -384,25 +384,25 @@ void filter::shadow_sdf::shadow_sdf_factory::on_list_fill()
} }
} }
void filter::shadow_sdf::shadow_sdf_factory::on_list_empty() void filter::shadow_sdf_factory::on_list_empty()
{ {
sdf_generator_effect.reset(); sdf_generator_effect.reset();
sdf_shadow_effect.reset(); sdf_shadow_effect.reset();
} }
void* filter::shadow_sdf::shadow_sdf_factory::create(obs_data_t* data, obs_source_t* parent) void* filter::shadow_sdf_factory::create(obs_data_t* data, obs_source_t* parent)
{ {
if (get()->sources.empty()) { if (get()->sources.empty()) {
get()->on_list_fill(); get()->on_list_fill();
} }
filter::shadow_sdf::shadow_sdf_instance* ptr = new filter::shadow_sdf::shadow_sdf_instance(data, parent); filter::shadow_sdf* ptr = new filter::shadow_sdf(data, parent);
get()->sources.push_back(ptr); get()->sources.push_back(ptr);
return ptr; return ptr;
} }
void filter::shadow_sdf::shadow_sdf_factory::destroy(void* inptr) void filter::shadow_sdf_factory::destroy(void* inptr)
{ {
filter::shadow_sdf::shadow_sdf_instance* ptr = reinterpret_cast<filter::shadow_sdf::shadow_sdf_instance*>(inptr); filter::shadow_sdf* ptr = reinterpret_cast<filter::shadow_sdf*>(inptr);
get()->sources.remove(ptr); get()->sources.remove(ptr);
if (get()->sources.empty()) { if (get()->sources.empty()) {
get()->on_list_empty(); get()->on_list_empty();
@ -410,7 +410,7 @@ void filter::shadow_sdf::shadow_sdf_factory::destroy(void* inptr)
delete ptr; delete ptr;
} }
void filter::shadow_sdf::shadow_sdf_factory::get_defaults(obs_data_t* data) void filter::shadow_sdf_factory::get_defaults(obs_data_t* data)
{ {
obs_data_set_bool(data, P_INNER, false); obs_data_set_bool(data, P_INNER, false);
obs_data_set_double(data, P_INNER_RANGE_MINIMUM, 0.0); obs_data_set_double(data, P_INNER_RANGE_MINIMUM, 0.0);
@ -429,74 +429,74 @@ void filter::shadow_sdf::shadow_sdf_factory::get_defaults(obs_data_t* data)
obs_data_set_double(data, P_OUTER_ALPHA, 100.0); obs_data_set_double(data, P_OUTER_ALPHA, 100.0);
} }
obs_properties_t* filter::shadow_sdf::shadow_sdf_factory::get_properties(void* inptr) obs_properties_t* filter::shadow_sdf_factory::get_properties(void* inptr)
{ {
return reinterpret_cast<filter::shadow_sdf::shadow_sdf_instance*>(inptr)->get_properties(); return reinterpret_cast<filter::shadow_sdf*>(inptr)->get_properties();
} }
void filter::shadow_sdf::shadow_sdf_factory::update(void* inptr, obs_data_t* settings) void filter::shadow_sdf_factory::update(void* inptr, obs_data_t* settings)
{ {
reinterpret_cast<filter::shadow_sdf::shadow_sdf_instance*>(inptr)->update(settings); reinterpret_cast<filter::shadow_sdf*>(inptr)->update(settings);
} }
const char* filter::shadow_sdf::shadow_sdf_factory::get_name(void*) const char* filter::shadow_sdf_factory::get_name(void*)
{ {
return P_TRANSLATE(SOURCE_NAME); return P_TRANSLATE(SOURCE_NAME);
} }
uint32_t filter::shadow_sdf::shadow_sdf_factory::get_width(void* inptr) uint32_t filter::shadow_sdf_factory::get_width(void* inptr)
{ {
return reinterpret_cast<filter::shadow_sdf::shadow_sdf_instance*>(inptr)->get_width(); return reinterpret_cast<filter::shadow_sdf*>(inptr)->get_width();
} }
uint32_t filter::shadow_sdf::shadow_sdf_factory::get_height(void* inptr) uint32_t filter::shadow_sdf_factory::get_height(void* inptr)
{ {
return reinterpret_cast<filter::shadow_sdf::shadow_sdf_instance*>(inptr)->get_height(); return reinterpret_cast<filter::shadow_sdf*>(inptr)->get_height();
} }
void filter::shadow_sdf::shadow_sdf_factory::activate(void* inptr) void filter::shadow_sdf_factory::activate(void* inptr)
{ {
reinterpret_cast<filter::shadow_sdf::shadow_sdf_instance*>(inptr)->activate(); reinterpret_cast<filter::shadow_sdf*>(inptr)->activate();
} }
void filter::shadow_sdf::shadow_sdf_factory::deactivate(void* inptr) void filter::shadow_sdf_factory::deactivate(void* inptr)
{ {
reinterpret_cast<filter::shadow_sdf::shadow_sdf_instance*>(inptr)->deactivate(); reinterpret_cast<filter::shadow_sdf*>(inptr)->deactivate();
} }
void filter::shadow_sdf::shadow_sdf_factory::video_tick(void* inptr, float delta) void filter::shadow_sdf_factory::video_tick(void* inptr, float delta)
{ {
reinterpret_cast<filter::shadow_sdf::shadow_sdf_instance*>(inptr)->video_tick(delta); reinterpret_cast<filter::shadow_sdf*>(inptr)->video_tick(delta);
} }
void filter::shadow_sdf::shadow_sdf_factory::video_render(void* inptr, gs_effect_t* effect) void filter::shadow_sdf_factory::video_render(void* inptr, gs_effect_t* effect)
{ {
reinterpret_cast<filter::shadow_sdf::shadow_sdf_instance*>(inptr)->video_render(effect); reinterpret_cast<filter::shadow_sdf*>(inptr)->video_render(effect);
} }
std::shared_ptr<gs::effect> filter::shadow_sdf::shadow_sdf_factory::get_sdf_generator_effect() std::shared_ptr<gs::effect> filter::shadow_sdf_factory::get_sdf_generator_effect()
{ {
return sdf_generator_effect; return sdf_generator_effect;
} }
std::shared_ptr<gs::effect> filter::shadow_sdf::shadow_sdf_factory::get_sdf_shadow_effect() std::shared_ptr<gs::effect> filter::shadow_sdf_factory::get_sdf_shadow_effect()
{ {
return sdf_shadow_effect; return sdf_shadow_effect;
} }
static filter::shadow_sdf::shadow_sdf_factory* factory_instance = nullptr; static filter::shadow_sdf_factory* factory_instance = nullptr;
void filter::shadow_sdf::shadow_sdf_factory::initialize() void filter::shadow_sdf_factory::initialize()
{ {
factory_instance = new filter::shadow_sdf::shadow_sdf_factory(); factory_instance = new filter::shadow_sdf_factory();
} }
void filter::shadow_sdf::shadow_sdf_factory::finalize() void filter::shadow_sdf_factory::finalize()
{ {
delete factory_instance; delete factory_instance;
} }
filter::shadow_sdf::shadow_sdf_factory* filter::shadow_sdf::shadow_sdf_factory::get() filter::shadow_sdf_factory* filter::shadow_sdf_factory::get()
{ {
return factory_instance; return factory_instance;
} }

View File

@ -40,99 +40,95 @@
#endif #endif
namespace filter { namespace filter {
namespace shadow_sdf { class shadow_sdf {
class shadow_sdf_instance { obs_source_t* m_self;
obs_source_t* m_self;
// Input // Input
std::shared_ptr<gs::rendertarget> m_source_rt; std::shared_ptr<gs::rendertarget> m_source_rt;
std::shared_ptr<gs::texture> m_source_texture; std::shared_ptr<gs::texture> m_source_texture;
bool m_source_rendered; bool m_source_rendered;
// Distance Field // Distance Field
std::shared_ptr<gs::rendertarget> m_sdf_write, m_sdf_read; std::shared_ptr<gs::rendertarget> m_sdf_write, m_sdf_read;
std::shared_ptr<gs::texture> m_sdf_texture; std::shared_ptr<gs::texture> m_sdf_texture;
float_t m_tick = 0.; float_t m_tick = 0.;
bool m_inner_shadow; bool m_inner_shadow;
float_t m_inner_range_min; float_t m_inner_range_min;
float_t m_inner_range_max; float_t m_inner_range_max;
float_t m_inner_offset_x; float_t m_inner_offset_x;
float_t m_inner_offset_y; float_t m_inner_offset_y;
uint32_t m_inner_color; uint32_t m_inner_color;
bool m_outer_shadow; bool m_outer_shadow;
float_t m_outer_range_min; float_t m_outer_range_min;
float_t m_outer_range_max; float_t m_outer_range_max;
float_t m_outer_offset_x; float_t m_outer_offset_x;
float_t m_outer_offset_y; float_t m_outer_offset_y;
uint32_t m_outer_color; uint32_t m_outer_color;
static bool cb_modified_inside(void* ptr, obs_properties_t* props, obs_property* prop, static bool cb_modified_inside(void* ptr, obs_properties_t* props, obs_property* prop, obs_data_t* settings);
obs_data_t* settings);
static bool cb_modified_outside(void* ptr, obs_properties_t* props, obs_property* prop, static bool cb_modified_outside(void* ptr, obs_properties_t* props, obs_property* prop, obs_data_t* settings);
obs_data_t* settings);
public: public:
shadow_sdf_instance(obs_data_t* settings, obs_source_t* self); shadow_sdf(obs_data_t* settings, obs_source_t* self);
~shadow_sdf_instance(); ~shadow_sdf();
obs_properties_t* get_properties(); obs_properties_t* get_properties();
void update(obs_data_t*); void update(obs_data_t*);
uint32_t get_width(); uint32_t get_width();
uint32_t get_height(); uint32_t get_height();
void activate(); void activate();
void deactivate(); void deactivate();
void video_tick(float); void video_tick(float);
void video_render(gs_effect_t*); void video_render(gs_effect_t*);
}; };
class shadow_sdf_factory { class shadow_sdf_factory {
obs_source_info source_info; obs_source_info source_info;
std::list<shadow_sdf_instance*> sources; std::list<shadow_sdf*> sources;
std::shared_ptr<gs::effect> sdf_generator_effect; std::shared_ptr<gs::effect> sdf_generator_effect;
std::shared_ptr<gs::effect> sdf_shadow_effect; std::shared_ptr<gs::effect> sdf_shadow_effect;
private: private:
shadow_sdf_factory(); shadow_sdf_factory();
~shadow_sdf_factory(); ~shadow_sdf_factory();
void on_list_fill(); void on_list_fill();
void on_list_empty(); void on_list_empty();
protected: protected:
static void* create(obs_data_t* settings, obs_source_t* self); static void* create(obs_data_t* settings, obs_source_t* self);
static void destroy(void* source); static void destroy(void* source);
static void get_defaults(obs_data_t* settings); static void get_defaults(obs_data_t* settings);
static obs_properties_t* get_properties(void* source); static obs_properties_t* get_properties(void* source);
static void update(void* source, obs_data_t* settings); static void update(void* source, obs_data_t* settings);
static const char* get_name(void* source); static const char* get_name(void* source);
static uint32_t get_width(void* source); static uint32_t get_width(void* source);
static uint32_t get_height(void* source); static uint32_t get_height(void* source);
static void activate(void* source); static void activate(void* source);
static void deactivate(void* source); static void deactivate(void* source);
static void video_tick(void* source, float delta); static void video_tick(void* source, float delta);
static void video_render(void* source, gs_effect_t* effect); static void video_render(void* source, gs_effect_t* effect);
public: public:
std::shared_ptr<gs::effect> get_sdf_generator_effect(); std::shared_ptr<gs::effect> get_sdf_generator_effect();
std::shared_ptr<gs::effect> get_sdf_shadow_effect(); std::shared_ptr<gs::effect> get_sdf_shadow_effect();
public: // Singleton public: // Singleton
static void initialize(); static void initialize();
static void finalize(); static void finalize();
static shadow_sdf_factory* get(); static shadow_sdf_factory* get();
}; };
} // namespace shadow_sdf
} // namespace filter } // namespace filter
#endif #endif