aboutsummaryrefslogtreecommitdiff
path: root/render/gles2/renderer.c
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2018-04-02 10:32:04 -0400
committerGitHub <noreply@github.com>2018-04-02 10:32:04 -0400
commit1f4a4a8641fa9dc57e1b24e92db9a5ed02ae4ce0 (patch)
tree2500528c3fe994c0a1cb0cb9f15fe28152aa2182 /render/gles2/renderer.c
parent8b37e8f67a7ef659f884b59290c1c18ed9d64fec (diff)
parentf3f61bed3e055e7032466723afda33a56f585dc5 (diff)
Merge pull request #800 from emersion/untie-gles2-renderer-texture
Untie wlr_gles2_renderer and wlr_gles2_texture
Diffstat (limited to 'render/gles2/renderer.c')
-rw-r--r--render/gles2/renderer.c33
1 files changed, 29 insertions, 4 deletions
diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c
index 77af0ab7..b8bce98d 100644
--- a/render/gles2/renderer.c
+++ b/render/gles2/renderer.c
@@ -16,16 +16,16 @@
static const struct wlr_renderer_impl renderer_impl;
-struct wlr_gles2_renderer *gles2_get_renderer(
+static struct wlr_gles2_renderer *gles2_get_renderer(
struct wlr_renderer *wlr_renderer) {
assert(wlr_renderer->impl == &renderer_impl);
return (struct wlr_gles2_renderer *)wlr_renderer;
}
-struct wlr_gles2_renderer *gles2_get_renderer_in_context(
+static struct wlr_gles2_renderer *gles2_get_renderer_in_context(
struct wlr_renderer *wlr_renderer) {
struct wlr_gles2_renderer *renderer = gles2_get_renderer(wlr_renderer);
- assert(eglGetCurrentContext() == renderer->egl->context);
+ assert(wlr_egl_is_current(renderer->egl));
return renderer;
}
@@ -252,11 +252,32 @@ static bool gles2_read_pixels(struct wlr_renderer *wlr_renderer,
return true;
}
-static bool gles2_format_supported(struct wlr_renderer *r,
+static bool gles2_format_supported(struct wlr_renderer *wlr_renderer,
enum wl_shm_format wl_fmt) {
return gles2_format_from_wl(wl_fmt) != NULL;
}
+static struct wlr_texture *gles2_texture_from_pixels(
+ struct wlr_renderer *wlr_renderer, enum wl_shm_format wl_fmt,
+ uint32_t stride, uint32_t width, uint32_t height, const void *data) {
+ struct wlr_gles2_renderer *renderer = gles2_get_renderer(wlr_renderer);
+ return wlr_gles2_texture_from_pixels(renderer->egl, wl_fmt, stride, width,
+ height, data);
+}
+
+static 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);
+ return wlr_gles2_texture_from_wl_drm(renderer->egl, data);
+}
+
+static struct wlr_texture *gles2_texture_from_dmabuf(
+ struct wlr_renderer *wlr_renderer,
+ struct wlr_dmabuf_buffer_attribs *attribs) {
+ struct wlr_gles2_renderer *renderer = gles2_get_renderer(wlr_renderer);
+ return wlr_gles2_texture_from_dmabuf(renderer->egl, attribs);
+}
+
static void gles2_destroy(struct wlr_renderer *wlr_renderer) {
struct wlr_gles2_renderer *renderer = gles2_get_renderer(wlr_renderer);
@@ -400,6 +421,10 @@ extern const GLchar tex_fragment_src_rgbx[];
extern const GLchar tex_fragment_src_external[];
struct wlr_renderer *wlr_gles2_renderer_create(struct wlr_egl *egl) {
+ if (!load_glapi()) {
+ return NULL;
+ }
+
struct wlr_gles2_renderer *renderer =
calloc(1, sizeof(struct wlr_gles2_renderer));
if (renderer == NULL) {