summaryrefslogtreecommitdiff
path: root/src/render
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2025-08-12 17:47:45 -0400
committerAndrew Opalach <andrew@akon.city> 2025-08-12 17:47:45 -0400
commit7e796649557bfeae6eccba751d4a1ffae75de45c (patch)
treed58251d50b5db4ecf34b5ef99ff3edf8b86735d2 /src/render
parent2cc385b71e161eae39915bf24de53d5b704e7ea0 (diff)
downloadcamu-7e796649557bfeae6eccba751d4a1ffae75de45c.tar.gz
camu-7e796649557bfeae6eccba751d4a1ffae75de45c.tar.bz2
camu-7e796649557bfeae6eccba751d4a1ffae75de45c.zip
Runtime codec selection, Vulkan deconstruction
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/render')
-rw-r--r--src/render/queue_libplacebo.c2
-rw-r--r--src/render/renderer.h1
-rw-r--r--src/render/renderer_libplacebo.c15
-rw-r--r--src/render/renderer_libplacebo.h1
4 files changed, 14 insertions, 5 deletions
diff --git a/src/render/queue_libplacebo.c b/src/render/queue_libplacebo.c
index 1864607..01cd366 100644
--- a/src/render/queue_libplacebo.c
+++ b/src/render/queue_libplacebo.c
@@ -62,7 +62,7 @@ static bool map_frame(pl_gpu gpu, pl_tex *tex, const struct pl_source_frame *src
masks[3] = 0xff000000;
pixel_stride = 4;
break;
- case CAMU_PIXEL_FORMAT_RGB8:
+ case CAMU_PIXEL_FORMAT_RGB24:
masks[0] = 0x000000ff;
masks[1] = 0x0000ff00;
masks[2] = 0x00ff0000;
diff --git a/src/render/renderer.h b/src/render/renderer.h
index 8e80696..bbb7b70 100644
--- a/src/render/renderer.h
+++ b/src/render/renderer.h
@@ -38,6 +38,7 @@ struct camu_renderer {
#if defined STELA_API_VULKAN
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL (*get_vk_proc_address)(VkInstance, const char *),
VkResult (*vk_create_surface)(void *, VkInstance, VkSurfaceKHR *),
+ VkResult (*vk_destroy_surface)(VkInstance, VkSurfaceKHR),
const char *const *(*vk_get_extensions)(u32 *),
#elif defined STELA_API_DX11
HWND win32_window,
diff --git a/src/render/renderer_libplacebo.c b/src/render/renderer_libplacebo.c
index c5f4de8..cdf09bf 100644
--- a/src/render/renderer_libplacebo.c
+++ b/src/render/renderer_libplacebo.c
@@ -119,6 +119,7 @@ static bool renderer_lp_create_renderer(struct camu_renderer *renderer, u32 *wid
#if defined STELA_API_VULKAN
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL (*get_vk_proc_address)(VkInstance, const char *),
VkResult (*vk_create_surface)(void *, VkInstance, VkSurfaceKHR *),
+ VkResult (*vk_destroy_surface)(VkInstance, VkSurfaceKHR),
const char *const *(*vk_get_extensions)(u32 *),
#elif defined STELA_API_DX11
HWND win32_window,
@@ -159,7 +160,7 @@ static bool renderer_lp_create_renderer(struct camu_renderer *renderer, u32 *wid
));
#if defined STELA_API_VULKAN
- VkResult err;
+ lr->vk_destroy_surface = vk_destroy_surface;
u32 num;
const char *const *extensions = vk_get_extensions(&num);
@@ -174,8 +175,8 @@ static bool renderer_lp_create_renderer(struct camu_renderer *renderer, u32 *wid
goto err;
}
- err = vk_create_surface(priv, lr->vk_inst->instance, &lr->surface);
- if (err != VK_SUCCESS) {
+ VkResult ret = vk_create_surface(priv, lr->vk_inst->instance, &lr->surface);
+ if (ret != VK_SUCCESS) {
log_error("Failed to create vulkan surface.");
goto err;
}
@@ -333,6 +334,7 @@ static struct camu_frame_queue *renderer_lp_create_queue(struct camu_renderer *r
static void renderer_lp_add_font(struct camu_renderer *renderer, struct camu_codec_stream *attachment)
{
struct camu_renderer_lp *lr = (struct camu_renderer_lp *)renderer;
+ // @TODO: No FFmpeg + HAVE_SUBTITLES (no usecase yet).
#ifdef CAMU_HAVE_SUBTITLES
AVStream *stream = attachment->av.stream;
AVDictionaryEntry *entry = av_dict_get(stream->metadata, "filename", NULL, 0);
@@ -463,7 +465,7 @@ static void renderer_lp_render(struct camu_renderer *renderer, struct camu_scree
}
if (!pl_swapchain_submit_frame(lr->swapchain)) {
- log_error("Failed to submit frame, likely fatal.");
+ log_error("Failed to submit frame, possibly fatal.");
}
lr->have_frame = false;
@@ -490,6 +492,11 @@ void renderer_lp_free(struct camu_renderer **renderer)
if (lr->renderer) pl_renderer_destroy(&lr->renderer);
if (lr->swapchain) pl_swapchain_destroy(&lr->swapchain);
#if defined STELA_API_VULKAN
+ if (lr->vk) pl_vulkan_destroy(&lr->vk);
+ lr->vk_destroy_surface(lr->vk_inst->instance, lr->surface);
+ if (lr->vk_inst) pl_vk_inst_destroy(&lr->vk_inst);
+#elif defined STELA_API_DX11
+ if (lr->d3d11) pl_d3d11_destroy(&lr->d3d11);
#elif defined STELA_API_OPENGL
if (lr->gl) pl_opengl_destroy(&lr->gl);
#endif
diff --git a/src/render/renderer_libplacebo.h b/src/render/renderer_libplacebo.h
index c8962d2..fd34f7a 100644
--- a/src/render/renderer_libplacebo.h
+++ b/src/render/renderer_libplacebo.h
@@ -24,6 +24,7 @@ struct camu_renderer_lp {
VkSurfaceKHR surface;
pl_vulkan vk;
pl_vk_inst vk_inst;
+ VkResult (*vk_destroy_surface)(VkInstance, VkSurfaceKHR);
#elif defined STELA_API_DX11
pl_d3d11 d3d11;
#elif defined STELA_API_OPENGL