diff options
| author | Drew DeVault <sir@cmpwn.com> | 2018-06-22 05:37:07 -0700 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-06-22 05:37:07 -0700 | 
| commit | e459fe0ec713ea65b35b966f9bb3c6c70c9504aa (patch) | |
| tree | bbf22d6d1c6014d6b2174dd37c0e80c2381648b1 /render/gles2 | |
| parent | 47c7674a68ca6adfd0b8151d62c3afae32d69577 (diff) | |
| parent | ed7d5b0f53167b6191d408e5c7f20a3672fac3c2 (diff) | |
| download | wlroots-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.c | 29 | 
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,  }; | 
