52 Image *image =
nullptr;
61 for (
int i = 0;
i <
object.totcol;
i++) {
117 op->
reports,
RPT_ERROR,
"Baking of multires data only works with an active mesh object");
155 const VArraySpan material_indices = *attributes.
lookup<
int>(
"material_index",
160 material_indices.
is_empty() ? 0 : material_indices[a]);
164 op->
reports,
RPT_ERROR,
"You should have active texture to use multires baker");
218 const float vec_alpha[4] = {0.0f, 0.0f, 0.0f, 0.0f};
219 const float vec_solid[4] = {0.0f, 0.0f, 0.0f, 1.0f};
220 const float nor_alpha[4] = {0.5f, 0.5f, 1.0f, 0.0f};
221 const float nor_solid[4] = {0.5f, 0.5f, 1.0f, 1.0f};
222 const float disp_alpha[4] = {0.5f, 0.5f, 0.5f, 0.0f};
223 const float disp_solid[4] = {0.5f, 0.5f, 0.5f, 1.0f};
252 for (
Image *image : ob_image_array) {
258 for (
Image *image : ob_image_array) {
264 for (
Image *image : ob_image_array) {
274 int objects_baked = 0;
282 Object &
object = *base->object;
303 Object &
object = *base->object;
324 bake.base_mesh =
static_cast<Mesh *
>(
object.data);
333 if (!objects_baked) {
362 Object &
object = *base->object;
371 data->base_mesh =
static_cast<Mesh *
>(
object.data);
382 int baked_objects = 0, tot_obj;
413 bake.multires_modifier =
data->multires_modifier;
416 bake.num_total_objects = tot_obj;
417 bake.num_baked_objects = baked_objects;
473 "Baking Multires...",
504 switch (event->
type) {
563 ot->description =
"Bake image textures of selected objects";
564 ot->idname =
"OBJECT_OT_bake_image";
#define CTX_DATA_BEGIN(C, Type, instance, member)
wmWindow * CTX_wm_window(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
CustomData interface, see also DNA_customdata_types.h.
bool CustomData_has_layer(const CustomData *data, eCustomDataType type)
ImBuf * BKE_image_acquire_ibuf(Image *ima, ImageUser *iuser, void **r_lock)
void BKE_image_release_ibuf(Image *ima, ImBuf *ibuf, void *lock)
void BKE_imageuser_default(ImageUser *iuser)
void BKE_image_partial_update_mark_full_update(Image *image)
Mark the whole image to be updated.
bool BKE_modifier_is_enabled(const Scene *scene, ModifierData *md, int required_mode)
MultiresModifierData * get_multires_modifier(Scene *scene, Object *ob, bool use_first)
void multires_flush_sculpt_updates(Object *object)
void BKE_report(ReportList *reports, eReportType type, const char *message)
#define LISTBASE_FOREACH(type, var, list)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_listbase_count(const ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Object is a sort of wrapper for general info.
@ R_BAKE_VECTOR_DISPLACEMENT
bool ED_operator_object_active(bContext *C)
bool ED_object_get_active_image(Object *ob, int mat_nr, Image **r_ima, ImageUser **r_iuser, const bNode **r_node, const bNodeTree **r_ntree)
void IMB_rectfill(ImBuf *drect, const float col[4])
Read Guarded memory(de)allocation.
@ WM_JOB_TYPE_OBJECT_BAKE_TEXTURE
BMesh const char void * data
constexpr bool is_empty() const
void append(const T &value)
void reserve(const int64_t min_capacity)
GAttributeReader lookup(const StringRef attribute_id) const
const ccl_global KernelWorkTile * tile
void * MEM_callocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void RE_multires_bake_images(MultiresBakeRender &bake)
static wmOperatorStatus objects_bake_render_invoke(bContext *C, wmOperator *op, const wmEvent *)
static wmOperatorStatus multiresbake_image_exec(bContext *C, wmOperator *op)
static Image * bake_object_image_get(Object &object, const int mat_nr)
static wmOperatorStatus multiresbake_image_exec_locked(bContext *C, wmOperator *op)
void OBJECT_OT_bake_image(wmOperatorType *ot)
static void multiresbake_startjob(void *bkv, wmJobWorkerStatus *worker_status)
static Vector< Image * > bake_object_image_get_array(Object &object)
static void init_multiresbake_job(bContext *C, MultiresBakeJob *bkj)
static void clear_images_poly(const Span< Image * > ob_image_array, const ClearFlag flag)
static bool is_multires_bake(Scene *scene)
static void multiresbake_freejob(void *bkv)
static void clear_single_image(Image *image, ClearFlag flag)
static wmOperatorStatus bake_image_exec(bContext *C, wmOperator *op)
static bool multiresbake_check(bContext *C, wmOperator *op)
static wmOperatorStatus objects_bake_render_modal(bContext *C, wmOperator *, const wmEvent *event)
ImBufFloatBuffer float_buffer
ImBufByteBuffer byte_buffer
struct ModifierData * next
bool use_low_resolution_mesh
eBakeSpace displacement_space
Vector< Image * > ob_image
MultiresBakerJobData * next
MultiresModifierData * multires_modifier
MultiresBakerJobData * prev
struct ReportList * reports
void WM_cursor_wait(bool val)
wmEventHandler_Op * WM_event_add_modal_handler(bContext *C, wmOperator *op)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_jobs_timer(wmJob *wm_job, double time_step, uint note, uint endnote)
void WM_jobs_start(wmWindowManager *wm, wmJob *wm_job)
wmJob * WM_jobs_get(wmWindowManager *wm, wmWindow *win, const void *owner, const char *name, const eWM_JobFlag flag, const eWM_JobType job_type)
void WM_jobs_callbacks(wmJob *wm_job, wm_jobs_start_callback startjob, void(*initjob)(void *), void(*update)(void *), void(*endjob)(void *))
bool WM_jobs_test(const wmWindowManager *wm, const void *owner, int job_type)
void WM_jobs_customdata_set(wmJob *wm_job, void *customdata, void(*free)(void *customdata))