static void swrast_get_image(__DRIdrawable *driDrawable, int x, int y, int width, int height, char *data, void *loaderPrivate) { struct dri2_egl_surface *dri2_surf = loaderPrivate; int internal_stride, stride, i; struct gbm_dri_bo *bo; if (get_swrast_front_bo(dri2_surf) < 0) return; bo = gbm_dri_bo(dri2_surf->current->bo); if (gbm_dri_bo_map(bo) == NULL) return; internal_stride = bo->base.base.stride; stride = width * 4; for (i = 0; i < height; i++) { memcpy(data + i * stride, bo->map + (x + i) * internal_stride + y, stride); } gbm_dri_bo_unmap(bo); }
static void swrast_put_image2(__DRIdrawable *driDrawable, int op, int x, int y, int width, int height, int stride, char *data, void *loaderPrivate) { struct dri2_egl_surface *dri2_surf = loaderPrivate; int internal_stride, i; struct gbm_dri_bo *bo; if (op != __DRI_SWRAST_IMAGE_OP_DRAW && op != __DRI_SWRAST_IMAGE_OP_SWAP) return; if (get_swrast_front_bo(dri2_surf) < 0) return; bo = gbm_dri_bo(dri2_surf->current->bo); if (gbm_dri_bo_map_dumb(bo) == NULL) return; internal_stride = bo->base.base.stride; for (i = 0; i < height; i++) { memcpy(bo->map + (x + i) * internal_stride + y, data + i * stride, stride); } gbm_dri_bo_unmap_dumb(bo); }