diff --git a/libobs/obs.c b/libobs/obs.c index f37d854621e8b4..c504493d1929af 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -1468,6 +1468,23 @@ void obs_render_main_texture(void) gs_draw_sprite(tex, 0, 0, 0); } +gs_texture_t *obs_get_main_texture(void) +{ + struct obs_core_video *video = &obs->video; + int last_tex; + + if (!obs) return NULL; + + last_tex = video->cur_texture == 0 + ? NUM_TEXTURES - 1 + : video->cur_texture - 1; + + if (!video->textures_rendered[last_tex]) + return NULL; + + return video->render_textures[last_tex]; +} + void obs_set_master_volume(float volume) { struct calldata data = {0}; diff --git a/libobs/obs.h b/libobs/obs.h index 6778246d6bbabd..497abc634a503e 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -564,6 +564,10 @@ EXPORT void obs_render_main_view(void); /** Renders the last main output texture */ EXPORT void obs_render_main_texture(void); +/** Returns the last main output texture. This can return NULL if the texture + * is unavailable. */ +EXPORT gs_texture_t *obs_get_main_texture(void); + /** Sets the master user volume */ EXPORT void obs_set_master_volume(float volume);