#define AL_LOG_SECTION "renderer_momo" #include #include "renderer_momo.h" #include "queue_momo.h" static void renderer_momo_resize(struct camu_renderer *renderer, u32 *width, u32 *height) { struct camu_renderer_momo *mr = (struct camu_renderer_momo *)renderer; (void)mr; (void)width; (void)height; } static void renderer_momo_set(struct camu_renderer *renderer, u8 option, u8 value) { struct camu_renderer_momo *mr = (struct camu_renderer_momo *)renderer; (void)mr; (void)option; (void)value; } static bool renderer_momo_create_renderer(struct camu_renderer *renderer, u32 *width, u32 *height, #if defined STELA_API_OPENGL #ifdef STELA_USE_EGL EGLDisplay display, EGLContext context, #endif void (*get_gl_proc_address(char const *))(void), bool (*gl_load_loader)(void *), bool (*gl_make_current)(void *), void (*gl_release_current)(void *), void (*gl_swap_buffers)(void *), #endif void *priv) { struct camu_renderer_momo *mr = (struct camu_renderer_momo *)renderer; (void)width; (void)height; #if defined STELA_API_OPENGL #ifdef STELA_USE_EGL (void)display; (void)context; #endif (void)get_gl_proc_address; (void)gl_load_loader; MOMO_Init(&mr->mmr, gl_make_current, gl_release_current, gl_swap_buffers, priv); #endif #ifdef CAMU_HAVE_SUBTITLES mr->ass = ass_library_init(); // Just to keep these linked in the exe for platform testing. ASS_Renderer *ar = ass_renderer_init(mr->ass); ASS_Track *at = ass_new_track(mr->ass); u32 w = *width, h = *height; ass_set_frame_size(ar, w, h); ass_set_storage_size(ar, w, h); ass_set_fonts(ar, NULL, NULL, ASS_FONTPROVIDER_AUTODETECT, NULL, 0); ass_set_hinting(ar, ASS_HINTING_NONE); ass_free_track(at); ass_renderer_done(ar); #endif return true; } static struct camu_frame_queue *renderer_momo_create_queue(struct camu_renderer *renderer) { struct camu_renderer_momo *mr = (struct camu_renderer_momo *)renderer; struct camu_frame_queue *q = camu_frame_queue_momo_create(); struct camu_frame_queue_momo *mq = (struct camu_frame_queue_momo *)q; (void)mr; (void)mq; return q; } static void renderer_momo_add_font(struct camu_renderer *renderer, struct camu_codec_stream *attachment) { struct camu_renderer_momo *mr = (struct camu_renderer_momo *)renderer; (void)mr; (void)attachment; } static u32 renderer_momo_get_latency(struct camu_renderer *renderer) { (void)renderer; return 0; } static bool renderer_momo_render(struct camu_renderer *renderer, struct camu_screen *scr, bool force) { struct camu_renderer_momo *mr = (struct camu_renderer_momo *)renderer; (void)scr; (void)force; MOMO_Render(&mr->mmr); return true; } static void renderer_momo_free(struct camu_renderer **renderer) { struct camu_renderer_momo *mr = (struct camu_renderer_momo *)*renderer; #ifdef CAMU_HAVE_SUBTITLES if (mr->ass) ass_library_done(mr->ass); #endif al_free(mr); *renderer = NULL; } struct camu_renderer *camu_renderer_momo_create(void) { struct camu_renderer_momo *mr = al_alloc_object(struct camu_renderer_momo); mr->r.create_renderer = renderer_momo_create_renderer; mr->r.create_queue = renderer_momo_create_queue; mr->r.add_font = renderer_momo_add_font; mr->r.get_latency = renderer_momo_get_latency; mr->r.resize = renderer_momo_resize; mr->r.set = renderer_momo_set; mr->r.render = renderer_momo_render; mr->r.free = renderer_momo_free; return (struct camu_renderer *)mr; }