// AUTOGENERATED COPYRIGHT HEADER START // Copyright (C) 2019-2023 Michael Fabian 'Xaymar' Dirks // Copyright (C) 2021 coolsoft.rf // AUTOGENERATED COPYRIGHT HEADER END #pragma once #include "common.hpp" #include "gfx/shader/gfx-shader.hpp" #include "obs/gs/gs-rendertarget.hpp" #include "obs/obs-source-factory.hpp" namespace streamfx::filter::shader { class shader_instance : public obs::source_instance { std::shared_ptr _fx; std::shared_ptr _rt; public: shader_instance(obs_data_t* data, obs_source_t* self); virtual ~shader_instance(); virtual uint32_t get_width() override; virtual uint32_t get_height() override; void properties(obs_properties_t* props); virtual void load(obs_data_t* data) override; virtual void migrate(obs_data_t* data, uint64_t version) override; virtual void update(obs_data_t* data) override; virtual void video_tick(float_t sec_since_last) override; virtual void video_render(gs_effect_t* effect) override; void show() override; void hide() override; void activate() override; void deactivate() override; }; class shader_factory : public obs::source_factory { public: shader_factory(); virtual ~shader_factory(); virtual const char* get_name() override; virtual void get_defaults2(obs_data_t* data) override; virtual obs_properties_t* get_properties2(filter::shader::shader_instance* data) override; #ifdef ENABLE_FRONTEND static bool on_manual_open(obs_properties_t* props, obs_property_t* property, void* data); #endif public: // Singleton static void initialize(); static void finalize(); static std::shared_ptr instance(); }; } // namespace streamfx::filter::shader