137 for (
PaintTile *ptile = paint_tiles->
first, *ptile_next; ptile; ptile = ptile_next) {
138 ptile_next = ptile->next;
147 ptile->valid =
false;
161 if (ptile->x_tile == x_tile && ptile->y_tile == y_tile) {
162 if (ptile->image == image && ptile->ibuf == ibuf && ptile->iuser.tile == iuser->
tile) {
167 "UndoImageTile.mask");
169 *r_mask = ptile->mask;
174 return ptile->rect.pt;
190 bool use_thread_lock,
200 paint_tiles, image, ibuf, iuser, x_tile, y_tile, r_mask,
true);
206 if (*tmpibuf ==
NULL) {
212 ptile->
image = image;
214 ptile->
iuser = *iuser;
234 *r_valid = &ptile->
valid;
247 SWAP(
float *, ptile->
rect.
fp, (*tmpibuf)->rect_float);
253 if (use_thread_lock) {
258 if (use_thread_lock) {
269 Image *image = ptile->image;
320 BLI_assert(tile_x < tiles_dims[0] && tile_y < tiles_dims[1]);
321 return (tile_y * tiles_dims[0]) + tile_x;
384 tmpibuf->
rect = prev_rect;
391 if (utile->
users == 0) {
457 for (
uint y_tile = 0; y_tile < ubuf->
tiles_dims[1]; y_tile += 1) {
459 for (
uint x_tile = 0; x_tile < ubuf->
tiles_dims[0]; x_tile += 1) {
466 ubuf->
tiles[i] = utile;
546 Image *image = uh->image_ref.ptr;
553 bool changed =
false;
559 for (
uint y_tile = 0; y_tile < ubuf->
tiles_dims[1]; y_tile += 1) {
561 for (
uint x_tile = 0; x_tile < ubuf->
tiles_dims[0]; x_tile += 1) {
611 const char *ibuf_name)
614 if (
STREQ(ubuf->ibuf_name, ibuf_name)) {
718 if (uh_prev !=
NULL) {
720 if (ubuf_reference) {
721 ubuf_reference = ubuf_reference->
post;
724 return ubuf_reference;
789 utile->
rect.
pt = ptile->rect.pt;
790 ptile->rect.pt =
NULL;
794 ubuf_pre->
tiles[tile_index] = utile;
796 ptile_next = ptile->next;
812 if (ubuf_pre->image_dims[0] != ubuf_post->
image_dims[0] ||
813 ubuf_pre->image_dims[1] != ubuf_post->
image_dims[1]) {
824 for (
uint y_tile = 0; y_tile < ubuf_pre->tiles_dims[1]; y_tile += 1) {
826 for (
uint x_tile = 0; x_tile < ubuf_pre->tiles_dims[0]; x_tile += 1) {
829 if ((ubuf_reference !=
NULL) && ((ubuf_pre->tiles[i] ==
NULL) ||
832 (ubuf_pre->tiles[i]->users == 1))) {
833 if (ubuf_pre->tiles[i] !=
NULL) {
836 ubuf_post->
tiles[i] = ubuf_pre->tiles[i];
837 ubuf_pre->tiles[i] =
NULL;
842 ubuf_post->
tiles[i] = ubuf_reference->
tiles[i];
846 ubuf_pre->tiles[i] = ubuf_reference->
tiles[i];
847 ubuf_pre->tiles[i]->
users += 1;
856 if (ubuf_pre->tiles[i] !=
NULL) {
857 ubuf_post->
tiles[i] = utile;
861 ubuf_pre->tiles[i] = utile;
862 ubuf_post->
tiles[i] = utile;
923 while (us_iter != us || (!is_final && us_iter == us)) {
1036 if (us_p != us_prev) {
1088 us_reference, image, iuser->
tile, ubuf_pre) :
1091 if (ubuf_reference) {
struct ScrArea * CTX_wm_area(const bContext *C)
struct Object * CTX_data_active_object(const bContext *C)
void BKE_image_release_ibuf(struct Image *ima, struct ImBuf *ibuf, void *lock)
struct ImBuf * BKE_image_acquire_ibuf(struct Image *ima, struct ImageUser *iuser, void **r_lock)
void BKE_image_free_gputextures(struct Image *ima)
void BKE_image_mark_dirty(struct Image *image, struct ImBuf *ibuf)
ePaintMode BKE_paintmode_get_active_from_context(const struct bContext *C)
UndoStep * BKE_undosys_step_push_init_with_type(UndoStack *ustack, struct bContext *C, const char *name, const UndoType *ut)
UndoStep * BKE_undosys_stack_init_or_active_with_type(UndoStack *ustack, const UndoType *ut)
#define BKE_undosys_stack_limit_steps_and_memory_defaults(ustack)
UndoPushReturn BKE_undosys_step_push(UndoStack *ustack, struct bContext *C, const char *name)
const UndoType * BKE_UNDOSYS_TYPE_IMAGE
void(* UndoTypeForEachIDRefFn)(void *user_data, struct UndoRefID *id_ref)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE int square_i(int a)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL()
pthread_spinlock_t SpinLock
void BLI_spin_init(SpinLock *spin)
void BLI_spin_unlock(SpinLock *spin)
void BLI_spin_lock(SpinLock *spin)
void BLI_spin_end(SpinLock *spin)
#define CLOG_ERROR(clg_ref,...)
void DEG_id_tag_update(struct ID *id, int flag)
Object is a sort of wrapper for general info.
bool ED_object_mode_set_ex(struct bContext *C, eObjectMode mode, bool use_undo, struct ReportList *reports)
#define ED_IMAGE_UNDO_TILE_NUMBER(size)
#define ED_IMAGE_UNDO_TILE_SIZE
#define ED_IMAGE_UNDO_TILE_BITS
struct UndoStack * ED_undo_stack_get(void)
void ED_editors_init_for_undo(struct Main *bmain)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
void imb_freerectfloatImBuf(struct ImBuf *ibuf)
struct ImBuf * IMB_allocImBuf(unsigned int x, unsigned int y, unsigned char planes, unsigned int flags)
void IMB_freeImBuf(struct ImBuf *ibuf)
void IMB_rect_size_set(struct ImBuf *ibuf, const uint size[2])
void imb_freerectImbuf_all(struct ImBuf *ibuf)
bool imb_addrectfloatImBuf(struct ImBuf *ibuf)
bool imb_addrectImBuf(struct ImBuf *ibuf)
void IMB_rectcpy(struct ImBuf *dbuf, const struct ImBuf *sbuf, int destx, int desty, int srcx, int srcy, int width, int height)
Contains defines and structs used throughout the imbuf module.
@ IB_DISPLAY_BUFFER_INVALID
#define IMB_FILENAME_SIZE
Read Guarded memory(de)allocation.
static uint index_from_xy(uint tile_x, uint tile_y, const uint tiles_dims[2])
struct UndoImageTile UndoImageTile
static void utile_decref(UndoImageTile *utile)
static bool image_undosys_step_encode(struct bContext *C, struct Main *UNUSED(bmain), UndoStep *us_p)
ListBase * ED_image_paint_tile_list_get(void)
static void uhandle_restore_list(ListBase *undo_handles, bool use_init)
static UndoImageTile * utile_alloc(bool has_float)
static void ptile_free(PaintTile *ptile)
static ImBuf * imbuf_alloc_temp_tile(void)
static void image_undosys_step_encode_init(struct bContext *UNUSED(C), UndoStep *us_p)
static void ptile_restore_runtime_list(ListBase *paint_tiles)
void * ED_image_paint_tile_find(ListBase *paint_tiles, Image *image, ImBuf *ibuf, ImageUser *iuser, int x_tile, int y_tile, ushort **r_mask, bool validate)
static ImageUndoStep * image_undo_push_begin(const char *name, int paint_mode)
static void image_undosys_step_decode(struct bContext *C, struct Main *bmain, UndoStep *us_p, const eUndoStepDir dir, bool is_final)
static UndoImageHandle * uhandle_lookup_by_name(ListBase *undo_handles, const Image *image, int tile_number)
void ED_image_undo_push_begin_with_image(const char *name, Image *image, ImBuf *ibuf, ImageUser *iuser)
static void uhandle_free_list(ListBase *undo_handles)
void ED_image_undo_push_begin(const char *name, int paint_mode)
void ED_image_undosys_type(UndoType *ut)
static UndoImageBuf * ubuf_from_image_no_tiles(Image *image, const ImBuf *ibuf)
static void image_undosys_step_decode_undo(ImageUndoStep *us, bool is_final)
static void ptile_invalidate_list(ListBase *paint_tiles)
void ED_image_paint_tile_lock_end(void)
void ED_image_paint_tile_lock_init(void)
struct PaintTile PaintTile
static void utile_init_from_imbuf(UndoImageTile *utile, const uint x, const uint y, const ImBuf *ibuf, ImBuf *tmpibuf)
void * ED_image_paint_tile_push(ListBase *paint_tiles, Image *image, ImBuf *ibuf, ImBuf **tmpibuf, ImageUser *iuser, int x_tile, int y_tile, ushort **r_mask, bool **r_valid, bool use_thread_lock, bool find_prev)
static void image_undosys_foreach_ID_ref(UndoStep *us_p, UndoTypeForEachIDRefFn foreach_ID_ref_fn, void *user_data)
static UndoImageBuf * uhandle_ensure_ubuf(UndoImageHandle *uh, Image *image, ImBuf *ibuf)
static UndoImageBuf * uhandle_add_ubuf(UndoImageHandle *uh, Image *image, ImBuf *ibuf)
static void image_undosys_step_decode_redo(ImageUndoStep *us)
static UndoImageHandle * uhandle_add(ListBase *undo_handles, Image *image, ImageUser *iuser)
void ED_image_undo_push_end(void)
struct ImageUndoStep ImageUndoStep
static UndoImageHandle * uhandle_ensure(ListBase *undo_handles, Image *image, ImageUser *iuser)
static void ubuf_ensure_compat_ibuf(const UndoImageBuf *ubuf, ImBuf *ibuf)
static void image_undosys_step_free(UndoStep *us_p)
static void image_undosys_step_decode_redo_impl(ImageUndoStep *us)
static bool image_undosys_poll(bContext *C)
static void image_undosys_step_decode_undo_impl(ImageUndoStep *us, bool is_final)
struct UndoImageHandle UndoImageHandle
static UndoImageBuf * uhandle_lookup_ubuf(UndoImageHandle *uh, const Image *UNUSED(image), const char *ibuf_name)
struct UndoImageBuf UndoImageBuf
void ED_image_undo_restore(UndoStep *us)
static void ubuf_free(UndoImageBuf *ubuf)
static void ptile_free_list(ListBase *paint_tiles)
static UndoImageHandle * uhandle_lookup(ListBase *undo_handles, const Image *image, int tile_number)
static void ubuf_from_image_all_tiles(UndoImageBuf *ubuf, const ImBuf *ibuf)
static UndoImageBuf * ubuf_lookup_from_reference(ImageUndoStep *us_prev, const Image *image, int tile_number, const UndoImageBuf *ubuf)
static SpinLock paint_tiles_lock
static void utile_restore(const UndoImageTile *utile, const uint x, const uint y, ImBuf *ibuf, ImBuf *tmpibuf)
void * BKE_image_get_tile
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
static void area(int d1, int d2, int e1, int e2, float weights[2])
struct ImBuf * mipmap[IMB_MIPMAP_LEVELS]
char name[IMB_FILENAME_SIZE]
union PaintTile::@506 rect
struct UndoImageBuf::@508 image_state
struct UndoImageBuf * prev
char ibuf_name[IMB_FILENAME_SIZE]
struct UndoImageBuf * post
struct UndoImageBuf * next
UndoRefID_Image image_ref
struct UndoImageHandle * next
struct UndoImageHandle * prev
union UndoImageTile::@507 rect
struct UndoStep * step_active
struct UndoStep * step_init
const struct UndoType * type
void(* step_decode)(struct bContext *C, struct Main *bmain, UndoStep *us, const eUndoStepDir dir, bool is_final)
bool(* step_encode)(struct bContext *C, struct Main *bmain, UndoStep *us)
void(* step_encode_init)(struct bContext *C, UndoStep *us)
void(* step_foreach_ID_ref)(UndoStep *us, UndoTypeForEachIDRefFn foreach_ID_ref_fn, void *user_data)
void(* step_free)(UndoStep *us)
bool(* poll)(struct bContext *C)
void WM_file_tag_modified(void)