Caused by the introduction of UDIM (rBc30d6571bb47). We need to make sure the tiles ImageUser is set up correctly [especially the framenr], otherwise BKE_image_acquire_ibuf() and friends will fail to find the correct ImBuf. Also instead of initializing a minimal BKE_imageuser_default, now use an appropriate ImageUser if avaliable and pass this around (instead of just the tile_number). 2D painting can reuse the Image Editor ImageUser, for 3D painting we still rely on a default ImageUser in most places, but at least set the framenr correctly]. This also fixes crashes when doing image operations such as inverting or resizing on images in a sequence in the Image Editor. This also fixes color sampling (S) from the 3DView going wrong for image sequences (would fallback to OpenGL sampling because an ImBuf could not be found). Maniphest Tasks: T74425 Differential Revision: https://developer.blender.org/D7022
109 lines
3.7 KiB
C++
109 lines
3.7 KiB
C++
/*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
/** \file
|
|
* \ingroup editors
|
|
*/
|
|
|
|
#ifndef __ED_PAINT_H__
|
|
#define __ED_PAINT_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct ImBuf;
|
|
struct Image;
|
|
struct ImageUser;
|
|
struct UndoStep;
|
|
struct UndoType;
|
|
struct bContext;
|
|
struct wmKeyConfig;
|
|
struct wmOperator;
|
|
|
|
/* paint_ops.c */
|
|
void ED_operatortypes_paint(void);
|
|
void ED_operatormacros_paint(void);
|
|
void ED_keymap_paint(struct wmKeyConfig *keyconf);
|
|
|
|
/* paint_image.c */
|
|
void ED_imapaint_clear_partial_redraw(void);
|
|
void ED_imapaint_dirty_region(struct Image *ima,
|
|
struct ImBuf *ibuf,
|
|
struct ImageUser *iuser,
|
|
int x,
|
|
int y,
|
|
int w,
|
|
int h,
|
|
bool find_old);
|
|
void ED_imapaint_bucket_fill(struct bContext *C,
|
|
float color[3],
|
|
struct wmOperator *op,
|
|
const int mouse[2]);
|
|
|
|
/* image_undo.c */
|
|
void ED_image_undo_push_begin(const char *name, int paint_mode);
|
|
void ED_image_undo_push_begin_with_image(const char *name,
|
|
struct Image *image,
|
|
struct ImBuf *ibuf,
|
|
struct ImageUser *iuser);
|
|
|
|
void ED_image_undo_push_end(void);
|
|
void ED_image_undo_restore(struct UndoStep *us);
|
|
|
|
void ED_image_undosys_type(struct UndoType *ut);
|
|
|
|
void *ED_image_paint_tile_find(struct ListBase *undo_tiles,
|
|
struct Image *ima,
|
|
struct ImBuf *ibuf,
|
|
struct ImageUser *iuser,
|
|
int x_tile,
|
|
int y_tile,
|
|
unsigned short **r_mask,
|
|
bool validate);
|
|
void *ED_image_paint_tile_push(struct ListBase *undo_tiles,
|
|
struct Image *ima,
|
|
struct ImBuf *ibuf,
|
|
struct ImBuf **tmpibuf,
|
|
struct ImageUser *iuser,
|
|
int x_tile,
|
|
int y_tile,
|
|
unsigned short **r_mask,
|
|
bool **r_valid,
|
|
bool use_thread_lock,
|
|
bool find_prev);
|
|
void ED_image_paint_tile_lock_init(void);
|
|
void ED_image_paint_tile_lock_end(void);
|
|
|
|
struct ListBase *ED_image_paint_tile_list_get(void);
|
|
|
|
#define ED_IMAGE_UNDO_TILE_BITS 6
|
|
#define ED_IMAGE_UNDO_TILE_SIZE (1 << ED_IMAGE_UNDO_TILE_BITS)
|
|
#define ED_IMAGE_UNDO_TILE_NUMBER(size) \
|
|
(((size) + ED_IMAGE_UNDO_TILE_SIZE - 1) >> ED_IMAGE_UNDO_TILE_BITS)
|
|
|
|
/* paint_curve_undo.c */
|
|
void ED_paintcurve_undo_push_begin(const char *name);
|
|
void ED_paintcurve_undo_push_end(void);
|
|
|
|
void ED_paintcurve_undosys_type(struct UndoType *ut);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __ED_PAINT_H__ */
|