0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-20 13:08:50 +02:00

obs-filters: Fix scroll filter sampler state

When the crop filter was changed to a crop/pad filter, the sampler state
was changed to use a transparent border for the U/V addressing mode.
However, what was not realized at the time was that the scroll filter
also shared the crop effect file, and the scroll filter depended on the
old sampler state (wrap u/v).

This fixes the issue by simply setting a u/v wrap sampler state in the
scroll filter.
This commit is contained in:
jp9000 2016-07-08 03:01:01 -07:00
parent 2cad0f34f7
commit 6ac832fbb2

View File

@ -7,8 +7,10 @@ struct scroll_filter_data {
gs_effect_t *effect;
gs_eparam_t *param_add;
gs_eparam_t *param_mul;
gs_eparam_t *param_image;
struct vec2 scroll_speed;
gs_samplerstate_t *sampler;
bool limit_cx;
bool limit_cy;
uint32_t cx;
@ -29,10 +31,17 @@ static void *scroll_filter_create(obs_data_t *settings, obs_source_t *context)
struct scroll_filter_data *filter = bzalloc(sizeof(*filter));
char *effect_path = obs_module_file("crop_filter.effect");
struct gs_sampler_info sampler_info = {
.filter = GS_FILTER_LINEAR,
.address_u = GS_ADDRESS_WRAP,
.address_v = GS_ADDRESS_WRAP
};
filter->context = context;
obs_enter_graphics();
filter->effect = gs_effect_create_from_file(effect_path, NULL);
filter->sampler = gs_samplerstate_create(&sampler_info);
obs_leave_graphics();
bfree(effect_path);
@ -46,6 +55,8 @@ static void *scroll_filter_create(obs_data_t *settings, obs_source_t *context)
"add_val");
filter->param_mul = gs_effect_get_param_by_name(filter->effect,
"mul_val");
filter->param_image = gs_effect_get_param_by_name(filter->effect,
"image");
obs_source_update(context, settings);
return filter;
@ -57,6 +68,7 @@ static void scroll_filter_destroy(void *data)
obs_enter_graphics();
gs_effect_destroy(filter->effect);
gs_samplerstate_destroy(filter->sampler);
obs_leave_graphics();
bfree(filter);
@ -187,6 +199,8 @@ static void scroll_filter_render(void *data, gs_effect_t *effect)
gs_effect_set_vec2(filter->param_add, &filter->offset);
gs_effect_set_vec2(filter->param_mul, &mul_val);
gs_effect_set_next_sampler(filter->param_image, filter->sampler);
obs_source_process_filter_end(filter->context, filter->effect, cx, cy);
UNUSED_PARAMETER(effect);