diff options
author | Simon Ser <contact@emersion.fr> | 2019-11-06 11:19:52 +0100 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-11-07 14:24:03 -0500 |
commit | 447835afc108fe17906a5acaecc65666786df1ab (patch) | |
tree | 6e39c8c3c59146e950c4157b354d7ba8585cd8a5 /render | |
parent | eaa98f6aff6baa13e5370e37a8422bd27d0f3348 (diff) |
render/gles2: provide public API to access GL texture
Prior to this commit, compositors needed to render the texture to an
intermediate off-screen buffer using wlr_renderer APIs if they wanted to
use a custom rendering path (e.g. render to a 3D scene).
A new wlr_gles2_texture_get_attribs exposes the GL texture target and ID
so that compositors can render wlr_textures with their own shaders. An
example of a compositor doing so is available at [1].
[1]: https://git.sr.ht/~sircmpwn/wxrc/tree/3db905b7842ac42cf1878876e647005b41f00a52/src/render.c#L227
Diffstat (limited to 'render')
-rw-r--r-- | render/gles2/texture.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/render/gles2/texture.c b/render/gles2/texture.c index 2ea4adc9..3aa1c005 100644 --- a/render/gles2/texture.c +++ b/render/gles2/texture.c @@ -17,9 +17,13 @@ static const struct wlr_texture_impl texture_impl; +bool wlr_texture_is_gles2(struct wlr_texture *wlr_texture) { + return wlr_texture->impl == &texture_impl; +} + struct wlr_gles2_texture *gles2_get_texture( struct wlr_texture *wlr_texture) { - assert(wlr_texture->impl == &texture_impl); + assert(wlr_texture_is_gles2(wlr_texture)); return (struct wlr_gles2_texture *)wlr_texture; } @@ -291,3 +295,13 @@ struct wlr_texture *wlr_gles2_texture_from_dmabuf(struct wlr_egl *egl, POP_GLES2_DEBUG; return &texture->wlr_texture; } + +void wlr_gles2_texture_get_attribs(struct wlr_texture *wlr_texture, + struct wlr_gles2_texture_attribs *attribs) { + struct wlr_gles2_texture *texture = gles2_get_texture(wlr_texture); + memset(attribs, 0, sizeof(*attribs)); + attribs->target = texture->target; + attribs->tex = texture->tex; + attribs->inverted_y = texture->inverted_y; + attribs->has_alpha = texture->has_alpha; +} |