render: drop wlr_renderer_read_pixels() flags
These are unused.
Simon Ser
1 year, 6 months ago
406 | 406 | } |
407 | 407 | |
408 | 408 | bool result = wlr_renderer_read_pixels( |
409 | renderer, DRM_FORMAT_ARGB8888, NULL, | |
409 | renderer, DRM_FORMAT_ARGB8888, | |
410 | 410 | stride, buffer->width, buffer->height, 0, 0, 0, 0, |
411 | 411 | data); |
412 | 412 |
39 | 39 | struct wlr_renderer *renderer); |
40 | 40 | uint32_t (*preferred_read_format)(struct wlr_renderer *renderer); |
41 | 41 | bool (*read_pixels)(struct wlr_renderer *renderer, uint32_t fmt, |
42 | uint32_t *flags, uint32_t stride, uint32_t width, uint32_t height, | |
42 | uint32_t stride, uint32_t width, uint32_t height, | |
43 | 43 | uint32_t src_x, uint32_t src_y, uint32_t dst_x, uint32_t dst_y, |
44 | 44 | void *data); |
45 | 45 | void (*destroy)(struct wlr_renderer *renderer); |
12 | 12 | #include <wayland-server-core.h> |
13 | 13 | #include <wlr/backend.h> |
14 | 14 | #include <wlr/render/wlr_texture.h> |
15 | ||
16 | enum wlr_renderer_read_pixels_flags { | |
17 | WLR_RENDERER_READ_PIXELS_Y_INVERT = 1, | |
18 | }; | |
19 | 15 | |
20 | 16 | struct wlr_renderer_impl; |
21 | 17 | struct wlr_drm_format_set; |
89 | 85 | /** |
90 | 86 | * Reads out of pixels of the currently bound surface into data. `stride` is in |
91 | 87 | * bytes. |
92 | * | |
93 | * If `flags` is not NULl, the caller indicates that it accepts frame flags | |
94 | * defined in enum wlr_renderer_read_pixels_flags. | |
95 | 88 | */ |
96 | 89 | bool wlr_renderer_read_pixels(struct wlr_renderer *r, uint32_t fmt, |
97 | uint32_t *flags, uint32_t stride, uint32_t width, uint32_t height, | |
90 | uint32_t stride, uint32_t width, uint32_t height, | |
98 | 91 | uint32_t src_x, uint32_t src_y, uint32_t dst_x, uint32_t dst_y, void *data); |
99 | 92 | |
100 | 93 | /** |
414 | 414 | } |
415 | 415 | |
416 | 416 | static bool gles2_read_pixels(struct wlr_renderer *wlr_renderer, |
417 | uint32_t drm_format, uint32_t *flags, uint32_t stride, | |
417 | uint32_t drm_format, uint32_t stride, | |
418 | 418 | uint32_t width, uint32_t height, uint32_t src_x, uint32_t src_y, |
419 | 419 | uint32_t dst_x, uint32_t dst_y, void *data) { |
420 | 420 | struct wlr_gles2_renderer *renderer = |
462 | 462 | } |
463 | 463 | |
464 | 464 | pop_gles2_debug(renderer); |
465 | ||
466 | if (flags != NULL) { | |
467 | *flags = 0; | |
468 | } | |
469 | 465 | |
470 | 466 | return glGetError() == GL_NO_ERROR; |
471 | 467 | } |
456 | 456 | } |
457 | 457 | |
458 | 458 | static bool pixman_read_pixels(struct wlr_renderer *wlr_renderer, |
459 | uint32_t drm_format, uint32_t *flags, uint32_t stride, | |
459 | uint32_t drm_format, uint32_t stride, | |
460 | 460 | uint32_t width, uint32_t height, uint32_t src_x, uint32_t src_y, |
461 | 461 | uint32_t dst_x, uint32_t dst_y, void *data) { |
462 | 462 | struct wlr_pixman_renderer *renderer = get_renderer(wlr_renderer); |
969 | 969 | } |
970 | 970 | |
971 | 971 | static bool vulkan_read_pixels(struct wlr_renderer *wlr_renderer, |
972 | uint32_t drm_format, uint32_t *flags, uint32_t stride, | |
972 | uint32_t drm_format, uint32_t stride, | |
973 | 973 | uint32_t width, uint32_t height, uint32_t src_x, uint32_t src_y, |
974 | 974 | uint32_t dst_x, uint32_t dst_y, void *data) { |
975 | 975 | // TODO: implement! |
193 | 193 | } |
194 | 194 | |
195 | 195 | bool wlr_renderer_read_pixels(struct wlr_renderer *r, uint32_t fmt, |
196 | uint32_t *flags, uint32_t stride, uint32_t width, uint32_t height, | |
196 | uint32_t stride, uint32_t width, uint32_t height, | |
197 | 197 | uint32_t src_x, uint32_t src_y, uint32_t dst_x, uint32_t dst_y, |
198 | 198 | void *data) { |
199 | 199 | if (!r->impl->read_pixels) { |
200 | 200 | return false; |
201 | 201 | } |
202 | return r->impl->read_pixels(r, fmt, flags, stride, width, height, | |
202 | return r->impl->read_pixels(r, fmt, stride, width, height, | |
203 | 203 | src_x, src_y, dst_x, dst_y, data); |
204 | 204 | } |
205 | 205 |
189 | 189 | } |
190 | 190 | |
191 | 191 | static bool frame_shm_copy(struct wlr_screencopy_frame_v1 *frame, |
192 | struct wlr_buffer *src_buffer, uint32_t *flags) { | |
192 | struct wlr_buffer *src_buffer) { | |
193 | 193 | struct wlr_output *output = frame->output; |
194 | 194 | struct wlr_renderer *renderer = output->renderer; |
195 | 195 | assert(renderer); |
207 | 207 | return false; |
208 | 208 | } |
209 | 209 | |
210 | uint32_t renderer_flags = 0; | |
211 | 210 | bool ok = false; |
212 | 211 | if (!wlr_renderer_begin_with_buffer(renderer, src_buffer)) { |
213 | 212 | goto out; |
214 | 213 | } |
215 | ok = wlr_renderer_read_pixels(renderer, format, &renderer_flags, | |
214 | ok = wlr_renderer_read_pixels(renderer, format, | |
216 | 215 | stride, width, height, x, y, 0, 0, data); |
217 | 216 | wlr_renderer_end(renderer); |
218 | *flags = renderer_flags & WLR_RENDERER_READ_PIXELS_Y_INVERT ? | |
219 | ZWLR_SCREENCOPY_FRAME_V1_FLAGS_Y_INVERT : 0; | |
220 | 217 | |
221 | 218 | out: |
222 | 219 | wlr_buffer_end_data_ptr_access(frame->buffer); |
292 | 289 | wl_list_remove(&frame->output_commit.link); |
293 | 290 | wl_list_init(&frame->output_commit.link); |
294 | 291 | |
295 | uint32_t flags = 0; | |
296 | 292 | bool ok; |
297 | 293 | switch (frame->buffer_cap) { |
298 | 294 | case WLR_BUFFER_CAP_DMABUF: |
299 | 295 | ok = frame_dma_copy(frame, buffer); |
300 | 296 | break; |
301 | 297 | case WLR_BUFFER_CAP_DATA_PTR: |
302 | ok = frame_shm_copy(frame, buffer, &flags); | |
298 | ok = frame_shm_copy(frame, buffer); | |
303 | 299 | break; |
304 | 300 | default: |
305 | 301 | abort(); // unreachable |
310 | 306 | return; |
311 | 307 | } |
312 | 308 | |
313 | zwlr_screencopy_frame_v1_send_flags(frame->resource, flags); | |
309 | zwlr_screencopy_frame_v1_send_flags(frame->resource, 0); | |
314 | 310 | frame_send_damage(frame); |
315 | 311 | frame_send_ready(frame, event->when); |
316 | 312 | frame_destroy(frame); |