mirror of
https://github.com/Xaymar/obs-StreamFX
synced 2024-11-14 07:45:06 +00:00
gfx/shader/param-texture: Use obs::weak_source instead of obs::source
This commit is contained in:
parent
8f8b8839e5
commit
fb09e98a5f
2 changed files with 15 additions and 12 deletions
|
@ -282,7 +282,7 @@ void streamfx::gfx::shader::texture_parameter::assign()
|
||||||
// Reload or Reacquire everything necessary.
|
// Reload or Reacquire everything necessary.
|
||||||
try {
|
try {
|
||||||
// Remove now unused references.
|
// Remove now unused references.
|
||||||
_source.release();
|
_source.reset();
|
||||||
_source_child.reset();
|
_source_child.reset();
|
||||||
_source_active.reset();
|
_source_active.reset();
|
||||||
_source_visible.reset();
|
_source_visible.reset();
|
||||||
|
@ -323,7 +323,7 @@ void streamfx::gfx::shader::texture_parameter::assign()
|
||||||
_source_visible = std::move(visible);
|
_source_visible = std::move(visible);
|
||||||
_source_active = std::move(active);
|
_source_active = std::move(active);
|
||||||
_source_child = child;
|
_source_child = child;
|
||||||
_source = std::move(source);
|
_source = source;
|
||||||
}
|
}
|
||||||
|
|
||||||
_dirty = false;
|
_dirty = false;
|
||||||
|
@ -336,14 +336,15 @@ void streamfx::gfx::shader::texture_parameter::assign()
|
||||||
|
|
||||||
// If this is a source and active or visible, capture it.
|
// If this is a source and active or visible, capture it.
|
||||||
if ((_type == texture_type::Source) && (_active || _visible) && _source_rendertarget) {
|
if ((_type == texture_type::Source) && (_active || _visible) && _source_rendertarget) {
|
||||||
|
auto source = _source.lock();
|
||||||
#ifdef ENABLE_PROFILING
|
#ifdef ENABLE_PROFILING
|
||||||
::streamfx::obs::gs::debug_marker profiler1{::streamfx::obs::gs::debug_color_capture, "Parameter '%s'",
|
::streamfx::obs::gs::debug_marker profiler1{::streamfx::obs::gs::debug_color_capture, "Parameter '%s'",
|
||||||
get_key().data()};
|
get_key().data()};
|
||||||
::streamfx::obs::gs::debug_marker profiler2{::streamfx::obs::gs::debug_color_capture, "Capture '%s'",
|
::streamfx::obs::gs::debug_marker profiler2{::streamfx::obs::gs::debug_color_capture, "Capture '%s'",
|
||||||
obs_source_get_name(_source.get())};
|
source.name().data()};
|
||||||
#endif
|
#endif
|
||||||
uint32_t width = obs_source_get_width(_source.get());
|
uint32_t width = source.width();
|
||||||
uint32_t height = obs_source_get_height(_source.get());
|
uint32_t height = source.height();
|
||||||
|
|
||||||
auto op = _source_rendertarget->render(width, height);
|
auto op = _source_rendertarget->render(width, height);
|
||||||
|
|
||||||
|
@ -357,7 +358,7 @@ void streamfx::gfx::shader::texture_parameter::assign()
|
||||||
|
|
||||||
gs_enable_color(true, true, true, true);
|
gs_enable_color(true, true, true, true);
|
||||||
|
|
||||||
obs_source_video_render(_source.get());
|
obs_source_video_render(source.get());
|
||||||
|
|
||||||
gs_blend_state_pop();
|
gs_blend_state_pop();
|
||||||
gs_matrix_pop();
|
gs_matrix_pop();
|
||||||
|
@ -388,8 +389,9 @@ void streamfx::gfx::shader::texture_parameter::visible(bool visible)
|
||||||
{
|
{
|
||||||
_visible = visible;
|
_visible = visible;
|
||||||
if (visible) {
|
if (visible) {
|
||||||
if (_source) {
|
auto source = _source.lock();
|
||||||
_source_visible = ::streamfx::obs::source_showing_reference::add_showing_reference(_source);
|
if (source) {
|
||||||
|
_source_visible = ::streamfx::obs::source_showing_reference::add_showing_reference(source);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_source_visible.reset();
|
_source_visible.reset();
|
||||||
|
@ -400,8 +402,9 @@ void streamfx::gfx::shader::texture_parameter::active(bool active)
|
||||||
{
|
{
|
||||||
_active = active;
|
_active = active;
|
||||||
if (active) {
|
if (active) {
|
||||||
if (_source) {
|
auto source = _source.lock();
|
||||||
_source_active = ::streamfx::obs::source_active_reference::add_active_reference(_source);
|
if (source) {
|
||||||
|
_source_active = ::streamfx::obs::source_active_reference::add_active_reference(source);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_source_active.reset();
|
_source_active.reset();
|
||||||
|
|
|
@ -9,8 +9,8 @@
|
||||||
#include "obs/obs-source-active-child.hpp"
|
#include "obs/obs-source-active-child.hpp"
|
||||||
#include "obs/obs-source-active-reference.hpp"
|
#include "obs/obs-source-active-reference.hpp"
|
||||||
#include "obs/obs-source-showing-reference.hpp"
|
#include "obs/obs-source-showing-reference.hpp"
|
||||||
#include "obs/obs-source.hpp"
|
|
||||||
#include "obs/obs-tools.hpp"
|
#include "obs/obs-tools.hpp"
|
||||||
|
#include "obs/obs-weak-source.hpp"
|
||||||
|
|
||||||
namespace streamfx::gfx {
|
namespace streamfx::gfx {
|
||||||
namespace shader {
|
namespace shader {
|
||||||
|
@ -59,7 +59,7 @@ namespace streamfx::gfx {
|
||||||
|
|
||||||
// Data: Source
|
// Data: Source
|
||||||
std::string _source_name;
|
std::string _source_name;
|
||||||
::streamfx::obs::source _source;
|
::streamfx::obs::weak_source _source;
|
||||||
std::shared_ptr<streamfx::obs::source_active_child> _source_child;
|
std::shared_ptr<streamfx::obs::source_active_child> _source_child;
|
||||||
std::shared_ptr<streamfx::obs::source_active_reference> _source_active;
|
std::shared_ptr<streamfx::obs::source_active_reference> _source_active;
|
||||||
std::shared_ptr<streamfx::obs::source_showing_reference> _source_visible;
|
std::shared_ptr<streamfx::obs::source_showing_reference> _source_visible;
|
||||||
|
|
Loading…
Reference in a new issue