summaryrefslogtreecommitdiff
path: root/src/render
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2024-05-25 20:22:59 -0400
committerAndrew Opalach <andrew@akon.city> 2024-05-25 20:22:59 -0400
commit2f9a0945bfeee3296cec3d38d094e4c49f9cb65f (patch)
treece80b220accbb44920932b1a2a6ca49ed31752a4 /src/render
parent90e0930d820972802d1bb2fb27d7dded304483d6 (diff)
downloadcamu-2f9a0945bfeee3296cec3d38d094e4c49f9cb65f.tar.gz
camu-2f9a0945bfeee3296cec3d38d094e4c49f9cb65f.tar.bz2
camu-2f9a0945bfeee3296cec3d38d094e4c49f9cb65f.zip
wip
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/render')
-rw-r--r--src/render/renderer_libplacebo.c43
1 files changed, 26 insertions, 17 deletions
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)