From 72a33b736fdf2a03d45010182b16532df0753690 Mon Sep 17 00:00:00 2001
From: Tony Crisci <tony@dubstepdish.com>
Date: Mon, 14 Aug 2017 13:28:59 -0400
Subject: implement texture get buffer size

---
 render/gles2/texture.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

(limited to 'render/gles2')

diff --git a/render/gles2/texture.c b/render/gles2/texture.c
index 1e80a8d6..1f4ae22c 100644
--- a/render/gles2/texture.c
+++ b/render/gles2/texture.c
@@ -218,6 +218,18 @@ static void gles2_texture_get_matrix(struct wlr_texture *_texture,
 	wlr_matrix_mul(projection, matrix, matrix);
 }
 
+static void gles2_texture_get_buffer_size(struct wlr_texture *texture, struct
+		wl_resource *resource, int *width, int *height) {
+	struct wl_shm_buffer *buffer = wl_shm_buffer_get(resource);
+	if (!buffer) {
+		wlr_log(L_ERROR, "getting buffer size is only implemented for shm buffers");
+		return;
+	}
+
+	*width = wl_shm_buffer_get_width(buffer);
+	*height = wl_shm_buffer_get_height(buffer);
+}
+
 static void gles2_texture_bind(struct wlr_texture *_texture) {
 	struct wlr_gles2_texture *texture = (struct wlr_gles2_texture *)_texture;
 	GL_CALL(glBindTexture(GL_TEXTURE_2D, texture->tex_id));
@@ -247,6 +259,7 @@ static struct wlr_texture_impl wlr_texture_impl = {
 	.update_shm = gles2_texture_update_shm,
 	.upload_drm = gles2_texture_upload_drm,
 	.get_matrix = gles2_texture_get_matrix,
+	.get_buffer_size = gles2_texture_get_buffer_size,
 	.bind = gles2_texture_bind,
 	.destroy = gles2_texture_destroy,
 };
-- 
cgit v1.2.3


From 4f2b1cc930b3f805358571e809ccba4bf6d6272c Mon Sep 17 00:00:00 2001
From: Tony Crisci <tony@dubstepdish.com>
Date: Tue, 15 Aug 2017 07:58:07 -0400
Subject: implement get_buffer_size for egl buffers

---
 render/gles2/texture.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

(limited to 'render/gles2')

diff --git a/render/gles2/texture.c b/render/gles2/texture.c
index 1f4ae22c..4eb79374 100644
--- a/render/gles2/texture.c
+++ b/render/gles2/texture.c
@@ -222,7 +222,19 @@ static void gles2_texture_get_buffer_size(struct wlr_texture *texture, struct
 		wl_resource *resource, int *width, int *height) {
 	struct wl_shm_buffer *buffer = wl_shm_buffer_get(resource);
 	if (!buffer) {
-		wlr_log(L_ERROR, "getting buffer size is only implemented for shm buffers");
+		struct wlr_gles2_texture *tex = (struct wlr_gles2_texture *)texture;
+		if (!glEGLImageTargetTexture2DOES) {
+			return;
+		}
+		if (!wlr_egl_query_buffer(tex->egl, resource, EGL_WIDTH,
+				(EGLint*)&width)) {
+			wlr_log(L_ERROR, "could not get size of the buffer "
+				"(no buffer found)");
+			return;
+		};
+		wlr_egl_query_buffer(tex->egl, resource, EGL_HEIGHT,
+			(EGLint*)&height);
+
 		return;
 	}
 
-- 
cgit v1.2.3