blob: 497dcc3f694c88d02a0ad2d2e2019f6e37b749f9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#pragma once
#include "video/out/libmpv.h"
struct ra_tex;
struct libmpv_gpu_context {
struct mpv_global *global;
struct mp_log *log;
const struct libmpv_gpu_context_fns *fns;
struct ra_ctx *ra_ctx;
void *priv;
};
// Manage backend specific interaction between libmpv and ra backend, that can't
// be managed by ra itself (initialization and passing FBOs).
struct libmpv_gpu_context_fns {
// The libmpv API type name, see MPV_RENDER_PARAM_API_TYPE.
const char *api_name;
// Pretty much works like render_backend_fns.init, except that the
// API type is already checked by the caller.
// Successful init must set ctx->ra.
int (*init)(struct libmpv_gpu_context *ctx, mpv_render_param *params);
// Wrap the surface passed to mpv_render_context_render() (via the params
// array) into a ra_tex and return it. Returns a libmpv error code, and sets
// *out to a temporary object on success. The returned object is valid until
// another wrap_fbo() or done_frame() is called.
// This does not need to care about generic attributes, like flipping.
int (*wrap_fbo)(struct libmpv_gpu_context *ctx, mpv_render_param *params,
struct ra_tex **out);
// Signal that the ra_tex object obtained with wrap_fbo is no longer used.
// For certain backends, this might also be used to signal the end of
// rendering (like OpenGL doing weird crap).
void (*done_frame)(struct libmpv_gpu_context *ctx, bool ds);
// Free all data in ctx->priv.
void (*destroy)(struct libmpv_gpu_context *ctx);
};
extern const struct libmpv_gpu_context_fns libmpv_gpu_context_gl;
|