Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ else()
cmake_minimum_required(VERSION 3.18)
endif()

project(obs-retro-effects VERSION 1.0.1)
project(obs-retro-effects VERSION 1.0.2)
set(PROJECT_FULL_NAME "Retro Effects")

# Set new UUIDs when you start to create a new plugin.
Expand Down
2 changes: 1 addition & 1 deletion buildspec.json
Original file line number Diff line number Diff line change
Expand Up @@ -79,5 +79,5 @@
}
},
"name": "obs-retro-effects",
"version": "1.0.1"
"version": "1.0.2"
}
11 changes: 1 addition & 10 deletions data/shaders/crt-composite.effect
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
uniform float4x4 ViewProj;
uniform texture2d image;
uniform texture2d blur_image;
uniform float brightness;
uniform float black_level;
uniform float white_level;
uniform float dist;

#define EPS 1.e-8
#define EPS 1.e-3

sampler_state textureSampler{
Filter = Linear;
Expand Down Expand Up @@ -44,13 +42,6 @@ float4 mainImage(VertData v_in) : TARGET
float aa_mask = d < 0.49 ? smoothstep(-0.7, 0.7, (abs(frac(d - 0.25) - 0.5) - 0.25) / w) : 1.0;

float4 color = image.Sample(textureSampler, uv);
float4 blur_color = blur_image.Sample(textureSampler, uv);
// Brightness correction on bloom/blur layer
//blur_color.rgb *= brightness;
float threshold = brightness;
float4 highlight = saturate(blur_color - threshold) * 1.0 / (1.0 - threshold);
// Screen Blending between main color layer and bloom/blur layer
color.rgb = 1.0 - (1.0 - color.rgb) * (1.0 - highlight.rgb);
// Apply black/white levels correction
color.rgb = saturate((color.rgb - black_level) / (white_level - black_level));
// Apply barrel disortion anti-alias mask to alpha channel
Expand Down
2 changes: 1 addition & 1 deletion src/filters/bloom-f.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ void bloom_f_filter_properties(retro_effects_filter_data_t *data,
p = obs_properties_add_float_slider(
props, "bloom_size",
obs_module_text("RetroEffects.Bloom.Size"), 0.0, 100.0,
0.01);
1.0);
obs_property_float_set_suffix(p, "px");

p = obs_properties_add_float_slider(
Expand Down
62 changes: 38 additions & 24 deletions src/filters/crt.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "crt.h"
#include "../obs-utils.h"
#include "../blur/blur.h"
#include "../blur/bloom.h"

void crt_create(retro_effects_filter_data_t *filter)
{
Expand Down Expand Up @@ -69,13 +70,12 @@ void crt_filter_update(retro_effects_filter_data_t *data, obs_data_t *settings)
(float)obs_data_get_double(settings, "crt_phosphor_width")/9.0f;
filter->phosphor_size.y =
(float)obs_data_get_double(settings, "crt_phosphor_height")/9.0f;
filter->brightness =
0.3f * (1.0f - (float)obs_data_get_double(settings, "crt_bloom_threshold") / 100.0f);
filter->bloom_threshold =
(float)obs_data_get_double(settings, "crt_bloom_threshold") / 100.0f;

float bloom = (float)obs_data_get_double(settings, "crt_bloom") *
30.0f / 100.0f;
data->blur_data->radius = bloom;
set_gaussian_radius(bloom, data->blur_data);
filter->bloom_size = (float)obs_data_get_double(settings, "crt_bloom");
filter->bloom_intensity =
(float)obs_data_get_double(settings, "crt_bloom_intensity")/100.0f;

filter->mask_intensity =
(float)obs_data_get_double(settings, "crt_mask_intensity") /
Expand All @@ -102,7 +102,7 @@ void crt_filter_defaults(obs_data_t *settings) {
obs_data_set_default_double(settings, "crt_mask_intensity", 70.0);
obs_data_set_default_double(settings, "crt_bloom", 5.0);
obs_data_set_default_double(settings, "crt_bloom_threshold", 75.0);
//obs_data_set_default_double(settings, "crt_bloom_intensity", 50.0);
obs_data_set_default_double(settings, "crt_bloom_intensity", 50.0);
obs_data_set_default_double(settings, "crt_corner_radius", 25.0);
obs_data_set_default_double(settings, "crt_barrel_distort", 1.7);
obs_data_set_default_double(settings, "crt_vignette", 15.0);
Expand Down Expand Up @@ -140,11 +140,11 @@ void crt_filter_properties(retro_effects_filter_data_t *data,
0.1);
obs_property_float_set_suffix(p, "%");

//p = obs_properties_add_float_slider(
// phosphor_bloom, "crt_bloom_intensity",
// obs_module_text("RetroEffects.CRT.BloomIntensity"), 0.0, 100.0,
// 0.1);
//obs_property_float_set_suffix(p, "%");
p = obs_properties_add_float_slider(
phosphor_bloom, "crt_bloom_intensity",
obs_module_text("RetroEffects.CRT.BloomIntensity"), 0.0, 100.0,
0.1);
obs_property_float_set_suffix(p, "%");

obs_properties_add_group(
props, "crt_phosphor_bloom",
Expand Down Expand Up @@ -199,10 +199,34 @@ void crt_filter_video_render(retro_effects_filter_data_t *data)
return;
}
crt_filter_render_crt_mask(data);
crt_filter_render_blur(data);
//crt_filter_render_blur(data);
if (filter->bloom_intensity > 0.00001)
crt_filter_render_bloom(data);
crt_filter_render_composite(data);
}

static void crt_filter_render_bloom(retro_effects_filter_data_t* data)
{
crt_filter_data_t *filter = data->active_filter_data;

gs_texture_t *image =
gs_texrender_get_texture(filter->phospher_mask_texrender);

data->bloom_data->brightness_threshold = filter->bloom_threshold;
data->bloom_data->bloom_intensity = filter->bloom_intensity;
data->bloom_data->bloom_size = filter->bloom_size;
data->bloom_data->levels.x = 0.299f;
data->bloom_data->levels.y = 0.587f;
data->bloom_data->levels.z = 0.114f;

bloom_render(image, data->bloom_data);

gs_texrender_t *tmp = filter->phospher_mask_texrender;
filter->phospher_mask_texrender = data->bloom_data->output;
data->bloom_data->output = tmp;
}


static void crt_filter_render_crt_mask(retro_effects_filter_data_t* data)
{
base_filter_data_t *base = data->base;
Expand Down Expand Up @@ -283,11 +307,10 @@ static void crt_filter_render_composite(retro_effects_filter_data_t* data)
crt_filter_data_t *filter = data->active_filter_data;

gs_texture_t *image = gs_texrender_get_texture(filter->phospher_mask_texrender);
gs_texture_t *blur_image = gs_texrender_get_texture(data->blur_data->blur_output);

gs_effect_t *effect = filter->effect_crt_composite;

if (!effect || !image || !blur_image) {
if (!effect || !image) {
return;
}

Expand All @@ -298,15 +321,6 @@ static void crt_filter_render_composite(retro_effects_filter_data_t* data)
gs_effect_set_texture(filter->param_image_composite, image);
}

if (filter->param_blur_image_composite) {
gs_effect_set_texture(filter->param_blur_image_composite, blur_image);
}

if (filter->param_brightness_composite) {
gs_effect_set_float(filter->param_brightness_composite,
filter->brightness);
}

if (filter->param_black_level_composite) {
gs_effect_set_float(filter->param_black_level_composite,
filter->black_level);
Expand Down
6 changes: 4 additions & 2 deletions src/filters/crt.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,9 @@ struct crt_filter_data {
bool loading_effect;
bool reload_effect;

float brightness;
float bloom;
float bloom_threshold;
float bloom_size;
float bloom_intensity;
float mask_intensity;
int phosphor_type;

Expand Down Expand Up @@ -61,4 +62,5 @@ static void crt_composite_load_effect(crt_filter_data_t *filter);

static void crt_filter_render_crt_mask(retro_effects_filter_data_t *data);
static void crt_filter_render_blur(retro_effects_filter_data_t *data);
static void crt_filter_render_bloom(retro_effects_filter_data_t *data);
static void crt_filter_render_composite(retro_effects_filter_data_t *data);
4 changes: 2 additions & 2 deletions src/version.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#pragma once

#define PROJECT_VERSION "1.0.1"
#define PROJECT_VERSION "1.0.2"
#define PROJECT_VERSION_MAJOR 1
#define PROJECT_VERSION_MINOR 0
#define PROJECT_VERSION_PATCH 1
#define PROJECT_VERSION_PATCH 2