summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buffer/video.c19
-rw-r--r--src/buffer/video.h4
-rw-r--r--src/codec/codec.h3
-rw-r--r--src/fruits/cmc/ui/util/waveform.c4
-rw-r--r--src/fruits/droid/ctv/gradle/libs.versions.toml2
-rw-r--r--src/liana/client.c30
-rw-r--r--src/liana/vcr.c6
-rw-r--r--src/libsink/sink.c4
-rw-r--r--src/portal/py/post.py2
-rw-r--r--src/render/meson.build15
-rw-r--r--src/render/queue_momo.c20
-rw-r--r--src/render/renderer.h10
-rw-r--r--src/render/renderer_libplacebo.c72
-rw-r--r--src/render/renderer_momo.c17
-rw-r--r--src/screen/screen.c20
15 files changed, 137 insertions, 91 deletions
diff --git a/src/buffer/video.c b/src/buffer/video.c
index c29f1b7..3eee026 100644
--- a/src/buffer/video.c
+++ b/src/buffer/video.c
@@ -9,9 +9,7 @@
#include "../codec/ffmpeg/common.h"
#endif
-#ifdef CAMU_VIDEO_BUFFER_FORCE_SCALER
#include "../codec/ffmpeg/scaler.h"
-#endif
#define BUFFER_MARK_LOW ((1.0 / 24.0) * 2)
#define BUFFER_MARK_BUFFERED ((1.0 / 24.0) * 4) // Must be >1.
@@ -71,16 +69,20 @@ bool camu_video_buffer_configure(struct camu_video_buffer *buf, struct camu_code
struct camu_video_format *in = &buf->fmt.in;
struct camu_video_format *req = &buf->fmt.req;
camu_video_format_copy(in, fmt);
-#ifndef CAMU_VIDEO_BUFFER_FORCE_SCALER
camu_video_format_copy(req, in);
-#else
if (fmt->width > 0 && fmt->height > 0 &&
- (fmt->format != CAMU_PIXEL_FORMAT_RGBA && fmt->format != CAMU_PIXEL_FORMAT_RGB)) {
+#ifdef CAMU_VIDEO_BUFFER_REQUIRE_RGB
+ (fmt->format != CAMU_PIXEL_FORMAT_RGBA && fmt->format != CAMU_PIXEL_FORMAT_RGB)
+#else
+ (fmt->format == CAMU_PIXEL_FORMAT_PAL8)
+#endif
+ ) {
buf->fmt.scaler_needed = true;
req->width = fmt->width;
req->height = fmt->height;
- req->format = CAMU_PIXEL_FORMAT_RGBA;
#ifdef CAMU_HAVE_FFMPEG
+ const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt->format);
+ req->format = (desc->flags & AV_PIX_FMT_FLAG_ALPHA) ? CAMU_PIXEL_FORMAT_RGBA : CAMU_PIXEL_FORMAT_RGB;
buf->scaler = camu_ff_scaler_create();
if (!buf->scaler->init(buf->scaler, &buf->fmt)) {
// Scaler will be freed in video_buffer_free().
@@ -95,7 +97,6 @@ bool camu_video_buffer_configure(struct camu_video_buffer *buf, struct camu_code
buf->fmt.scaler_needed = false;
camu_video_format_copy(req, in);
}
-#endif
return true;
}
@@ -144,7 +145,6 @@ static bool push_av_frame_internal(struct camu_video_buffer *buf, AVFrame *frame
return false;
}
if (base_pts == -1.0) al_atomic_store(f64)(&buf->pts, pts, AL_ATOMIC_RELEASE);
-#ifdef CAMU_VIDEO_BUFFER_FORCE_SCALER
if (buf->fmt.scaler_needed) {
if (!buf->scaler->scale(buf->scaler, (const u8 **)frame->data, frame->linesize)) {
return false;
@@ -152,7 +152,6 @@ static bool push_av_frame_internal(struct camu_video_buffer *buf, AVFrame *frame
av_frame_free(&frame);
frame = av_frame_clone(buf->scaler->get_frame(buf->scaler)->av.frame);
}
-#endif
buf->queue->push_av_frame(buf->queue, frame, pts);
return true;
}
@@ -266,8 +265,6 @@ bool camu_video_buffer_read(struct camu_video_buffer *buf, void *out, bool *weig
void camu_video_buffer_free(struct camu_video_buffer *buf)
{
-#ifdef CAMU_VIDEO_BUFFER_FORCE_SCALER
if (buf->fmt.scaler_needed) buf->scaler->free(&buf->scaler);
-#endif
if (buf->queue) buf->queue->free(&buf->queue);
}
diff --git a/src/buffer/video.h b/src/buffer/video.h
index 834aaa4..d844d80 100644
--- a/src/buffer/video.h
+++ b/src/buffer/video.h
@@ -1,6 +1,6 @@
#pragma once
-//#define CAMU_VIDEO_BUFFER_FORCE_SCALER
+//#define CAMU_VIDEO_BUFFER_REQUIRE_RGB
#include <al/types.h>
@@ -23,9 +23,7 @@ struct camu_video_buffer {
f64 avg_frame_duration;
struct camu_scaler_format fmt;
-#ifdef CAMU_VIDEO_BUFFER_FORCE_SCALER
struct camu_scaler *scaler;
-#endif
struct camu_frame_queue *queue;
bool buffered;
diff --git a/src/codec/codec.h b/src/codec/codec.h
index 16e408c..9515220 100644
--- a/src/codec/codec.h
+++ b/src/codec/codec.h
@@ -61,7 +61,8 @@ enum {
CAMU_PIXEL_FORMAT_RGBA = AV_PIX_FMT_RGBA,
CAMU_PIXEL_FORMAT_RGB = AV_PIX_FMT_RGB8,
CAMU_PIXEL_FORMAT_GREYA = AV_PIX_FMT_GRAY8A,
- CAMU_PIXEL_FORMAT_GREY = AV_PIX_FMT_GRAY8
+ CAMU_PIXEL_FORMAT_GREY = AV_PIX_FMT_GRAY8,
+ CAMU_PIXEL_FORMAT_PAL8 = AV_PIX_FMT_PAL8
};
#define CAMU_PLANAR_DATA_POINTERS AV_NUM_DATA_POINTERS
diff --git a/src/fruits/cmc/ui/util/waveform.c b/src/fruits/cmc/ui/util/waveform.c
index b114a5e..9983280 100644
--- a/src/fruits/cmc/ui/util/waveform.c
+++ b/src/fruits/cmc/ui/util/waveform.c
@@ -130,6 +130,10 @@ void cmc_draw_waveform(struct cmc_list_entry *entry, u32 width, u32 height, bool
{
(void)include_rms;
(void)buf;
+ (void)entry;
+ (void)width;
+ (void)height;
+ (void)rgba;
#ifdef OUTPUT_WAVEFORM_PNG
test_write_bitmap(entry, width, height, rgba);
return;
diff --git a/src/fruits/droid/ctv/gradle/libs.versions.toml b/src/fruits/droid/ctv/gradle/libs.versions.toml
index 95dfb43..12e2469 100644
--- a/src/fruits/droid/ctv/gradle/libs.versions.toml
+++ b/src/fruits/droid/ctv/gradle/libs.versions.toml
@@ -1,5 +1,5 @@
[versions]
-agp = "8.10.0"
+agp = "8.10.1"
[libraries]
diff --git a/src/liana/client.c b/src/liana/client.c
index 626a752..00eaca6 100644
--- a/src/liana/client.c
+++ b/src/liana/client.c
@@ -137,32 +137,38 @@ static void parse_info_packet(struct lia_client *client, struct nn_packet *packe
al_array_foreach_ptr(client->streams, i, stream) {
u8 type_mask = type_to_mask[stream->type];
if ((selected & type_mask) || !(prefs->enabled_mask & type_mask)) continue;
+ const char *title = NULL;
#ifdef CAMU_HAVE_FFMPEG
- const AVDictionaryEntry *title = NULL;
if (stream->mode == CAMU_FFMPEG_COMPAT) {
AVDictionary *metadata = stream->av.stream->metadata;
- title = av_dict_get(metadata, "title", NULL, 0);
- const AVDictionaryEntry *lang = av_dict_get(metadata, "language", NULL, 0);
- if (lang && !accept_defaults) {
- u8 lang_value = CAMU_LANG_UNKNOWN;
- if (strcmp(lang->value, "eng") == 0) lang_value = CAMU_LANG_ENGLISH;
- else if (strcmp(lang->value, "jpn") == 0) lang_value = CAMU_LANG_JAPANESE;
+ const AVDictionaryEntry *title_entry = av_dict_get(metadata, "title", NULL, 0);
+ if (title_entry) title = title_entry->value;
+ const AVDictionaryEntry *lang_entry = av_dict_get(metadata, "language", NULL, 0);
+ if (lang_entry && !accept_defaults) {
+ u8 lang = CAMU_LANG_UNKNOWN;
+ if (strcmp(lang_entry->value, "eng") == 0) {
+ lang = CAMU_LANG_ENGLISH;
+ } else if (strcmp(lang_entry->value, "jpn") == 0) {
+ lang = CAMU_LANG_JAPANESE;
+ }
switch (stream->type) {
case CAMU_STREAM_AUDIO:
- if (prefs->audio_lang != lang_value) continue;
+ if (prefs->audio_lang != lang) continue;
break;
case CAMU_STREAM_SUBTITLE:
- if (prefs->subtitle_lang != lang_value) continue;
+ if (prefs->subtitle_lang != lang) continue;
break;
default:
break;
}
}
}
- log_info("Selected %s stream (index: %u, title: %s).", type_to_str[stream->type], stream->index, title ? title->value : "(empty)");
-#else
- log_info("Selected %s stream (index: %u).", type_to_str[stream->type], stream->index);
#endif
+ if (title) {
+ log_info("Selected %s stream (index: %u, title: %s).", type_to_str[stream->type], stream->index, title);
+ } else {
+ log_info("Selected %s stream (index: %u).", type_to_str[stream->type], stream->index);
+ }
selected |= type_mask;
client->mask |= 1 << stream->index;
struct lia_vcr_track *track = al_alloc_object(struct lia_vcr_track);
diff --git a/src/liana/vcr.c b/src/liana/vcr.c
index 78c2b9c..270bc38 100644
--- a/src/liana/vcr.c
+++ b/src/liana/vcr.c
@@ -4,7 +4,7 @@
#include "vcr.h"
#include "handler.h"
-#define VCR_BUFFER_BUFFERED MB(8)
+#define VCR_BUFFER_BUFFERED MB(2)
enum {
VCR_EXPAND_UNTOUCHED = 0,
@@ -78,7 +78,7 @@ static nn_thread_result NNWT_THREADCALL vcr_track_thread(void *userdata)
packet = nn_packet_cache_at(&track->cache, index);
#ifdef VCR_BUFFER_WHOLE_FILE
- if (!packet) { // Loop.
+ if (!packet && packets > 2) { // Loop.
index = 0;
corked = false;
break;
@@ -223,7 +223,7 @@ static void cork_if_buffered(struct lia_vcr *vcr, u64 buffer)
}
if (buffered) {
if (vcr->expand == VCR_EXPAND_UNTOUCHED) {
- vcr->mark.buffered = buffer * 2;
+ vcr->mark.buffered = buffer * 8;
vcr->expand = VCR_EXPAND_GROWN;
log_info("Expanded buffer to size %.2fMB.", vcr->mark.buffered / (f32)MB(1));
return;
diff --git a/src/libsink/sink.c b/src/libsink/sink.c
index 56be556..29af2f5 100644
--- a/src/libsink/sink.c
+++ b/src/libsink/sink.c
@@ -1329,8 +1329,8 @@ static bool set_command_callback(void *userdata, struct nn_rpc_connection *conn,
lia_client_connect(&entry->client, sink->loop, sink->type, &addr, port, node_id, seek_pos);
}
- // Don't lock before calling client_connect() or we could deadlock in
- // CLIENT_CLOSED on a failed socket_connect().
+ // Don't lock before calling client_connect() or we could deadlock
+ // in CLIENT_CLOSED on a failed socket_connect().
nn_mutex_lock(&sink->lock);
if (op == LIANA_SINK_BUFFER) {
diff --git a/src/portal/py/post.py b/src/portal/py/post.py
index f173d0e..f83f1f0 100644
--- a/src/portal/py/post.py
+++ b/src/portal/py/post.py
@@ -63,7 +63,7 @@ def default_url_ext_guess(url: str) -> str:
class Url():
url: str
ext: str
- def __init__(self, url: str, ext: str = None) -> None:
+ def __init__(self, url: str, ext: Optional[str] = None) -> None:
self.url = url
if not ext:
ext = default_url_ext_guess(url)
diff --git a/src/render/meson.build b/src/render/meson.build
index 7e3e394..557c459 100644
--- a/src/render/meson.build
+++ b/src/render/meson.build
@@ -133,6 +133,7 @@ if get_option('subtitles').enabled()
default_options: [
'doc=disabled',
'nls=disabled',
+ 'tests=disabled',
'tools=disabled',
'cache-build=disabled'
])
@@ -145,6 +146,7 @@ if get_option('subtitles').enabled()
version: '>=9.17.3',
default_options: [
'warning_level=0',
+ 'tests=disabled',
'harfbuzz=disabled',
'png=disabled'
])
@@ -162,14 +164,17 @@ if get_option('subtitles').enabled()
harfbuz = dependency('harfbuzz',
version: '>=2.0.0',
default_options: [
- 'freetype=disabled',
- 'introspection=disabled',
- 'docs=disabled',
- 'utilities=disabled',
'glib=disabled',
'gobject=disabled',
'cairo=disabled',
- 'chafa=disabled'
+ 'chafa=disabled',
+ 'freetype=disabled',
+ # This does not override yield, and yielding breaks the build if tests=enabled.
+ # https://github.com/mesonbuild/meson/issues/5214
+ 'tests=disabled',
+ 'introspection=disabled',
+ 'docs=disabled',
+ 'utilities=disabled'
])
libass = dependency('libass', default_options: libass_opts)
endif
diff --git a/src/render/queue_momo.c b/src/render/queue_momo.c
index 8e8d7e3..bc7caf8 100644
--- a/src/render/queue_momo.c
+++ b/src/render/queue_momo.c
@@ -1,5 +1,16 @@
#include "queue_momo.h"
+static bool queue_momo_configure_subtitles(struct camu_frame_queue *queue, u32 width, u32 height,
+ struct camu_codec_stream *stream)
+{
+ struct camu_frame_queue_momo *mq = (struct camu_frame_queue_momo *)queue;
+ (void)mq;
+ (void)width;
+ (void)height;
+ (void)stream;
+ return false;
+}
+
static void queue_momo_push(struct camu_frame_queue *queue, struct camu_codec_frame *frame, f64 pts)
{
struct camu_frame_queue_momo *mq = (struct camu_frame_queue_momo *)queue;
@@ -18,6 +29,13 @@ static void queue_momo_push_av_frame(struct camu_frame_queue *queue, AVFrame *fr
}
#endif
+static void queue_momo_push_subtitle(struct camu_frame_queue *queue, struct camu_codec_packet *packet)
+{
+ struct camu_frame_queue_momo *mq = (struct camu_frame_queue_momo *)queue;
+ (void)mq;
+ (void)packet;
+}
+
static void queue_momo_flush(struct camu_frame_queue *queue)
{
(void)queue;
@@ -55,10 +73,12 @@ static void queue_momo_free(struct camu_frame_queue **queue)
struct camu_frame_queue *camu_frame_queue_momo_create(void)
{
struct camu_frame_queue_momo *mq = al_alloc_object(struct camu_frame_queue_momo);
+ mq->q.configure_subtitles = queue_momo_configure_subtitles;
mq->q.push = queue_momo_push;
#ifdef CAMU_HAVE_FFMPEG
mq->q.push_av_frame = queue_momo_push_av_frame;
#endif
+ mq->q.push_subtitle = queue_momo_push_subtitle;
mq->q.flush = queue_momo_flush;
mq->q.count = queue_momo_count;
mq->q.read = queue_momo_read;
diff --git a/src/render/renderer.h b/src/render/renderer.h
index d2590b1..8e80696 100644
--- a/src/render/renderer.h
+++ b/src/render/renderer.h
@@ -15,6 +15,12 @@
#include "../codec/codec.h"
enum {
+ CAMU_RENDERER_FULLSCREEN = 0,
+ CAMU_RENDERER_SCALING,
+ CAMU_RENDERER_BACKGROUND
+};
+
+enum {
CAMU_SCALING_DEFAULT = 0,
CAMU_SCALING_NEAREST
};
@@ -51,9 +57,7 @@ struct camu_renderer {
void (*add_font)(struct camu_renderer *, struct camu_codec_stream *);
u32 (*get_latency)(struct camu_renderer *);
void (*resize)(struct camu_renderer *, u32 *, u32 *);
- void (*set_fullscreen)(struct camu_renderer *, bool);
- void (*set_scaling)(struct camu_renderer *, u8);
- void (*set_background)(struct camu_renderer *, u8);
+ void (*set)(struct camu_renderer *, u8, u8);
void (*render)(struct camu_renderer *, struct camu_screen *, bool);
#ifdef CAMU_HAVE_FFMPEG
s32 (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, s32 flags);
diff --git a/src/render/renderer_libplacebo.c b/src/render/renderer_libplacebo.c
index bfe8c47..5ef2a34 100644
--- a/src/render/renderer_libplacebo.c
+++ b/src/render/renderer_libplacebo.c
@@ -42,44 +42,42 @@ static void renderer_lp_resize(struct camu_renderer *renderer, u32 *width, u32 *
}
}
-#ifdef STELA_API_DX11
-static void renderer_lp_set_fullscreen(struct camu_renderer *renderer, bool fullscreen)
+static void renderer_lp_set(struct camu_renderer *renderer, u8 option, u8 value)
{
struct camu_renderer_lp *lr = (struct camu_renderer_lp *)renderer;
- IDXGISwapChain *d3d_swapchain = pl_d3d11_swapchain_unwrap(lr->swapchain);
- IDXGISwapChain1_SetFullscreenState(d3d_swapchain, fullscreen, NULL);
- IDXGISwapChain1_Release(d3d_swapchain);
-}
+ switch (option) {
+ case CAMU_RENDERER_FULLSCREEN:
+#ifdef STELA_API_DX11
+ IDXGISwapChain *d3d_swapchain = pl_d3d11_swapchain_unwrap(lr->swapchain);
+ IDXGISwapChain1_SetFullscreenState(d3d_swapchain, value, NULL);
+ IDXGISwapChain1_Release(d3d_swapchain);
#endif
-
-static void renderer_lp_set_scaling(struct camu_renderer *renderer, u8 mode)
-{
- struct camu_renderer_lp *lr = (struct camu_renderer_lp *)renderer;
- switch (mode) {
- case CAMU_SCALING_DEFAULT:
- lr->params.upscaler = pl_render_default_params.upscaler;
- lr->params.downscaler = pl_render_default_params.downscaler;
- lr->params.skip_anti_aliasing = pl_render_default_params.skip_anti_aliasing;
break;
- case CAMU_SCALING_NEAREST:
- lr->params.upscaler = &pl_filter_nearest;
- lr->params.downscaler = &pl_filter_nearest;
- lr->params.skip_anti_aliasing = true;
- break;
- }
-}
-
-static void renderer_lp_set_background(struct camu_renderer *renderer, u8 mode)
-{
- struct camu_renderer_lp *lr = (struct camu_renderer_lp *)renderer;
- switch (mode) {
- case CAMU_BACKGROUND_DEFAULT:
- clear_color[3] = 1.f;
- lr->params.background = PL_CLEAR_TILES;
+ case CAMU_RENDERER_SCALING:
+ switch (value) {
+ case CAMU_SCALING_DEFAULT:
+ lr->params.upscaler = pl_render_default_params.upscaler;
+ lr->params.downscaler = pl_render_default_params.downscaler;
+ lr->params.skip_anti_aliasing = pl_render_default_params.skip_anti_aliasing;
+ break;
+ case CAMU_SCALING_NEAREST:
+ lr->params.upscaler = &pl_filter_nearest;
+ lr->params.downscaler = &pl_filter_nearest;
+ lr->params.skip_anti_aliasing = true;
+ break;
+ }
break;
- case CAMU_BACKGROUND_TRANSPARENT:
- clear_color[3] = 0.f;
- lr->params.background = PL_CLEAR_SKIP;
+ case CAMU_RENDERER_BACKGROUND:
+ switch (value) {
+ case CAMU_BACKGROUND_DEFAULT:
+ clear_color[3] = 1.f;
+ lr->params.background = PL_CLEAR_TILES;
+ break;
+ case CAMU_BACKGROUND_TRANSPARENT:
+ clear_color[3] = 0.f;
+ lr->params.background = PL_CLEAR_SKIP;
+ break;
+ }
break;
}
}
@@ -479,13 +477,7 @@ struct camu_renderer *camu_renderer_lp_create(void)
lr->r.add_font = renderer_lp_add_font;
lr->r.get_latency = renderer_lp_get_latency;
lr->r.resize = renderer_lp_resize;
-#ifdef STELA_API_DX11
- lr->r.set_fullscreen = renderer_lp_set_fullscreen;
-#else
- lr->r.set_fullscreen = NULL;
-#endif
- lr->r.set_scaling = renderer_lp_set_scaling;
- lr->r.set_background = renderer_lp_set_background;
+ lr->r.set = renderer_lp_set;
lr->r.render = renderer_lp_render;
lr->r.free = renderer_lp_free;
return (struct camu_renderer *)lr;
diff --git a/src/render/renderer_momo.c b/src/render/renderer_momo.c
index 9f217bf..3cc8bc1 100644
--- a/src/render/renderer_momo.c
+++ b/src/render/renderer_momo.c
@@ -12,6 +12,14 @@ static void renderer_momo_resize(struct camu_renderer *renderer, u32 *width, u32
(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
@@ -63,6 +71,13 @@ static struct camu_frame_queue *renderer_momo_create_queue(struct camu_renderer
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;
@@ -89,8 +104,10 @@ 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;
diff --git a/src/screen/screen.c b/src/screen/screen.c
index 0ff5eec..bb11757 100644
--- a/src/screen/screen.c
+++ b/src/screen/screen.c
@@ -302,20 +302,22 @@ static bool key_callback(void *userdata, u8 state, u16 button)
case STELA_KEY_N:
scr->scaling_disabled = !scr->scaling_disabled;
if (scr->scaling_disabled) {
- scr->renderer->set_scaling(scr->renderer, CAMU_SCALING_NEAREST);
+ scr->renderer->set(scr->renderer, CAMU_RENDERER_SCALING, CAMU_SCALING_NEAREST);
log_info("Scaling filters disabled.");
} else {
- scr->renderer->set_scaling(scr->renderer, CAMU_SCALING_DEFAULT);
+ scr->renderer->set(scr->renderer, CAMU_RENDERER_SCALING, CAMU_SCALING_DEFAULT);
log_info("Scaling filters enabled.");
}
return true;
case STELA_KEY_C:
scr->transparent_background = !scr->transparent_background;
if (scr->transparent_background) {
- scr->renderer->set_background(scr->renderer, CAMU_BACKGROUND_TRANSPARENT);
+ scr->window->set_decorations(scr->window, false);
+ scr->renderer->set(scr->renderer, CAMU_RENDERER_BACKGROUND, CAMU_BACKGROUND_TRANSPARENT);
log_info("Background transparent.");
} else {
- scr->renderer->set_background(scr->renderer, CAMU_BACKGROUND_DEFAULT);
+ scr->window->set_decorations(scr->window, true);
+ scr->renderer->set(scr->renderer, CAMU_RENDERER_BACKGROUND, CAMU_BACKGROUND_DEFAULT);
log_info("Background solid.");
}
// Force refresh for if there's no video buffer.
@@ -350,11 +352,11 @@ static void key_immediate_callback(void *userdata, u8 state, u16 button)
switch (button) {
case STELA_KEY_F:
scr->fullscreen = !scr->fullscreen;
- if (scr->renderer->set_fullscreen) {
- scr->renderer->set_fullscreen(scr->renderer, scr->fullscreen);
- } else {
- scr->window->toggle_fullscreen(scr->window);
- }
+#ifdef STELA_API_DX11
+ scr->renderer->set(scr->renderer, CAMU_RENDERER_FULLSCREEN, scr->fullscreen);
+#else
+ scr->window->toggle_fullscreen(scr->window);
+#endif
break;
}
break;