static void color_grade_filter_update(void *data, obs_data_t *settings) { struct lut_filter_data *filter = data; const char *path = obs_data_get_string(settings, SETTING_IMAGE_PATH); double clut_amount = obs_data_get_double(settings, SETTING_CLUT_AMOUNT); bfree(filter->file); if (path) filter->file = bstrdup(path); obs_enter_graphics(); gs_image_file_free(&filter->image); obs_leave_graphics(); gs_image_file_init(&filter->image, path); obs_enter_graphics(); gs_image_file_init_texture(&filter->image); filter->target = filter->image.texture; filter->clut_amount = (float)clut_amount; char *effect_path = obs_module_file("color_grade_filter.effect"); gs_effect_destroy(filter->effect); filter->effect = gs_effect_create_from_file(effect_path, NULL); bfree(effect_path); obs_leave_graphics(); }
static void image_source_load(struct image_source *context) { char *file = context->file; obs_enter_graphics(); gs_image_file_free(&context->image); obs_leave_graphics(); if (file && *file) { debug("loading texture '%s'", file); context->file_timestamp = get_modified_timestamp(file); gs_image_file_init(&context->image, file); context->update_time_elapsed = 0; obs_enter_graphics(); gs_image_file_init_texture(&context->image); obs_leave_graphics(); if (!context->image.loaded) warn("failed to load texture '%s'", file); } }