summaryrefslogtreecommitdiffstats
path: root/video/out/opengl/osd.c
diff options
context:
space:
mode:
Diffstat (limited to 'video/out/opengl/osd.c')
-rw-r--r--video/out/opengl/osd.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/video/out/opengl/osd.c b/video/out/opengl/osd.c
index c41e10d900..967b81e535 100644
--- a/video/out/opengl/osd.c
+++ b/video/out/opengl/osd.c
@@ -54,6 +54,7 @@ struct mpgl_osd_part {
enum sub_bitmap_format format;
int change_id;
struct ra_tex *texture;
+ struct tex_upload pbo;
int w, h;
int num_subparts;
int prev_num_subparts;
@@ -70,6 +71,7 @@ struct mpgl_osd {
const struct ra_format *fmt_table[SUBBITMAP_COUNT];
bool formats[SUBBITMAP_COUNT];
bool change_flag; // for reporting to API user only
+ bool want_pbo;
// temporary
int stereo_mode;
struct mp_osd_res osd_res;
@@ -77,7 +79,7 @@ struct mpgl_osd {
};
struct mpgl_osd *mpgl_osd_init(struct ra *ra, struct mp_log *log,
- struct osd_state *osd)
+ struct osd_state *osd, bool want_pbo)
{
struct mpgl_osd *ctx = talloc_ptrtype(NULL, ctx);
*ctx = (struct mpgl_osd) {
@@ -86,6 +88,7 @@ struct mpgl_osd *mpgl_osd_init(struct ra *ra, struct mp_log *log,
.ra = ra,
.change_flag = true,
.scratch = talloc_zero_size(ctx, 1),
+ .want_pbo = want_pbo,
};
ctx->fmt_table[SUBBITMAP_LIBASS] = ra_find_unorm_format(ra, 1, 1);
@@ -108,6 +111,7 @@ void mpgl_osd_destroy(struct mpgl_osd *ctx)
for (int n = 0; n < MAX_OSD_PARTS; n++) {
struct mpgl_osd_part *p = ctx->parts[n];
ra_tex_free(ctx->ra, &p->texture);
+ tex_upload_uninit(ctx->ra, &p->pbo);
}
talloc_free(ctx);
}
@@ -161,18 +165,22 @@ static bool upload_osd(struct mpgl_osd *ctx, struct mpgl_osd_part *osd,
.format = fmt,
.render_src = true,
.src_linear = true,
+ .host_mutable = true,
};
osd->texture = ra_tex_create(ra, &params);
if (!osd->texture)
goto done;
}
- struct mp_rect rc = {0, 0, imgs->packed_w, imgs->packed_h};
- ra->fns->tex_upload(ra, osd->texture, imgs->packed->planes[0],
- imgs->packed->stride[0], &rc, RA_TEX_UPLOAD_DISCARD,
- NULL);
+ struct ra_tex_upload_params params = {
+ .tex = osd->texture,
+ .src = imgs->packed->planes[0],
+ .invalidate = true,
+ .rc = &(struct mp_rect){0, 0, imgs->packed_w, imgs->packed_h},
+ .stride = imgs->packed->stride[0],
+ };
- ok = true;
+ ok = tex_upload(ra, &osd->pbo, ctx->want_pbo, &params);
done:
return ok;