(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.
This commit is contained in:
parent
f7e4a79517
commit
6ad8df8adb
@ -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);
|
||||
|
54
libobs/obs.c
54
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;
|
||||
}
|
||||
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_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;
|
||||
}
|
||||
|
||||
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)
|
||||
|
30
libobs/obs.h
30
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);
|
||||
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 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);
|
||||
|
||||
/** 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);
|
||||
|
@ -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");
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user