From 2f9a0945bfeee3296cec3d38d094e4c49f9cb65f Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Sat, 25 May 2024 20:22:59 -0400 Subject: wip Signed-off-by: Andrew Opalach --- src/render/renderer_libplacebo.c | 43 ++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 17 deletions(-) (limited to 'src/render') diff --git a/src/render/renderer_libplacebo.c b/src/render/renderer_libplacebo.c index 03f30a5..9cc0917 100644 --- a/src/render/renderer_libplacebo.c +++ b/src/render/renderer_libplacebo.c @@ -133,10 +133,9 @@ static bool renderer_lp_create_renderer(struct camu_renderer *renderer, s32 *wid lr->r.resize(&lr->r, width, height); al_memset(&lr->params, 0, sizeof(struct pl_render_params)); - lr->params = pl_render_default_params; - //lr->params = pl_render_high_quality_params; - //lr->params.upscaler = &pl_filter_bicubic; - //lr->params.upscaler = &pl_filter_nearest; + //lr->params = pl_render_default_params; + lr->params = pl_render_fast_params; + lr->params.upscaler = &pl_filter_box; // Clear manually so we can draw multiple images per frame. lr->params.skip_target_clearing = true; @@ -187,39 +186,49 @@ static void renderer_lp_render(struct camu_renderer *renderer, struct camu_scree { struct camu_renderer_lp *lr = (struct camu_renderer_lp *)renderer; - struct pl_swapchain_frame frame; - pl_swapchain_start_frame(lr->swapchain, &frame); - - struct pl_frame target; - pl_frame_from_swapchain(&target, &frame); - #ifdef CAMU_SCREEN_THREADED if (al_atomic_bool_load(&scr->queued, AL_ATOMIC_RELAXED)) { camu_screen_run_queue(scr); } #endif + bool have_frame = false; + struct pl_swapchain_frame frame; + struct pl_frame target; + struct pl_frame_mix mix; + +#if 1 + pl_swapchain_start_frame(lr->swapchain, &frame); + pl_frame_from_swapchain(&target, &frame); pl_frame_clear_rgba(lr->gpu, &target, clear_color); + have_frame = true; +#endif - struct pl_frame_mix mix; if (scr->videos.size > 0) { struct camu_screen_video *video = &al_array_last(scr->videos); - //al_array_foreach_ptr(scr->videos, i, video) { if (camu_video_buffer_read(video->buf, &mix) && mix.frames) { + if (!have_frame) { + pl_swapchain_start_frame(lr->swapchain, &frame); + pl_frame_from_swapchain(&target, &frame); + pl_frame_clear_rgba(lr->gpu, &target, clear_color); + have_frame = true; + } target.crop = mix.frames[0]->crop; - target.crop.x1 *= video->view.zoom; - target.crop.y1 *= video->view.zoom; + target.crop.x1 *= video->view.zoom / video->view.stretch; + target.crop.y1 *= video->view.zoom * video->view.stretch; target.crop.x0 += video->view.x_offset; target.crop.y0 += video->view.y_offset; target.crop.x1 += video->view.x_offset; target.crop.y1 += video->view.y_offset; + target.rotation = video->view.rotation; pl_render_image_mix(lr->renderer, &mix, &target, &lr->params); } - //} } - pl_swapchain_submit_frame(lr->swapchain); - pl_swapchain_swap_buffers(lr->swapchain); + if (have_frame) { + pl_swapchain_submit_frame(lr->swapchain); + pl_swapchain_swap_buffers(lr->swapchain); + } } void renderer_lp_free(struct camu_renderer **renderer) -- cgit v1.2.3-101-g0448