aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2018-03-19 23:16:29 +0100
committeremersion <contact@emersion.fr>2018-03-19 23:16:29 +0100
commitc41de2d1be5c8e814e99e3a1859cdaa885b6042d (patch)
tree3e62b8364c57805bd7c5dbb5de4c8522339e3231
parenta76cef475b6da9d4953e7b3503a35f01aa7c824e (diff)
render: split render.h into wlr_renderer.h and wlr_texture.h
-rw-r--r--backend/drm/drm.c2
-rw-r--r--backend/drm/renderer.c2
-rw-r--r--examples/idle-inhibit.c2
-rw-r--r--examples/idle.c6
-rw-r--r--examples/multi-pointer.c28
-rw-r--r--examples/output-layout.c26
-rw-r--r--examples/pointer.c28
-rw-r--r--examples/rotation.c16
-rw-r--r--examples/simple.c6
-rw-r--r--examples/tablet.c20
-rw-r--r--examples/touch.c20
-rw-r--r--include/backend/drm/renderer.h2
-rw-r--r--include/backend/wayland.h2
-rw-r--r--include/render/gles2.h3
-rw-r--r--include/rootston/server.h2
-rw-r--r--include/wlr/render.h135
-rw-r--r--include/wlr/render/gles2.h2
-rw-r--r--include/wlr/render/interface.h5
-rw-r--r--include/wlr/render/wlr_renderer.h75
-rw-r--r--include/wlr/render/wlr_texture.h69
-rw-r--r--include/wlr/types/wlr_compositor.h2
-rw-r--r--render/gles2/renderer.c2
-rw-r--r--render/gles2/texture.c2
-rw-r--r--render/wlr_renderer.c1
-rw-r--r--render/wlr_texture.c1
-rw-r--r--rootston/main.c2
-rw-r--r--types/wlr_linux_dmabuf.c1
-rw-r--r--types/wlr_output.c2
-rw-r--r--types/wlr_screenshooter.c2
29 files changed, 239 insertions, 227 deletions
diff --git a/backend/drm/drm.c b/backend/drm/drm.c
index fd436659..344756f8 100644
--- a/backend/drm/drm.c
+++ b/backend/drm/drm.c
@@ -15,8 +15,8 @@
#include <wayland-util.h>
#include <wlr/backend/interface.h>
#include <wlr/interfaces/wlr_output.h>
-#include <wlr/render.h>
#include <wlr/render/gles2.h>
+#include <wlr/render/wlr_renderer.h>
#include <wlr/types/wlr_matrix.h>
#include <wlr/util/log.h>
#include <xf86drm.h>
diff --git a/backend/drm/renderer.c b/backend/drm/renderer.c
index 97fba95a..7e330990 100644
--- a/backend/drm/renderer.c
+++ b/backend/drm/renderer.c
@@ -7,9 +7,9 @@
#include <stdlib.h>
#include <unistd.h>
#include <wayland-util.h>
-#include <wlr/render.h>
#include <wlr/render/egl.h>
#include <wlr/render/gles2.h>
+#include <wlr/render/wlr_renderer.h>
#include <wlr/types/wlr_matrix.h>
#include <wlr/util/log.h>
#include "backend/drm/drm.h"
diff --git a/examples/idle-inhibit.c b/examples/idle-inhibit.c
index b7b9c21c..c09e6507 100644
--- a/examples/idle-inhibit.c
+++ b/examples/idle-inhibit.c
@@ -5,8 +5,8 @@
#include <wayland-client.h>
#include <wayland-egl.h>
#include <wlr/render/egl.h>
-#include "xdg-shell-client-protocol.h"
#include "idle-inhibit-unstable-v1-client-protocol.h"
+#include "xdg-shell-client-protocol.h"
#include <linux/input-event-codes.h>
diff --git a/examples/idle.c b/examples/idle.c
index 2b155c68..b65a81cf 100644
--- a/examples/idle.c
+++ b/examples/idle.c
@@ -1,11 +1,11 @@
+#include <getopt.h>
+#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <getopt.h>
-#include <pthread.h>
-#include <wayland-client.h>
#include <wayland-client-protocol.h>
+#include <wayland-client.h>
#include <wlr/util/log.h>
#include "idle-client-protocol.h"
diff --git a/examples/multi-pointer.c b/examples/multi-pointer.c
index 6e56bfdc..43ccdb66 100644
--- a/examples/multi-pointer.c
+++ b/examples/multi-pointer.c
@@ -1,30 +1,30 @@
#define _POSIX_C_SOURCE 199309L
#define _XOPEN_SOURCE 500
+#include <assert.h>
+#include <GLES2/gl2.h>
+#include <math.h>
#include <stdio.h>
#include <stdlib.h>
-#include <time.h>
#include <string.h>
+#include <time.h>
#include <unistd.h>
-#include <math.h>
-#include <assert.h>
-#include <wayland-server.h>
#include <wayland-server-protocol.h>
-#include <xkbcommon/xkbcommon.h>
-#include <GLES2/gl2.h>
-#include <wlr/types/wlr_matrix.h>
-#include <wlr/render/gles2.h>
-#include <wlr/render.h>
+#include <wayland-server.h>
#include <wlr/backend.h>
#include <wlr/backend/session.h>
+#include <wlr/render/gles2.h>
+#include <wlr/render/wlr_renderer.h>
+#include <wlr/types/wlr_cursor.h>
#include <wlr/types/wlr_keyboard.h>
+#include <wlr/types/wlr_list.h>
+#include <wlr/types/wlr_matrix.h>
#include <wlr/types/wlr_output_layout.h>
-#include <wlr/xcursor.h>
-#include <wlr/types/wlr_cursor.h>
#include <wlr/util/log.h>
-#include <wlr/types/wlr_list.h>
-#include "support/shared.h"
-#include "support/config.h"
+#include <wlr/xcursor.h>
+#include <xkbcommon/xkbcommon.h>
#include "support/cat.h"
+#include "support/config.h"
+#include "support/shared.h"
struct sample_state;
diff --git a/examples/output-layout.c b/examples/output-layout.c
index 8f506208..de134a71 100644
--- a/examples/output-layout.c
+++ b/examples/output-layout.c
@@ -1,29 +1,29 @@
#define _POSIX_C_SOURCE 199309L
#define _XOPEN_SOURCE 700
+#include <GLES2/gl2.h>
+#include <limits.h>
+#include <math.h>
#include <stdio.h>
#include <stdlib.h>
-#include <time.h>
#include <string.h>
#include <strings.h>
+#include <time.h>
#include <unistd.h>
-#include <limits.h>
-#include <wayland-server.h>
#include <wayland-server-protocol.h>
-#include <xkbcommon/xkbcommon.h>
-#include <GLES2/gl2.h>
-#include <wlr/types/wlr_matrix.h>
-#include <wlr/render/gles2.h>
-#include <wlr/render.h>
-#include <wlr/util/log.h>
+#include <wayland-server.h>
#include <wlr/backend.h>
#include <wlr/backend/session.h>
+#include <wlr/render/gles2.h>
+#include <wlr/render/wlr_renderer.h>
+#include <wlr/types/wlr_keyboard.h>
+#include <wlr/types/wlr_matrix.h>
#include <wlr/types/wlr_output_layout.h>
#include <wlr/types/wlr_output.h>
-#include <wlr/types/wlr_keyboard.h>
-#include <math.h>
-#include "support/shared.h"
-#include "support/config.h"
+#include <wlr/util/log.h>
+#include <xkbcommon/xkbcommon.h>
#include "support/cat.h"
+#include "support/config.h"
+#include "support/shared.h"
struct sample_state {
struct example_config *config;
diff --git a/examples/pointer.c b/examples/pointer.c
index e80b346a..e8a0e892 100644
--- a/examples/pointer.c
+++ b/examples/pointer.c
@@ -1,30 +1,30 @@
#define _POSIX_C_SOURCE 199309L
#define _XOPEN_SOURCE 500
+#include <assert.h>
+#include <GLES2/gl2.h>
+#include <math.h>
#include <stdio.h>
#include <stdlib.h>
-#include <time.h>
#include <string.h>
+#include <time.h>
#include <unistd.h>
-#include <math.h>
-#include <assert.h>
-#include <wayland-server.h>
#include <wayland-server-protocol.h>
-#include <xkbcommon/xkbcommon.h>
-#include <GLES2/gl2.h>
-#include <wlr/types/wlr_matrix.h>
-#include <wlr/render/gles2.h>
-#include <wlr/render.h>
+#include <wayland-server.h>
#include <wlr/backend.h>
#include <wlr/backend/session.h>
+#include <wlr/render/gles2.h>
+#include <wlr/render/wlr_renderer.h>
+#include <wlr/types/wlr_cursor.h>
#include <wlr/types/wlr_keyboard.h>
+#include <wlr/types/wlr_list.h>
+#include <wlr/types/wlr_matrix.h>
#include <wlr/types/wlr_output_layout.h>
-#include <wlr/xcursor.h>
-#include <wlr/types/wlr_cursor.h>
#include <wlr/util/log.h>
-#include <wlr/types/wlr_list.h>
-#include "support/shared.h"
-#include "support/config.h"
+#include <wlr/xcursor.h>
+#include <xkbcommon/xkbcommon.h>
#include "support/cat.h"
+#include "support/config.h"
+#include "support/shared.h"
struct sample_state {
struct compositor_state *compositor;
diff --git a/examples/rotation.c b/examples/rotation.c
index aaf006cf..7f50b620 100644
--- a/examples/rotation.c
+++ b/examples/rotation.c
@@ -1,23 +1,23 @@
#define _POSIX_C_SOURCE 199309L
#define _XOPEN_SOURCE 500
+#include <GLES2/gl2.h>
+#include <math.h>
#include <stdio.h>
#include <stdlib.h>
-#include <time.h>
#include <string.h>
#include <strings.h>
+#include <time.h>
#include <unistd.h>
-#include <wayland-server.h>
#include <wayland-server-protocol.h>
-#include <xkbcommon/xkbcommon.h>
-#include <GLES2/gl2.h>
-#include <wlr/types/wlr_matrix.h>
-#include <wlr/render/gles2.h>
-#include <wlr/render.h>
+#include <wayland-server.h>
#include <wlr/backend.h>
#include <wlr/backend/session.h>
+#include <wlr/render/wlr_renderer.h>
+#include <wlr/render/gles2.h>
#include <wlr/types/wlr_keyboard.h>
+#include <wlr/types/wlr_matrix.h>
#include <wlr/util/log.h>
-#include <math.h>
+#include <xkbcommon/xkbcommon.h>
#include "support/shared.h"
#include "support/config.h"
#include "support/cat.h"
diff --git a/examples/simple.c b/examples/simple.c
index 90808b0f..79db4a0c 100644
--- a/examples/simple.c
+++ b/examples/simple.c
@@ -1,11 +1,11 @@
#define _POSIX_C_SOURCE 199309L
-#include <string.h>
+#include <GLES2/gl2.h>
+#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <time.h>
-#include <inttypes.h>
#include <wayland-server.h>
-#include <GLES2/gl2.h>
#include <wlr/backend.h>
#include <wlr/backend/session.h>
#include <wlr/types/wlr_output.h>
diff --git a/examples/tablet.c b/examples/tablet.c
index 521447b9..1b995003 100644
--- a/examples/tablet.c
+++ b/examples/tablet.c
@@ -1,27 +1,27 @@
#define _POSIX_C_SOURCE 199309L
#define _XOPEN_SOURCE 500
+#include <GLES2/gl2.h>
+#include <math.h>
#include <stdio.h>
#include <stdlib.h>
-#include <time.h>
#include <string.h>
+#include <time.h>
#include <unistd.h>
-#include <wayland-server.h>
#include <wayland-server-protocol.h>
-#include <xkbcommon/xkbcommon.h>
-#include <GLES2/gl2.h>
-#include <wlr/types/wlr_matrix.h>
-#include <wlr/render/gles2.h>
-#include <wlr/render.h>
+#include <wayland-server.h>
#include <wlr/backend.h>
#include <wlr/backend/session.h>
+#include <wlr/render/gles2.h>
+#include <wlr/render/wlr_renderer.h>
#include <wlr/types/wlr_box.h>
+#include <wlr/types/wlr_matrix.h>
#include <wlr/types/wlr_output.h>
-#include <wlr/types/wlr_tablet_tool.h>
#include <wlr/types/wlr_tablet_pad.h>
+#include <wlr/types/wlr_tablet_tool.h>
#include <wlr/util/log.h>
-#include <math.h>
-#include "support/shared.h"
+#include <xkbcommon/xkbcommon.h>
#include "support/cat.h"
+#include "support/shared.h"
struct sample_state {
struct wlr_renderer *renderer;
diff --git a/examples/touch.c b/examples/touch.c
index 0af8bc4a..0968e82a 100644
--- a/examples/touch.c
+++ b/examples/touch.c
@@ -1,25 +1,25 @@
#define _POSIX_C_SOURCE 199309L
#define _XOPEN_SOURCE 500
+#include <GLES2/gl2.h>
+#include <math.h>
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
-#include <time.h>
#include <string.h>
+#include <time.h>
#include <unistd.h>
-#include <stdint.h>
-#include <math.h>
-#include <wayland-server.h>
#include <wayland-server-protocol.h>
-#include <xkbcommon/xkbcommon.h>
-#include <GLES2/gl2.h>
-#include <wlr/types/wlr_matrix.h>
-#include <wlr/render/gles2.h>
-#include <wlr/render.h>
+#include <wayland-server.h>
#include <wlr/backend.h>
#include <wlr/backend/session.h>
+#include <wlr/render/gles2.h>
+#include <wlr/render/wlr_renderer.h>
#include <wlr/types/wlr_list.h>
+#include <wlr/types/wlr_matrix.h>
#include <wlr/util/log.h>
-#include "support/shared.h"
+#include <xkbcommon/xkbcommon.h>
#include "support/cat.h"
+#include "support/shared.h"
struct sample_state {
struct wlr_renderer *renderer;
diff --git a/include/backend/drm/renderer.h b/include/backend/drm/renderer.h
index a56a8673..73adfc27 100644
--- a/include/backend/drm/renderer.h
+++ b/include/backend/drm/renderer.h
@@ -5,7 +5,7 @@
#include <gbm.h>
#include <stdbool.h>
#include <stdint.h>
-#include <wlr/render.h>
+#include <wlr/render/wlr_renderer.h>
struct wlr_drm_backend;
struct wlr_drm_plane;
diff --git a/include/backend/wayland.h b/include/backend/wayland.h
index 16c8e13b..b68208af 100644
--- a/include/backend/wayland.h
+++ b/include/backend/wayland.h
@@ -7,8 +7,8 @@
#include <wayland-server.h>
#include <wayland-util.h>
#include <wlr/backend/wayland.h>
-#include <wlr/render.h>
#include <wlr/render/egl.h>
+#include <wlr/render/wlr_renderer.h>
#include <wlr/types/wlr_box.h>
struct wlr_wl_backend {
diff --git a/include/render/gles2.h b/include/render/gles2.h
index e015160d..e8124050 100644
--- a/include/render/gles2.h
+++ b/include/render/gles2.h
@@ -9,9 +9,10 @@
#include <stdint.h>
#include <string.h>
#include <wlr/backend.h>
-#include <wlr/render.h>
#include <wlr/render/egl.h>
#include <wlr/render/interface.h>
+#include <wlr/render/wlr_renderer.h>
+#include <wlr/render/wlr_texture.h>
#include <wlr/util/log.h>
extern PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glEGLImageTargetTexture2DOES;
diff --git a/include/rootston/server.h b/include/rootston/server.h
index 5f35dd90..7ab15682 100644
--- a/include/rootston/server.h
+++ b/include/rootston/server.h
@@ -5,7 +5,7 @@
#include <wlr/backend.h>
#include <wlr/backend/session.h>
#include <wlr/config.h>
-#include <wlr/render.h>
+#include <wlr/render/wlr_renderer.h>
#include <wlr/types/wlr_data_device.h>
#ifdef WLR_HAS_XWAYLAND
#include <wlr/xwayland.h>
diff --git a/include/wlr/render.h b/include/wlr/render.h
deleted file mode 100644
index 01d05fb1..00000000
--- a/include/wlr/render.h
+++ /dev/null
@@ -1,135 +0,0 @@
-#ifndef WLR_RENDER_H
-#define WLR_RENDER_H
-
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-#include <stdint.h>
-#include <wayland-server-protocol.h>
-#include <wlr/types/wlr_box.h>
-#include <wlr/types/wlr_output.h>
-
-struct wlr_texture;
-struct wlr_renderer;
-
-void wlr_renderer_begin(struct wlr_renderer *r, struct wlr_output *output);
-void wlr_renderer_end(struct wlr_renderer *r);
-void wlr_renderer_clear(struct wlr_renderer *r, const float color[static 4]);
-/**
- * Defines a scissor box. Only pixels that lie within the scissor box can be
- * modified by drawing functions. Providing a NULL `box` disables the scissor
- * box.
- */
-void wlr_renderer_scissor(struct wlr_renderer *r, struct wlr_box *box);
-/**
- * Requests a texture handle from this renderer.
- */
-struct wlr_texture *wlr_render_texture_create(struct wlr_renderer *r);
-/**
- * Renders the requested texture.
- */
-bool wlr_render_texture(struct wlr_renderer *r, struct wlr_texture *texture,
- const float projection[static 9], int x, int y, float alpha);
-/**
- * Renders the requested texture using the provided matrix.
- */
-bool wlr_render_texture_with_matrix(struct wlr_renderer *r,
- struct wlr_texture *texture, const float matrix[static 9], float alpha);
-/**
- * Renders a solid quad in the specified color.
- */
-void wlr_render_colored_quad(struct wlr_renderer *r,
- const float color[static 4], const float matrix[static 9]);
-/**
- * Renders a solid ellipse in the specified color.
- */
-void wlr_render_colored_ellipse(struct wlr_renderer *r,
- const float color[static 4], const float matrix[static 9]);
-/**
- * Returns a list of pixel formats supported by this renderer.
- */
-const enum wl_shm_format *wlr_renderer_get_formats(
- struct wlr_renderer *r, size_t *len);
-/**
- * Returns true if this wl_buffer is a DRM buffer.
- */
-bool wlr_renderer_buffer_is_drm(struct wlr_renderer *renderer,
- struct wl_resource *buffer);
-/**
- * Reads out of pixels of the currently bound surface into data. `stride` is in
- * bytes.
- */
-bool wlr_renderer_read_pixels(struct wlr_renderer *r, enum wl_shm_format fmt,
- uint32_t stride, uint32_t width, uint32_t height,
- uint32_t src_x, uint32_t src_y, uint32_t dst_x, uint32_t dst_y, void *data);
-/**
- * Checks if a format is supported.
- */
-bool wlr_renderer_format_supported(struct wlr_renderer *r,
- enum wl_shm_format fmt);
-/**
- * Destroys this wlr_renderer. Textures must be destroyed separately.
- */
-void wlr_renderer_destroy(struct wlr_renderer *renderer);
-
-struct wlr_texture_impl;
-
-struct wlr_texture {
- struct wlr_texture_impl *impl;
-
- bool valid;
- uint32_t format;
- int width, height;
- bool inverted_y;
- struct wl_signal destroy_signal;
- struct wl_resource *resource;
-};
-
-/**
- * Copies pixels to this texture. The buffer is not accessed after this function
- * returns.
- */
-bool wlr_texture_upload_pixels(struct wlr_texture *tex,
- enum wl_shm_format format, int stride, int width, int height,
- const unsigned char *pixels);
-/**
- * Copies pixels to this texture. The buffer is not accessed after this function
- * returns. Under some circumstances, this function may re-upload the entire
- * buffer - therefore, the entire buffer must be valid.
- */
-bool wlr_texture_update_pixels(struct wlr_texture *surf,
- enum wl_shm_format format, int stride, int x, int y,
- int width, int height, const unsigned char *pixels);
-/**
- * Copies pixels from a wl_shm_buffer into this texture. The buffer is not
- * accessed after this function returns.
- */
-bool wlr_texture_upload_shm(struct wlr_texture *tex, uint32_t format,
- struct wl_shm_buffer *shm);
-
-/**
- * Attaches the contents from the given wl_drm wl_buffer resource onto the
- * texture. The wl_resource is not used after this call.
- * Will fail (return false) if the given resource is no drm buffer.
- */
-bool wlr_texture_upload_drm(struct wlr_texture *tex,
- struct wl_resource *drm_buffer);
-
-bool wlr_texture_upload_eglimage(struct wlr_texture *tex,
- EGLImageKHR image, uint32_t width, uint32_t height);
-
-bool wlr_texture_upload_dmabuf(struct wlr_texture *tex,
- struct wl_resource *dmabuf_resource);
-/**
- * Copies a rectangle of pixels from a wl_shm_buffer onto the texture. The
- * buffer is not accessed after this function returns. Under some circumstances,
- * this function may re-upload the entire buffer - therefore, the entire buffer
- * must be valid.
- */
-bool wlr_texture_update_shm(struct wlr_texture *surf, uint32_t format,
- int x, int y, int width, int height, struct wl_shm_buffer *shm);
-/**
- * Destroys this wlr_texture.
- */
-void wlr_texture_destroy(struct wlr_texture *texture);
-
-#endif
diff --git a/include/wlr/render/gles2.h b/include/wlr/render/gles2.h
index a924a065..b3b43ab2 100644
--- a/include/wlr/render/gles2.h
+++ b/include/wlr/render/gles2.h
@@ -2,7 +2,7 @@
#define WLR_RENDER_GLES2_H
#include <wlr/backend.h>
-#include <wlr/render.h>
+#include <wlr/render/wlr_renderer.h>
struct wlr_egl;
struct wlr_renderer *wlr_gles2_renderer_create(struct wlr_backend *backend);
diff --git a/include/wlr/render/interface.h b/include/wlr/render/interface.h
index 1b8b7946..f0307230 100644
--- a/include/wlr/render/interface.h
+++ b/include/wlr/render/interface.h
@@ -5,10 +5,11 @@
#include <EGL/eglext.h>
#include <stdbool.h>
#include <wayland-server-protocol.h>
-#include <wlr/render.h>
+#include <wlr/render/wlr_renderer.h>
+#include <wlr/render/wlr_texture.h>
#include <wlr/types/wlr_box.h>
-#include <wlr/types/wlr_output.h>
#include <wlr/types/wlr_linux_dmabuf.h>
+#include <wlr/types/wlr_output.h>
struct wlr_renderer_impl;
diff --git a/include/wlr/render/wlr_renderer.h b/include/wlr/render/wlr_renderer.h
new file mode 100644
index 00000000..d5f3cf70
--- /dev/null
+++ b/include/wlr/render/wlr_renderer.h
@@ -0,0 +1,75 @@
+#ifndef WLR_RENDER_WLR_RENDERER_H
+#define WLR_RENDER_WLR_RENDERER_H
+
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+#include <stdint.h>
+#include <wayland-server-protocol.h>
+#include <wlr/render/wlr_texture.h>
+#include <wlr/types/wlr_box.h>
+
+struct wlr_output;
+
+struct wlr_renderer;
+
+void wlr_renderer_begin(struct wlr_renderer *r, struct wlr_output *output);
+void wlr_renderer_end(struct wlr_renderer *r);
+void wlr_renderer_clear(struct wlr_renderer *r, const float color[static 4]);
+/**
+ * Defines a scissor box. Only pixels that lie within the scissor box can be
+ * modified by drawing functions. Providing a NULL `box` disables the scissor
+ * box.
+ */
+void wlr_renderer_scissor(struct wlr_renderer *r, struct wlr_box *box);
+/**
+ * Requests a texture handle from this renderer.
+ */
+struct wlr_texture *wlr_render_texture_create(struct wlr_renderer *r);
+/**
+ * Renders the requested texture.
+ */
+bool wlr_render_texture(struct wlr_renderer *r, struct wlr_texture *texture,
+ const float projection[static 9], int x, int y, float alpha);
+/**
+ * Renders the requested texture using the provided matrix.
+ */
+bool wlr_render_texture_with_matrix(struct wlr_renderer *r,
+ struct wlr_texture *texture, const float matrix[static 9], float alpha);
+/**
+ * Renders a solid quad in the specified color.
+ */
+void wlr_render_colored_quad(struct wlr_renderer *r,
+ const float color[static 4], const float matrix[static 9]);
+/**
+ * Renders a solid ellipse in the specified color.
+ */
+void wlr_render_colored_ellipse(struct wlr_renderer *r,
+ const float color[static 4], const float matrix[static 9]);
+/**
+ * Returns a list of pixel formats supported by this renderer.
+ */
+const enum wl_shm_format *wlr_renderer_get_formats(struct wlr_renderer *r,
+ size_t *len);
+/**
+ * Returns true if this wl_buffer is a DRM buffer.
+ */
+bool wlr_renderer_buffer_is_drm(struct wlr_renderer *renderer,
+ struct wl_resource *buffer);
+/**
+ * Reads out of pixels of the currently bound surface into data. `stride` is in
+ * bytes.
+ */
+bool wlr_renderer_read_pixels(struct wlr_renderer *r, enum wl_shm_format fmt,
+ uint32_t stride, uint32_t width, uint32_t height,
+ uint32_t src_x, uint32_t src_y, uint32_t dst_x, uint32_t dst_y, void *data);
+/**
+ * Checks if a format is supported.
+ */
+bool wlr_renderer_format_supported(struct wlr_renderer *r,
+ enum wl_shm_format fmt);
+/**
+ * Destroys this wlr_renderer. Textures must be destroyed separately.
+ */
+void wlr_renderer_destroy(struct wlr_renderer *renderer);
+
+#endif
diff --git a/include/wlr/render/wlr_texture.h b/include/wlr/render/wlr_texture.h
new file mode 100644
index 00000000..49aa93d7
--- /dev/null
+++ b/include/wlr/render/wlr_texture.h
@@ -0,0 +1,69 @@
+#ifndef WLR_RENDER_WLR_TEXTURE_H
+#define WLR_RENDER_WLR_TEXTURE_H
+
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+#include <stdint.h>
+#include <wayland-server-protocol.h>
+
+struct wlr_texture_impl;
+
+struct wlr_texture {
+ struct wlr_texture_impl *impl;
+
+ bool valid;
+ uint32_t format;
+ int width, height;
+ bool inverted_y;
+ struct wl_signal destroy_signal;
+ struct wl_resource *resource;
+};
+
+/**
+ * Copies pixels to this texture. The buffer is not accessed after this function
+ * returns.
+ */
+bool wlr_texture_upload_pixels(struct wlr_texture *tex,
+ enum wl_shm_format format, int stride, int width, int height,
+ const unsigned char *pixels);
+/**
+ * Copies pixels to this texture. The buffer is not accessed after this function
+ * returns. Under some circumstances, this function may re-upload the entire
+ * buffer - therefore, the entire buffer must be valid.
+ */
+bool wlr_texture_update_pixels(struct wlr_texture *surf,
+ enum wl_shm_format format, int stride, int x, int y,
+ int width, int height, const unsigned char *pixels);
+/**
+ * Copies pixels from a wl_shm_buffer into this texture. The buffer is not
+ * accessed after this function returns.
+ */
+bool wlr_texture_upload_shm(struct wlr_texture *tex, uint32_t format,
+ struct wl_shm_buffer *shm);
+/**
+ * Attaches the contents from the given wl_drm wl_buffer resource onto the
+ * texture. The wl_resource is not used after this call.
+ * Will fail (return false) if the given resource is no drm buffer.
+ */
+bool wlr_texture_upload_drm(struct wlr_texture *tex,
+ struct wl_resource *drm_buffer);
+
+bool wlr_texture_upload_eglimage(struct wlr_texture *tex,
+ EGLImageKHR image, uint32_t width, uint32_t height);
+
+bool wlr_texture_upload_dmabuf(struct wlr_texture *tex,
+ struct wl_resource *dmabuf_resource);
+/**
+ * Copies a rectangle of pixels from a wl_shm_buffer onto the texture. The
+ * buffer is not accessed after this function returns. Under some circumstances,
+ * this function may re-upload the entire buffer - therefore, the entire buffer
+ * must be valid.
+ */
+bool wlr_texture_update_shm(struct wlr_texture *surf, uint32_t format,
+ int x, int y, int width, int height, struct wl_shm_buffer *shm);
+/**
+ * Destroys this wlr_texture.
+ */
+void wlr_texture_destroy(struct wlr_texture *texture);
+
+#endif
diff --git a/include/wlr/types/wlr_compositor.h b/include/wlr/types/wlr_compositor.h
index 5919b934..11bfac71 100644
--- a/include/wlr/types/wlr_compositor.h
+++ b/include/wlr/types/wlr_compositor.h
@@ -2,7 +2,7 @@
#define WLR_TYPES_WLR_COMPOSITOR_H
#include <wayland-server.h>
-#include <wlr/render.h>
+#include <wlr/render/wlr_renderer.h>
struct wlr_compositor {
struct wl_global *wl_global;
diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c
index 8d8dd17f..55797805 100644
--- a/render/gles2/renderer.c
+++ b/render/gles2/renderer.c
@@ -6,7 +6,7 @@
#include <wayland-server-protocol.h>
#include <wayland-util.h>
#include <wlr/backend.h>
-#include <wlr/render.h>
+#include <wlr/render/wlr_renderer.h>
#include <wlr/render/egl.h>
#include <wlr/render/interface.h>
#include <wlr/types/wlr_matrix.h>
diff --git a/render/gles2/texture.c b/render/gles2/texture.c
index fc94ead5..c5f79ba8 100644
--- a/render/gles2/texture.c
+++ b/render/gles2/texture.c
@@ -5,7 +5,7 @@
#include <stdlib.h>
#include <wayland-server-protocol.h>
#include <wayland-util.h>
-#include <wlr/render.h>
+#include <wlr/render/wlr_texture.h>
#include <wlr/render/egl.h>
#include <wlr/render/interface.h>
#include <wlr/types/wlr_matrix.h>
diff --git a/render/wlr_renderer.c b/render/wlr_renderer.c
index c4f91d5e..21a7901a 100644
--- a/render/wlr_renderer.c
+++ b/render/wlr_renderer.c
@@ -1,6 +1,7 @@
#include <stdbool.h>
#include <stdlib.h>
#include <wlr/render/interface.h>
+#include <wlr/render/wlr_renderer.h>
#include <wlr/types/wlr_matrix.h>
void wlr_renderer_init(struct wlr_renderer *renderer,
diff --git a/render/wlr_texture.c b/render/wlr_texture.c
index 48f76c8e..a5d0abde 100644
--- a/render/wlr_texture.c
+++ b/render/wlr_texture.c
@@ -1,6 +1,7 @@
#include <stdbool.h>
#include <stdlib.h>
#include <wlr/render/interface.h>
+#include <wlr/render/wlr_texture.h>
void wlr_texture_init(struct wlr_texture *texture,
struct wlr_texture_impl *impl) {
diff --git a/rootston/main.c b/rootston/main.c
index 5450ade2..d85701ca 100644
--- a/rootston/main.c
+++ b/rootston/main.c
@@ -7,7 +7,7 @@
#include <wlr/backend/headless.h>
#include <wlr/backend/multi.h>
#include <wlr/config.h>
-#include <wlr/render.h>
+#include <wlr/render/wlr_renderer.h>
#include <wlr/util/log.h>
#include "rootston/config.h"
#include "rootston/server.h"
diff --git a/types/wlr_linux_dmabuf.c b/types/wlr_linux_dmabuf.c
index 3b86166e..1883bc49 100644
--- a/types/wlr_linux_dmabuf.c
+++ b/types/wlr_linux_dmabuf.c
@@ -5,7 +5,6 @@
#include <stdlib.h>
#include <unistd.h>
#include <wayland-server.h>
-#include <wlr/render.h>
#include <wlr/render/egl.h>
#include <wlr/types/wlr_linux_dmabuf.h>
#include <wlr/util/log.h>
diff --git a/types/wlr_output.c b/types/wlr_output.c
index 9575f071..e30c3b78 100644
--- a/types/wlr_output.c
+++ b/types/wlr_output.c
@@ -6,7 +6,7 @@
#include <time.h>
#include <wayland-server.h>
#include <wlr/interfaces/wlr_output.h>
-#include <wlr/render.h>
+#include <wlr/render/wlr_renderer.h>
#include <wlr/types/wlr_matrix.h>
#include <wlr/types/wlr_box.h>
#include <wlr/types/wlr_output.h>
diff --git a/types/wlr_screenshooter.c b/types/wlr_screenshooter.c
index e756b6aa..e1386be6 100644
--- a/types/wlr_screenshooter.c
+++ b/types/wlr_screenshooter.c
@@ -3,7 +3,7 @@
#include <string.h>
#include <wayland-server.h>
#include <wlr/backend.h>
-#include <wlr/render.h>
+#include <wlr/render/wlr_renderer.h>
#include <wlr/types/wlr_output.h>
#include <wlr/types/wlr_screenshooter.h>
#include <wlr/util/log.h>