diff --git a/CMakeLists.txt b/CMakeLists.txt index b3bfc548..29f7c198 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -327,7 +327,6 @@ set(${PREFIX}ENABLE_FILTER_BLUR ${FEATURE_UNSTABLE} CACHE BOOL "Enable Blur Filt set(${PREFIX}ENABLE_FILTER_COLOR_GRADE ${FEATURE_STABLE} CACHE BOOL "Enable Color Grade Filter") set(${PREFIX}ENABLE_FILTER_DENOISING ${FEATURE_EXPERIMENTAL} CACHE BOOL "Enable Denoising filter") set(${PREFIX}ENABLE_FILTER_DENOISING_NVIDIA ON CACHE BOOL "Enable NVIDIA provider(s) for Denoising Filter") -set(${PREFIX}ENABLE_FILTER_DISPLACEMENT OFF CACHE BOOL "Enable Displacement Filter") set(${PREFIX}ENABLE_FILTER_DYNAMIC_MASK ${FEATURE_STABLE} CACHE BOOL "Enable Dynamic Mask Filter") set(${PREFIX}ENABLE_FILTER_SDF_EFFECTS ${FEATURE_EXPERIMENTAL} CACHE BOOL "Enable SDF Effects Filter") set(${PREFIX}ENABLE_FILTER_SHADER ${FEATURE_EXPERIMENTAL} CACHE BOOL "Enable Shader Filter") @@ -570,10 +569,6 @@ function(feature_filter_denoising RESOLVE) endif() endfunction() -function(feature_filter_displacement RESOLVE) - is_feature_enabled(FILTER_DISPLACEMENT T_CHECK) -endfunction() - function(feature_filter_dynamic_mask RESOLVE) is_feature_enabled(FILTER_DYNAMIC_MASK T_CHECK) endfunction() @@ -685,7 +680,6 @@ feature_filter_autoframing(OFF) feature_filter_blur(OFF) feature_filter_color_grade(OFF) feature_filter_denoising(OFF) -feature_filter_displacement(OFF) feature_filter_dynamic_mask(OFF) feature_filter_sdf_effects(OFF) feature_filter_shader(OFF) @@ -843,7 +837,6 @@ feature_filter_autoframing(ON) feature_filter_blur(ON) feature_filter_color_grade(ON) feature_filter_denoising(ON) -feature_filter_displacement(ON) feature_filter_dynamic_mask(ON) feature_filter_sdf_effects(ON) feature_filter_shader(ON) @@ -1329,21 +1322,6 @@ if(T_CHECK) set(REQUIRE_LUT ON) endif() -# Filter/Displacement -is_feature_enabled(FILTER_DISPLACEMENT T_CHECK) -if(T_CHECK) - list(APPEND PROJECT_DATA - "data/effects/displace.effect" - ) - list(APPEND PROJECT_PRIVATE_SOURCE - "source/filters/filter-displacement.hpp" - "source/filters/filter-displacement.cpp" - ) - list(APPEND PROJECT_DEFINITIONS - ENABLE_FILTER_DISPLACEMENT - ) -endif() - # Filter/Dynamic Mask is_feature_enabled(FILTER_DYNAMIC_MASK T_CHECK) if(T_CHECK) diff --git a/data/effects/displace.effect b/data/effects/displace.effect deleted file mode 100644 index 7a2a94d9..00000000 --- a/data/effects/displace.effect +++ /dev/null @@ -1,95 +0,0 @@ -// AUTOGENERATED COPYRIGHT HEADER START -// Copyright (C) 2017-2023 Michael Fabian 'Xaymar' Dirks -// AUTOGENERATED COPYRIGHT HEADER END - -// Provided by OBS -uniform float4x4 ViewProj < - bool visible = false; ->; - -uniform texture2d image < - bool visible = false; ->; - -// Parameters -uniform float2 image_size < - bool visible = false; ->; - -uniform float2 image_inverse_size < - bool visible = false; ->; - -uniform texture2d normal < - bool visible = true; - string name = "Normal Map"; - string description = "A normal map that is used for displacing the texture sample locations."; ->; - -uniform float2 scale < - bool visible = true; - string mode = "slider"; - float2 minimum = {0.0, 0.0}; - float2 maximum = {100.0, 100.0}; - float2 step = {0.01, 0.01}; -> = {0.0, 0.0}; - -uniform float scale_type < - bool visible = true; - string mode = "slider"; - string name = "Scale Mode"; - string description = "A value of 0.0 is in Texel Space, while a value of 100.0 is in Pixel Space."; - float2 minimum = {0.0, 0.0}; - float2 maximum = {100.0, 100.0}; - float2 step = {0.01, 0.01}; -> = 0.0; - -// Samplers -sampler_state smp_linear_wrap { - Filter = Linear; - AddressU = Wrap; - AddressV = Wrap; -}; - -sampler_state smp_linear_clamp { - Filter = Linear; - AddressU = Clamp; - AddressV = Clamp; -}; - -// Structs -struct FunctionData { - float4 pos : POSITION; - float2 uv : TEXCOORD0; -}; - -// Functions -FunctionData vertex_shader(FunctionData v) { - v.pos = mul(float4(v.pos.xyz, 1.0), ViewProj); - return v; -}; - -float4 pixel_shader(FunctionData v) : TARGET { - float4 v_normal = normal.Sample(smp_linear_wrap, v.uv); - - float2 offset = v_normal.rg; - offset -= float2(.5, .5); - offset *= 255.0; - offset = floor(abs(offset)) * sign(offset); - offset /= 127.0; - - offset *= lerp(float2(1.0, 1.0), image_inverse_size, scale_type); - offset *= scale; - - return image.Sample(smp_linear_clamp, v.uv + offset); -}; - -// Techniques -technique Draw -{ - pass - { - vertex_shader = vertex_shader(v); - pixel_shader = pixel_shader(v); - } -} diff --git a/source/filters/filter-displacement.cpp b/source/filters/filter-displacement.cpp deleted file mode 100644 index 38d03efc..00000000 --- a/source/filters/filter-displacement.cpp +++ /dev/null @@ -1,214 +0,0 @@ -// AUTOGENERATED COPYRIGHT HEADER START -// Copyright (C) 2019-2023 Michael Fabian 'Xaymar' Dirks -// Copyright (C) 2022 lainon -// AUTOGENERATED COPYRIGHT HEADER END - -//--------------------------------------------------------------------------------// -// THIS FEATURE IS DEPRECATED. SUBMITTED PATCHES WILL BE REJECTED. -//--------------------------------------------------------------------------------// - -#include "filter-displacement.hpp" -#include "strings.hpp" -#include "obs/gs/gs-helper.hpp" -#include "util/util-logging.hpp" - -#include "warning-disable.hpp" -#include -#include -#include "warning-enable.hpp" - -#ifdef _DEBUG -#define ST_PREFIX "<%s> " -#define D_LOG_ERROR(x, ...) P_LOG_ERROR(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) -#define D_LOG_WARNING(x, ...) P_LOG_WARN(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) -#define D_LOG_INFO(x, ...) P_LOG_INFO(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) -#define D_LOG_DEBUG(x, ...) P_LOG_DEBUG(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) -#else -#define ST_PREFIX " " -#define D_LOG_ERROR(...) P_LOG_ERROR(ST_PREFIX __VA_ARGS__) -#define D_LOG_WARNING(...) P_LOG_WARN(ST_PREFIX __VA_ARGS__) -#define D_LOG_INFO(...) P_LOG_INFO(ST_PREFIX __VA_ARGS__) -#define D_LOG_DEBUG(...) P_LOG_DEBUG(ST_PREFIX __VA_ARGS__) -#endif - -#define ST_I18N "Filter.Displacement" -#define ST_I18N_DEPRECATED ST_I18N ".Deprecated" -#define ST_I18N_FILE "Filter.Displacement.File" -#define ST_KEY_FILE "Filter.Displacement.File" -#define ST_I18N_SCALE "Filter.Displacement.Scale" -#define ST_KEY_SCALE "Filter.Displacement.Scale" -#define ST_I18N_SCALE_TYPE "Filter.Displacement.Scale.Type" -#define ST_KEY_SCALE_TYPE "Filter.Displacement.Scale.Type" - -using namespace streamfx::filter::displacement; - -displacement_instance::displacement_instance(obs_data_t* data, obs_source_t* context) - : obs::source_instance(data, context) -{ - { - auto gctx = streamfx::obs::gs::context(); - - { - auto file = streamfx::data_file_path("effects/displace.effect"); - try { - _effect = streamfx::obs::gs::effect::create(file); - } catch (std::exception& ex) { - D_LOG_ERROR("Error loading '%s': %s", file.u8string().c_str(), ex.what()); - throw; - } - } - } - - update(data); -} - -displacement_instance::~displacement_instance() -{ - _texture.reset(); -} - -void displacement_instance::load(obs_data_t* settings) -{ - update(settings); -} - -void displacement_instance::migrate(obs_data_t* data, uint64_t version) -{ - switch (version & STREAMFX_MASK_COMPAT) { - case 0: - obs_data_set_double(data, ST_KEY_SCALE, obs_data_get_double(data, "Filter.Displacement.Scale") * 0.5); - obs_data_set_double(data, ST_KEY_SCALE_TYPE, obs_data_get_double(data, "Filter.Displacement.Ratio") * 100.0); - obs_data_unset_user_value(data, "Filter.Displacement.Ratio"); - case STREAMFX_MAKE_VERSION(0, 8, 0, 0): - break; - } -} - -void displacement_instance::update(obs_data_t* settings) -{ - _scale[0] = _scale[1] = static_cast(obs_data_get_double(settings, ST_KEY_SCALE)); - _scale_type = static_cast(obs_data_get_double(settings, ST_KEY_SCALE_TYPE) / 100.0); - - const char* new_file = obs_data_get_string(settings, ST_KEY_FILE); - if (new_file != _texture_file) { - try { - _texture = std::make_shared(new_file); - _texture_file = new_file; - } catch (...) { - _texture.reset(); - } - } -} - -void displacement_instance::video_tick(float_t) -{ - _width = obs_source_get_base_width(_self); - _height = obs_source_get_base_height(_self); -} - -void displacement_instance::video_render(gs_effect_t*) -{ - if (!_texture) { // No displacement map, so just skip us for now. - obs_source_skip_video_filter(_self); - return; - } - -#if defined(ENABLE_PROFILING) && !defined(D_PLATFORM_MAC) && _DEBUG - streamfx::obs::gs::debug_marker gdmp{streamfx::obs::gs::debug_color_source, "Displacement Mapping '%s' on '%s'", - obs_source_get_name(_self), obs_source_get_name(obs_filter_get_parent(_self))}; -#endif - - if (!obs_source_process_filter_begin(_self, GS_RGBA, OBS_ALLOW_DIRECT_RENDERING)) { - obs_source_skip_video_filter(_self); - return; - } - - _effect.get_parameter("image_size").set_float2(static_cast(_width), static_cast(_height)); - _effect.get_parameter("image_inverse_size") - .set_float2(static_cast(1.0 / _width), static_cast(1.0 / _height)); - _effect.get_parameter("normal").set_texture(_texture->get_object()); - _effect.get_parameter("scale").set_float2(_scale[0], _scale[1]); - _effect.get_parameter("scale_type").set_float(_scale_type); - - obs_source_process_filter_end(_self, _effect.get_object(), _width, _height); -} - -std::string displacement_instance::get_file() -{ - return _texture_file; -} - -displacement_factory::displacement_factory() -{ - _info.id = S_PREFIX "filter-displacement"; - _info.type = OBS_SOURCE_TYPE_FILTER; - _info.output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_CUSTOM_DRAW | OBS_SOURCE_DEPRECATED | OBS_SOURCE_CAP_DISABLED; - - support_size(false); - finish_setup(); - register_proxy("obs-stream-effects-filter-displacement"); -} - -displacement_factory::~displacement_factory() {} - -const char* displacement_factory::get_name() -{ - return D_TRANSLATE(ST_I18N); -} - -void displacement_factory::get_defaults2(obs_data_t* data) -{ - obs_data_set_default_string(data, ST_KEY_FILE, - streamfx::data_file_path("examples/normal-maps/neutral.png").u8string().c_str()); - obs_data_set_default_double(data, ST_KEY_SCALE, 0.0); - obs_data_set_default_double(data, ST_KEY_SCALE_TYPE, 0.0); -} - -obs_properties_t* displacement_factory::get_properties2(displacement_instance* data) -{ - obs_properties_t* pr = obs_properties_create(); - - { - auto p = obs_properties_add_text(pr, "[[deprecated]]", D_TRANSLATE(ST_I18N_DEPRECATED), OBS_TEXT_INFO); - obs_property_text_set_info_type(p, OBS_TEXT_INFO_WARNING); - obs_property_text_set_info_word_wrap(p, true); - } - - std::string path = ""; - if (data) { - path = data->get_file(); - } else { - path = streamfx::data_file_path("examples/normal-maps/neutral.png").u8string(); - } - - obs_properties_add_path(pr, ST_KEY_FILE, D_TRANSLATE(ST_I18N_FILE), obs_path_type::OBS_PATH_FILE, - D_TRANSLATE(S_FILEFILTERS_TEXTURE), path.c_str()); - obs_properties_add_float(pr, ST_KEY_SCALE, D_TRANSLATE(ST_I18N_SCALE), -10000000.0, 10000000.0, 0.01); - obs_properties_add_float_slider(pr, ST_KEY_SCALE_TYPE, D_TRANSLATE(ST_I18N_SCALE_TYPE), 0.0, 100.0, 0.01); - - return pr; -} - -std::shared_ptr _filter_displacement_factory_instance = nullptr; - -void streamfx::filter::displacement::displacement_factory::initialize() -{ - try { - if (!_filter_displacement_factory_instance) - _filter_displacement_factory_instance = std::make_shared(); - } catch (const std::exception& ex) { - D_LOG_ERROR("Failed to initialize due to error: %s", ex.what()); - } catch (...) { - D_LOG_ERROR("Failed to initialize due to unknown error.", ""); - } -} - -void streamfx::filter::displacement::displacement_factory::finalize() -{ - _filter_displacement_factory_instance.reset(); -} - -std::shared_ptr streamfx::filter::displacement::displacement_factory::get() -{ - return _filter_displacement_factory_instance; -} diff --git a/source/filters/filter-displacement.hpp b/source/filters/filter-displacement.hpp deleted file mode 100644 index c525f982..00000000 --- a/source/filters/filter-displacement.hpp +++ /dev/null @@ -1,61 +0,0 @@ -// AUTOGENERATED COPYRIGHT HEADER START -// Copyright (C) 2019-2023 Michael Fabian 'Xaymar' Dirks -// AUTOGENERATED COPYRIGHT HEADER END - -//--------------------------------------------------------------------------------// -// THIS FEATURE IS DEPRECATED. SUBMITTED PATCHES WILL BE REJECTED. -//--------------------------------------------------------------------------------// - -#pragma once -#include "common.hpp" -#include "obs/gs/gs-effect.hpp" -#include "obs/obs-source-factory.hpp" - -namespace streamfx::filter::displacement { - class displacement_instance : public obs::source_instance { - streamfx::obs::gs::effect _effect; - - // Displacement Map - std::shared_ptr _texture; - std::string _texture_file; - float_t _scale[2]; - float_t _scale_type; - - // Cache - uint32_t _width; - uint32_t _height; - - public: - displacement_instance(obs_data_t*, obs_source_t*); - virtual ~displacement_instance(); - - virtual void load(obs_data_t* settings) override; - virtual void migrate(obs_data_t* data, uint64_t version) override; - virtual void update(obs_data_t* settings) override; - - virtual void video_tick(float_t) override; - virtual void video_render(gs_effect_t*) override; - - std::string get_file(); - }; - - class displacement_factory : public obs::source_factory { - public: - displacement_factory(); - virtual ~displacement_factory(); - - virtual const char* get_name() override; - - virtual void get_defaults2(obs_data_t* data) override; - - virtual obs_properties_t* get_properties2(filter::displacement::displacement_instance* data) override; - - public: // Singleton - static void initialize(); - - static void finalize(); - - static std::shared_ptr get(); - }; -} // namespace streamfx::filter::displacement