render/gles2: add gles2_texture_create
This centralizes the wlr_texture initialization. In future commits, more fields will need to get initialized.
This commit is contained in:
parent
6f39574ff5
commit
9221ed7b4c
|
@ -125,6 +125,20 @@ static const struct wlr_texture_impl texture_impl = {
|
|||
.destroy = gles2_texture_destroy,
|
||||
};
|
||||
|
||||
static struct wlr_gles2_texture *gles2_texture_create(
|
||||
struct wlr_gles2_renderer *renderer, uint32_t width, uint32_t height) {
|
||||
struct wlr_gles2_texture *texture =
|
||||
calloc(1, sizeof(struct wlr_gles2_texture));
|
||||
if (texture == NULL) {
|
||||
wlr_log_errno(WLR_ERROR, "Allocation failed");
|
||||
return NULL;
|
||||
}
|
||||
wlr_texture_init(&texture->wlr_texture, &texture_impl, width, height);
|
||||
texture->renderer = renderer;
|
||||
wl_list_insert(&renderer->textures, &texture->link);
|
||||
return texture;
|
||||
}
|
||||
|
||||
struct wlr_texture *gles2_texture_from_pixels(struct wlr_renderer *wlr_renderer,
|
||||
uint32_t drm_format, uint32_t stride, uint32_t width,
|
||||
uint32_t height, const void *data) {
|
||||
|
@ -146,13 +160,10 @@ struct wlr_texture *gles2_texture_from_pixels(struct wlr_renderer *wlr_renderer,
|
|||
}
|
||||
|
||||
struct wlr_gles2_texture *texture =
|
||||
calloc(1, sizeof(struct wlr_gles2_texture));
|
||||
gles2_texture_create(renderer, width, height);
|
||||
if (texture == NULL) {
|
||||
wlr_log(WLR_ERROR, "Allocation failed");
|
||||
return NULL;
|
||||
}
|
||||
wlr_texture_init(&texture->wlr_texture, &texture_impl, width, height);
|
||||
texture->renderer = renderer;
|
||||
texture->target = GL_TEXTURE_2D;
|
||||
texture->has_alpha = fmt->has_alpha;
|
||||
texture->drm_format = fmt->drm_format;
|
||||
|
@ -179,8 +190,6 @@ struct wlr_texture *gles2_texture_from_pixels(struct wlr_renderer *wlr_renderer,
|
|||
|
||||
wlr_egl_restore_context(&prev_ctx);
|
||||
|
||||
wl_list_insert(&renderer->textures, &texture->link);
|
||||
|
||||
return &texture->wlr_texture;
|
||||
}
|
||||
|
||||
|
@ -207,9 +216,8 @@ struct wlr_texture *gles2_texture_from_wl_drm(struct wlr_renderer *wlr_renderer,
|
|||
}
|
||||
|
||||
struct wlr_gles2_texture *texture =
|
||||
calloc(1, sizeof(struct wlr_gles2_texture));
|
||||
gles2_texture_create(renderer, width, height);
|
||||
if (texture == NULL) {
|
||||
wlr_log(WLR_ERROR, "Allocation failed");
|
||||
goto error_image;
|
||||
}
|
||||
wlr_texture_init(&texture->wlr_texture, &texture_impl, width, height);
|
||||
|
@ -248,11 +256,10 @@ struct wlr_texture *gles2_texture_from_wl_drm(struct wlr_renderer *wlr_renderer,
|
|||
|
||||
wlr_egl_restore_context(&prev_ctx);
|
||||
|
||||
wl_list_insert(&renderer->textures, &texture->link);
|
||||
|
||||
return &texture->wlr_texture;
|
||||
|
||||
error_texture:
|
||||
wl_list_remove(&texture->link);
|
||||
free(texture);
|
||||
error_image:
|
||||
wlr_egl_destroy_image(renderer->egl, image);
|
||||
|
@ -270,14 +277,10 @@ struct wlr_texture *gles2_texture_from_dmabuf(struct wlr_renderer *wlr_renderer,
|
|||
}
|
||||
|
||||
struct wlr_gles2_texture *texture =
|
||||
calloc(1, sizeof(struct wlr_gles2_texture));
|
||||
gles2_texture_create(renderer, attribs->width, attribs->height);
|
||||
if (texture == NULL) {
|
||||
wlr_log(WLR_ERROR, "Allocation failed");
|
||||
return NULL;
|
||||
}
|
||||
wlr_texture_init(&texture->wlr_texture, &texture_impl,
|
||||
attribs->width, attribs->height);
|
||||
texture->renderer = renderer;
|
||||
texture->has_alpha = true;
|
||||
texture->drm_format = DRM_FORMAT_INVALID; // texture can't be written anyways
|
||||
texture->inverted_y =
|
||||
|
@ -293,6 +296,7 @@ struct wlr_texture *gles2_texture_from_dmabuf(struct wlr_renderer *wlr_renderer,
|
|||
if (texture->image == EGL_NO_IMAGE_KHR) {
|
||||
wlr_log(WLR_ERROR, "Failed to create EGL image from DMA-BUF");
|
||||
wlr_egl_restore_context(&prev_ctx);
|
||||
wl_list_remove(&texture->link);
|
||||
free(texture);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -312,8 +316,6 @@ struct wlr_texture *gles2_texture_from_dmabuf(struct wlr_renderer *wlr_renderer,
|
|||
|
||||
wlr_egl_restore_context(&prev_ctx);
|
||||
|
||||
wl_list_insert(&renderer->textures, &texture->link);
|
||||
|
||||
return &texture->wlr_texture;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue