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_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); }