static void scale_filter_render(void *data, gs_effect_t *effect) { struct scale_filter_data *filter = data; const char *technique = filter->undistort ? "DrawUndistort" : "Draw"; if (!filter->valid || !filter->target_valid) { obs_source_skip_video_filter(filter->context); return; } if (!obs_source_process_filter_begin(filter->context, GS_RGBA, OBS_NO_DIRECT_RENDERING)) return; if (filter->dimension_param) gs_effect_set_vec2(filter->dimension_param, &filter->dimension_i); if (filter->undistort_factor_param) gs_effect_set_float(filter->undistort_factor_param, (float)filter->undistort_factor); if (filter->sampling == OBS_SCALE_POINT) gs_effect_set_next_sampler(filter->image_param, filter->point_sampler); obs_source_process_filter_tech_end(filter->context, filter->effect, filter->cx_out, filter->cy_out, technique); UNUSED_PARAMETER(effect); }
static void color_filter_render(void *data, gs_effect_t *effect) { struct color_filter_data *filter = data; obs_source_process_filter_begin(filter->context, GS_RGBA, OBS_ALLOW_DIRECT_RENDERING); gs_effect_set_vec4(filter->color_param, &filter->color); gs_effect_set_float(filter->contrast_param, filter->contrast); gs_effect_set_float(filter->brightness_param, filter->brightness); gs_effect_set_float(filter->gamma_param, filter->gamma); obs_source_process_filter_end(filter->context, filter->effect, 0, 0); UNUSED_PARAMETER(effect); }
static void color_grade_filter_render(void *data, gs_effect_t *effect) { struct lut_filter_data *filter = data; obs_source_t *target = obs_filter_get_target(filter->context); gs_eparam_t *param; if (!target || !filter->target || !filter->effect) { obs_source_skip_video_filter(filter->context); return; } if (!obs_source_process_filter_begin(filter->context, GS_RGBA, OBS_ALLOW_DIRECT_RENDERING)) return; param = gs_effect_get_param_by_name(filter->effect, "clut"); gs_effect_set_texture(param, filter->target); param = gs_effect_get_param_by_name(filter->effect, "clut_amount"); gs_effect_set_float(param, filter->clut_amount); obs_source_process_filter_end(filter->context, filter->effect, 0, 0); UNUSED_PARAMETER(effect); }
static void fade_callback(void *data, gs_texture_t *a, gs_texture_t *b, float t, uint32_t cx, uint32_t cy) { struct fade_info *fade = data; gs_effect_set_texture(fade->a_param, a); gs_effect_set_texture(fade->b_param, b); gs_effect_set_float(fade->fade_param, t); while (gs_effect_loop(fade->effect, "Fade")) gs_draw_sprite(NULL, 0, cx, cy); }
static void chroma_key_render(void *data, gs_effect_t *effect) { struct chroma_key_filter_data *filter = data; obs_source_t *target = obs_filter_get_target(filter->context); uint32_t width = obs_source_get_base_width(target); uint32_t height = obs_source_get_base_height(target); struct vec2 pixel_size; obs_source_process_filter_begin(filter->context, GS_RGBA, OBS_ALLOW_DIRECT_RENDERING); vec2_set(&pixel_size, 1.0f / (float)width, 1.0f / (float)height); gs_effect_set_vec4(filter->color_param, &filter->color); gs_effect_set_float(filter->contrast_param, filter->contrast); gs_effect_set_float(filter->brightness_param, filter->brightness); gs_effect_set_float(filter->gamma_param, filter->gamma); gs_effect_set_vec2(filter->chroma_param, &filter->chroma); gs_effect_set_vec4(filter->key_rgb_param, &filter->key_rgb); gs_effect_set_vec2(filter->pixel_size_param, &pixel_size); gs_effect_set_float(filter->similarity_param, filter->similarity); gs_effect_set_float(filter->smoothness_param, filter->smoothness); gs_effect_set_float(filter->spill_param, filter->spill); obs_source_process_filter_end(filter->context, filter->effect, 0, 0); UNUSED_PARAMETER(effect); }
static void sharpness_render(void *data, gs_effect_t *effect) { struct sharpness_data *filter = data; if (!filter) return; if (!obs_filter_get_target(filter->context)) return; obs_source_process_filter_begin(filter->context, GS_RGBA, OBS_ALLOW_DIRECT_RENDERING); filter->texwidth =(float)obs_source_get_width( obs_filter_get_target(filter->context)); filter->texheight = (float)obs_source_get_height( obs_filter_get_target(filter->context)); gs_effect_set_float(filter->sharpness_param, filter->sharpness); gs_effect_set_float(filter->texture_width, filter->texwidth); gs_effect_set_float(filter->texture_height, filter->texheight); obs_source_process_filter_end(filter->context, filter->effect, 0, 0); UNUSED_PARAMETER(effect); }
static inline void set_eparam(gs_effect_t *effect, const char *name, float val) { gs_eparam_t *param = gs_effect_get_param_by_name(effect, name); gs_effect_set_float(param, val); }