mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-10-29 05:40:12 -04:00
Redesign wlr_texture
- Textures are now immutable (apart from those created from raw pixels), no more invalid textures - Move all wl_drm stuff in wlr_renderer - Most of wlr_texture fields are now private - Remove some duplicated DMA-BUF code in the DRM backend - Add more assertions - Stride is now always given as bytes rather than pixels - Drop wl_shm functions Fun fact: this patch has been written 10,000 meters up in the air.
This commit is contained in:
parent
80d3561d32
commit
c63d94483b
24 changed files with 577 additions and 647 deletions
|
|
@ -149,7 +149,7 @@ static void handle_input_add(struct compositor_state *state,
|
|||
sample->compositor);
|
||||
|
||||
struct wlr_xcursor_image *image = sample->xcursor->images[0];
|
||||
wlr_cursor_set_image(cursor->cursor, image->buffer, image->width,
|
||||
wlr_cursor_set_image(cursor->cursor, image->buffer, image->width * 4,
|
||||
image->width, image->height, image->hotspot_x, image->hotspot_y, 0);
|
||||
|
||||
wl_list_insert(&sample->cursors, &cursor->link);
|
||||
|
|
|
|||
|
|
@ -197,9 +197,9 @@ int main(int argc, char *argv[]) {
|
|||
compositor_init(&compositor);
|
||||
|
||||
state.renderer = wlr_gles2_renderer_create(compositor.backend);
|
||||
state.cat_texture = wlr_render_texture_create(state.renderer);
|
||||
wlr_texture_upload_pixels(state.cat_texture, WL_SHM_FORMAT_ABGR8888,
|
||||
cat_tex.width, cat_tex.width, cat_tex.height, cat_tex.pixel_data);
|
||||
state.cat_texture = wlr_texture_from_pixels(state.renderer,
|
||||
WL_SHM_FORMAT_ABGR8888, cat_tex.width * 4, cat_tex.width, cat_tex.height,
|
||||
cat_tex.pixel_data);
|
||||
|
||||
if (!wlr_backend_start(compositor.backend)) {
|
||||
wlr_log(L_ERROR, "Failed to start backend");
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ static void handle_output_add(struct output_state *ostate) {
|
|||
sample->compositor);
|
||||
|
||||
struct wlr_xcursor_image *image = sample->xcursor->images[0];
|
||||
wlr_cursor_set_image(sample->cursor, image->buffer, image->width,
|
||||
wlr_cursor_set_image(sample->cursor, image->buffer, image->width * 4,
|
||||
image->width, image->height, image->hotspot_x, image->hotspot_y, 0);
|
||||
|
||||
wlr_cursor_warp(sample->cursor, NULL, sample->cursor->x, sample->cursor->y);
|
||||
|
|
@ -324,7 +324,7 @@ int main(int argc, char *argv[]) {
|
|||
}
|
||||
|
||||
struct wlr_xcursor_image *image = state.xcursor->images[0];
|
||||
wlr_cursor_set_image(state.cursor, image->buffer, image->width,
|
||||
wlr_cursor_set_image(state.cursor, image->buffer, image->width * 4,
|
||||
image->width, image->height, image->hotspot_x, image->hotspot_y, 0);
|
||||
|
||||
compositor_init(&compositor);
|
||||
|
|
|
|||
|
|
@ -142,13 +142,13 @@ int main(int argc, char *argv[]) {
|
|||
wlr_log(L_ERROR, "Could not start compositor, OOM");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
state.cat_texture = wlr_render_texture_create(state.renderer);
|
||||
state.cat_texture = wlr_texture_from_pixels(state.renderer,
|
||||
WL_SHM_FORMAT_ABGR8888, cat_tex.width * 4, cat_tex.width, cat_tex.height,
|
||||
cat_tex.pixel_data);
|
||||
if (!state.cat_texture) {
|
||||
wlr_log(L_ERROR, "Could not start compositor, OOM");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
wlr_texture_upload_pixels(state.cat_texture, WL_SHM_FORMAT_ABGR8888,
|
||||
cat_tex.width, cat_tex.width, cat_tex.height, cat_tex.pixel_data);
|
||||
|
||||
if (!wlr_backend_start(compositor.backend)) {
|
||||
wlr_log(L_ERROR, "Failed to start backend");
|
||||
|
|
|
|||
|
|
@ -45,10 +45,13 @@ static void handle_output_frame(struct output_state *output, struct timespec *ts
|
|||
wlr_renderer_begin(sample->renderer, wlr_output->width, wlr_output->height);
|
||||
wlr_renderer_clear(sample->renderer, (float[]){0.25f, 0.25f, 0.25f, 1});
|
||||
|
||||
int tex_width, tex_height;
|
||||
wlr_texture_get_size(sample->cat_texture, &tex_width, &tex_height);
|
||||
|
||||
struct touch_point *p;
|
||||
wl_list_for_each(p, &sample->touch_points, link) {
|
||||
int x = (int)(p->x * width) - sample->cat_texture->width / 2;
|
||||
int y = (int)(p->y * height) - sample->cat_texture->height / 2;
|
||||
int x = (int)(p->x * width) - tex_width / 2;
|
||||
int y = (int)(p->y * height) - tex_height / 2;
|
||||
wlr_render_texture(sample->renderer, sample->cat_texture,
|
||||
wlr_output->transform_matrix, x, y, 1.0f);
|
||||
}
|
||||
|
|
@ -110,13 +113,13 @@ int main(int argc, char *argv[]) {
|
|||
wlr_log(L_ERROR, "Could not start compositor, OOM");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
state.cat_texture = wlr_render_texture_create(state.renderer);
|
||||
state.cat_texture = wlr_texture_from_pixels(state.renderer,
|
||||
WL_SHM_FORMAT_ARGB8888, cat_tex.width * 4, cat_tex.width, cat_tex.height,
|
||||
cat_tex.pixel_data);
|
||||
if (!state.cat_texture) {
|
||||
wlr_log(L_ERROR, "Could not start compositor, OOM");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
wlr_texture_upload_pixels(state.cat_texture, WL_SHM_FORMAT_ARGB8888,
|
||||
cat_tex.width, cat_tex.width, cat_tex.height, cat_tex.pixel_data);
|
||||
|
||||
if (!wlr_backend_start(compositor.backend)) {
|
||||
wlr_log(L_ERROR, "Failed to start backend");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue