gs-effect: Add ::create for shared_ptr and remove default constructor

This commit is contained in:
Michael Fabian 'Xaymar' Dirks 2019-08-04 23:18:54 +02:00
parent 9db7cd8da2
commit 71b223dcb5
13 changed files with 38 additions and 27 deletions

View File

@ -158,18 +158,18 @@ void filter::blur::blur_factory::on_list_fill()
auto gctx = gs::context(); auto gctx = gs::context();
{ {
char* file = obs_module_file("effects/color-conversion._effect"); char* file = obs_module_file("effects/color-conversion.effect");
try { try {
_color_converter_effect = std::make_shared<gs::effect>(file); _color_converter_effect = gs::effect::create(file);
} catch (std::runtime_error& ex) { } catch (std::runtime_error& ex) {
P_LOG_ERROR("<filter-blur> Loading _effect '%s' failed with error(s): %s", file, ex.what()); P_LOG_ERROR("<filter-blur> Loading _effect '%s' failed with error(s): %s", file, ex.what());
} }
bfree(file); bfree(file);
} }
{ {
char* file = obs_module_file("effects/mask._effect"); char* file = obs_module_file("effects/mask.effect");
try { try {
_mask_effect = std::make_shared<gs::effect>(file); _mask_effect = gs::effect::create(file);
} catch (std::runtime_error& ex) { } catch (std::runtime_error& ex) {
P_LOG_ERROR("<filter-blur> Loading _effect '%s' failed with error(s): %s", file, ex.what()); P_LOG_ERROR("<filter-blur> Loading _effect '%s' failed with error(s): %s", file, ex.what());
} }

View File

@ -374,9 +374,9 @@ filter::color_grade::color_grade_instance::color_grade_instance(obs_data_t* data
update(data); update(data);
{ {
char* file = obs_module_file("effects/color-grade._effect"); char* file = obs_module_file("effects/color-grade.effect");
try { try {
_effect = std::make_shared<gs::effect>(file); _effect = gs::effect::create(file);
bfree(file); bfree(file);
} catch (std::runtime_error& ex) { } catch (std::runtime_error& ex) {
P_LOG_ERROR("<filter-color-grade> Loading _effect '%s' failed with error(s): %s", file, ex.what()); P_LOG_ERROR("<filter-color-grade> Loading _effect '%s' failed with error(s): %s", file, ex.what());

View File

@ -203,7 +203,7 @@ filter::displacement::displacement_instance::displacement_instance(obs_data_t* d
char* effectFile = obs_module_file("effects/displace.effect"); char* effectFile = obs_module_file("effects/displace.effect");
if (effectFile) { if (effectFile) {
try { try {
_effect = std::make_shared<gs::effect>(effectFile); _effect = gs::effect::create(effectFile);
} catch (...) { } catch (...) {
P_LOG_ERROR("<Displacement Filter:%s> Failed to load displacement effect.", obs_source_get_name(_self)); P_LOG_ERROR("<Displacement Filter:%s> Failed to load displacement effect.", obs_source_get_name(_self));
} }

View File

@ -130,9 +130,9 @@ filter::dynamic_mask::dynamic_mask_instance::dynamic_mask_instance(obs_data_t* d
this->_final_rt = std::make_shared<gs::rendertarget>(GS_RGBA, GS_ZS_NONE); this->_final_rt = std::make_shared<gs::rendertarget>(GS_RGBA, GS_ZS_NONE);
{ {
char* file = obs_module_file("effects/channel-mask._effect"); char* file = obs_module_file("effects/channel-mask.effect");
try { try {
this->_effect = std::make_shared<gs::effect>(file); this->_effect = gs::effect::create(file);
} catch (std::exception& ex) { } catch (std::exception& ex) {
P_LOG_ERROR("Loading channel mask _effect failed with error(s):\n%s", ex.what()); P_LOG_ERROR("Loading channel mask _effect failed with error(s):\n%s", ex.what());
} }

View File

@ -116,8 +116,8 @@ void filter::sdf_effects::sdf_effects_factory::on_list_fill()
auto gctx = gs::context(); auto gctx = gs::context();
std::pair<const char*, std::shared_ptr<gs::effect>&> load_arr[] = { std::pair<const char*, std::shared_ptr<gs::effect>&> load_arr[] = {
{"effects/sdf/sdf-producer._effect", this->_sdf_producer_effect}, {"effects/sdf/sdf-producer.effect", this->_sdf_producer_effect},
{"effects/sdf/sdf-consumer._effect", this->_sdf_consumer_effect}, {"effects/sdf/sdf-consumer.effect", this->_sdf_consumer_effect},
}; };
for (auto& kv : load_arr) { for (auto& kv : load_arr) {
char* path = obs_module_file(kv.first); char* path = obs_module_file(kv.first);
@ -126,7 +126,7 @@ void filter::sdf_effects::sdf_effects_factory::on_list_fill()
continue; continue;
} }
try { try {
kv.second = std::make_shared<gs::effect>(path); kv.second = gs::effect::create(path);
} catch (std::exception& ex) { } catch (std::exception& ex) {
P_LOG_ERROR(LOG_PREFIX "Failed to load _effect '%s' (located at '%s') with error(s): %s", kv.first, path, P_LOG_ERROR(LOG_PREFIX "Failed to load _effect '%s' (located at '%s') with error(s): %s", kv.first, path,
ex.what()); ex.what());

View File

@ -38,7 +38,7 @@ gfx::blur::box_linear_data::box_linear_data()
{ {
auto gctx = gs::context(); auto gctx = gs::context();
try { try {
char* file = obs_module_file("effects/blur/box-linear._effect"); char* file = obs_module_file("effects/blur/box-linear.effect");
_effect = std::make_shared<::gs::effect>(file); _effect = std::make_shared<::gs::effect>(file);
bfree(file); bfree(file);
} catch (...) { } catch (...) {

View File

@ -38,7 +38,7 @@ gfx::blur::box_data::box_data()
{ {
auto gctx = gs::context(); auto gctx = gs::context();
try { try {
char* file = obs_module_file("effects/blur/box._effect"); char* file = obs_module_file("effects/blur/box.effect");
_effect = std::make_shared<::gs::effect>(file); _effect = std::make_shared<::gs::effect>(file);
bfree(file); bfree(file);
} catch (...) { } catch (...) {

View File

@ -54,7 +54,7 @@ gfx::blur::dual_filtering_data::dual_filtering_data()
{ {
auto gctx = gs::context(); auto gctx = gs::context();
try { try {
char* file = obs_module_file("effects/blur/dual-filtering._effect"); char* file = obs_module_file("effects/blur/dual-filtering.effect");
_effect = std::make_shared<::gs::effect>(file); _effect = std::make_shared<::gs::effect>(file);
bfree(file); bfree(file);
} catch (...) { } catch (...) {

View File

@ -45,8 +45,8 @@ gfx::blur::gaussian_linear_data::gaussian_linear_data()
auto gctx = gs::context(); auto gctx = gs::context();
{ {
char* file = obs_module_file("effects/blur/gaussian-linear._effect"); char* file = obs_module_file("effects/blur/gaussian-linear.effect");
_effect = std::make_shared<gs::effect>(file); _effect = gs::effect::create(file);
bfree(file); bfree(file);
} }

View File

@ -45,8 +45,8 @@ gfx::blur::gaussian_data::gaussian_data()
{ {
auto gctx = gs::context(); auto gctx = gs::context();
{ {
char* file = obs_module_file("effects/blur/gaussian._effect"); char* file = obs_module_file("effects/blur/gaussian.effect");
_effect = std::make_shared<gs::effect>(file); _effect = gs::effect::create(file);
bfree(file); bfree(file);
} }

View File

@ -36,9 +36,7 @@
//#define OBS_LOAD_EFFECT_FILE //#define OBS_LOAD_EFFECT_FILE
gs::effect::effect() : _effect(nullptr) {} gs::effect::effect(std::string file)
gs::effect::effect(std::string file) : effect()
{ {
#ifdef OBS_LOAD_EFFECT_FILE #ifdef OBS_LOAD_EFFECT_FILE
char* errorMessage = nullptr; char* errorMessage = nullptr;
@ -84,7 +82,7 @@ gs::effect::effect(std::string file) : effect()
#endif #endif
} }
gs::effect::effect(std::string code, std::string name) : effect() gs::effect::effect(std::string code, std::string name)
{ {
char* errorMessage = nullptr; char* errorMessage = nullptr;
auto gctx = gs::context(); auto gctx = gs::context();
@ -157,6 +155,16 @@ bool gs::effect::has_parameter(std::string name, effect_parameter::type type)
return false; return false;
} }
std::shared_ptr<gs::effect> gs::effect::create(std::string file)
{
return std::shared_ptr<gs::effect>(new gs::effect(file));
}
std::shared_ptr<gs::effect> gs::effect::create(std::string code, std::string name)
{
return std::shared_ptr<gs::effect>(new gs::effect(code, name));
}
gs::effect_parameter::effect_parameter(std::shared_ptr<gs::effect> effect, gs_eparam_t* param) gs::effect_parameter::effect_parameter(std::shared_ptr<gs::effect> effect, gs_eparam_t* param)
: _effect(effect), _param(param) : _effect(effect), _param(param)
{ {

View File

@ -44,8 +44,8 @@ namespace gs {
class effect_parameter { class effect_parameter {
std::shared_ptr<::gs::effect> _effect; std::shared_ptr<::gs::effect> _effect;
gs_eparam_t* _param; gs_eparam_t* _param;
gs_effect_param_info _param_info; gs_effect_param_info _param_info;
public: public:
enum class type : uint8_t { enum class type : uint8_t {
@ -147,7 +147,6 @@ namespace gs {
gs_effect_t* _effect; gs_effect_t* _effect;
public: public:
effect();
effect(std::string file); effect(std::string file);
effect(std::string code, std::string name); effect(std::string code, std::string name);
virtual ~effect(); virtual ~effect();
@ -160,5 +159,9 @@ namespace gs {
std::shared_ptr<effect_parameter> get_parameter(std::string name); std::shared_ptr<effect_parameter> get_parameter(std::string name);
bool has_parameter(std::string name); bool has_parameter(std::string name);
bool has_parameter(std::string name, effect_parameter::type type); bool has_parameter(std::string name, effect_parameter::type type);
public:
static std::shared_ptr<gs::effect> create(std::string file);
static std::shared_ptr<gs::effect> create(std::string code, std::string name);
}; };
} // namespace gs } // namespace gs

View File

@ -108,7 +108,7 @@ gs::mipmapper::mipmapper()
_vb->update(); _vb->update();
char* effect_file = obs_module_file("effects/mipgen._effect"); char* effect_file = obs_module_file("effects/mipgen.effect");
_effect = std::make_unique<gs::effect>(effect_file); _effect = std::make_unique<gs::effect>(effect_file);
bfree(effect_file); bfree(effect_file);
} }