summaryrefslogtreecommitdiff
path: root/src/render/renderer_libplacebo.h
blob: dba71bbec672d40abab16c395b97c57a46dcfb13 (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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#pragma once

#include "renderer.h"

#include <libplacebo/renderer.h>
#if defined STELA_API_VULKAN
#include <libplacebo/vulkan.h>
#elif defined STELA_API_DX11
#include <nnwt/windows.h>
#define COBJMACROS
#include <libplacebo/d3d11.h>
#elif defined STELA_API_OPENGL
#include <libplacebo/opengl.h>
#endif
#ifdef CAMU_HAVE_SUBTITLES
#include <ass/ass.h>
#endif

//#define USE_LIBPLACEBO_CACHE

struct camu_renderer_lp {
    struct camu_renderer r;
#if defined STELA_API_VULKAN
    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
    pl_opengl gl;
#endif
    pl_gpu gpu;
#ifdef USE_LIBPLACEBO_CACHE
    pl_cache cache;
#endif
    pl_dispatch dispatch;
    pl_log logger;
    pl_swapchain swapchain;
    struct pl_swapchain_frame frame;
    bool have_frame;
    bool frame_cleared;
    struct pl_frame target;
    pl_renderer renderer;
    f64 last_swap_tick;
    struct pl_render_params params;
    struct {
        char *prelude;
        char *header;
        char *binds;
        pl_shader sh;
        u32 screen_size[2];
        f32 time;
        struct pl_shader_var vars[23];
        f32 vertices[24];
        struct pl_vertex_attrib attribs[2];
        f64 tick_time;
        bool logged_fail;
    } osd;
    const struct pl_hook *vr_emulation_hook[1];
    bool vr_init_failed;
#ifdef CAMU_HAVE_SUBTITLES
    ASS_Library *ass;
#endif
};

struct camu_renderer *camu_renderer_libplacebo_create(void);