aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2017-06-22 16:32:47 -0400
committerDrew DeVault <sir@cmpwn.com>2017-06-23 13:41:07 -0400
commit2aafb5dd19f8a3e3436f8843071fa2076a6d2716 (patch)
tree6fe60ddeb499ebad270fae0c929ef4c79188e969 /include
parentf252c5a79214a3d3cd7ab3f239050b234e4ae9e2 (diff)
Add wlcore/wl_shm (WIP)
Diffstat (limited to 'include')
-rw-r--r--include/endian.h8
-rw-r--r--include/wlr/render.h5
-rw-r--r--include/wlr/render/interface.h8
-rw-r--r--include/wlr/wlcore/wl_shm.h13
4 files changed, 31 insertions, 3 deletions
diff --git a/include/endian.h b/include/endian.h
new file mode 100644
index 00000000..0e9b6101
--- /dev/null
+++ b/include/endian.h
@@ -0,0 +1,8 @@
+#ifndef _WLR_ENDIAN_H
+#define _WLR_ENDIAN_H
+
+// https://stackoverflow.com/a/4240257
+
+#define little_endian() (((union { unsigned x; unsigned char c; }){1}).c)
+
+#endif
diff --git a/include/wlr/render.h b/include/wlr/render.h
index 90967dd9..496e3638 100644
--- a/include/wlr/render.h
+++ b/include/wlr/render.h
@@ -39,6 +39,11 @@ void wlr_render_colored_quad(struct wlr_renderer *r,
void wlr_render_colored_ellipse(struct wlr_renderer *r,
const float (*color)[4], const float (*matrix)[16]);
/**
+ * 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);
+/**
* Destroys this wlr_renderer. Surfaces must be destroyed separately.
*/
void wlr_renderer_destroy(struct wlr_renderer *renderer);
diff --git a/include/wlr/render/interface.h b/include/wlr/render/interface.h
index 222b0c4d..c7fa54d6 100644
--- a/include/wlr/render/interface.h
+++ b/include/wlr/render/interface.h
@@ -20,9 +20,11 @@ struct wlr_renderer_impl {
bool (*render_with_matrix)(struct wlr_renderer_state *state,
struct wlr_surface *surface, const float (*matrix)[16]);
void (*render_quad)(struct wlr_renderer_state *state,
- const float (*color)[4], const float (*matrix)[16]);
+ const float (*color)[4], const float (*matrix)[16]);
void (*render_ellipse)(struct wlr_renderer_state *state,
- const float (*color)[4], const float (*matrix)[16]);
+ const float (*color)[4], const float (*matrix)[16]);
+ const enum wl_shm_format *(*formats)(
+ struct wlr_renderer_state *state, size_t *len);
void (*destroy)(struct wlr_renderer_state *state);
};
@@ -36,7 +38,7 @@ struct wlr_surface_impl {
struct wl_shm_buffer *shm);
// TODO: egl
void (*get_matrix)(struct wlr_surface_state *state,
- float (*matrix)[16], const float (*projection)[16], int x, int y);
+ float (*matrix)[16], const float (*projection)[16], int x, int y);
void (*bind)(struct wlr_surface_state *state);
void (*destroy)(struct wlr_surface_state *state);
};
diff --git a/include/wlr/wlcore/wl_shm.h b/include/wlr/wlcore/wl_shm.h
new file mode 100644
index 00000000..12c2ef78
--- /dev/null
+++ b/include/wlr/wlcore/wl_shm.h
@@ -0,0 +1,13 @@
+#ifndef _WLR_WLCORE_WL_SHM_H
+#define _WLR_WLCORE_WL_SHM_H
+#include <wayland-server-core.h>
+#include <wlr/render.h>
+
+struct wlr_wl_shm;
+
+struct wlr_wl_shm *wlr_wl_shm_init(struct wl_display *display);
+void wlr_wl_shm_add_format(struct wlr_wl_shm *shm, enum wl_shm_format format);
+void wlr_wl_shm_add_renderer_formats(
+ struct wlr_wl_shm *shm, struct wlr_renderer *renderer);
+
+#endif