Skip to content

Commit

Permalink
Feature- Pixelate Tessellation options and Hot Keys (#96)
Browse files Browse the repository at this point in the history
* Working tessellation origin and rotation.
* Working smoothing values for pixelate
* Sets default pixelate origin to center of frame.
* Working hotkeys.
  • Loading branch information
FiniteSingularity authored Dec 16, 2023
1 parent ba677b8 commit a4cf04e
Show file tree
Hide file tree
Showing 14 changed files with 475 additions and 43 deletions.
6 changes: 6 additions & 0 deletions data/locale/de-DE.ini
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
CompositeBlurFilter="Zusammengesetzter Weichzeichner"
CompositeBlurFilter.Enable="Aktivieren"
CompositeBlurFilter.Disable="Deaktivieren"
CompositeBlurFilter.Channel.Alpha="Alpha"
CompositeBlurFilter.Channel.Red="Rot"
CompositeBlurFilter.Channel.Green="Grün"
Expand Down Expand Up @@ -28,11 +30,15 @@ CompositeBlurFilter.Type.Motion="Bewegung"
CompositeBlurFilter.Type.TiltShift="Tilt-Shift"
CompositeBlurFilter.PixelateType="Verpixelungs-Typ"
CompositeBlurFilter.Pixelate.PixelSize="Pixel-Größe"
CompositeBlurFilter.Pixelate.Smoothing="Smoothing"
CompositeBlurFilter.Pixelate.Square="Quadrat"
CompositeBlurFilter.Pixelate.Hexagonal="Hexagonal"
CompositeBlurFilter.Pixelate.Triakis="Triakis"
CompositeBlurFilter.Pixelate.Circle="Kreis"
CompositeBlurFilter.Pixelate.Triangle="Dreieck"
CompositeBlurFilter.Pixelate.Center_X="Origin x"
CompositeBlurFilter.Pixelate.Center_Y="Origin y"
CompositeBlurFilter.Pixelate.Rotation="Rotation"
CompositeBlurFilter.DualKawase.Passes="Zweifach-Kawase Durchgänge"
CompositeBlurFilter.EffectMask="Effekt-Maske"
CompositeBlurFilter.EffectMask.CropParameters="Schnittmaskenparameter"
Expand Down
6 changes: 6 additions & 0 deletions data/locale/en-US.ini
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
CompositeBlurFilter="Composite Blur"
CompositeBlurFilter.Enable="Enable"
CompositeBlurFilter.Disable="Disable"
CompositeBlurFilter.Channel.Alpha="Alpha"
CompositeBlurFilter.Channel.Red="Red"
CompositeBlurFilter.Channel.Green="Green"
Expand Down Expand Up @@ -28,6 +30,10 @@ CompositeBlurFilter.Type.Motion="Motion"
CompositeBlurFilter.Type.TiltShift="Tilt-Shift"
CompositeBlurFilter.PixelateType="Pixelate Type"
CompositeBlurFilter.Pixelate.PixelSize="Pixel Size"
CompositeBlurFilter.Pixelate.Smoothing="Smoothing"
CompositeBlurFilter.Pixelate.Origin_X="Origin x"
CompositeBlurFilter.Pixelate.Origin_Y="Origin y"
CompositeBlurFilter.Pixelate.Rotation="Rotation"
CompositeBlurFilter.Pixelate.Square="Square"
CompositeBlurFilter.Pixelate.Hexagonal="Hexagonal"
CompositeBlurFilter.Pixelate.Triakis="Triakis"
Expand Down
6 changes: 6 additions & 0 deletions data/locale/es-ES.ini
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
CompositeBlurFilter="Desenfoque compuesto"
CompositeBlurFilter.Enable="Activar"
CompositeBlurFilter.Disable="Desactivar"
CompositeBlurFilter.Channel.Alpha="Alfa"
CompositeBlurFilter.Channel.Red="Rojo"
CompositeBlurFilter.Channel.Green="Verde"
Expand Down Expand Up @@ -28,11 +30,15 @@ CompositeBlurFilter.Type.Motion="Movimiento"
CompositeBlurFilter.Type.TiltShift="Desplazamiento de inclinación"
CompositeBlurFilter.PixelateType="Tipo de pixelación"
CompositeBlurFilter.Pixelate.PixelSize="Tamaño de pixel"
CompositeBlurFilter.Pixelate.Smoothing="Smoothing"
CompositeBlurFilter.Pixelate.Square="Cuadrado"
CompositeBlurFilter.Pixelate.Hexagonal="Hexagonal"
CompositeBlurFilter.Pixelate.Triakis="Triakis"
CompositeBlurFilter.Pixelate.Circle="Círculo"
CompositeBlurFilter.Pixelate.Triangle="Triángulo"
CompositeBlurFilter.Pixelate.Center_X="Origin x"
CompositeBlurFilter.Pixelate.Center_Y="Origin y"
CompositeBlurFilter.Pixelate.Rotation="Rotation"
CompositeBlurFilter.DualKawase.Passes="Radio de desenfoque"
CompositeBlurFilter.EffectMask="Máscara de efecto"
CompositeBlurFilter.EffectMask.CropParameters="Parámetros de recorte de la máscara"
Expand Down
6 changes: 6 additions & 0 deletions data/locale/fi-FI.ini
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
CompositeBlurFilter="Komposiittisumennus"
CompositeBlurFilter.Enable="Aktivoida"
CompositeBlurFilter.Disable="Poista käytöstä"
CompositeBlurFilter.Channel.Alpha="Alpha"
CompositeBlurFilter.Channel.Red="Punainen"
CompositeBlurFilter.Channel.Green="Vihreä"
Expand Down Expand Up @@ -28,11 +30,15 @@ CompositeBlurFilter.Type.Motion="Liike"
CompositeBlurFilter.Type.TiltShift="Tilt-Shift"
CompositeBlurFilter.PixelateType="Pikselityyppi"
CompositeBlurFilter.Pixelate.PixelSize="Pikselikoko"
CompositeBlurFilter.Pixelate.Smoothing="Smoothing"
CompositeBlurFilter.Pixelate.Square="Neliö"
CompositeBlurFilter.Pixelate.Hexagonal="Kuusikulmainen"
CompositeBlurFilter.Pixelate.Triakis="Triakis"
CompositeBlurFilter.Pixelate.Circle="Ympyrä"
CompositeBlurFilter.Pixelate.Triangle="Kolmio"
CompositeBlurFilter.Pixelate.Center_X="Origin x"
CompositeBlurFilter.Pixelate.Center_Y="Origin y"
CompositeBlurFilter.Pixelate.Rotation="Rotation"
CompositeBlurFilter.DualKawase.Passes="Sumennus-säde"
CompositeBlurFilter.EffectMask="Efektimaski"
CompositeBlurFilter.EffectMask.CropParameters="Rajausmaskin Parametrit"
Expand Down
18 changes: 13 additions & 5 deletions data/shaders/pixelate_circle.effect
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ uniform texture2d image;

uniform float2 uv_size;
uniform float pixel_size;
uniform float2 tess_origin;
uniform float sin_theta;
uniform float cos_theta;
uniform float sin_rtheta;
uniform float cos_rtheta;

sampler_state textureSampler{
Filter = Linear;
Expand All @@ -27,10 +32,13 @@ float4 mainImage(VertData v_in) : TARGET
{
// 1. Sample incoming pixel
float2 coord = v_in.uv * uv_size;
float2 coord_prime = (coord - fmod(coord, pixel_size)) + pixel_size/2.0f;
float2 uv_prime = coord_prime / uv_size;

return distance(coord, coord_prime) <= pixel_size/2.0f ? image.Sample(textureSampler, uv_prime) : float4(0.0, 0.0, 0.0, 0.0);
float2 coord_p = coord - tess_origin; // Shifted box coordinate
coord_p = float2(coord_p.x * cos_theta - coord_p.y * sin_theta, coord_p.x * sin_theta + coord_p.y * cos_theta);
float2 coord_grid = (coord_p - fmod(coord_p, pixel_size)) + sign(coord_p) *
float2(pixel_size, pixel_size) / 2.0f;

float2 uv_prime = (float2(coord_grid.x * cos_rtheta - coord_grid.y * sin_rtheta, coord_grid.x * sin_rtheta + coord_grid.y * cos_rtheta) + tess_origin) / uv_size;
return distance(coord_grid, coord_p) <= pixel_size/2.0f ? image.Sample(textureSampler, uv_prime) : float4(0.0, 0.0, 0.0, 0.0);
}

technique Draw
Expand All @@ -40,4 +48,4 @@ technique Draw
vertex_shader = mainTransform(v_in);
pixel_shader = mainImage(v_in);
}
}
}
14 changes: 10 additions & 4 deletions data/shaders/pixelate_hexagonal.effect
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@ uniform texture2d image;

uniform float2 uv_size;
uniform float pixel_size;
uniform float2 tess_origin;
uniform float sin_theta;
uniform float cos_theta;
uniform float sin_rtheta;
uniform float cos_rtheta;

sampler_state textureSampler{
Filter = Linear;
Expand Down Expand Up @@ -75,8 +80,9 @@ float4 mainImage(VertData v_in) : TARGET
// // 1. Sample incoming pixel
float2 coord = v_in.uv * uv_size;
// float2 uv_prime = (coord - fmod(coord, pixel_size)) / uv_size;

float2 local_coord = coord;

float2 local_coord = coord - tess_origin; // Shifted box coordinate
local_coord = float2(local_coord.x * cos_theta - local_coord.y * sin_theta, local_coord.x * sin_theta + local_coord.y * cos_theta);
if(orientation == FLAT) {
local_coord = reverseCoords(coord);
}
Expand All @@ -87,7 +93,7 @@ float4 mainImage(VertData v_in) : TARGET
frame_nearest = reverseCoords(local_nearest);
}

float2 uv_prime = (local_nearest) / uv_size;
float2 uv_prime = (float2(frame_nearest.x * cos_rtheta - frame_nearest.y * sin_rtheta, frame_nearest.x * sin_rtheta + frame_nearest.y * cos_rtheta) + tess_origin) / uv_size;

return image.Sample(textureSampler, uv_prime);
}
Expand All @@ -99,4 +105,4 @@ technique Draw
vertex_shader = mainTransform(v_in);
pixel_shader = mainImage(v_in);
}
}
}
14 changes: 12 additions & 2 deletions data/shaders/pixelate_square.effect
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ uniform texture2d image;

uniform float2 uv_size;
uniform float pixel_size;
uniform float2 tess_origin;
uniform float sin_theta;
uniform float cos_theta;
uniform float sin_rtheta;
uniform float cos_rtheta;

sampler_state textureSampler{
Filter = Linear;
Expand All @@ -27,7 +32,12 @@ float4 mainImage(VertData v_in) : TARGET
{
// 1. Sample incoming pixel
float2 coord = v_in.uv * uv_size;
float2 uv_prime = (coord - fmod(coord, pixel_size) + pixel_size/2.0f) / uv_size;
float2 coord_p = coord - tess_origin; // Shifted box coordinate
coord_p = float2(coord_p.x * cos_theta - coord_p.y * sin_theta, coord_p.x * sin_theta + coord_p.y * cos_theta);
float2 coord_grid = (coord_p - fmod(coord_p, pixel_size) + sign(coord_p) *
float2(pixel_size, pixel_size) / 2.0f);
//float2 uv_prime = (coord_grid + tess_origin) / uv_size;
float2 uv_prime = (float2(coord_grid.x * cos_rtheta - coord_grid.y * sin_rtheta, coord_grid.x * sin_rtheta + coord_grid.y * cos_rtheta) + tess_origin)/uv_size;
return image.Sample(textureSampler, uv_prime);
}

Expand All @@ -38,4 +48,4 @@ technique Draw
vertex_shader = mainTransform(v_in);
pixel_shader = mainImage(v_in);
}
}
}
13 changes: 10 additions & 3 deletions data/shaders/pixelate_triangle.effect
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ uniform texture2d image;

uniform float2 uv_size;
uniform float pixel_size;
uniform float2 tess_origin;
uniform float sin_theta;
uniform float cos_theta;
uniform float sin_rtheta;
uniform float cos_rtheta;

sampler_state textureSampler{
Filter = Linear;
Expand Down Expand Up @@ -44,8 +49,10 @@ float4 mainImage(VertData v_in) : TARGET
{
// 1. Sample incoming pixel
float2 coord = v_in.uv * uv_size;
float2 sample_coord = triangleCenter(getTriangle(coord));
float2 uv_prime = sample_coord/uv_size;
float2 coord_p = coord - tess_origin; // Shifted box coordinate
coord_p = float2(coord_p.x * cos_theta - coord_p.y * sin_theta, coord_p.x * sin_theta + coord_p.y * cos_theta);
float2 sample_coord = triangleCenter(getTriangle(coord_p));
float2 uv_prime = (float2(sample_coord.x * cos_rtheta - sample_coord.y * sin_rtheta, sample_coord.x * sin_rtheta + sample_coord.y * cos_rtheta) + tess_origin) / uv_size;
return image.Sample(textureSampler, uv_prime);
}

Expand All @@ -56,4 +63,4 @@ technique Draw
vertex_shader = mainTransform(v_in);
pixel_shader = mainImage(v_in);
}
}
}
21 changes: 21 additions & 0 deletions src/blur/box.c
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,13 @@ static void box_tilt_shift_blur(composite_blur_filter_data_t *data)

static void load_1d_box_effect(composite_blur_filter_data_t *filter)
{
if (filter->effect != NULL) {
obs_enter_graphics();
gs_effect_destroy(filter->effect);
filter->effect = NULL;
obs_leave_graphics();
}

const char *effect_file_path = "/shaders/box_1d.effect";
filter->effect = load_shader_effect(filter->effect, effect_file_path);
if (filter->effect) {
Expand All @@ -410,6 +417,13 @@ static void load_1d_box_effect(composite_blur_filter_data_t *filter)

static void load_tiltshift_box_effect(composite_blur_filter_data_t *filter)
{
if (filter->effect != NULL) {
obs_enter_graphics();
gs_effect_destroy(filter->effect);
filter->effect = NULL;
obs_leave_graphics();
}

const char *effect_file_path = "/shaders/box_tiltshift.effect";
filter->effect = load_shader_effect(filter->effect, effect_file_path);
if (filter->effect) {
Expand Down Expand Up @@ -439,6 +453,13 @@ static void load_tiltshift_box_effect(composite_blur_filter_data_t *filter)

static void load_radial_box_effect(composite_blur_filter_data_t *filter)
{
if (filter->effect != NULL) {
obs_enter_graphics();
gs_effect_destroy(filter->effect);
filter->effect = NULL;
obs_leave_graphics();
}

const char *effect_file_path = "/shaders/box_radial.effect";
filter->effect = load_shader_effect(filter->effect, effect_file_path);
if (filter->effect) {
Expand Down
13 changes: 13 additions & 0 deletions src/blur/dual_kawase.c
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,12 @@ static void dual_kawase_blur(composite_blur_filter_data_t *data)
static void
load_dual_kawase_down_sample_effect(composite_blur_filter_data_t *filter)
{
if (filter->effect_2 != NULL) {
obs_enter_graphics();
gs_effect_destroy(filter->effect_2);
filter->effect_2 = NULL;
obs_leave_graphics();
}
const char *effect_file_path =
"/shaders/dual_kawase_down_sample.effect";
filter->effect_2 =
Expand All @@ -213,6 +219,13 @@ load_dual_kawase_down_sample_effect(composite_blur_filter_data_t *filter)
static void
load_dual_kawase_up_sample_effect(composite_blur_filter_data_t *filter)
{
if (filter->effect != NULL) {
obs_enter_graphics();
gs_effect_destroy(filter->effect);
filter->effect = NULL;
obs_leave_graphics();
}

const char *effect_file_path = "/shaders/dual_kawase_up_sample.effect";
filter->effect = load_shader_effect(filter->effect, effect_file_path);
if (filter->effect) {
Expand Down
23 changes: 23 additions & 0 deletions src/blur/gaussian.c
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,13 @@ static void gaussian_zoom_blur(composite_blur_filter_data_t *data)

static void load_1d_gaussian_effect(composite_blur_filter_data_t *filter)
{
if (filter->effect != NULL) {
obs_enter_graphics();
gs_effect_destroy(filter->effect);
filter->effect = NULL;
obs_leave_graphics();
}

const char *effect_file_path =
filter->device_type == GS_DEVICE_DIRECT3D_11
? "/shaders/gaussian_1d.effect"
Expand Down Expand Up @@ -453,10 +460,18 @@ static void load_1d_gaussian_effect(composite_blur_filter_data_t *filter)
static void load_motion_gaussian_effect(composite_blur_filter_data_t *filter)
{

if (filter->effect != NULL) {
obs_enter_graphics();
gs_effect_destroy(filter->effect);
filter->effect = NULL;
obs_leave_graphics();
}

const char *effect_file_path =
filter->device_type == GS_DEVICE_DIRECT3D_11
? "/shaders/gaussian_motion.effect"
: "/shaders/gaussian_motion_texture.effect";

filter->effect = load_shader_effect(filter->effect, effect_file_path);
if (filter->effect) {
size_t effect_count = gs_effect_get_num_params(filter->effect);
Expand Down Expand Up @@ -485,10 +500,18 @@ static void load_motion_gaussian_effect(composite_blur_filter_data_t *filter)

static void load_radial_gaussian_effect(composite_blur_filter_data_t *filter)
{
if (filter->effect != NULL) {
obs_enter_graphics();
gs_effect_destroy(filter->effect);
filter->effect = NULL;
obs_leave_graphics();
}

const char *effect_file_path =
filter->device_type == GS_DEVICE_DIRECT3D_11
? "/shaders/gaussian_radial.effect"
: "/shaders/gaussian_radial_texture.effect";

filter->effect = load_shader_effect(filter->effect, effect_file_path);
if (filter->effect) {
size_t effect_count = gs_effect_get_num_params(filter->effect);
Expand Down
Loading

0 comments on commit a4cf04e

Please sign in to comment.