50 Image *image =
nullptr;
59 for (
int i = 0; i < ob->
totcol; i++) {
119 op->
reports,
RPT_ERROR,
"Baking of multires data only works with an active mesh object");
157 const VArraySpan material_indices = *attributes.lookup<
int>(
"material_index",
162 material_indices.
is_empty() ? 0 : material_indices[a]);
166 op->
reports,
RPT_ERROR,
"You should have active texture to use multires baker");
272 const float vec_alpha[4] = {0.0f, 0.0f, 0.0f, 0.0f};
273 const float vec_solid[4] = {0.0f, 0.0f, 0.0f, 1.0f};
274 const float nor_alpha[4] = {0.5f, 0.5f, 1.0f, 0.0f};
275 const float nor_solid[4] = {0.5f, 0.5f, 1.0f, 1.0f};
276 const float disp_alpha[4] = {0.5f, 0.5f, 0.5f, 0.0f};
277 const float disp_solid[4] = {0.5f, 0.5f, 0.5f, 1.0f};
306 for (
int i = 0; i < ob_image_array_len; i++) {
307 Image *image = ob_image_array[i];
309 image->
id.
tag &= ~ID_TAG_DOIT;
313 for (
int i = 0; i < ob_image_array_len; i++) {
314 Image *image = ob_image_array[i];
320 for (
int i = 0; i < ob_image_array_len; i++) {
321 Image *image = ob_image_array[i];
323 image->
id.
tag &= ~ID_TAG_DOIT;
332 int objects_baked = 0;
377 bkr.
mode = scene->r.bake_mode;
379 bkr.
bias = scene->r.bake_biasdist;
405 if (!objects_baked) {
429 bkj->
mode = scene->r.bake_mode;
432 bkj->
bias = scene->r.bake_biasdist;
448 data->ob_image.len = ob->
totcol;
463 int baked_objects = 0, tot_obj;
516 data->images = bkr.
image;
531 data->hires_dm->release(data->hires_dm);
600 switch (event->
type) {
650 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.
void CustomData_set_only_copy(const CustomData *data, eCustomDataMask mask)
const CustomData_MeshMasks CD_MASK_BAREMESH
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.
DerivedMesh * CDDM_from_mesh(Mesh *mesh)
void DM_set_only_copy(DerivedMesh *dm, const CustomData_MeshMasks *mask)
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)
@ MULTIRES_IGNORE_SIMPLIFY
DerivedMesh * multires_make_derived_from_derived(DerivedMesh *dm, MultiresModifierData *mmd, Scene *scene, Object *ob, MultiresFlags flags)
void BKE_report(ReportList *reports, eReportType type, const char *message)
int BKE_scene_num_threads(const Scene *scene)
#define LISTBASE_FOREACH(type, var, list)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Object is a sort of wrapper for general info.
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])
Contains defines and structs used throughout the imbuf module.
Read Guarded memory(de)allocation.
#define RE_BAKE_DISPLACEMENT
@ WM_JOB_TYPE_OBJECT_BAKE_TEXTURE
constexpr bool is_empty() const
input_tx image(0, GPU_RGBA16F, Qualifier::WRITE, ImageType::FLOAT_2D, "preview_img") .compute_source("compositor_compute_preview.glsl") .do_static_compilation(true)
ccl_global const KernelWorkTile * tile
void *(* MEM_mallocN)(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void RE_multires_bake_images(MultiresBakeRender *bkr)
static void clear_images_poly(Image **ob_image_array, int ob_image_array_len, ClearFlag flag)
static DerivedMesh * multiresbake_create_loresdm(Scene *scene, Object *ob, int *lvl)
static DerivedMesh * multiresbake_create_hiresdm(Scene *scene, Object *ob, int *lvl)
void OBJECT_OT_bake_image(wmOperatorType *ot)
static int objects_bake_render_modal(bContext *C, wmOperator *, const wmEvent *event)
static void multiresbake_startjob(void *bkv, wmJobWorkerStatus *worker_status)
static void init_multiresbake_job(bContext *C, MultiresBakeJob *bkj)
static bool is_multires_bake(Scene *scene)
static void multiresbake_freejob(void *bkv)
static Image * bake_object_image_get(Object *ob, int mat_nr)
static int multiresbake_image_exec_locked(bContext *C, wmOperator *op)
static void clear_single_image(Image *image, ClearFlag flag)
static int bake_image_exec(bContext *C, wmOperator *op)
static int objects_bake_render_invoke(bContext *C, wmOperator *op, const wmEvent *)
static bool multiresbake_check(bContext *C, wmOperator *op)
static Image ** bake_object_image_get_array(Object *ob)
static int multiresbake_image_exec(bContext *C, wmOperator *op)
void(* release)(DerivedMesh *dm)
ImBufFloatBuffer float_buffer
ImBufByteBuffer byte_buffer
struct ModifierData * next
struct MultiresBakeRender::@1362 ob_image
struct blender::ed::object::MultiresBakerJobData::@448 ob_image
MultiresBakerJobData * next
MultiresBakerJobData * prev
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
int(* modal)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
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))