aboutsummaryrefslogtreecommitdiff
path: root/render/gles2
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2018-06-22 05:37:07 -0700
committerGitHub <noreply@github.com>2018-06-22 05:37:07 -0700
commite459fe0ec713ea65b35b966f9bb3c6c70c9504aa (patch)
treebbf22d6d1c6014d6b2174dd37c0e80c2381648b1 /render/gles2
parent47c7674a68ca6adfd0b8151d62c3afae32d69577 (diff)
parented7d5b0f53167b6191d408e5c7f20a3672fac3c2 (diff)
downloadwlroots-e459fe0ec713ea65b35b966f9bb3c6c70c9504aa.tar.xz
Merge pull request #992 from emersion/screencontent
Implement wlr_export_dmabuf_unstable_v1 protocol
Diffstat (limited to 'render/gles2')
-rw-r--r--render/gles2/texture.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/render/gles2/texture.c b/render/gles2/texture.c
index da98a523..0ef9d759 100644
--- a/render/gles2/texture.c
+++ b/render/gles2/texture.c
@@ -74,6 +74,34 @@ static bool gles2_texture_write_pixels(struct wlr_texture *wlr_texture,
return true;
}
+static bool gles2_texture_to_dmabuf(struct wlr_texture *wlr_texture,
+ struct wlr_dmabuf_attributes *attribs) {
+ struct wlr_gles2_texture *texture = gles2_get_texture(wlr_texture);
+
+ if (!texture->image) {
+ assert(texture->type == WLR_GLES2_TEXTURE_GLTEX);
+
+ if (!eglCreateImageKHR) {
+ return false;
+ }
+
+ texture->image = eglCreateImageKHR(texture->egl->display,
+ texture->egl->context, EGL_GL_TEXTURE_2D_KHR,
+ (EGLClientBuffer)(uintptr_t)texture->gl_tex, NULL);
+ if (texture->image == EGL_NO_IMAGE_KHR) {
+ return false;
+ }
+ }
+
+ uint32_t flags = 0;
+ if (texture->inverted_y) {
+ flags |= WLR_DMABUF_ATTRIBUTES_FLAGS_Y_INVERT;
+ }
+
+ return wlr_egl_export_image_to_dmabuf(texture->egl, texture->image,
+ texture->width, texture->height, flags, attribs);
+}
+
static void gles2_texture_destroy(struct wlr_texture *wlr_texture) {
if (wlr_texture == NULL) {
return;
@@ -102,6 +130,7 @@ static void gles2_texture_destroy(struct wlr_texture *wlr_texture) {
static const struct wlr_texture_impl texture_impl = {
.get_size = gles2_texture_get_size,
.write_pixels = gles2_texture_write_pixels,
+ .to_dmabuf = gles2_texture_to_dmabuf,
.destroy = gles2_texture_destroy,
};