Changeset View
Changeset View
Standalone View
Standalone View
source/blender/makesrna/intern/rna_modifier.c
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
| Show First 20 Lines • Show All 1,108 Lines • ▼ Show 20 Lines | static const EnumPropertyItem *rna_DataTransferModifier_layers_select_src_itemf(bContext *C, | ||||
| DataTransferModifierData *dtmd = (DataTransferModifierData *)ptr->data; | DataTransferModifierData *dtmd = (DataTransferModifierData *)ptr->data; | ||||
| EnumPropertyItem *item = NULL, tmp_item = {0}; | EnumPropertyItem *item = NULL, tmp_item = {0}; | ||||
| int totitem = 0; | int totitem = 0; | ||||
| if (!C) { /* needed for docs and i18n tools */ | if (!C) { /* needed for docs and i18n tools */ | ||||
| return rna_enum_dt_layers_select_src_items; | return rna_enum_dt_layers_select_src_items; | ||||
| } | } | ||||
| Depsgraph *depsgraph = CTX_data_depsgraph(C); | |||||
| /* No active here! */ | /* No active here! */ | ||||
| RNA_enum_items_add_value( | RNA_enum_items_add_value( | ||||
| &item, &totitem, rna_enum_dt_layers_select_src_items, DT_LAYERS_ALL_SRC); | &item, &totitem, rna_enum_dt_layers_select_src_items, DT_LAYERS_ALL_SRC); | ||||
| if (STREQ(RNA_property_identifier(prop), "layers_vgroup_select_src")) { | if (STREQ(RNA_property_identifier(prop), "layers_vgroup_select_src")) { | ||||
| Object *ob_src = dtmd->ob_source; | Object *ob_src = dtmd->ob_source; | ||||
| # if 0 /* XXX Don't think we want this in modifier version... */ | # if 0 /* XXX Don't think we want this in modifier version... */ | ||||
| Show All 23 Lines | # endif | ||||
| } | } | ||||
| else if (STREQ(RNA_property_identifier(prop), "layers_uv_select_src")) { | else if (STREQ(RNA_property_identifier(prop), "layers_uv_select_src")) { | ||||
| Object *ob_src = dtmd->ob_source; | Object *ob_src = dtmd->ob_source; | ||||
| if (ob_src) { | if (ob_src) { | ||||
| Mesh *me_eval; | Mesh *me_eval; | ||||
| int num_data, i; | int num_data, i; | ||||
| Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); | |||||
brecht: Simple reading of an RNA property should not cause depsgraph evaluation. I guess this is a bit… | |||||
sergeyAuthorUnsubmitted Done Inline ActionsIt should not cause object evaluation either. It is not guaranteed that object has been evaluated with CD_MASK_MLOOPUV. This code is already "dangerous", but as long as it uses mesh_get_eval_final you can not be safe here unless use CTX_data_ensure_evaluated_depsgraph. sergey: It should not cause object evaluation either. It is not guaranteed that object has been… | |||||
| Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); | Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); | ||||
| Object *ob_src_eval = DEG_get_evaluated_object(depsgraph, ob_src); | Object *ob_src_eval = DEG_get_evaluated_object(depsgraph, ob_src); | ||||
| CustomData_MeshMasks cddata_masks = CD_MASK_BAREMESH; | CustomData_MeshMasks cddata_masks = CD_MASK_BAREMESH; | ||||
| cddata_masks.lmask |= CD_MASK_MLOOPUV; | cddata_masks.lmask |= CD_MASK_MLOOPUV; | ||||
| me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_src_eval, &cddata_masks); | me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_src_eval, &cddata_masks); | ||||
| num_data = CustomData_number_of_layers(&me_eval->ldata, CD_MLOOPUV); | num_data = CustomData_number_of_layers(&me_eval->ldata, CD_MLOOPUV); | ||||
| Show All 9 Lines | # endif | ||||
| } | } | ||||
| else if (STREQ(RNA_property_identifier(prop), "layers_vcol_select_src")) { | else if (STREQ(RNA_property_identifier(prop), "layers_vcol_select_src")) { | ||||
| Object *ob_src = dtmd->ob_source; | Object *ob_src = dtmd->ob_source; | ||||
| if (ob_src) { | if (ob_src) { | ||||
| Mesh *me_eval; | Mesh *me_eval; | ||||
| int num_data, i; | int num_data, i; | ||||
| Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); | |||||
| Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); | Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); | ||||
| Object *ob_src_eval = DEG_get_evaluated_object(depsgraph, ob_src); | Object *ob_src_eval = DEG_get_evaluated_object(depsgraph, ob_src); | ||||
| CustomData_MeshMasks cddata_masks = CD_MASK_BAREMESH; | CustomData_MeshMasks cddata_masks = CD_MASK_BAREMESH; | ||||
| cddata_masks.lmask |= CD_MASK_MLOOPCOL; | cddata_masks.lmask |= CD_MASK_MLOOPCOL; | ||||
| me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_src_eval, &cddata_masks); | me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_src_eval, &cddata_masks); | ||||
| num_data = CustomData_number_of_layers(&me_eval->ldata, CD_MLOOPCOL); | num_data = CustomData_number_of_layers(&me_eval->ldata, CD_MLOOPCOL); | ||||
| ▲ Show 20 Lines • Show All 4,855 Lines • Show Last 20 Lines | |||||
Simple reading of an RNA property should not cause depsgraph evaluation. I guess this is a bit of a weird case for the modifier UI drawing and not general Python API usage, maybe it's ok to to use expect_evaluated. here.