Commit graph

613 commits

Author SHA1 Message Date
Michael Fabian 'Xaymar' Dirks
432b8e8c14 source-mirror: Automatically update hover text for Bounds Type 2019-04-19 08:20:33 +02:00
Michael Fabian 'Xaymar' Dirks
e24b9a61fa filter-blur: Update long description of Type and Subtype fields
Automatically updates the long description (hover text) if the Type or Subtype field is changed, allowing for more contextual information about what the selected information does.
2019-04-15 12:54:19 +02:00
Michael Fabian 'Xaymar' Dirks
c59ec2511b filter-sdf-effects: Refactor to include Glow and Stroke (#2, #4)
This refactors the SDF Effects to use a normal blend function instead of doing the blend in the effect itself, improving quality and reducing problematic sampling issues. In addition to this, the effect files have been cleaned up slightly and renamed to their proper names. Glow and Stroke are now supported, which solves both #2 and #4 in one go.

The caching optimization has also now been implemented, reducing the number of renders for this filter to 1 for each tick.
2019-04-14 14:19:59 +02:00
Michael Fabian 'Xaymar' Dirks
787409b2d9 filter-transform: Fix description for Position, Rotation, Scale & Shear
This would previously incorrectly reference descriptions that don't exist, and thus not translate correctly.
2019-04-06 18:19:35 +02:00
Michael Fabian 'Xaymar' Dirks
86e09b6f72 obs-source: Explicitly clear events and copy events 2019-04-03 06:44:04 +02:00
Michael Fabian 'Xaymar' Dirks
fa60be1593 source-mirror: Fix incorrect source alignment
This bug was introduced in 0.6.0 and had sources render half offscreen to the left, as the alignment 4 meant "center left" instead of just "center".
2019-04-03 06:13:23 +02:00
Michael Fabian 'Xaymar' Dirks
2a53e84bdb filter-blur: Fix more compiler warnings 2019-04-03 02:59:48 +02:00
Michael Fabian 'Xaymar' Dirks
bdf6b893ab source-mirror: Fix a dead lock issue and use a queue system
This fixes a dead lock due to attempting to lock the same filter mutex twice, causing libOBS to completely lock up on every mutex. This extends the fix for 4fc25cfd8d.

Additionally this switches to a proper queue system for audio, so we no longer cause audio stuttering or audio skipping.
2019-04-03 02:58:54 +02:00
Michael Fabian 'Xaymar' Dirks
721bdaf642 project: Reapply clang-format globally 2019-04-03 00:19:01 +02:00
Michael Fabian 'Xaymar' Dirks
b1d7814c64 gs-helper: Add managed obs graphics context
To further distance the code from having to do too much manually, the graphics context is now available as a managed class. All places that previously used obs_enter_graphics and obs_leave_graphics are now using the new gs::context class instead.
2019-04-03 00:16:13 +02:00
Michael Fabian 'Xaymar' Dirks
8ebdde5d36 obs-source: Fix additional compiler warnings 2019-04-02 22:58:50 +02:00
Michael Fabian 'Xaymar' Dirks
ad22341ab0 source-mirror: Fix a few compiler warnings 2019-04-02 22:46:11 +02:00
Michael Fabian 'Xaymar' Dirks
4fc25cfd8d source-mirror: Don't render scene items with 0 size
libOBS will simply forget to unlock a mutex if you set the boundary size to zero, resulting in the filters dialog for that source simply getting stuck. Why video rendering can affect the audio filter dialogs is a question for another time, but it's best to just accept it and move on.
2019-04-02 22:10:23 +02:00
Michael Fabian 'Xaymar' Dirks
5738e51e73 obs-source: Also move events in move constructor and operator 2019-04-02 22:08:20 +02:00
Michael Fabian 'Xaymar' Dirks
381aa3ecd4 source-mirror: Correctly check for Audio and Video source
Previously this would not do anything correctly, as the call to obs_source_get_flags does not return anything for most sources. Instead obs_source_get_output_flags should be used to verify that we actually have a video or audio capable source to work with.
2019-04-02 20:19:40 +02:00
Michael Fabian 'Xaymar' Dirks
4d66938832 source-mirror: Replace obs_enum_* with obs::source_tracker
obs::source_tracker allows us to do more over more versions of OBS Studio, so we are able to enumerate any and all Sources, Scenes and Transitions that weren't created private. If we were to rely on libOBS for this, we would need to limit ourselves to version 23 or higher, but with this we can go very far back - as far back as the global event system was fully supported.
2019-04-02 20:19:10 +02:00
Michael Fabian 'Xaymar' Dirks
ee97321319 filter-blur: Add empty entry to the Mask Source input 2019-04-02 19:58:14 +02:00
Michael Fabian 'Xaymar' Dirks
ddf75d3e9f obs-audio-capture: Remove unused code 2019-04-02 19:45:10 +02:00
Michael Fabian 'Xaymar' Dirks
bcf5b56c44 source-mirror: Switch to obs::source audio capture 2019-04-02 19:44:48 +02:00
Michael Fabian 'Xaymar' Dirks
8fb7d193f5 obs-source: Add audio capture and selectively listen to events
Audio capture previously needed an additional class, however there is no need for this if this can be done together with the actual obs::source object. So obs::source now has a new audio_data event that can be listened to, which handles capturing audio data if requested.

Additionally all other events are now selectively listened to, instead of permanently listening to them. This should drastically reduce the overhead of using obs::source.
2019-04-02 19:30:25 +02:00
Michael Fabian 'Xaymar' Dirks
1b7de8b6b1 util-event: Automatically clear event listeners when destructed 2019-04-02 19:11:26 +02:00
Michael Fabian 'Xaymar' Dirks
8e9e39a88e project: Remove unused content 2019-04-02 04:37:37 +02:00
Michael Fabian 'Xaymar' Dirks
21eef998ec filter-blur: Refactor to use new Blur code
This removes the ridiculous amount of hardcoded values and functions and moves everything to the more modular blur approach.

Fixes #45
Fixes #6
2019-04-02 03:50:01 +02:00
Michael Fabian 'Xaymar' Dirks
7c4d46c1fe gfx/blur/dual-filtering: Implement Dual Filtering Blur
Dual Filtering (or Dual Kawase) is an approximation of Gaussian Blur that can reach much higher Blur sizes at a much lower cost. However it is locked to a 2^n size, which means that currently it isn't possible to use it for blur sizes like 19, 24 and 31.

The Blur works by using the linear sampling of a GPU, combined with down- and upsampling and carefully placed sampling points. This means that there is no need for a linear optimized version of this Blur.

Related: #45, #6
2019-04-02 03:50:01 +02:00
Michael Fabian 'Xaymar' Dirks
b6d45ce73c gfx/blur/gaussian-linear: Refactor Linear Gaussian Blur
While Gaussian Blur is not a Blur type that really benefits much from linear sampling, it can be used for a slight quality and gpu usage reduction. However for Area and Directional Blur there is a better alternative: Dual Filtering Blur. And as with all other currently implement Linear versions of Blur, only Area and Directional Blur are supported.

This type of Gaussian Blur also has the loading hitch that exists in normal Gaussian Blur.

Related: #45, #6
2019-04-02 03:50:01 +02:00
Michael Fabian 'Xaymar' Dirks
fedc8e075c gfx/blur/gaussian: Refactor Gaussian Blur
Gaussian Blur is another Blur that now supports the new system, increasing the maxium Blur size to 128 and adding support for Rotational and Zoom blur. Various optimizations were done to the actual shader code which further reduced the GPU usage.

Currently the Gaussian curve is recalculated when the blur is first created, which can lead to a short hitch due to it having to search for the correct kernels. This is currently unavoidable and expected behavior until a better solution is found.

Related: #45, #6
2019-04-02 03:50:01 +02:00
Michael Fabian 'Xaymar' Dirks
68a8fb9224 gfx/blur/box-linear: Refactor Linear Box Blur
Box Blur is a prime candidate for Linear optimizations, and as such reducing the total necessary samples by about half. However due to the reduction in samples, only Area and Directional Blur are supported.

Related: #45, #6
2019-04-02 03:50:01 +02:00
Michael Fabian 'Xaymar' Dirks
8c5dc3c630 gfx/blur/box: Refactor Box Blur
Box Blur is the first to be on the new system and has received all the new features and optimizations available. The maximum Blur size has been increased to 128, Rotational and Zoom Blur are supported and a small optimization has been done to the shader.

Related: #45, #6
2019-04-02 03:50:01 +02:00
Michael Fabian 'Xaymar' Dirks
395e284a37 gfx/blur/base: Newly refactored blur code base
This is the new code base for blur effects, which is much more effective at being re-usable than the old code base. It allows for much better extendable behavior and uses an interface and factory pattern, instead of hardcoding supported features.
2019-04-02 03:50:01 +02:00
Michael Fabian 'Xaymar' Dirks
3f92e1cc89 utility: Move helper macros
As not everything in the plugin needs to use these, they have no place in the plugin header, and thus are now in utility.hpp
2019-04-02 03:50:01 +02:00
Michael Fabian 'Xaymar' Dirks
18b8cc2b5c obs-source-tracker: Use the output flags instead of flags
This fixes being able to filter by the source type (audio, video).
2019-03-01 20:38:49 +01:00
Michael Fabian 'Xaymar' Dirks
f902f8f0f5 filter-blur: Actually call load in the load signal 2019-03-01 20:38:06 +01:00
Michael Fabian 'Xaymar' Dirks
ba00fbb97e project: Fix even more warnings 2019-03-01 12:00:30 +01:00
Michael Fabian 'Xaymar' Dirks
da6feda981 source-mirror: Remove double mutex lock 2019-03-01 11:37:24 +01:00
Michael Fabian 'Xaymar' Dirks
c0f951d855 project: Fix various warnings 2019-03-01 11:33:19 +01:00
Michael Fabian 'Xaymar' Dirks
133978bbca util-math: Remove alignment from vec2a 2019-03-01 11:14:06 +01:00
Michael Fabian 'Xaymar' Dirks
fa502734ce filter-blur: Allow direct rendering
Small performance optimization as this removes the extra texture render that would be done by libobs which we don't actually need as we already have a texture to render to for it.
2019-03-01 10:59:11 +01:00
Michael Fabian 'Xaymar' Dirks
1c072d67cb filter-transform: Validate source size each tick
Rendering happens with cached Geometry that is only updated when necessary, such as when the user changes settings. This optimization was necessary to reduce CPU and GPU usage as we can simply re-use the same geomtry instead of recalculating it.

However, the actual source size was never checked. That meant that when a source changed size through any means, the filter would not update the geomtry accordingly, and the result was a squished or stretched image.

With this, the source size is now checked each tick.

Fixes #48
2019-02-15 13:52:44 +01:00
Michael Fabian 'Xaymar' Dirks
3bf1333c84 project: Restructure of the file system
The number of files in the source directory was a little bit much and just made file naming more complex than it had to be. Therefore all files were moved into subdirectories where it matters.

Filters now reside in source/filters/, Sources in source/sources/, OBS Wrappers in obs/, OBS GS Wrappers in obs/gs/, Transitions will reside in source/transitions, Graphics Helpers will be in gfx/.
2019-02-11 04:03:57 +01:00
Michael Fabian 'Xaymar' Dirks
3e4930e6e0 filter-transform: Fix incorrect names for properties and options
MipGenerator.Strength was renamed to MipGenerator.Intensity, which better fits the actual intention of the property. Additionally all the mipmap generator options are now correctly named.
2019-02-11 04:03:56 +01:00
Michael Fabian 'Xaymar' Dirks
9f28144b0b filter-blur: Properly set Image(s) filter for path property 2019-02-01 19:58:05 +01:00
Michael Fabian 'Xaymar' Dirks
43136b00c4 filter-blur: Precalculate correct filter width for Gaussian
Gaussian blur used to have a hard edge which was caused by the filter width being wider than the actual sampling range, which is what is determined by the size option. In order to fix this, we have to figure out the proper filter width for a sampling range, so that we avoid any and all hard edges.

Additionally removes the old texture method entirely.

Fixes #44
2019-02-01 08:35:58 +01:00
Michael Fabian 'Xaymar' Dirks
10f7047042 util-math: Add templated gaussian function 2019-02-01 08:35:58 +01:00
Michael Fabian 'Xaymar' Dirks
3ee815b152 filter-sdf-effects: Extend shadow range to -16...16 2019-01-31 04:53:39 +01:00
Michael Fabian 'Xaymar' Dirks
cfc828f0f8 source-mirror: Fix crash with audio sources and late video sources
Source Mirror would incorrectly crash if an Audio only source was selected, as it expected a video frame to be present of any size. This fixes the problem by first testing if there is any video information to render and then just catching any exception that happens during rendering.
2019-01-31 02:57:18 +01:00
Michael Fabian 'Xaymar' Dirks
f5424d1aad gs-effect: Replace OBS cached file loading with custom one
The normal OBS behavior is to cache files that are loaded from disk, however this is not the behavior we want at all, as it can miss file updates as it never checks the disk for an updated file.

So instead of relying on OBS, this implements the file reading and effect creation without the cache. If a cache is necessary, it would not be the job of this class.
2019-01-31 02:30:18 +01:00
Michael Fabian 'Xaymar' Dirks
75009c617a filter-sdf-effects: Support for scaling SDF Texture Size
This allows increasing or decreasing the accuracy of the Signed Distance Field at runtime without requiring the initial source to be resized. Use case for this would be small text where the higher quality would only be noticable on the shadow and not the text itself.
2019-01-30 03:12:12 +01:00
Michael Fabian 'Xaymar' Dirks
493ef5da23 filter-sdf-effects: Move factory definitions before instance 2019-01-30 02:39:42 +01:00
Michael Fabian 'Xaymar' Dirks
7cf3e17b9b filter-sdf-effects: Fix black border and add inverse gradient shadow
Sources were rendering with a black border around them if they had a soft fade, which is due to how the shadow calculated the image sample. With the new shader code this is now fixed and the source looks like it should be. Additionally this removes the bug where enabling any shadow would cause only the texels to draw that were above the threshold.

Additionally this adds support for inverse gradients (min > max) and negative gradients for outer shadows instead of only positive gradients. This technically allows for cleaner shadows.
2019-01-30 02:38:34 +01:00
Michael Fabian 'Xaymar' Dirks
3ebbc84ee2 filter-sdf-effects: Rename Shadow (SDF) Filter (Part 2)
This finalizes the rename started in the previous commit by changing the class name and also updating the locale strings
2019-01-29 07:35:14 +01:00
Michael Fabian 'Xaymar' Dirks
a7161b51e0 filter-sdf-effects: Rename Shadow (SDF) Filter (Part 1)
The nature of this Signed Distance Field based Filter is not to only draw shadows, but to also draw an outline or even glow around a source. Therefore the name "Inner/Outer Shadow (SDF)" does not fit well with the intent of the actual Filter.
2019-01-29 04:35:12 +01:00
Michael Fabian 'Xaymar' Dirks
a56cbf89a9 filter-blur: Refactoring 2019-01-28 01:08:13 +01:00
Michael Fabian 'Xaymar' Dirks
4eb3197720 gfx-source-texture: Don't create two references to the same source 2019-01-28 00:47:36 +01:00
Michael Fabian 'Xaymar' Dirks
c529e45cfd filter-blur: Refactoring, one-time rendering, fix mask logic
Unfortunately load is never called on filters.
2019-01-28 00:00:45 +01:00
Michael Fabian 'Xaymar' Dirks
97bf38633b gfx-source-texture: Release child source if add_active_child fails 2019-01-27 23:33:38 +01:00
Michael Fabian 'Xaymar' Dirks
10c0081f32 project: Refactoring Part 2 2019-01-27 23:33:12 +01:00
Michael Fabian 'Xaymar' Dirks
39b0600aa3 filter-blur: Update in load and create 2019-01-27 23:30:37 +01:00
Michael Fabian 'Xaymar' Dirks
8a64e360c4 filter-blur: Switch to obs-source-tracker
Completely eliminates the need for obs_emum_sources and obs_enum_scenes, thus improving backwards compatibility.
2019-01-27 23:19:09 +01:00
Michael Fabian 'Xaymar' Dirks
fa4a81bb54 gfx-source-texture: Delete copy and move constructors and operators 2019-01-27 22:50:35 +01:00
Michael Fabian 'Xaymar' Dirks
a15f1934b3 filter-custom-shader: Do not build for release
This feature is postponed until 0.6.0 for stability and UI/UX issues.
2019-01-27 22:44:45 +01:00
Michael Fabian 'Xaymar' Dirks
551cbb83b1 obs-source-tracker: Source Tracking Compatibility Layer
Allows for enumerating any kind of source, as long as it has a name and is not private. As obs_enum_scenes is a 23.x and above function, this class should be used instead to remain backwards compatible.
2019-01-27 22:43:49 +01:00
Michael Fabian 'Xaymar' Dirks
d56c0d6f25 project: Refactoring Part 1 2019-01-25 17:55:36 +01:00
Cat Stevens
b91700e74f filter-blur: delete pointer in destroy() (#42) 2019-01-25 17:40:59 +01:00
Michael Fabian 'Xaymar' Dirks
3ac7e46628 filter-shadow-sdf: Remove shadow_sdf namespace, rename shadow_sdf_instance to shadow_sdf 2019-01-25 00:55:40 +01:00
Michael Fabian 'Xaymar' Dirks
7708dd0792 filter-shadow-sdf: Refactoring, fix and optimize rendering
Fixes the m_source_texture = nullptr bug, which happened due to m_tick and m_last_tick both being 0, as no video_tick is called when the source is first created. Instead a boolean flag is now used that is reset to false on each video_tick.
2019-01-25 00:54:34 +01:00
Michael Fabian 'Xaymar' Dirks
d29f5ce477 filter-transform: Transform to transform, ...Addon to ..._factory 2019-01-25 00:38:20 +01:00
Michael Fabian 'Xaymar' Dirks
2aa4595bd3 filter-displacement: Rename Displacement to displacement, ...Addon to ..._factory 2019-01-25 00:38:01 +01:00
Michael Fabian 'Xaymar' Dirks
7a61006d2b source-mirror: Rename Mirror to mirror, ...Addon to ..._factory 2019-01-25 00:36:54 +01:00
Michael Fabian 'Xaymar' Dirks
a37d9bbb59 filter-shadow-sdf: Actually delete instances in destroy()
This fixes a memory leak discovered by @catb0t.

Related #33
2019-01-25 00:31:50 +01:00
Michael Fabian 'Xaymar' Dirks
ddfb08f39e filter-displacement: Update file logic and rendering
This replaces the use of gs_texture_t* with gs::texture, further improving stability. Additionally some of the useless checks were replaced or reduced.
2019-01-25 00:28:06 +01:00
Michael Fabian 'Xaymar' Dirks
0bdf8e3bba filter-displacement: Use gs::effect instead of gs_effect_t*
The managed gs::effect class handles all acquire and release calls for us. Also slightly simplifies the video_render logic.
2019-01-25 00:28:06 +01:00
Michael Fabian 'Xaymar' Dirks
fedb6e3259 filter-displacement: Further refactoring 2019-01-25 00:28:06 +01:00
Michael Fabian 'Xaymar' Dirks
c1995c03a9 filter-displacement: Refactor to match new class structure 2019-01-25 00:28:05 +01:00
Cat Stevens
c749f5dd62 obs-audio-capture.hpp: missing memory include 2019-01-24 23:30:42 +01:00
Michael Fabian 'Xaymar' Dirks
160ad3b5a9 locale: Replace file filters with file types
The filters are always the same for every language and should not be translated, instead only the file type should be translated. This way bad translations will not affect the options that the user can select.
2019-01-24 20:34:28 +01:00
Michael Fabian 'Xaymar' Dirks
0ae120835a filter-transform: Optimize rendering, fix bad property names
The Transform filter will now no longer render the child source more than once per tick(), resulting in an overall speed up for heavy sources. This also applies to mipmapping and shape rendering. Any other calls to video_render will instead just use the cached texture.

Additionally the crash on exit has been fixed which was caused by strings.hpp containing static const char*s and using these directly in obs calls. Instead we now use #define for those property names
2019-01-24 20:20:34 +01:00
Michael Fabian 'Xaymar' Dirks
e28334d27b util-memory: Fix alligned_alloc for MSVC
Microsofts _aligned_malloc has size and alignment switched around, which causes an unwanted exception.
2019-01-24 20:18:28 +01:00
Michael Fabian 'Xaymar' Dirks
b3c2845d15 filter-transform: Refactoring and formatting 2019-01-24 15:57:33 +01:00
Michael Fabian 'Xaymar' Dirks
e4a534fbfe plugin: Remove legacy instance references
The modern system is a self-registering system using initializers and finalizers
2019-01-24 14:26:08 +01:00
Michael Fabian 'Xaymar' Dirks
406326b378 util-math: Add 16-byte aligned version of vec2 2019-01-24 05:14:17 +01:00
Michael Fabian 'Xaymar' Dirks
98baa0d98b filter-transform: Fix order of functions 2019-01-24 04:35:22 +01:00
Michael Fabian 'Xaymar' Dirks
ff6176d7bc filter-transform: Destructor comes before Constructors 2019-01-24 04:33:56 +01:00
Michael Fabian 'Xaymar' Dirks
c1441e72c0 filter-transform: Refactor to match source-mirror structure 2019-01-24 04:32:14 +01:00
Michael Fabian 'Xaymar' Dirks
9d55013ec2 source-mirror: Improve rendering and add new rescaling options
Rendering will now use a cached version of the mirrored source in order to reduce rendering cost drastically for heavy sources or scenes. Additionally rescaling now uses the internal scene instead of being a custom implementation, allowing for some new things.

Rescaling now has a new option: Bounds Type! This option allows control over just how a source is scaled, by default it is set to Stretch, but there are other options that can keep the aspect ratio of the mirrored source in tact.

Additionally the ScalingMethod struct has been replaced with obs_scale_type, which means that Bilinear Low Resolution is now no longer an option.

Implements #35
2019-01-24 04:28:11 +01:00
Michael Fabian 'Xaymar' Dirks
82f64d16eb source-mirror: Refactoring and partially revert 4bb32a71bc
Initialization happens in the constructor again, as using a delayed initialization only caused update() to be slower.

Additionally refactored some variable names to make more sense.
2019-01-24 01:12:48 +01:00
Michael Fabian 'Xaymar' Dirks
144323bec3 source-mirror: Revert thread name from c5e02af178 2019-01-24 01:00:38 +01:00
Michael Fabian 'Xaymar' Dirks
6b7ef2d3ed gfx-source-texture: Allocate a render target in constructor
Can't really render without one.
2019-01-24 00:12:42 +01:00
Michael Fabian 'Xaymar' Dirks
bf35b54957 gs-rendertarget: Don't ignore failed creation of render target 2019-01-24 00:08:26 +01:00
Michael Fabian 'Xaymar' Dirks
04ddf76920 source-mirror: Release reference in modified_properties callback
Fixes the problem where additional references to other sources would appear if properties are opened or modified.

Fixes #34
2019-01-23 23:23:49 +01:00
Michael Fabian 'Xaymar' Dirks
4bb32a71bc source-mirror: Use load() and update() for initialization
load() is guaranteed to happen after all sources have been created and no earlier, and we can use update() to guarantee that we don't need to duplicate our initialization code in case we go back to initializing earlier than load().
2019-01-23 22:25:48 +01:00
Michael Fabian 'Xaymar' Dirks
b2b3f5fde8 source-mirror: Add empty list entry to select no source 2019-01-23 22:04:25 +01:00
Michael Fabian 'Xaymar' Dirks
c5e02af178 source-mirror: Remove unused references, set scene and thread name 2019-01-23 22:03:47 +01:00
Michael Fabian 'Xaymar' Dirks
73b96b8900 source-mirror: Fix various issues, reformat, redesign
This fixes the multi-reference issue that caused Source Mirror to keep a permanent reference to a source that should have been released.

The obs::audio_capture was also updated to now use the util::event code for improved callback support. There are a bunch of new additional checks in the acquire_input function that prevent bad references from happening, and is also now self-cleaning through the use of obs::source
2019-01-23 21:06:05 +01:00
Michael Fabian 'Xaymar' Dirks
911b8a1cf4 obs-audio-capture: Use util::event and delete move and copy operator
By using util::event a single obs::audio_capture can now have multiple callbacks for the same data, without requiring additional obs::audio_capture to be present. Additionally it allows us to stop listening on an obs callback if there are no actual listeners, and start listening as soon as there is a listener.

Move and Copy constructors are currently not supported by this class and thus have been marked deleted. Internally also now using obs::source to keep track of the used source.
2019-01-23 20:06:30 +01:00
Michael Fabian 'Xaymar' Dirks
52af973014 util-event: Listen, Silence callbacks and other operators 2019-01-23 20:02:50 +01:00
Michael Fabian 'Xaymar' Dirks
9848c5aa28 obs-source: Implement copy and move constructors and operators
There was no proper implementation for all copy and move constructors and operators before, which meant that occasionally the default behavior took over. This is not what we want, as the default behavior doesn't deal well with reference counted pointers.

Related: #32, #33
2019-01-23 18:49:20 +01:00
Michael Fabian 'Xaymar' Dirks
f910312a2d gfx-effect-source: Make destructor virtual 2019-01-23 02:26:32 +01:00
Michael Fabian 'Xaymar' Dirks
5a54a67946 project: Remove unused parameters and fix additional warnings 2019-01-23 02:26:32 +01:00
Michael Fabian 'Xaymar' Dirks
f0fa36a19e source-mirror: Fix format string and remove unused parameters 2019-01-23 02:26:32 +01:00
Michael Fabian 'Xaymar' Dirks
52f4e4641f project: Additional #ifdef _MSC_VER checks 2019-01-23 02:26:32 +01:00
Michael Fabian 'Xaymar' Dirks
f41bd2c7c1 source-mirror: Remove unnecessary register keyword
This keyword also no longer exists in C++17
2019-01-23 02:26:32 +01:00
Michael Fabian 'Xaymar' Dirks
ec544bddb3 gs-texture: Move ENABLE_BITMAPS_OPERATORS to global scope 2019-01-23 02:26:32 +01:00
Michael Fabian 'Xaymar' Dirks
e0e2d9fe80 project: Improve Linux support (#27 and #13)
While Linux was not an original goal of the project, it should still be supported out of the box. Therefore a number of changes are contained in this changeset:

- All C++ .h files were renamed to .hpp.
- All C includes (<....h>) were replaced with C++ includes (<c...>) and missing includes were added.
- std::memset and std::memcpy was replaced with memset and memcpy.
- All anonymous structs were removed where necessary.
- `extern "C"` was removed where it wasn't needed.
- #pragma warning was placed behind an #ifdef _MSC_VER
- The macros for `min`, `max` and `clamp` were removed as they were not used.
- `-fpedantic` was added to the GCC flags for bitmask support.
- `gs::rendertarget_op` is now declared before use.
- std::exception(const char*) was replaced with std::runtime_error(const char*).
- Added aligned_alloc and aligned_free macros for GCC and MSVC support.
- Replaced use of `sprintf_s` with `snprintf`.
- Placed additional guards around windows only code.

Additonally some changes were made that do not affect Linux:
- `NOMINMAX` and `NOINOUT` were removed.

Fixes: #27
Fixes: #13
2019-01-14 22:31:35 +01:00
Michael Fabian 'Xaymar' Dirks
ca1e26fd20 filter-shadow-sdf: Fix crash when adding source
I'm not sure how this one passed by me. Or how this worked, as I have screenshots and videos of it working before applying this fix.
2018-12-23 23:48:08 +01:00
Michael Fabian 'Xaymar' Dirks
95fdcff3a9 cmake: Reworked build system for Installers and Archives 2018-12-23 21:15:05 +01:00
Michael Fabian 'Xaymar' Dirks
c94a3fa11f util-math: Use C++ math header 2018-12-23 19:57:07 +01:00
Michael Fabian 'Xaymar' Dirks
3952c33c60 filter-blur: Add Directional Blur (Motion Blur) and Step Scaling
Directional Blur (also known as Motion Blur in some art software) enables full control over the direction the passes are applied in, which can further be combined with the scaling option. With this very simple blur effects can have a massively bigger influence.

Step Scaling allows for improved control over individual Blur passes and can be combined with Directional Blur to imitate certain effects. It also allows smaller Blur sizes to cover a larger area, although with a drastic loss in final quality. For example, if someone is streaming at 720p and wants to have their dynamic 2160p background blurry to a very high degree, this option would allow that at next to no quality loss in the final stream. The actual values that need to be used vary for each source and encoder however, so they will have to be chosen carefully.
2018-12-23 19:54:57 +01:00
Michael Fabian 'Xaymar' Dirks
ad97eeebe7 filter-blur: Fix translucent source rendering and modernize code
Translucent sources previously rendered with wrong alpha, which caused sources to look different than they should. With the new code, this is no longer the case and instead now renders the source correctly.

Additionally the modernized code should reduce any problems with rendering by reducing the amount of duplicated manually written code and instead using classes.
2018-12-23 18:27:24 +01:00
Michael Fabian 'Xaymar' Dirks
fd14fd62a6 gs-rendertarget: Add function to get texture directly 2018-12-23 17:56:52 +01:00
Michael Fabian 'Xaymar' Dirks
a6f9451654 filter-blur: Switch to Kernel Array instead of Kernel Texture
This speeds up Gaussian Blur and Linear Gaussian Blur drastically reduces time spent reading textures and instead uses existing registers - maximizing time spent reading the actual image texture.

See Also: #21 Blur Quality
2018-12-23 02:00:30 +01:00
Michael Fabian 'Xaymar' Dirks
92c4b54177 filter-blur: Add Linear Gaussian Blur
Similar to Linear Box Blur, this version of Gaussian Blur reduces the total number of sample by up to n. This results in a total sample count (per pass) of O(n+1) for even radii and O(n+2) for odd radii. The quality sacrificed to do this is higher this time, though careful adjustment of the halfTexelDelta value can bring it much closer to normal Gaussian Blur. The current offset however had no noticable effects on visual quality.

See Also: #21 Blur Quality
2018-12-22 22:54:30 +01:00
Michael Fabian 'Xaymar' Dirks
93df9b50b8 filter-blur: Add Linear Box Blur and combine all effects
Linear Box Blur abuses the fact that with Linear Sampling we can sample up to four adjacent texels at the same time and get a correct result for Box Blur back. Using this the total number of sample for Box Blur is reduced by n, making the total either n+1 (Even Radius) or n (Odd Radius).

Additionally all blur effect files have been merged into a single blur.effect file to reduce the time required to change a single parameter name. New blur effects should be added as a new technique instead of as a new effect file.

See Also: #21 Blur Quality
2018-12-22 22:08:55 +01:00
Michael Fabian 'Xaymar' Dirks
0c92f3dbf5 filter-shadow-sdf: Inner/Outer shadow based on signed distance fields
Adds Inner/Outer Shadows for dynamic sources based on signed distance field generation. This is fast, but does add a bit of latency when it comes to updates - which means that moving objects will leave a trail before the generator has a chance to update.

Fixes #3
2018-11-08 13:52:43 +01:00
Michael Fabian 'Xaymar' Dirks
c0cb20300b filter-blur: Rename factory and instance to blur_* 2018-11-08 11:16:55 +01:00
Michael Fabian 'Xaymar' Dirks
1aa42c58f0 plugin: Fix double plugin name in log line 2018-11-08 11:16:33 +01:00
Michael Fabian 'Xaymar' Dirks
844fcee0bd source-mirror: Additional protections against crashes on impossible behavior 2018-11-08 08:17:04 +01:00
Michael Fabian 'Xaymar' Dirks
ac06ff48bc source-mirror: Fix crash caused by source renames and forced destroy of a source 2018-11-08 08:08:38 +01:00
Michael Fabian 'Xaymar' Dirks
9ffe53754b obs-source: Add support for all signals on a source 2018-11-08 08:08:06 +01:00
Michael Fabian 'Xaymar' Dirks
79daeb5a75 util-event: Template event handler class 2018-11-08 08:07:49 +01:00
Michael Fabian 'Xaymar' Dirks
e4a5b34745 gfx-source-texture: Check for valid child and parent 2018-11-08 04:26:01 +01:00
Michael Fabian 'Xaymar' Dirks
6d25342302 obs-source: Check for early source destruction
This should prevent problems where the source is destroyed but a pointer is still around to it.
2018-11-08 04:25:21 +01:00
Michael Fabian 'Xaymar' Dirks
11fc32f935 source-mirror: Fix crash with audio mirroring
Fixes #23
2018-11-07 15:29:24 +01:00
Michael Fabian 'Xaymar' Dirks
b87ca70796 project: Formatting 2018-11-07 15:24:25 +01:00
Michael Fabian 'Xaymar' Dirks
16f55ca583 source-mirror: Fix crash with audio data on obs_shutdown (#22)
Due to the lack of checking aud and aoi, a rare race condition crash can be observed with audio mirroring enabled on closing OBS. In this case, aoi is used even though it is null, causing OBS to crash instead of closing normally.

Fixes #22
2018-11-07 14:44:07 +01:00
Michael Fabian 'Xaymar' Dirks
b5339b4429 source-mirror: Add support for scenes and fix last commit 2018-11-07 14:44:07 +01:00
Michael Fabian 'Xaymar' Dirks
c084a0bfd0 source-mirror: Use a private scene source for rendering 2018-11-07 14:44:07 +01:00
Michael Fabian 'Xaymar' Dirks
0be79842e7 filter-transform: Fix various warnings 2018-11-07 14:44:07 +01:00
Michael Fabian 'Xaymar' Dirks
eef9f0697d gfx-effect-source: Fix various warnings 2018-11-07 14:44:07 +01:00
Michael Fabian 'Xaymar' Dirks
55abc87126 plugin: extern "C" around obs includes 2018-11-07 14:44:07 +01:00
Michael Fabian 'Xaymar' Dirks
f54efe7704 gfx-source-texture: Support for new obs-source managed class
This also adds support for proper source management in unmanaged cases.
2018-11-07 14:44:06 +01:00
Michael Fabian 'Xaymar' Dirks
234cbf5dab obs-tools: Various obs related tools 2018-11-07 14:44:06 +01:00
Michael Fabian 'Xaymar' Dirks
9c0761adde obs-source: Managed class for obs_source_t 2018-11-07 14:44:06 +01:00
Michael Fabian 'Xaymar' Dirks
daad792eda filter-blur: Add support for scene as mask input (#14)
Adds full support for Scenes as mask input so that you can re-use your overlay scene as a blur input and have the blur follow behind your overlay.

Closes #14
2018-10-01 01:03:48 +02:00
Michael Fabian 'Xaymar' Dirks
382a217f06 filter-blur: Add support for image and source masks (#14) 2018-10-01 01:00:00 +02:00
Michael Fabian 'Xaymar' Dirks
ebbc0cb1ce filter-blur: Fix Mask Type and split Color into Color and Alpha 2018-10-01 00:57:22 +02:00
Michael Fabian 'Xaymar' Dirks
999df5e6e5 gfx-source-texture: Refactoring 2018-10-01 00:54:18 +02:00
Michael Fabian 'Xaymar' Dirks
d56f4f9eac filter-blur: Add proper mask options
* Removes the old 'Region' fields and places them under a 'Mask' option that can do much more.
* Supported Mask types: Region, Image, Source.
* Image and Source mask types allow for a color filter and multiplier.
2018-09-30 22:48:47 +02:00
Michael Fabian 'Xaymar' Dirks
cfaa7eb1b9 strings: Add translated File Filters for Images 2018-09-30 21:55:13 +02:00
Michael Fabian 'Xaymar' Dirks
f327f4ccc6 util-math: Undefine macro 2018-09-30 21:44:00 +02:00
Michael Fabian 'Xaymar' Dirks
3135214a03 filter-blur: Refactor and formatting
* Now using a Factory and Instance approach to simplify and beautify the code at the same time.
* Additionally we now keep track of created filters and only load data if there is a filter active, and unload data if there are no more filters. This reduces memory and GPU overhead when no filter is active, but adds a first time filter creation overhead.
* Variables and functions now use snake_case.
2018-09-30 20:50:00 +02:00
Michael Fabian 'Xaymar' Dirks
354445bc81 strings: Remove plugin:: namespace 2018-09-30 20:18:13 +02:00
Michael Fabian 'Xaymar' Dirks
8296af68c6 project: Rename 'Filter' to 'filter' 2018-09-30 18:49:52 +02:00
Michael Fabian 'Xaymar' Dirks
da22e72da7 filter-transform: Fix mipmapping for npot input
The filter will now automatically rescale the parent stack into the next best power of two size. With this, even non-power-of-two sources can now be mipmapped semi-correctly.

To accurately support mipmapping even for npot textures, this feature would have to be built into OBS and OBS would have to stop refusing to create textures with mipmaps that are not a power of two in size. Almost all common Direct3D 11 (except Intel) are capable of npot mipmaps at full speed, while OpenGL usually depends on the GPU and Driver used.
2018-09-29 17:05:58 +02:00
Michael Fabian 'Xaymar' Dirks
6561ea9b3c util-math: Rename get_power_of_two to get_power_of_two_exponent 2018-09-29 16:57:41 +02:00
Michael Fabian 'Xaymar' Dirks
9a8a44045b gs-mipmapper: Fix support for very small mipmaps
This fixes the final mip map of a texture being empty, in cases where either width or height is reduced to just a single pixel.
2018-09-29 16:57:17 +02:00
Michael Fabian 'Xaymar' Dirks
0a7283b2ba filter-transform: more Formatting, add mipmap options 2018-09-29 15:57:25 +02:00
Michael Fabian 'Xaymar' Dirks
dbe577e372 filter-transform: Formatting, refactoring and mipmapping
The '3D Transform' filter now support mipmapping using the Linear generator. This results in smoother images when the shape is squished or distant, instead of a pixelated mess.
2018-09-29 01:07:38 +02:00
Michael Fabian 'Xaymar' Dirks
7c520ae9ee gs-mipmapper: Implement actual mipmap generation
This enables full mipmapping support for textures with a shader view that allows accessing different mip levels. In order to access mip levels, you have to specify gs::texture:🎏:BuildMipMaps when creating the texture, as OBS currently forces the maximum mip level to 1 even if you actually have mip data available.
2018-09-29 01:06:30 +02:00
Michael Fabian 'Xaymar' Dirks
c591902fea gs-texture: Allow texture creation without data
This is a valid operation and allows for creation of uninitialized textures, which can be copied to but should not be read from until that moment.
2018-09-28 23:34:43 +02:00
Michael Fabian 'Xaymar' Dirks
95018868dc gs-mipmapper: Formatting and refactoring 2018-09-28 23:32:35 +02:00
Michael Fabian 'Xaymar' Dirks
bb5c1f80b5 gfx-source-texture: Formatting and refactoring 2018-09-28 23:31:21 +02:00
Michael Fabian 'Xaymar' Dirks
bc89eaf33a util-math: Fix is_power_of_two_loop for non-64-bit types 2018-09-28 21:21:40 +02:00
Michael Fabian 'Xaymar' Dirks
6e03f2334d gs-mipmapper: Textures with no mip level do not exist 2018-09-28 21:21:24 +02:00
Michael Fabian 'Xaymar' Dirks
f78be9c387 gs-texture: Undo removal of mip_data check 2018-09-28 21:21:04 +02:00
Michael Fabian 'Xaymar' Dirks
04d7379ff1 filter-transform: Formatting 2018-09-28 14:49:59 +02:00
Michael Fabian 'Xaymar' Dirks
b5746e473b gfx-effect-source: Remove mipmapper 2018-09-28 14:26:06 +02:00
Michael Fabian 'Xaymar' Dirks
ff8618c339 gs-mipmapper: Specify source and target and remove Bilinear 2018-09-28 14:24:30 +02:00
Michael Fabian 'Xaymar' Dirks
afc04a5d0e gs-texture: Use util::math functions 2018-09-28 14:23:47 +02:00
Michael Fabian 'Xaymar' Dirks
528d36a13f util-math: Fix compile error and add get_power_of_two_* 2018-09-28 14:23:26 +02:00
Michael Fabian 'Xaymar' Dirks
391fca7497 gs-effect: Formatting 2018-09-28 14:18:09 +02:00
Michael Fabian 'Xaymar' Dirks
1923a724d7 util-math: Formatting and is_power_of_two templates 2018-09-28 14:17:43 +02:00
Michael Fabian 'Xaymar' Dirks
db13c50ec5 gfx-effect-source: Add initial code for texture support 2018-09-28 11:55:55 +02:00
Michael Fabian 'Xaymar' Dirks
7b995cf50b gs-vertexbuffer: Fix heap corruption 2018-09-28 11:47:50 +02:00
Michael Fabian 'Xaymar' Dirks
72d15bad31 gs-mipmapper: Slight formatting changes 2018-09-27 06:21:39 +02:00
Michael Fabian 'Xaymar' Dirks
bc63696306 gs-mipmapper: Early attempts at proper mipmap rendering
This class is an attempt at adding dynamic mipmapping support to OBS, which is lacking this feature. It is pretty much a hack until I figure out how to do it for both d3d11 and opengl and can make a PR for obs-studio to include this ability by default.
2018-09-27 06:09:43 +02:00
Michael Fabian 'Xaymar' Dirks
14b370a7a5 gs-texture: Remove accidentally added enum 2018-09-27 05:36:49 +02:00
Michael Fabian 'Xaymar' Dirks
fb77cc90a6 gs-rendertarget: Allow retrieving color and zstencil format 2018-09-27 05:23:14 +02:00
Michael Fabian 'Xaymar' Dirks
faeb5af45b gs-rendertarget: Formatting and refactoring 2018-09-27 05:17:08 +02:00
Michael Fabian 'Xaymar' Dirks
ded5896fca gs-texture: Add get_color_format method 2018-09-27 05:11:37 +02:00
Michael Fabian 'Xaymar' Dirks
52cb7a6d20 gs-texture: Formatting, refactoring and cleanup 2018-09-27 05:09:38 +02:00
Michael Fabian 'Xaymar' Dirks
4c1e66e27b gs-vertexbuffer: Remove #pragma region 2018-09-27 03:11:04 +02:00
Michael Fabian 'Xaymar' Dirks
8a897c8898 gs-vertex: Formatting and fix constructors 2018-09-27 03:07:38 +02:00
Michael Fabian 'Xaymar' Dirks
431fee7b9b gs-vertexbuffer: Do not assign uv layers that do not exist 2018-09-27 03:00:17 +02:00
Michael Fabian 'Xaymar' Dirks
cace17a817 gs-vertexbuffer: Allow specifying amount of UV layers
This should reduce GPU memory usage for vertex buffers that need less UV information than the maximum allowed UV layers possible.
2018-09-27 02:57:53 +02:00
Michael Fabian 'Xaymar' Dirks
c3e67bad97 gs-vertexbuffer: Formatting and various fixes
With the addition of clang-format and cppcheck, and the changes to .editorconfig, various changes need to be added.
2018-09-27 02:49:00 +02:00
Michael Fabian 'Xaymar' Dirks
a54a526c4b plugin: Write plugin version to log file on load and unload 2018-08-13 01:01:15 +02:00
Michael Fabian 'Xaymar' Dirks
e8da137ab6 filter-custom-shader: Basic custom shader support
The Custom Shader Filter is now capable of rendering a custom shader using the gfx::effect_source class as a backend. An example shader is provided for starting off, more advanced examples may come later.

Related: #5
2018-04-29 03:07:26 +02:00
Michael Fabian 'Xaymar' Dirks
0957ce0bb9 gfx-effect-source: Implement basic functionality
Rendering is now possible, although some parameter types are not yet supported. So far, booleans and floats will work fine, integers will cause an error in OBS Studios rendering code for an unknown reason.
2018-04-29 03:05:53 +02:00
Michael Fabian 'Xaymar' Dirks
b4de874ec9 gs-effect: Work around for an obs-studio issue with Integer parameters 2018-04-29 03:01:20 +02:00
Michael Fabian 'Xaymar' Dirks
6057101f26 gs-vertexbuffer: Fix usage of gs_vertexbuffer_get_data() 2018-04-29 03:00:40 +02:00
Michael Fabian 'Xaymar' Dirks
e200127595 source-mirror: Fix compiler warnings 2018-04-29 03:00:04 +02:00
Michael Fabian 'Xaymar' Dirks
c9ed74a3f9 gs-texture: Additional type safety and new methods 2018-04-29 02:59:51 +02:00
Michael Fabian 'Xaymar' Dirks
d59b54811f utility: Code for using enumerations as flags/bitsets
It baffles me that this is not just part of the language itself from the beginning, it's used nearly everywhere and is needed for type safety.
2018-04-29 01:02:05 +02:00
Michael Fabian 'Xaymar' Dirks
af71a7cc1d filter-blur: Allow applying Blur to a sub-region of the source only
The Blur Filter can now be applied to a region inside the source itself, the inverse of that region, and/or a feathered version of that region. This allows for easier scene setups where only some parts need to be blurred, but the rest can be left as is.

Fixes #12
2018-04-29 00:14:29 +02:00
Michael Fabian 'Xaymar' Dirks
1ba9145fbd filter-blur: Use only a single Gaussian Kernel Texture 2018-04-28 14:41:18 +02:00
Michael Fabian 'Xaymar' Dirks
6c1e874369 filter-blur: Refactoring, formatting and copyright 2018-04-28 13:59:54 +02:00
Michael Fabian 'Xaymar' Dirks
0cd4520774 util-math: Bilateral Blur 2018-04-28 12:45:23 +02:00
Michael Fabian 'Xaymar' Dirks
c4942da235 source-mirror: Refactoring 2018-04-28 12:45:11 +02:00
Michael Fabian 'Xaymar' Dirks
410ba9df88 source-mirror: Implement mirroring of Source Audio
From this point on, Source Mirror is now capable of real-time mirroring of Video and Audio. This can help if you need different filters per scene for your microphone or voice chat, depending on the scene (audio ducking for pause scene, no audio ducking for live gaming).
2018-04-27 23:38:49 +02:00
Michael Fabian 'Xaymar' Dirks
57c2daa80c obs-audio-capture: Helper class for automated capture of source audio 2018-04-27 23:34:26 +02:00
Michael Fabian 'Xaymar' Dirks
e621b69aa2 source-mirror: Ensure that we have a source on video_tick 2018-04-24 17:07:06 +02:00
Michael Fabian 'Xaymar' Dirks
5e4a781912 source-mirror: Ensure that we have a proper source on activate() 2018-04-24 15:31:51 +02:00
Michael Fabian 'Xaymar' Dirks
d8d60f7a21 gfx-effect-source: Check for effect == nullptr in test_for_updates 2018-04-24 13:58:07 +02:00
Michael Fabian 'Xaymar' Dirks
49964e15be gfx-source-texture, source-mirror: Prevent recursion caused by Source Mirror 2018-04-24 13:48:42 +02:00
Michael Fabian 'Xaymar' Dirks
ec19f44f96 project: Don't prefix includes with "libobs/" 2018-04-23 17:53:27 +02:00
Michael Fabian 'Xaymar' Dirks
0b5a848c32 cmake: Improve automatic versioning 2018-04-23 17:52:40 +02:00
Michael Fabian 'Xaymar' Dirks
fc78bd83a6 filter-custom-shader: Initial version based on gfx::effect_source 2018-04-09 13:28:13 +02:00
Michael Fabian 'Xaymar' Dirks
9f91039ca0 util-memory: Don't use _dbg versions for aligned_alloc/free 2018-04-09 13:27:51 +02:00
Michael Fabian 'Xaymar' Dirks
5e9f113553 gfx-effect-source: Base class for Custom Shaders
gfx::effect_source is the base class for all Custom Shader Sources and Transitions, which reduces the overall workload to a single file, but unfortunately also reducing the effective customization per source a bit.
2018-04-09 13:27:22 +02:00
Michael Fabian 'Xaymar' Dirks
9ae8ecc3e1 source-mirror: Fix crashes caused by uncaught exception 2018-04-09 13:23:57 +02:00
Michael Fabian 'Xaymar' Dirks
fe05dca51e gfx, gs: Fix commits 9f518764b6 & 2adfa5765c 2018-03-20 12:50:17 +01:00
Michael Fabian 'Xaymar' Dirks
22eb53a856 gfx: Initial code for an Effect Source (Custom Shader)
This class will be used by any Custom Shader type (Filter, Source, Transition) and as such is pretty much used as the basis for all of it.
2018-03-20 12:45:41 +01:00
Michael Fabian 'Xaymar' Dirks
2adfa5765c gs: Rename to snake_case instead of PascalCase
This should prevent mishaps with upper/lowercase typos and fits in better with the C++ standard code, which is also in snake_case.
2018-03-20 12:44:02 +01:00
Michael Fabian 'Xaymar' Dirks
9f518764b6 gfx: Move util::SourceTexture to gfx::SourceTexture
'gfx' is the new preview for Graphics utilities that do not act as a wrapper around the Graphics Subsystem directly.
2018-03-08 11:28:23 +01:00
Michael Fabian 'Xaymar' Dirks
53073660c0 Merge branch 'filter-custom-shader' 2018-03-05 16:50:57 +01:00
Michael Fabian 'Xaymar' Dirks
65a7ac696b source-mirror: Use util:SourceTexture instead of custom code 2018-03-05 16:50:19 +01:00
Michael Fabian 'Xaymar' Dirks
304db23335 util-math: Add SizeFromString method
Converts a String to an std::pair of int64_t (long long), which contain the size or 0 if none could be parsed. Any delimiter except digits(0-9), a minus sign(-) or a plus sign(+) between width and height are allowed. If a plus or minus sign is used as a delimiter, it must immediately be followed by the second size number. This allows for formats such as: 100x100, 100:100, 100p100, 100@100, 100+100 and so on, but not formats such as 100+:100, 100ThisIsSomeReall+yLongText100, etc.

The parameter 'allowSquare' also determines what to do when the height parameter is not found. A value of true will have the function return <width,width> instead of <width,0>.
2018-03-05 16:36:20 +01:00
Michael Fabian 'Xaymar' Dirks
1f60e3d56f util-source-texture: Fix commit 75aeb561bd
Including obs.h directly is not compatible with CPack installations of libobs.
2018-03-05 16:21:30 +01:00
Michael Fabian 'Xaymar' Dirks
224544efff util-source-texture: Add method to retrieve obs_source_t* obejct 2018-03-05 16:19:42 +01:00
Michael Fabian 'Xaymar' Dirks
75aeb561bd util: Add SourceTexture utility
This utility class is used to quickly render and retrieve a Texture from a source. It should be used in place of manual rendering since it can be updated quickly, fixing outstanding issue in all places of the plugin instead of just one.
2018-03-05 15:17:34 +01:00
Michael Fabian 'Xaymar' Dirks
cc68e2864f gs-rendertarget: Add and implement GetTexture(...) methods 2018-03-05 15:10:51 +01:00
Michael Fabian 'Xaymar' Dirks
7d065c131d gs-texture: Allow creation from existing gs_texture_t* 2018-03-05 15:10:19 +01:00
Michael Fabian 'Xaymar' Dirks
01bf510a28 util-memory: Use standard alloc/free and fix incorrect aligned length
The custom allocator occasionally returned memory that was aligned, but did not have enough space to store the actual size due to a calculation error in the size. This resulted in situations where allocating 1022 bytes would give you a writable buffer of only 1020 bytes or less, or also known as writing into unknown memory, possibly even the heap. This is now fixed by doubling the padding used.

Additionally it will now default to using standard allocators, which should work better and rely on the Compiler.
2018-02-24 04:35:49 +01:00
Michael Fabian 'Xaymar' Dirks
eccd95c68c filter-custom-shader: First working version with several fixes
- Shaders now have all promised special variables available to them.
- 'Pass' (int) is no longer a special variable.
- Files should now properly update every half second.
- Fixed a ton of compiler warnings.
- Forced loading shaders from text instead of files to avoid caching.
- Fixed file modification tests always failing.
- Actually renders shaders now.

Known issues:
- Parameters aren't updated with file modifications unless the file is actually changed in the UI.
2018-01-25 10:26:09 +01:00
Michael Fabian 'Xaymar' Dirks
107103001b gs-effect: Add HasParameter and fix Set*Array
HasParameter can be used to safely check if a parameter exists and such should be preferred over try-catch blocks. Additionally, SetFloat2, SetFloat3, SetFloat4, SetFloatArray, SetInteger2, SetInteger3, SetInteger4 and SetIntegerArray should no longer cause rendering issues due to invalid buffer sizes.
2018-01-25 09:12:47 +01:00
Michael Fabian 'Xaymar' Dirks
b4eadc2995 filter-blur: Don't override blend mode of original source
This causes a black square to appear, since the blend mode should ideally match what the original source thought it would be.
2018-01-25 05:11:15 +01:00
Michael Fabian 'Xaymar' Dirks
080048a471 filter-custom-shader: UI improvements and initial rendering code 2018-01-19 20:46:54 +01:00
Michael Fabian 'Xaymar' Dirks
26b447901c filter-custom-shader: Implement new Filter 'Custom Shader'
Custom Shader allows you to write your own effect files and just have them applied to your source(s). It will dynamically update the properties to match the parameters in the source as well as offer some special parameters to the shader.

# Conflicts:
#	CMakeLists.txt
#	data/locale/en-US.ini

# Conflicts:
#	data/locale/en-US.ini
2018-01-19 20:46:54 +01:00
Michael Fabian 'Xaymar' Dirks
adafbf40ca util-memory: Expose aligned_offset to code 2018-01-19 20:46:22 +01:00
Michael Fabian 'Xaymar' Dirks
67099c2b23 gs-effect: Fix assigning of Integer and Float arrays 2018-01-19 20:46:21 +01:00
Michael Fabian 'Xaymar' Dirks
734ea577b8 source-mirror: Release source and fix compiler warnings 2018-01-19 20:46:21 +01:00
Michael Fabian 'Xaymar' Dirks
a307283349 gs-effect: Allow directly assigning OBS GS objects 2018-01-19 20:46:21 +01:00
Michael Fabian 'Xaymar' Dirks
0565065c2b source-mirror: 'Point' rescale should use point sampling 2018-01-19 05:10:42 +01:00
Michael Fabian 'Xaymar' Dirks
102e4e5eeb gs-effect: Implement method to override the next sampler 2018-01-19 05:10:10 +01:00
Michael Fabian 'Xaymar' Dirks
36cd5bbf21 gs-sampler: Add wrapper for gs_samplerstate_t
Simple manager with automatic updating whenever the object is requested.
2018-01-19 05:06:42 +01:00
Michael Fabian 'Xaymar' Dirks
662199fb4a source-mirror: Fix scaling issues and allow keeping original size
Scaling was previously incorrectly rendering the source with another effect forced onto it, resulting in slower rendering and some sources that would no longer render properly.

Additionally the new option allows the user to have the source render at the original resolution in order to allow previously applied transform to stay identical. The rescaling however will no longer apply to filters after this source then, thus the speed bonus is lost.

Also categorized the localization file and adds descriptions for existing and new properties for Source Mirror.
2018-01-19 04:15:40 +01:00
Michael Fabian 'Xaymar' Dirks
5e0b387dc1 gs-vertexbuffer: Functions to directly access internal buffers
Skips the previously necessary step to call At(0) and use the pointers stored in GS::Vertex to directly write to the buffers.
2018-01-19 03:15:12 +01:00
Michael Fabian 'Xaymar' Dirks
fe3186220c gs-vertexbuffer: Slight Refactor to unify code style 2018-01-19 03:13:02 +01:00
Michael Fabian 'Xaymar' Dirks
3a05c08daf gs-vertexbuffer: Implement copy and move constructor/assignment 2018-01-19 03:05:24 +01:00
Michael Fabian 'Xaymar' Dirks
b4d63e919e gs-vertex: Allocate memory if none is assigned
Allows code to directly use GS::Vertex for their own purposes without having to rely on GS::VertexBuffer, which comes with the added overhead of allocating GPU memory.
2018-01-19 03:01:54 +01:00
Michael Fabian 'Xaymar' Dirks
82ec6b93ec gs-vertexbuffer: Also free layer data
Fixes a tiny memory leak caused by a missing free.

Related: #9
2018-01-18 05:22:57 +01:00
Michael Fabian 'Xaymar' Dirks
1ebb0beac4 gs-vertexbuffer: Avoid relying on std for aligned types
Changes the GS::VertexBuffer storage to be one continuous buffer that is properly aligned and is also now used for GS::Vertex. This halves the necessary memory, removes reallocation cost and removes the copy necessary to get things onto the GPU.

Related: #9
2018-01-18 05:02:10 +01:00
Michael Fabian 'Xaymar' Dirks
4983e0ca06 gs: Define shared limits and exclude mipmapper
This unifies the logic in GS::IndexBuffer and GS::VertexBuffer so that both can take the same amount of vertices. Additionally the limit for vertices was increased to 16777216 from 65536 to allow for proper models to be stored.
2018-01-18 05:02:10 +01:00
Michael Fabian 'Xaymar' Dirks
53568d445b gs-vertex: Hint VS2013/2015 at proper alignment
The previous fix unfortunately didn't actually fix it and instead made the crash invisible at first and then corrupt the heap at a later point. With this, VS2013 and VS2015 create code identical to what VS2017 creates, and no longer seem to crash.

Related: #9
2018-01-18 03:12:52 +01:00
Michael Fabian 'Xaymar' Dirks
e9fc9e89f2 plugin: Use self-registration code everywhere 2018-01-16 11:47:24 +01:00
Michael Fabian 'Xaymar' Dirks
cb1ae28b07 gs-vertexbuffer: Use aligned memory and fix null pointer
This fixes the crash on creation issues, but a crash on exit still happens with the plugin installed. Unsure what exactly is causing it but it looks like something is writing into heap memory.

Related: #9
2018-01-08 19:08:49 +01:00
Michael Fabian 'Xaymar' Dirks
1e2cff48c9 util-memory: Implement aligned std::allocator 2018-01-08 19:01:26 +01:00
Michael Fabian 'Xaymar' Dirks
8a595501b3 gs-vertex, util-math: Use _aligned_malloc instead of util::malloc_aligned 2018-01-08 17:41:26 +01:00
Michael Fabian 'Xaymar' Dirks
1993c42ea6 filter-transform: Use 16-byte aligned vec3 & vec4 2018-01-08 17:31:50 +01:00
Michael Fabian 'Xaymar' Dirks
3e97906b32 gs-vertex: Always align to 16-byte 2018-01-08 17:30:33 +01:00
Michael Fabian 'Xaymar' Dirks
f721ad0f19 util-math: Fix standalone compilation issues
All libobs files must be loaded with libobs/... instead of directly.
2018-01-08 16:47:39 +01:00
Michael Fabian 'Xaymar' Dirks
08c088ce5a util-math, util-memory: Formatting 2018-01-08 16:14:54 +01:00
Michael Fabian 'Xaymar' Dirks
a3d859fb4f util-math: Implement aligned vec3 and vec4 versions
A bug in Visual C++ 2013 32-bit & 2015 32-bit causes the C++ compiler to incorrectly align the vec3 and vec4 structs to 8-byte instead of 16-byte, resulting in a crash if the target PC supports SSE. Visual Studio 2017 and 64-bit builds are not affected.

Related: #9
2018-01-08 15:29:42 +01:00
Michael Fabian 'Xaymar' Dirks
cf17cdab19 util-memory: Rename aligned_malloc 2018-01-08 11:35:05 +01:00
Michael Fabian 'Xaymar' Dirks
32ed7b645a util-memory: Memory utility functions 2018-01-08 10:52:53 +01:00
Michael Fabian 'Xaymar' Dirks
add8012549 source-mirror: Add a Source Mirror source
The source allows you to apply effects to the same source without requiring a new instance of the source. Any changes done to the original source also apply to the mirror, so there is less total work that needs to be done.

It can also rescale the source, allowing you to use the same source as a cheap instant backdrop with Blur for example. What you do in the end is completely unwritten and up to you to decide.
2017-12-14 08:46:36 +01:00
Michael Fabian 'Xaymar' Dirks
78ccd94639 filter-blur: Ensure that the initializer is unique 2017-12-14 08:05:06 +01:00
Michael Fabian 'Xaymar' Dirks
f5fca108d7 gs-rendertarget: Fix missing initialization 2017-12-14 08:04:54 +01:00
Michael Fabian 'Xaymar' Dirks
e7bbb213a4 filter-blur: Fix Blur filter occasionally not rendering
An earlier commit changed how Blur filter rendered and thus m_technique was no longer being initialized, resulting in the check randomly failing if the memory was just right.

This also adds some more extra logging to the instance creation in case things fail and fixed one MSVC warning.

Fixes #1
2017-12-14 03:52:29 +01:00
Michael Fabian 'Xaymar' Dirks
9ab06e7368 gs-mipmapper: Fix type conversion warnings 2017-12-14 03:12:24 +01:00
Michael Fabian 'Xaymar' Dirks
762c961ed3 gs-vertexbuffer: Fix incorrect vertex buffer size on GPU crash 2017-12-14 03:09:02 +01:00
Michael Fabian 'Xaymar' Dirks
0d794254be util-math: Fix MSVC 2013 errors 2017-12-14 03:00:31 +01:00
Michael Fabian 'Xaymar' Dirks
6c4b8bbf12 filter-blur: Fix up some MSVC warnings 2017-12-14 03:00:08 +01:00
Michael Fabian 'Xaymar' Dirks
09d5ac4635 gs-vertexbuffer: Fix support for 20.x graphics API
Reverts an earlier change that made the plugin rely on 21.x features.
2017-12-14 02:59:50 +01:00
Michael Fabian 'Xaymar' Dirks
911f7696bb filter-blur: Reduce log spam on error 2017-12-14 02:35:47 +01:00
Michael Fabian 'Xaymar' Dirks
9d4314141a gs-texture: Remove unused function 2017-12-14 01:39:43 +01:00
Michael Fabian 'Xaymar' Dirks
578c963a02 filter-blur: Code cleanup, fixes and more
- Fixed Gaussian Blur having color issues with radii that aren't a power of 2.
- Improved error reporting to better debug problems where Blur doesn't render.
- Switched from manual object management to managed classes.
- Lots of code cleanup for maintainability.
2017-12-14 01:39:33 +01:00
Michael Fabian 'Xaymar' Dirks
408481c22d util-math: Functions to calculate nearest power of two values 2017-12-14 01:36:07 +01:00
Michael Fabian 'Xaymar' Dirks
d78d3024cc util-math: Add commonly used mathematical functions 2017-12-14 00:28:35 +01:00
Michael Fabian 'Xaymar' Dirks
61f20a83ad filter-blur: Use self-registration feature 2017-12-14 00:24:37 +01:00
Michael Fabian 'Xaymar' Dirks
9e813d98f1 gs-vertexbuffer: Update to new API adding flush_direct functionality
This fixes the crashes on deleting a filter without requiring painful memory editing.
2017-12-14 00:22:27 +01:00
Michael Fabian 'Xaymar' Dirks
71900e6752 gs-effect: Allow retrieving effect parameter name 2017-11-05 21:50:38 +01:00
Michael Fabian 'Xaymar' Dirks
4b364865a1 gs-effect: Allow empty effect and check errorMessage validity 2017-11-05 21:31:05 +01:00
Michael Fabian 'Xaymar' Dirks
fc02f3fdad plugin: Allow new filters and transitions to self-register 2017-11-05 20:05:48 +01:00
Michael Fabian 'Xaymar' Dirks
a9b13787be gs-effect: Provide parameter count and index access 2017-11-05 16:47:36 +01:00
Michael Fabian 'Xaymar' Dirks
c7cfbff7dd gs-vertexbuffer: Workaround for a foreign deallocation bug in libobs
The graphics subsystem in OBS is freeing memory it didn't allocate, resulting in stack/heap corruption and other kinds of messy situations. The official "fix" for this is to use bmalloc, but then you lose any kind of ability to re-use the same buffer for multiple vertex buffers or update on the fly without adjusting code that is possibly outside of your control (such as in libraries).

This works around the issues by "patching" the gs_vertexbuffer object to no longer hold a reference to the gs_vb_data object. Currently only D3D11 is supported for this kind of hack and it might break in a future obs-studio release.

PR fixing this Issue: https://github.com/jp9000/obs-studio/pull/993
2017-11-03 00:13:07 +01:00
Michael Fabian 'Xaymar' Dirks
3450c149aa filter-displacement: Fix loading displacement filter 2017-11-02 17:57:52 +01:00
Xaymar
c0aa79abbe filter-blur: Faster initialization for Gaussian Blur 2017-10-22 19:04:41 +02:00
Xaymar
b266af1044 gs: Fix some type conversion warnings 2017-10-22 18:58:38 +02:00
Xaymar
6a208ed215 gs: Leave GS context and then return texture
This fixes a hang when calling GetTextureObject() on a GS::RenderTarget.
2017-10-22 18:57:28 +02:00
Michael Fabian Dirks
3899476a7f filter-transform: Actually include new C++ class header 2017-09-18 00:16:46 +02:00
Michael Fabian Dirks
27744f8b2a gs: Fix commit eb1612c6ee 2017-09-18 00:15:57 +02:00
Michael Fabian Dirks
90563e6b31 filter-transform: Add shearing support 2017-09-18 00:05:55 +02:00
Michael Fabian Dirks
b07b5b1a0a filter-transform: Update code and fix camera and scaling 2017-09-18 00:05:54 +02:00
Michael Fabian Dirks
4de0a0ca16 filter-transform: Move translation strings to code 2017-09-18 00:05:54 +02:00
Michael Fabian Dirks
88cc142afb gs, effects: Anisotropic Mipmapper Class
End goal of this is to be an anisotropic filtering purely on the GPU without any actual mipmaps in the graphics subsystem. The basic idea behind it is that we can create all possible mipmaps in a twice as big texture as the original and then can efficiently render it no matter the GPU features as it will only consume one sampler.

The texture that it outputs will have both horizontal, vertical and full mipmaps in it. Horizontal mipmaps reduce Width, Vertical mipmaps reduce Height and full mipmaps reduce both. This means that LoD levels are both possible in the X and Y direction, allowing for much greater precision mipmapping on all GPUs.

This is a temporary solution until we can directly copy updated textures to a mipmap level.
2017-09-18 00:05:54 +02:00
Michael Fabian Dirks
fce3fb8977 filter-shape: Use new GS classes 2017-09-18 00:05:53 +02:00
Michael Fabian Dirks
e619f03217 filter-blur: Remove unused and duplicate functions 2017-09-18 00:05:40 +02:00
Michael Fabian Dirks
eb1612c6ee gs: Wrap OBS Graphics Subsystem in proper C++ classes 2017-09-18 00:05:28 +02:00
Michael Fabian Dirks
607c8bf170 filter-transform: Formatting, Camera improvements and general fixes 2017-08-20 00:31:19 +02:00
Michael Fabian Dirks
4dbf414214 effects, filter-blur: Precalculated Kernel, Formatting, Rendering and more
Filter:
* Massively improved Rendering loop to reduce overhead and provide cleaner code.

Gaussian Blur:
* Added precalculated Kernels using Textures. Slightly reduced GPU load.
* Added basic attempt at a Nvidia o(n/2+1) gaussian blur implementation.
* Fix up LOD for texture sampling.

Box Blur:
* Halved loop count.
2017-08-20 00:25:05 +02:00
Michael Fabian Dirks
374d1183ea filter-shape: Formatting improvements 2017-08-19 23:56:53 +02:00
Michael Fabian Dirks
9c8778b6f6 filter-displacement: Formatting improvements 2017-08-19 23:56:05 +02:00
Michael Fabian Dirks
1b58632a3f plugin: Formatting 2017-08-19 23:47:54 +02:00
Michael Fabian Dirks
90138ef636 project: Update Copyright Notice 2017-08-19 23:41:53 +02:00
Michael Fabian Dirks
52c3a0171e filter-blur: Initial work on optimization 2017-07-18 16:50:30 +02:00
Michael Fabian Dirks
9c56898842 plugin: Formatting 2017-07-18 16:45:30 +02:00
Michael Fabian Dirks
58deaa9408 filter-displacement: Move effects to 'data/effects' 2017-07-06 06:23:06 +02:00
Michael Fabian Dirks
9967a6ebf0 filter-blur: Add Color Format option
This option allows applying the blur to other color formats such as YUV. Bilateral Blur benefits the most from this, resulting in smoother images at lower kernel sizes.
2017-07-06 06:02:41 +02:00
Michael Fabian Dirks
9c97d90cc2 filter-blur: Split off blur rendering into method 2017-07-06 05:57:57 +02:00
Michael Fabian Dirks
191b1ea23f filter-blur: Move effects to 'data/effects'
This should help reusing the same effect instead of having an effect per filter.
2017-07-06 05:52:46 +02:00
Michael Fabian Dirks
d4778a56f4 gs-helper: Fix formatting of License header 2017-07-06 05:03:32 +02:00
Michael Fabian Dirks
2621d4961f filter-blur: Multiple changes, see description
* Added a 'Bilateral' de-noising blur, currently very resource hungry. It also has two extra sliders called 'Smoothing' and 'Sharpness', the former controls how smooth the output is
* Updated effect loading to be global instead of per instance.
* Changed default blur size to 5px.
* Simplified render loop (see previous effect commit).
2017-07-03 07:20:15 +02:00
Michael Fabian Dirks
5cdbb127c7 filter-blur: Add Box and Gaussian Blur Filter
This is not very optimized at the moment and will take quite a bit of GPU time. Will have to spend some time later to optimize it and perhaps add directional blur ("Motion Blur" to it).
2017-07-03 02:46:45 +02:00
Michael Fabian Dirks
ccdc5b750c gs-helper: Fix warnings 2017-07-03 02:44:39 +02:00
Michael Fabian Dirks
b6feef472f filter-transform: Fix warnings 2017-07-03 02:44:21 +02:00
Michael Fabian Dirks
7935128dc8 filter-shape: Fix warnings 2017-07-03 02:44:04 +02:00
Michael Fabian Dirks
5b189cb73b filter-displacement: Fix warnings 2017-07-03 02:43:33 +02:00
Michael Fabian Dirks
fd5723d56b filter-transform: Fix perspective camera and more
* Fixed the perspective mesh not filling the entire frame with the default settings.
* Changed the maximum range of 'Field of View' to 179 degrees instead of 180 degrees.
* Changed the direction the perspective camera looks at to +Z instead of -Z. This should feel more natural for users of other 3D programs.
* Changed the 'Position (Z)' default to 0.
* Added translation strings for 'Field Of View', 'Position', 'Scale' and 'Rotation'.
2017-07-01 04:06:58 +02:00
Michael Fabian Dirks
aacc4f99e6 filter-displacement: Cleanup data 2017-06-29 07:35:41 +02:00
Michael Fabian Dirks
21aa03d52a filter-displacement: Fix typo in string definitions 2017-06-29 07:30:47 +02:00
Michael Fabian Dirks
bffa1e704e filter-transform: Add Field Of View property 2017-06-29 07:12:41 +02:00
Michael Fabian Dirks
b202303fe5 filter-transform: Fix perspective camera FOV
FOV for the perspective camera was previously set to 180° (or more) resulting in really small images. Also added proper rotation support with options to choose which axis to rotate first.
2017-06-29 06:13:50 +02:00
Michael Fabian Dirks
cf15b84585 filter-displacement: Add translation support 2017-06-29 06:10:46 +02:00
Michael Fabian Dirks
78a2e958c8 filter-displacement: Fix dialog file types 2017-06-29 05:29:54 +02:00
Michael Fabian Dirks
8a554e881b filter-transform: Attempts at fixing alpha rendering 2017-06-29 04:21:41 +02:00
Michael Fabian Dirks
a56df967cd filter-transform: Fix orthographic camera
Perspective camera is still broken, not sure how to fix that one.
2017-06-29 04:01:32 +02:00
Michael Fabian Dirks
b37fca2149 filter-displacement: Fix file dialog and rename filter 2017-06-29 03:42:13 +02:00
Michael Fabian Dirks
cde09ce068 strings: Fix alignment 2017-06-29 03:41:48 +02:00
Michael Fabian Dirks
92c4438a55 filter-transform: Add 3D Transform filter 2017-06-29 03:41:32 +02:00
Michael Fabian Dirks
ef5ab0e52e filter-shape: Fix inability to create complex shapes 2017-06-29 03:40:57 +02:00
Michael Fabian Dirks
c07f2123d7 gs-helper: Add maximum vertices parameter to VertexHelper 2017-06-29 03:39:16 +02:00
Michael Fabian Dirks
dcacf189e6 Initial code
* Shape Filter
* Displacement Filter + Example Data
2017-06-28 23:21:42 +02:00