diff options
Diffstat (limited to 'render/gles2')
-rw-r--r-- | render/gles2/renderer.c | 5 | ||||
-rw-r--r-- | render/gles2/texture.c | 49 |
2 files changed, 15 insertions, 39 deletions
diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c index c8094847..77af0ab7 100644 --- a/render/gles2/renderer.c +++ b/render/gles2/renderer.c @@ -6,7 +6,6 @@ #include <stdlib.h> #include <wayland-server-protocol.h> #include <wayland-util.h> -#include <wlr/backend.h> #include <wlr/render/egl.h> #include <wlr/render/interface.h> #include <wlr/render/wlr_renderer.h> @@ -400,7 +399,7 @@ extern const GLchar tex_fragment_src_rgba[]; extern const GLchar tex_fragment_src_rgbx[]; extern const GLchar tex_fragment_src_external[]; -struct wlr_renderer *wlr_gles2_renderer_create(struct wlr_backend *backend) { +struct wlr_renderer *wlr_gles2_renderer_create(struct wlr_egl *egl) { struct wlr_gles2_renderer *renderer = calloc(1, sizeof(struct wlr_gles2_renderer)); if (renderer == NULL) { @@ -408,7 +407,7 @@ struct wlr_renderer *wlr_gles2_renderer_create(struct wlr_backend *backend) { } wlr_renderer_init(&renderer->wlr_renderer, &renderer_impl); - renderer->egl = wlr_backend_get_egl(backend); + renderer->egl = egl; wlr_egl_make_current(renderer->egl, EGL_NO_SURFACE, NULL); renderer->exts_str = (const char*) glGetString(GL_EXTENSIONS); diff --git a/render/gles2/texture.c b/render/gles2/texture.c index 82effd71..e4936d71 100644 --- a/render/gles2/texture.c +++ b/render/gles2/texture.c @@ -90,7 +90,7 @@ static void gles2_texture_destroy(struct wlr_texture *wlr_texture) { } if (texture->image) { assert(eglDestroyImageKHR); - eglDestroyImageKHR(texture->renderer->egl->display, texture->image); + wlr_egl_destroy_image(texture->renderer->egl, texture->image); } if (texture->type == WLR_GLES2_TEXTURE_GLTEX) { @@ -144,34 +144,17 @@ struct wlr_texture *gles2_texture_from_pixels(struct wlr_renderer *wlr_renderer, glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT, 0); GLES2_DEBUG_POP; - return (struct wlr_texture *)texture; + return &texture->wlr_texture; } struct wlr_texture *gles2_texture_from_wl_drm(struct wlr_renderer *wlr_renderer, struct wl_resource *data) { struct wlr_gles2_renderer *renderer = gles2_get_renderer(wlr_renderer); - if (!eglQueryWaylandBufferWL || !eglCreateImageKHR || - !glEGLImageTargetTexture2DOES) { - return NULL; - } - - EGLint fmt; - if (!eglQueryWaylandBufferWL(renderer->egl->display, data, - EGL_TEXTURE_FORMAT, &fmt)) { + if (!glEGLImageTargetTexture2DOES) { return NULL; } - EGLint width, height; - eglQueryWaylandBufferWL(renderer->egl->display, data, EGL_WIDTH, &width); - eglQueryWaylandBufferWL(renderer->egl->display, data, EGL_HEIGHT, &height); - - EGLint inverted_y; - if (!eglQueryWaylandBufferWL(renderer->egl->display, data, - EGL_WAYLAND_Y_INVERTED_WL, &inverted_y)) { - inverted_y = 0; - } - struct wlr_gles2_texture *texture = calloc(1, sizeof(struct wlr_gles2_texture)); if (texture == NULL) { @@ -180,10 +163,15 @@ struct wlr_texture *gles2_texture_from_wl_drm(struct wlr_renderer *wlr_renderer, } wlr_texture_init(&texture->wlr_texture, &texture_impl); texture->renderer = renderer; - texture->width = width; - texture->height = height; texture->wl_drm = data; - texture->inverted_y = !!inverted_y; + + EGLint fmt; + texture->image = wlr_egl_create_image_from_wl_drm(renderer->egl, data, &fmt, + &texture->width, &texture->height, &texture->inverted_y); + if (texture->image == NULL) { + free(texture); + return NULL; + } GLenum target; switch (fmt) { @@ -204,17 +192,6 @@ struct wlr_texture *gles2_texture_from_wl_drm(struct wlr_renderer *wlr_renderer, return NULL; } - EGLint attribs[] = { - EGL_WAYLAND_PLANE_WL, 0, - EGL_NONE, - }; - texture->image = eglCreateImageKHR(renderer->egl->display, - renderer->egl->context, EGL_WAYLAND_BUFFER_WL, data, attribs); - if (texture->image == NULL) { - free(texture); - return NULL; - } - GLES2_DEBUG_PUSH; glGenTextures(1, &texture->image_tex); @@ -222,7 +199,7 @@ struct wlr_texture *gles2_texture_from_wl_drm(struct wlr_renderer *wlr_renderer, glEGLImageTargetTexture2DOES(target, texture->image); GLES2_DEBUG_POP; - return (struct wlr_texture *)texture; + return &texture->wlr_texture; } struct wlr_texture *gles2_texture_from_dmabuf(struct wlr_renderer *wlr_renderer, @@ -267,5 +244,5 @@ struct wlr_texture *gles2_texture_from_dmabuf(struct wlr_renderer *wlr_renderer, glEGLImageTargetTexture2DOES(GL_TEXTURE_EXTERNAL_OES, texture->image); GLES2_DEBUG_POP; - return (struct wlr_texture *)texture; + return &texture->wlr_texture; } |