mirror of
https://github.com/Xaymar/obs-StreamFX
synced 2024-11-27 13:53:01 +00:00
filter-blur: Split into individual files
An unknown issue with the OBS effect parser causes it to generate nothing when more than two techniques are in the same file. This works around the issue, but doesn't actually fix it.
This commit is contained in:
parent
bd38d1caf6
commit
8f05b348dd
2 changed files with 55 additions and 37 deletions
49
data/filter-blur/box.effect
Normal file
49
data/filter-blur/box.effect
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
uniform float4x4 ViewProj;
|
||||||
|
uniform texture2d image;
|
||||||
|
uniform float2 texel;
|
||||||
|
uniform int widthHalf;
|
||||||
|
uniform int width;
|
||||||
|
|
||||||
|
sampler_state textureSampler {
|
||||||
|
Filter = Point;
|
||||||
|
AddressU = Clamp;
|
||||||
|
AddressV = Clamp;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct VertDataIn {
|
||||||
|
float4 pos : POSITION;
|
||||||
|
float2 uv : TEXCOORD0;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct VertDataOut {
|
||||||
|
float4 pos : POSITION;
|
||||||
|
float2 uv : TEXCOORD0;
|
||||||
|
};
|
||||||
|
|
||||||
|
VertDataOut VSDefault(VertDataIn v_in)
|
||||||
|
{
|
||||||
|
VertDataOut vert_out;
|
||||||
|
vert_out.pos = mul(float4(v_in.pos.xyz, 1.0), ViewProj);
|
||||||
|
vert_out.uv = v_in.uv;
|
||||||
|
return vert_out;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Box Blur
|
||||||
|
float4 PSBox(VertDataOut v_in) : TARGET
|
||||||
|
{
|
||||||
|
float4 rgba = float4(0,0,0,0);
|
||||||
|
for (int k = -widthHalf; k <= widthHalf; k++) {
|
||||||
|
rgba += image.Sample(textureSampler, v_in.uv + (texel * k));
|
||||||
|
}
|
||||||
|
rgba = rgba / width;
|
||||||
|
return rgba;
|
||||||
|
}
|
||||||
|
|
||||||
|
technique Draw
|
||||||
|
{
|
||||||
|
pass
|
||||||
|
{
|
||||||
|
vertex_shader = VSDefault(v_in);
|
||||||
|
pixel_shader = PSBox(v_in);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,8 @@
|
||||||
uniform float4x4 ViewProj;
|
uniform float4x4 ViewProj;
|
||||||
uniform texture2d image;
|
uniform texture2d image;
|
||||||
uniform int size;
|
|
||||||
uniform float2 texel;
|
uniform float2 texel;
|
||||||
|
uniform int widthHalf;
|
||||||
|
uniform int width;
|
||||||
|
|
||||||
sampler_state textureSampler {
|
sampler_state textureSampler {
|
||||||
Filter = Point;
|
Filter = Point;
|
||||||
|
@ -27,32 +28,6 @@ VertDataOut VSDefault(VertDataIn v_in)
|
||||||
return vert_out;
|
return vert_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Box Blur
|
|
||||||
float4 PSBox(VertDataOut v_in) : TARGET
|
|
||||||
{
|
|
||||||
float4 rgba = float4(0,0,0,0); //image.Sample(textureSampler, v_in.uv);
|
|
||||||
float trueWidth = 1 + (size * 2);
|
|
||||||
for (int k = -size; k <= size; k++) {
|
|
||||||
rgba += image.Sample(textureSampler, v_in.uv + (texel * k));
|
|
||||||
}
|
|
||||||
rgba = rgba / trueWidth;
|
|
||||||
return rgba;
|
|
||||||
}
|
|
||||||
|
|
||||||
technique Box
|
|
||||||
{
|
|
||||||
pass Horizontal
|
|
||||||
{
|
|
||||||
vertex_shader = VSDefault(v_in);
|
|
||||||
pixel_shader = PSBox(v_in);
|
|
||||||
}
|
|
||||||
pass Vertical
|
|
||||||
{
|
|
||||||
vertex_shader = VSDefault(v_in);
|
|
||||||
pixel_shader = PSBox(v_in);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gaussian Blur
|
// Gaussian Blur
|
||||||
float Gaussian(float x, float deviation) {
|
float Gaussian(float x, float deviation) {
|
||||||
return (1.0 / sqrt(2.0 * 3.141592 * deviation)) * exp(-((x * x) / (2.0 * deviation)));
|
return (1.0 / sqrt(2.0 * 3.141592 * deviation)) * exp(-((x * x) / (2.0 * deviation)));
|
||||||
|
@ -61,23 +36,17 @@ float Gaussian(float x, float deviation) {
|
||||||
float4 PSGaussian(VertDataOut v_in) : TARGET
|
float4 PSGaussian(VertDataOut v_in) : TARGET
|
||||||
{
|
{
|
||||||
float4 rgba = float4(0, 0, 0, 0);
|
float4 rgba = float4(0, 0, 0, 0);
|
||||||
float trueWidth = 1.0 + (size * 2);
|
for (int k = -widthHalf; k <= widthHalf; k++) {
|
||||||
for (int k = -size; k <= size; k++) {
|
|
||||||
float4 smpl = image.Sample(textureSampler, v_in.uv + (texel * k));
|
float4 smpl = image.Sample(textureSampler, v_in.uv + (texel * k));
|
||||||
smpl *= Gaussian(k / trueWidth, 1.0);
|
smpl *= Gaussian(k / width, 1.0);
|
||||||
rgba += smpl;
|
rgba += smpl;
|
||||||
}
|
}
|
||||||
return rgba;
|
return rgba;
|
||||||
}
|
}
|
||||||
|
|
||||||
technique Gaussian
|
technique Draw
|
||||||
{
|
{
|
||||||
pass Horizontal
|
pass
|
||||||
{
|
|
||||||
vertex_shader = VSDefault(v_in);
|
|
||||||
pixel_shader = PSGaussian(v_in);
|
|
||||||
}
|
|
||||||
pass Vertical
|
|
||||||
{
|
{
|
||||||
vertex_shader = VSDefault(v_in);
|
vertex_shader = VSDefault(v_in);
|
||||||
pixel_shader = PSGaussian(v_in);
|
pixel_shader = PSGaussian(v_in);
|
Loading…
Reference in a new issue