| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | 
							- #include <obs-module.h>
 
- struct test_filter {
 
- 	obs_source_t *source;
 
- 	gs_effect_t *whatever;
 
- };
 
- static const char *filter_getname(void *unused)
 
- {
 
- 	UNUSED_PARAMETER(unused);
 
- 	return "Test";
 
- }
 
- static void filter_destroy(void *data)
 
- {
 
- 	struct test_filter *tf = data;
 
- 	if (tf) {
 
- 		obs_enter_graphics();
 
- 		gs_effect_destroy(tf->whatever);
 
- 		bfree(tf);
 
- 		obs_leave_graphics();
 
- 	}
 
- }
 
- static void *filter_create(obs_data_t *settings, obs_source_t *source)
 
- {
 
- 	struct test_filter *tf = bzalloc(sizeof(struct test_filter));
 
- 	char *effect_file;
 
- 	obs_enter_graphics();
 
- 	effect_file = obs_module_file("test.effect");
 
- 	tf->source = source;
 
- 	tf->whatever = gs_effect_create_from_file(effect_file, NULL);
 
- 	bfree(effect_file);
 
- 	if (!tf->whatever) {
 
- 		filter_destroy(tf);
 
- 		tf = NULL;
 
- 	}
 
- 	obs_leave_graphics();
 
- 	UNUSED_PARAMETER(settings);
 
- 	return tf;
 
- }
 
- static void filter_render(void *data, gs_effect_t *effect)
 
- {
 
- 	struct test_filter *tf = data;
 
- 	if (!obs_source_process_filter_begin(tf->source, GS_RGBA, OBS_ALLOW_DIRECT_RENDERING))
 
- 		return;
 
- 	obs_source_process_filter_end(tf->source, tf->whatever, 0, 0);
 
- 	UNUSED_PARAMETER(effect);
 
- }
 
- struct obs_source_info test_filter = {
 
- 	.id = "test_filter",
 
- 	.type = OBS_SOURCE_TYPE_FILTER,
 
- 	.output_flags = OBS_SOURCE_VIDEO,
 
- 	.get_name = filter_getname,
 
- 	.create = filter_create,
 
- 	.destroy = filter_destroy,
 
- 	.video_render = filter_render,
 
- };
 
 
  |