Przeglądaj źródła

(API Change) libobs: Use single func for base effects

API removed:
--------------------
gs_effect_t *obs_get_default_effect(void);
gs_effect_t *obs_get_default_rect_effect(void);
gs_effect_t *obs_get_opaque_effect(void);
gs_effect_t *obs_get_solid_effect(void);
gs_effect_t *obs_get_bicubic_effect(void);
gs_effect_t *obs_get_lanczos_effect(void);
gs_effect_t *obs_get_bilinear_lowres_effect(void);

API added:
--------------------
gs_effect_t *obs_get_base_effect(enum obs_base_effect effect);

Summary:
--------------------
Combines multiple near-identical functions into a single function with
an enum parameter.
jp9000 10 lat temu
rodzic
commit
6ad8df8adb

+ 1 - 1
libobs/obs-source.c

@@ -1304,7 +1304,7 @@ static void obs_source_draw_async_texture(struct obs_source *source)
 	gs_technique_t *tech          = NULL;
 
 	if (def_draw) {
-		effect = obs_get_default_effect();
+		effect = obs_get_base_effect(OBS_EFFECT_DEFAULT);
 		tech = gs_effect_get_technique(effect, type);
 		gs_technique_begin(tech);
 		gs_technique_begin_pass(tech, 0);

+ 18 - 36
libobs/obs.c

@@ -1336,46 +1336,28 @@ obs_service_t *obs_get_service_by_name(const char *name)
 			&obs->data.services_mutex, obs_service_addref_safe_);
 }
 
-gs_effect_t *obs_get_default_effect(void)
+gs_effect_t *obs_get_base_effect(enum obs_base_effect effect)
 {
 	if (!obs) return NULL;
-	return obs->video.default_effect;
-}
-
-gs_effect_t *obs_get_default_rect_effect(void)
-{
-	if (!obs) return NULL;
-	return obs->video.default_rect_effect;
-}
-
-gs_effect_t *obs_get_opaque_effect(void)
-{
-	if (!obs) return NULL;
-	return obs->video.opaque_effect;
-}
-
-gs_effect_t *obs_get_solid_effect(void)
-{
-	if (!obs) return NULL;
-	return obs->video.solid_effect;
-}
-
-gs_effect_t *obs_get_bicubic_effect(void)
-{
-	if (!obs) return NULL;
-	return obs->video.bicubic_effect;
-}
 
-gs_effect_t *obs_get_lanczos_effect(void)
-{
-	if (!obs) return NULL;
-	return obs->video.lanczos_effect;
-}
+	switch (effect) {
+	case OBS_EFFECT_DEFAULT:
+		return obs->video.default_effect;
+	case OBS_EFFECT_DEFAULT_RECT:
+		return obs->video.default_rect_effect;
+	case OBS_EFFECT_OPAQUE:
+		return obs->video.opaque_effect;
+	case OBS_EFFECT_SOLID:
+		return obs->video.solid_effect;
+	case OBS_EFFECT_BICUBIC:
+		return obs->video.bicubic_effect;
+	case OBS_EFFECT_LANCZOS:
+		return obs->video.lanczos_effect;
+	case OBS_EFFECT_BILINEAR_LOWRES:
+		return obs->video.bilinear_lowres_effect;
+	}
 
-gs_effect_t *obs_get_bilinear_lowres_effect(void)
-{
-	if (!obs) return NULL;
-	return obs->video.bilinear_lowres_effect;
+	return NULL;
 }
 
 signal_handler_t *obs_get_signal_handler(void)

+ 11 - 19
libobs/obs.h

@@ -520,26 +520,18 @@ EXPORT obs_encoder_t *obs_get_encoder_by_name(const char *name);
 /** Gets an service by its name. */
 EXPORT obs_service_t *obs_get_service_by_name(const char *name);
 
-/** Returns the default effect for generic RGB/YUV drawing */
-EXPORT gs_effect_t *obs_get_default_effect(void);
-
-/** Returns the default effect for generic RGB/YUV drawing using texture_rect */
-EXPORT gs_effect_t *obs_get_default_rect_effect(void);
-
-/** Returns the default effect for generic RGB/YUV drawing (alpha set to 1) */
-EXPORT gs_effect_t *obs_get_opaque_effect(void);
-
-/** Returns the solid effect for drawing solid colors */
-EXPORT gs_effect_t *obs_get_solid_effect(void);
-
-/** Returns the bicubic scaling effect */
-EXPORT gs_effect_t *obs_get_bicubic_effect(void);
-
-/** Returns the lanczos scaling effect */
-EXPORT gs_effect_t *obs_get_lanczos_effect(void);
+enum obs_base_effect {
+	OBS_EFFECT_DEFAULT,            /**< RGB/YUV */
+	OBS_EFFECT_DEFAULT_RECT,       /**< RGB/YUV (using texture_rect) */
+	OBS_EFFECT_OPAQUE,             /**< RGB/YUV (alpha set to 1.0) */
+	OBS_EFFECT_SOLID,              /**< RGB/YUV (solid color only) */
+	OBS_EFFECT_BICUBIC,            /**< Bicubic downscale */
+	OBS_EFFECT_LANCZOS,            /**< Lanczos downscale */
+	OBS_EFFECT_BILINEAR_LOWRES,    /**< Bilinear low resolution downscale */
+};
 
-/** Returns the bilinear lowres scaling effect */
-EXPORT gs_effect_t *obs_get_bilinear_lowres_effect(void);
+/** Returns a commonly used base effect */
+EXPORT gs_effect_t *obs_get_base_effect(enum obs_base_effect effect);
 
 /** Returns the primary obs signal handler */
 EXPORT signal_handler_t *obs_get_signal_handler(void);

+ 1 - 1
obs/window-basic-main.cpp

@@ -1983,7 +1983,7 @@ void OBSBasic::DrawBackdrop(float cx, float cy)
 	if (!box)
 		return;
 
-	gs_effect_t    *solid = obs_get_solid_effect();
+	gs_effect_t    *solid = obs_get_base_effect(OBS_EFFECT_SOLID);
 	gs_eparam_t    *color = gs_effect_get_param_by_name(solid, "color");
 	gs_technique_t *tech  = gs_effect_get_technique(solid, "Solid");
 

+ 1 - 1
obs/window-basic-preview.cpp

@@ -768,7 +768,7 @@ void OBSBasicPreview::DrawSceneEditing()
 {
 	OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
 
-	gs_effect_t    *solid = obs_get_solid_effect();
+	gs_effect_t    *solid = obs_get_base_effect(OBS_EFFECT_SOLID);
 	gs_technique_t *tech  = gs_effect_get_technique(solid, "Solid");
 
 	vec4 color;

+ 2 - 2
plugins/linux-capture/xcompcap-main.cpp

@@ -517,7 +517,7 @@ void XCompcapMain::tick(float seconds)
 void XCompcapMain::render(gs_effect_t *effect)
 {
 	PLock lock(&p->lock, true);
-	effect = obs_get_opaque_effect();
+	effect = obs_get_base_effect(OBS_EFFECT_OPAQUE);
 
 	if (!lock.isLocked() || !p->tex)
 		return;
@@ -530,7 +530,7 @@ void XCompcapMain::render(gs_effect_t *effect)
 	}
 
 	if (p->cursor && p->gltex && p->show_cursor && !p->cursor_outside) {
-		effect = obs_get_default_effect();
+		effect = obs_get_base_effect(OBS_EFFECT_DEFAULT);
 
 		while (gs_effect_loop(effect, "Draw")) {
 			xcursor_render(p->cursor);

+ 2 - 2
plugins/linux-capture/xshm-input.c

@@ -432,7 +432,7 @@ static void xshm_video_render(void *vptr, gs_effect_t *effect)
 {
 	XSHM_DATA(vptr);
 
-	effect = obs_get_opaque_effect();
+	effect = obs_get_base_effect(OBS_EFFECT_OPAQUE);
 
 	if (!data->texture)
 		return;
@@ -445,7 +445,7 @@ static void xshm_video_render(void *vptr, gs_effect_t *effect)
 	}
 
 	if (data->show_cursor) {
-		effect = obs_get_default_effect();
+		effect = obs_get_base_effect(OBS_EFFECT_DEFAULT);
 
 		while (gs_effect_loop(effect, "Draw")) {
 			xcb_xcursor_render(data->cursor);

+ 1 - 1
plugins/mac-capture/mac-display-capture.m

@@ -263,7 +263,7 @@ static void *display_capture_create(obs_data_t *settings,
 	dc->source = source;
 	dc->hide_cursor = !obs_data_get_bool(settings, "show_cursor");
 
-	dc->effect = obs_get_default_rect_effect();
+	dc->effect = obs_get_base_effect(OBS_EFFECT_DEFAULT_RECT);
 	if (!dc->effect)
 		goto fail;
 

+ 1 - 1
plugins/mac-syphon/syphon.m

@@ -418,7 +418,7 @@ static inline bool init_obs_graphics_objects(syphon_t s)
 	s->vertbuffer = create_vertbuffer();
 	obs_leave_graphics();
 
-	s->effect     = obs_get_default_rect_effect();
+	s->effect = obs_get_base_effect(OBS_EFFECT_DEFAULT_RECT);
 
 	return s->sampler != NULL && s->vertbuffer != NULL && s->effect != NULL;
 }

+ 0 - 35
plugins/win-capture/dc-capture.c

@@ -210,38 +210,3 @@ void dc_capture_render(struct dc_capture *capture, gs_effect_t *effect)
 	if (capture->textures_written[last_tex])
 		draw_texture(capture, last_tex, effect);
 }
-
-gs_effect_t *create_opaque_effect(void)
-{
-	gs_effect_t *opaque_effect;
-	char *effect_file;
-	char *error_string = NULL;
-
-	effect_file = obs_module_file("opaque.effect");
-	if (!effect_file) {
-		blog(LOG_ERROR, "[create_opaque_effect] Could not find "
-		                "opaque effect file");
-		return false;
-	}
-
-	obs_enter_graphics();
-
-	opaque_effect = gs_effect_create_from_file(effect_file, &error_string);
-
-	if (!opaque_effect) {
-		if (error_string)
-			blog(LOG_ERROR, "[create_opaque_effect] Failed to "
-			                "create opaque effect:\n%s",
-			                error_string);
-		else
-			blog(LOG_ERROR, "[create_opaque_effect] Failed to "
-			                "create opaque effect");
-	}
-
-	bfree(effect_file);
-	bfree(error_string);
-
-	obs_leave_graphics();
-
-	return opaque_effect;
-}

+ 0 - 2
plugins/win-capture/dc-capture.h

@@ -35,5 +35,3 @@ extern void dc_capture_free(struct dc_capture *capture);
 
 extern void dc_capture_capture(struct dc_capture *capture, HWND window);
 extern void dc_capture_render(struct dc_capture *capture, gs_effect_t *effect);
-
-extern gs_effect_t *create_opaque_effect(void);

+ 2 - 2
plugins/win-capture/duplicator-monitor-capture.c

@@ -195,7 +195,7 @@ static void duplicator_capture_render(void *data, gs_effect_t *effect)
 	if (!texture)
 		return;
 
-	effect = obs_get_opaque_effect();
+	effect = obs_get_base_effect(OBS_EFFECT_OPAQUE);
 
 	rot = capture->rot;
 
@@ -229,7 +229,7 @@ static void duplicator_capture_render(void *data, gs_effect_t *effect)
 	}
 
 	if (capture->capture_cursor) {
-		effect = obs_get_default_effect();
+		effect = obs_get_base_effect(OBS_EFFECT_DEFAULT);
 
 		while (gs_effect_loop(effect, "Draw")) {
 			draw_cursor(capture);

+ 3 - 3
plugins/win-capture/game-capture.c

@@ -1349,8 +1349,8 @@ static void game_capture_render(void *data, gs_effect_t *effect)
 	if (!gc->texture)
 		return;
 
-	effect = gc->config.allow_transparency ?
-		obs_get_default_effect() : obs_get_opaque_effect();
+	effect = obs_get_base_effect(gc->config.allow_transparency ?
+			OBS_EFFECT_DEFAULT : OBS_EFFECT_OPAQUE);
 
 	while (gs_effect_loop(effect, "Draw")) {
 		obs_source_draw(gc->texture, 0, 0, 0, 0,
@@ -1362,7 +1362,7 @@ static void game_capture_render(void *data, gs_effect_t *effect)
 	}
 
 	if (!gc->config.allow_transparency && gc->config.cursor) {
-		effect = obs_get_default_effect();
+		effect = obs_get_base_effect(OBS_EFFECT_DEFAULT);
 
 		while (gs_effect_loop(effect, "Draw")) {
 			game_capture_render_cursor(gc);

+ 2 - 1
plugins/win-capture/monitor-capture.c

@@ -147,7 +147,8 @@ static void monitor_capture_tick(void *data, float seconds)
 static void monitor_capture_render(void *data, gs_effect_t *effect)
 {
 	struct monitor_capture *capture = data;
-	dc_capture_render(&capture->data, obs_get_opaque_effect());
+	dc_capture_render(&capture->data,
+			obs_get_base_effect(OBS_EFFECT_OPAQUE));
 
 	UNUSED_PARAMETER(effect);
 }

+ 1 - 1
plugins/win-capture/window-capture.c

@@ -190,7 +190,7 @@ static void wc_tick(void *data, float seconds)
 static void wc_render(void *data, gs_effect_t *effect)
 {
 	struct window_capture *wc = data;
-	dc_capture_render(&wc->capture, obs_get_opaque_effect());
+	dc_capture_render(&wc->capture, obs_get_base_effect(OBS_EFFECT_OPAQUE));
 
 	UNUSED_PARAMETER(effect);
 }