aboutsummaryrefslogtreecommitdiff
path: root/include/wlr/render/wlr_texture.h
blob: 095097e62a4b40b0d931b0b7274f7c5df600059e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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 {
	const 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