Commit graph

156 commits

Author SHA1 Message Date
Michael Fabian 'Xaymar' Dirks
3800584c2d cmake: Set expected C++ standard to C++17 2019-04-19 08:20:33 +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
da66947e10 project: Version 0.6.1 2019-04-03 06:45:10 +02:00
Michael Fabian 'Xaymar' Dirks
af023f9132 project: Version 0.6.0 2019-04-03 02:59:48 +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
8e9e39a88e project: Remove unused content 2019-04-02 04:37:37 +02:00
Michael Fabian 'Xaymar' Dirks
8a1579f702 cmake: Add refactored and new blur code 2019-04-02 03:50:01 +02:00
Michael Fabian 'Xaymar' Dirks
850318dc6e project: Version 0.5.0 2019-03-01 20:46:13 +01:00
Michael Fabian 'Xaymar' Dirks
cbe3555223 cmake: Add template files to project 2019-02-11 06:27:36 +01:00
Michael Fabian 'Xaymar' Dirks
da5d30c43b cmake: Fix OBS Studio typo 2019-02-11 04:03:57 +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
a49e8c6f9d cmake: Don't generate InnoSetup files for non-Windows platforms 2019-02-02 06:33:49 +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
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
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
Cat Stevens
3b1551b8ef cmake: Fix "FindLibobs.cmake" capitalisation
Fix "FindLibobs.cmake" filename case for case-sensitive filesystems
2019-01-14 22:20:56 +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
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
79daeb5a75 util-event: Template event handler class 2018-11-08 08:07:49 +01:00
Michael Fabian 'Xaymar' Dirks
58661bf3ac cmake: Add obs-source and obs-tools source 2018-11-07 14:44:06 +01:00
Michael Fabian 'Xaymar' Dirks
a2a30b5fe1 effects: Add masking lerp effect
* Supports region, feathered region, inverted region, inverted feathered region and image input.
* Interpolates between image_blur and image_orig depending on the result of the mask function.
2018-09-30 22:47:37 +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
069085d0af project: Update project URL 2018-09-26 01:22:54 +02:00
Michael Fabian 'Xaymar' Dirks
dc0104850a cmake: Massive update ported from obs-amd-encoder
This includes support for included, referenced, packaged and downloaded obs-studio libraries, cppcheck, packaging using cpack, 7z, zip or InnoSetup and more.
2018-09-26 01:17:08 +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
57c2daa80c obs-audio-capture: Helper class for automated capture of source audio 2018-04-27 23:34:26 +02:00
Michael Fabian 'Xaymar' Dirks
9f06d5ad49 cmake: Improve support for Linux and MacOS
Standalone builds should not assume that everything is Windows and in the future hopefully work out of the box for Linux and MacOS. This is required if CI should also work for Linux and MacOS.

Related: #13
2018-04-26 12:59:07 +02:00
Michael Fabian 'Xaymar' Dirks
19506f1997 cmake: Many fixes and improvements
* Standalone builds no longer require you to have a compiled version of OBS Studio. Instead the project will now download the last compatible libOBS version from CI and use it for linking.
* The project version now has a tweak field again, which is either 0 or determined by the number of git commits since the last release tag.
* The Install command now properly uses CMAKE_INSTALL_PREFIX instead of INSTALL_DIR.
* Packaging is now done using CPack instead of custom commands.
2018-04-24 12:31:43 +02:00
Michael Fabian 'Xaymar' Dirks
5bad1adf8f cmake: Add project group for Shaders (Custom Shader Source) 2018-04-09 13:22:50 +02: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
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
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
37d1815d30 cmake: Version 0.4.2
### Plugin
- Shipped files should now be actual images instead of broken images.

### Source Mirror
- Fixed a memory leak caused by not releasing the mirrored source.
- Fixed a rendering slowdown caused by trying to render the source inside an effect loop.
- Fixed 'Point' scaling not actually using the correct sampling.
- Implemented an option for Source Mirror to keep the original size even if rescaling.
2018-01-24 06:43:33 +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
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
823bac9b13 cmake: Version 0.4.1
- Switched all filters and sources over to new initialization code.
- Fixed a 32-bit crash on machines with CPUs capable of SSE caused by Vertex Buffers.
- Reduced memory requirements of Vertex Buffers by ~60%.
- Removed a superfluous reallocation, loop and copy from Vertex Buffers.
2018-01-18 05:32:29 +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
32ed7b645a util-memory: Memory utility functions 2018-01-08 10:52:53 +01:00
Michael Fabian 'Xaymar' Dirks
8ae69cbe2c cmake: Version 0.4.0
- Improved initialization code to ease future development.
- Fixed several possible crashes in the GS subsystem wrappers.
- Fixed 'Blur' filter color being wrong due to non-power-of-two textures.
- Improved 'Blur' filter error reporting for better debugging and support.
- Fixed 'Blur' filter crashing OBS on GPU reset, better support for this is added in a future version of OBS.
- Fixed 'Blur' filter occasionally just not working.
- Added 'Source Mirror' source which allows you to add filters to a source without modifying it as well as rescaling it.
2017-12-14 08:54:52 +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
85bc910e6a cmake: MSVC should always show all warnings 2017-12-14 03:27:49 +01:00
Michael Fabian 'Xaymar' Dirks
d78d3024cc util-math: Add commonly used mathematical functions 2017-12-14 00:28:35 +01:00
Michael Fabian Dirks
0d3b9bb863
cmake: Fix compiling on Linux 2017-11-11 21:12:07 +01:00
Michael Fabian 'Xaymar' Dirks
a3a72089f7 cmake: Allow customized prefix and suffix for packaging 2017-11-05 14:34:28 +01:00
Michael Fabian 'Xaymar' Dirks
13fd771ab9 cmake: Fix PACKAGE and INSTALL targets
INSTALL would incorrectly copy /data instead of the content of /data, resulting in the plugin not being able to load effects and default images.

PACKAGE was running from the wrong directory, resulting in an extra ".." directory being added, which was invisible for some decompression software.
2017-11-03 10:48:06 +01:00
Michael Fabian 'Xaymar' Dirks
a0eb5444cd cmake: Version 0.3.0
- Improved cmake script to allow packaging from within the IDE.
- Fixed a crash/freeze caused by not closing the rendering context.

Blur Filter:
- Reduced blur CPU usage and GPU usage.
- Fixed LOD being calculated causing slower rendering.
- Fixed an issue where the effect would randomly not load depending on the actions before starting obs.
- Improved rendering speed via pre-calculated Blur Kernel for those filters supporting it.
- Added 'Color Format' option to improve de-noise type blur for cameras.
- Added 'Bilateral Blur', a de-noise type blur which can be used to reduce low frequency noise.
- Changed default blur size to 5 pixels.
- Improved effect loading to only compile the shader once instead of every time.

Transform Filter:
- Added shearing support allowing for more weird shapes to be rendered.
- Fixed camera aspect ratio when source width is smaller than source height.
- Fixed scaling being affected by rotation.
- Fixed an issue with the mesh reconstruction logic causing invisible sources.

Displace Filter:
2017-11-03 00:30:53 +01: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
986d788d25 cmake: Fix building and improve generated projects 2017-08-19 23:47:30 +02:00
Michael Fabian Dirks
1f5c9f881a cmake: Fix integration with obs-studio
This will make it properly detect if it is part of obs-studio or standalone.
2017-07-06 05:26:42 +02:00
Michael Fabian Dirks
bd38d1caf6 cmake: Version 0.2.0
* Added Box and Gaussian Blur Filter.
* Fixed a few warnings flooding the log file.
* Fixed 'Field Of View' string.
2017-07-03 02:48:39 +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
97808c0fb8 cmake: Version 0.1.1
* 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:13:58 +02:00
Michael Fabian Dirks
92c4438a55 filter-transform: Add 3D Transform filter 2017-06-29 03:41:32 +02:00
Michael Fabian Dirks
dcacf189e6 Initial code
* Shape Filter
* Displacement Filter + Example Data
2017-06-28 23:21:42 +02:00