chore: checkpoint web Blender migration source, tools and docs
Accumulated uncommitted work: GHOST Web backend, WebGL/GPU web layer, web workflow engine and protocol, tooling, docs and task records. Large generated evidence, user-testing archives, build snapshots and imported test assets remain untracked. Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -211,15 +211,45 @@ if(WITH_WEB)
|
||||
intern/MOD_cast_web.cc
|
||||
intern/MOD_boolean.cc
|
||||
intern/MOD_build.cc
|
||||
intern/MOD_cloth.cc
|
||||
intern/MOD_curve.cc
|
||||
intern/MOD_decimate.cc
|
||||
intern/MOD_displace_web.cc
|
||||
intern/MOD_edgesplit.cc
|
||||
intern/MOD_fluid.cc
|
||||
intern/MOD_grease_pencil_armature.cc
|
||||
intern/MOD_grease_pencil_array.cc
|
||||
intern/MOD_grease_pencil_build.cc
|
||||
intern/MOD_grease_pencil_color.cc
|
||||
intern/MOD_grease_pencil_dash.cc
|
||||
intern/MOD_grease_pencil_envelope.cc
|
||||
intern/MOD_grease_pencil_hook.cc
|
||||
intern/MOD_grease_pencil_lattice.cc
|
||||
intern/MOD_grease_pencil_length.cc
|
||||
intern/MOD_grease_pencil_mirror.cc
|
||||
intern/MOD_grease_pencil_multiply.cc
|
||||
intern/MOD_grease_pencil_noise.cc
|
||||
intern/MOD_grease_pencil_offset.cc
|
||||
intern/MOD_grease_pencil_opacity.cc
|
||||
intern/MOD_grease_pencil_outline.cc
|
||||
intern/MOD_grease_pencil_shrinkwrap.cc
|
||||
intern/MOD_grease_pencil_simplify.cc
|
||||
intern/MOD_grease_pencil_smooth.cc
|
||||
intern/MOD_grease_pencil_subdiv.cc
|
||||
intern/MOD_grease_pencil_texture.cc
|
||||
intern/MOD_grease_pencil_thickness.cc
|
||||
intern/MOD_grease_pencil_time.cc
|
||||
intern/MOD_grease_pencil_tint.cc
|
||||
intern/MOD_grease_pencil_util.cc
|
||||
intern/MOD_grease_pencil_weight_angle.cc
|
||||
intern/MOD_grease_pencil_weight_proximity.cc
|
||||
intern/MOD_hook.cc
|
||||
intern/MOD_lattice.cc
|
||||
intern/MOD_lineart.cc
|
||||
intern/MOD_mirror.cc
|
||||
intern/MOD_meshdeform.cc
|
||||
intern/MOD_nodes_web.cc
|
||||
intern/MOD_nodes.cc
|
||||
intern/MOD_ui_common.cc
|
||||
intern/MOD_particlesystem.cc
|
||||
intern/MOD_none.cc
|
||||
intern/MOD_screw.cc
|
||||
@@ -238,6 +268,11 @@ if(WITH_WEB)
|
||||
intern/MOD_weld.cc
|
||||
intern/MOD_wireframe.cc
|
||||
|
||||
intern/lineart/lineart_chain.cc
|
||||
intern/lineart/lineart_cpu.cc
|
||||
intern/lineart/lineart_shadow.cc
|
||||
intern/lineart/lineart_util.cc
|
||||
|
||||
MOD_modifiertypes.hh
|
||||
intern/MOD_solidify_util.hh
|
||||
intern/MOD_util.hh
|
||||
@@ -246,6 +281,8 @@ endif()
|
||||
|
||||
# So we can have special tricks in modifier system.
|
||||
|
||||
list(APPEND SRC intern/MOD_nodes_storage.cc MOD_nodes_storage.hh)
|
||||
|
||||
blender_add_lib(bf_modifiers "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
|
||||
|
||||
# RNA_prototypes.hh
|
||||
|
||||
14
blender-5.2.0/source/blender/modifiers/MOD_nodes_storage.hh
Normal file
14
blender-5.2.0/source/blender/modifiers/MOD_nodes_storage.hh
Normal file
@@ -0,0 +1,14 @@
|
||||
/* SPDX-FileCopyrightText: 2026 Blender Authors
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
#pragma once
|
||||
|
||||
namespace blender {
|
||||
struct BlendDataReader;
|
||||
struct BlendWriter;
|
||||
struct NodesModifierData;
|
||||
|
||||
void nodes_modifier_storage_write(BlendWriter *writer, const NodesModifierData &nmd);
|
||||
void nodes_modifier_storage_read(BlendDataReader *reader, NodesModifierData &nmd);
|
||||
void nodes_modifier_storage_copy(const NodesModifierData &source, NodesModifierData &target);
|
||||
void nodes_modifier_storage_free(NodesModifierData &nmd);
|
||||
} // namespace blender
|
||||
@@ -271,7 +271,11 @@ ModifierTypeInfo modifierType_Cloth = {
|
||||
/*name*/ N_("Cloth"),
|
||||
/*struct_name*/ "ClothModifierData",
|
||||
/*struct_size*/ sizeof(ClothModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_ClothModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::OnlyDeform,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsMesh | eModifierTypeFlag_UsesPointCache |
|
||||
eModifierTypeFlag_Single,
|
||||
@@ -296,7 +300,11 @@ ModifierTypeInfo modifierType_Cloth = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ nullptr,
|
||||
/*blend_read*/ nullptr,
|
||||
/*foreach_cache*/ nullptr,
|
||||
|
||||
@@ -244,7 +244,11 @@ ModifierTypeInfo modifierType_Fluid = {
|
||||
/*name*/ N_("Fluid"),
|
||||
/*struct_name*/ "FluidModifierData",
|
||||
/*struct_size*/ sizeof(FluidModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_FluidModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::Constructive,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsMesh | eModifierTypeFlag_Single,
|
||||
/*icon*/ ICON_MOD_FLUIDSIM,
|
||||
@@ -266,9 +270,17 @@ ModifierTypeInfo modifierType_Fluid = {
|
||||
/*depends_on_time*/ depends_on_time,
|
||||
/*depends_on_normals*/ nullptr,
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
#ifdef WITH_WEB
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
#else
|
||||
/*foreach_tex_link*/ foreach_tex_link,
|
||||
#endif
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ nullptr,
|
||||
/*blend_read*/ nullptr,
|
||||
/*foreach_cache*/ nullptr,
|
||||
|
||||
@@ -311,7 +311,11 @@ ModifierTypeInfo modifierType_GreasePencilArmature = {
|
||||
/*name*/ N_("Armature"),
|
||||
/*struct_name*/ "GreasePencilArmatureModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilArmatureModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilArmatureModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::OnlyDeform,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
eModifierTypeFlag_EnableInEditmode | eModifierTypeFlag_SupportsMapping,
|
||||
@@ -336,7 +340,11 @@ ModifierTypeInfo modifierType_GreasePencilArmature = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -354,7 +354,11 @@ ModifierTypeInfo modifierType_GreasePencilArray = {
|
||||
/*name*/ N_("Array"),
|
||||
/*struct_name*/ "GreasePencilArrayModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilArrayModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilArrayModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::Constructive,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
eModifierTypeFlag_EnableInEditmode | eModifierTypeFlag_SupportsMapping,
|
||||
@@ -379,7 +383,11 @@ ModifierTypeInfo modifierType_GreasePencilArray = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -870,7 +870,11 @@ ModifierTypeInfo modifierType_GreasePencilBuild = {
|
||||
/*name*/ N_("Build"),
|
||||
/*struct_name*/ "GreasePencilBuildModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilBuildModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilBuildModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::Nonconstructive,
|
||||
/*flags*/
|
||||
eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_EnableInEditmode |
|
||||
@@ -896,7 +900,11 @@ ModifierTypeInfo modifierType_GreasePencilBuild = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -255,7 +255,11 @@ ModifierTypeInfo modifierType_GreasePencilColor = {
|
||||
/*name*/ N_("Color"),
|
||||
/*struct_name*/ "GreasePencilColorModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilColorModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilColorModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::NonGeometrical,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
eModifierTypeFlag_EnableInEditmode | eModifierTypeFlag_SupportsMapping,
|
||||
@@ -280,7 +284,11 @@ ModifierTypeInfo modifierType_GreasePencilColor = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -522,7 +522,11 @@ ModifierTypeInfo modifierType_GreasePencilDash = {
|
||||
/*name*/ N_("Dot Dash"),
|
||||
/*struct_name*/ "GreasePencilDashModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilDashModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilDashModifierData,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::Nonconstructive,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
eModifierTypeFlag_EnableInEditmode | eModifierTypeFlag_SupportsMapping,
|
||||
@@ -547,7 +551,11 @@ ModifierTypeInfo modifierType_GreasePencilDash = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -732,7 +732,11 @@ ModifierTypeInfo modifierType_GreasePencilEnvelope = {
|
||||
/*name*/ N_("Envelope"),
|
||||
/*struct_name*/ "GreasePencilEnvelopeModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilEnvelopeModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilEnvelopeModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::Nonconstructive,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
eModifierTypeFlag_EnableInEditmode | eModifierTypeFlag_SupportsMapping,
|
||||
@@ -757,7 +761,11 @@ ModifierTypeInfo modifierType_GreasePencilEnvelope = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -320,7 +320,11 @@ ModifierTypeInfo modifierType_GreasePencilHook = {
|
||||
/*name*/ N_("Hook"),
|
||||
/*struct_name*/ "GreasePencilHookModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilHookModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilHookModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::OnlyDeform,
|
||||
/*flags*/
|
||||
eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
@@ -346,7 +350,11 @@ ModifierTypeInfo modifierType_GreasePencilHook = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -197,7 +197,11 @@ ModifierTypeInfo modifierType_GreasePencilLattice = {
|
||||
/*name*/ N_("Lattice"),
|
||||
/*struct_name*/ "GreasePencilLatticeModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilLatticeModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilLatticeModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::OnlyDeform,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
eModifierTypeFlag_EnableInEditmode | eModifierTypeFlag_SupportsMapping,
|
||||
@@ -222,7 +226,11 @@ ModifierTypeInfo modifierType_GreasePencilLattice = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
/*foreach_cache*/ nullptr,
|
||||
|
||||
@@ -334,7 +334,11 @@ ModifierTypeInfo modifierType_GreasePencilLength = {
|
||||
/*name*/ N_("Length"),
|
||||
/*struct_name*/ "GreasePencilLengthModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilLengthModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilLengthModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::Nonconstructive,
|
||||
/*flags*/
|
||||
eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_EnableInEditmode |
|
||||
@@ -360,7 +364,11 @@ ModifierTypeInfo modifierType_GreasePencilLength = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -257,7 +257,11 @@ ModifierTypeInfo modifierType_GreasePencilMirror = {
|
||||
/*name*/ N_("Mirror"),
|
||||
/*struct_name*/ "GreasePencilMirrorModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilMirrorModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilMirrorModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::Constructive,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
eModifierTypeFlag_EnableInEditmode | eModifierTypeFlag_SupportsMapping,
|
||||
@@ -282,7 +286,11 @@ ModifierTypeInfo modifierType_GreasePencilMirror = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -297,7 +297,11 @@ ModifierTypeInfo modifierType_GreasePencilMultiply = {
|
||||
/*name*/ N_("Multiple Strokes"),
|
||||
/*struct_name*/ "GreasePencilMultiModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilMultiModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilMultiplyModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::Constructive,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
eModifierTypeFlag_EnableInEditmode | eModifierTypeFlag_SupportsMapping,
|
||||
@@ -322,7 +326,11 @@ ModifierTypeInfo modifierType_GreasePencilMultiply = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -331,7 +331,11 @@ ModifierTypeInfo modifierType_GreasePencilNoise = {
|
||||
/*name*/ N_("Noise"),
|
||||
/*struct_name*/ "GreasePencilNoiseModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilNoiseModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilNoiseModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::OnlyDeform,
|
||||
/*flags*/
|
||||
(eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
@@ -357,7 +361,11 @@ ModifierTypeInfo modifierType_GreasePencilNoise = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -480,7 +480,11 @@ ModifierTypeInfo modifierType_GreasePencilOffset = {
|
||||
/*name*/ N_("Offset"),
|
||||
/*struct_name*/ "GreasePencilOffsetModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilOffsetModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilOffsetModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::OnlyDeform,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
eModifierTypeFlag_EnableInEditmode | eModifierTypeFlag_SupportsMapping,
|
||||
@@ -505,7 +509,11 @@ ModifierTypeInfo modifierType_GreasePencilOffset = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -295,7 +295,11 @@ ModifierTypeInfo modifierType_GreasePencilOpacity = {
|
||||
/*name*/ N_("Opacity"),
|
||||
/*struct_name*/ "GreasePencilOpacityModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilOpacityModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilOpacityModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::NonGeometrical,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
eModifierTypeFlag_EnableInEditmode | eModifierTypeFlag_SupportsMapping,
|
||||
@@ -320,7 +324,11 @@ ModifierTypeInfo modifierType_GreasePencilOpacity = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
/*foreach_cache*/ nullptr,
|
||||
|
||||
@@ -319,7 +319,11 @@ ModifierTypeInfo modifierType_GreasePencilOutline = {
|
||||
/*name*/ N_("Outline"),
|
||||
/*struct_name*/ "GreasePencilOutlineModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilOutlineModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilOutlineModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::Nonconstructive,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
eModifierTypeFlag_EnableInEditmode | eModifierTypeFlag_SupportsMapping,
|
||||
@@ -344,7 +348,11 @@ ModifierTypeInfo modifierType_GreasePencilOutline = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -325,7 +325,11 @@ ModifierTypeInfo modifierType_GreasePencilShrinkwrap = {
|
||||
/*name*/ N_("Shrinkwrap"),
|
||||
/*struct_name*/ "GreasePencilShrinkwrapModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilShrinkwrapModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilShrinkwrapModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::OnlyDeform,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
eModifierTypeFlag_EnableInEditmode | eModifierTypeFlag_SupportsMapping,
|
||||
@@ -350,7 +354,11 @@ ModifierTypeInfo modifierType_GreasePencilShrinkwrap = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -235,7 +235,11 @@ ModifierTypeInfo modifierType_GreasePencilSimplify = {
|
||||
/*name*/ N_("Simplify"),
|
||||
/*struct_name*/ "GreasePencilSimplifyModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilSimplifyModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilSimplifyModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::Nonconstructive,
|
||||
/*flags*/
|
||||
eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
@@ -261,7 +265,11 @@ ModifierTypeInfo modifierType_GreasePencilSimplify = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
/*foreach_cache*/ nullptr,
|
||||
|
||||
@@ -270,7 +270,11 @@ ModifierTypeInfo modifierType_GreasePencilSmooth = {
|
||||
/*name*/ N_("Smooth"),
|
||||
/*struct_name*/ "GreasePencilSmoothModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilSmoothModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilSmoothModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::OnlyDeform,
|
||||
/*flags*/
|
||||
eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
@@ -296,7 +300,11 @@ ModifierTypeInfo modifierType_GreasePencilSmooth = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -189,7 +189,11 @@ ModifierTypeInfo modifierType_GreasePencilSubdiv = {
|
||||
/*name*/ N_("Subdivide"),
|
||||
/*struct_name*/ "GreasePencilSubdivModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilSubdivModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilSubdivModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::Constructive,
|
||||
/*flags*/
|
||||
eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
@@ -215,7 +219,11 @@ ModifierTypeInfo modifierType_GreasePencilSubdiv = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
/*foreach_cache*/ nullptr,
|
||||
|
||||
@@ -364,7 +364,11 @@ ModifierTypeInfo modifierType_GreasePencilTexture = {
|
||||
/*name*/ N_("TextureMapping"),
|
||||
/*struct_name*/ "GreasePencilTextureModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilTextureModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilTextureModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::NonGeometrical,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
eModifierTypeFlag_EnableInEditmode | eModifierTypeFlag_SupportsMapping,
|
||||
@@ -389,7 +393,11 @@ ModifierTypeInfo modifierType_GreasePencilTexture = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -214,7 +214,11 @@ ModifierTypeInfo modifierType_GreasePencilThickness = {
|
||||
/*name*/ N_("Thickness"),
|
||||
/*struct_name*/ "GreasePencilThickModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilThickModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilThickModifierData,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::OnlyDeform,
|
||||
/*flags*/
|
||||
eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
@@ -240,7 +244,11 @@ ModifierTypeInfo modifierType_GreasePencilThickness = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -660,7 +660,11 @@ ModifierTypeInfo modifierType_GreasePencilTime = {
|
||||
/*name*/ N_("TimeOffset"),
|
||||
/*struct_name*/ "GreasePencilTimeModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilTimeModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilTimeModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::Nonconstructive,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
eModifierTypeFlag_EnableInEditmode | eModifierTypeFlag_SupportsMapping,
|
||||
@@ -685,7 +689,11 @@ ModifierTypeInfo modifierType_GreasePencilTime = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -506,7 +506,11 @@ ModifierTypeInfo modifierType_GreasePencilTint = {
|
||||
/*name*/ N_("Tint"),
|
||||
/*struct_name*/ "GreasePencilTintModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilTintModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilTintModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::NonGeometrical,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
eModifierTypeFlag_EnableInEditmode | eModifierTypeFlag_SupportsMapping,
|
||||
@@ -531,7 +535,11 @@ ModifierTypeInfo modifierType_GreasePencilTint = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
/*foreach_cache*/ nullptr,
|
||||
|
||||
@@ -265,7 +265,11 @@ ModifierTypeInfo modifierType_GreasePencilWeightAngle = {
|
||||
/*name*/ N_("Weight Angle"),
|
||||
/*struct_name*/ "GreasePencilWeightAngleModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilWeightAngleModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilWeightAngleModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::NonGeometrical,
|
||||
/*flags*/
|
||||
eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
@@ -291,7 +295,11 @@ ModifierTypeInfo modifierType_GreasePencilWeightAngle = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -285,7 +285,11 @@ ModifierTypeInfo modifierType_GreasePencilWeightProximity = {
|
||||
/*name*/ N_("Weight Proximity"),
|
||||
/*struct_name*/ "GreasePencilWeightProximityModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilWeightProximityModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilWeightProximityModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::NonGeometrical,
|
||||
/*flags*/
|
||||
eModifierTypeFlag_AcceptsGreasePencil | eModifierTypeFlag_SupportsEditmode |
|
||||
@@ -311,7 +315,11 @@ ModifierTypeInfo modifierType_GreasePencilWeightProximity = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -883,7 +883,11 @@ ModifierTypeInfo modifierType_GreasePencilLineart = {
|
||||
/*name*/ N_("Lineart"),
|
||||
/*struct_name*/ "GreasePencilLineartModifierData",
|
||||
/*struct_size*/ sizeof(GreasePencilLineartModifierData),
|
||||
#ifdef WITH_WEB
|
||||
/*srna*/ nullptr,
|
||||
#else
|
||||
/*srna*/ &RNA_GreasePencilLineartModifier,
|
||||
#endif
|
||||
/*type*/ ModifierTypeType::Constructive,
|
||||
/*flags*/ eModifierTypeFlag_AcceptsGreasePencil,
|
||||
/*icon*/ ICON_MOD_LINEART,
|
||||
@@ -907,7 +911,11 @@ ModifierTypeInfo modifierType_GreasePencilLineart = {
|
||||
/*foreach_ID_link*/ foreach_ID_link,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
};
|
||||
|
||||
@@ -78,6 +78,7 @@
|
||||
|
||||
#include "MOD_modifiertypes.hh"
|
||||
#include "MOD_nodes.hh"
|
||||
#include "MOD_nodes_storage.hh"
|
||||
#include "MOD_ui_common.hh"
|
||||
|
||||
#include "ED_node.hh"
|
||||
@@ -452,20 +453,6 @@ void MOD_nodes_update_interface(Object *object, NodesModifierData *nmd)
|
||||
DEG_id_tag_update(&object->id, ID_RECALC_GEOMETRY);
|
||||
}
|
||||
|
||||
NodesModifierBake *NodesModifierData::find_bake(const int id)
|
||||
{
|
||||
return const_cast<NodesModifierBake *>(std::as_const(*this).find_bake(id));
|
||||
}
|
||||
|
||||
const NodesModifierBake *NodesModifierData::find_bake(const int id) const
|
||||
{
|
||||
for (const NodesModifierBake &bake : Span{this->bakes, this->bakes_num}) {
|
||||
if (bake.id == id) {
|
||||
return &bake;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup side effects nodes so that the given node in the given compute context will be executed.
|
||||
@@ -1625,14 +1612,6 @@ static void add_missing_data_block_mappings(
|
||||
bake.data_blocks_num = new_num;
|
||||
}
|
||||
|
||||
void nodes_modifier_data_block_destruct(NodesModifierDataBlock *data_block, const bool do_id_user)
|
||||
{
|
||||
MEM_SAFE_DELETE(data_block->id_name);
|
||||
MEM_SAFE_DELETE(data_block->lib_name);
|
||||
if (do_id_user) {
|
||||
id_us_min(data_block->id);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* During evaluation we might have baked geometry that contains references to other data-blocks
|
||||
@@ -1977,111 +1956,24 @@ static void panel_register(ARegionType *region_type)
|
||||
static void blend_write(BlendWriter *writer, const ID * /*id_owner*/, const ModifierData *md)
|
||||
{
|
||||
const NodesModifierData *nmd = reinterpret_cast<const NodesModifierData *>(md);
|
||||
|
||||
writer->write_struct(nmd);
|
||||
|
||||
writer->write_string(nmd->bake_directory);
|
||||
|
||||
if (nmd->settings_legacy.properties != nullptr) {
|
||||
/* Write legacy settings for forward compatibility. Created by
|
||||
* #create_legacy_geometry_nodes_properties. */
|
||||
IDP_BlendWrite(writer, nmd->settings_legacy.properties);
|
||||
}
|
||||
|
||||
writer->write_struct_array(nmd->bakes_num, nmd->bakes);
|
||||
for (const NodesModifierBake &bake : Span(nmd->bakes, nmd->bakes_num)) {
|
||||
writer->write_string(bake.directory);
|
||||
|
||||
writer->write_struct_array(bake.data_blocks_num, bake.data_blocks);
|
||||
for (const NodesModifierDataBlock &item : Span(bake.data_blocks, bake.data_blocks_num)) {
|
||||
writer->write_string(item.id_name);
|
||||
writer->write_string(item.lib_name);
|
||||
}
|
||||
if (bake.packed) {
|
||||
writer->write_struct(bake.packed);
|
||||
writer->write_struct_array(bake.packed->meta_files_num, bake.packed->meta_files);
|
||||
writer->write_struct_array(bake.packed->blob_files_num, bake.packed->blob_files);
|
||||
const auto write_bake_file = [&](const NodesModifierBakeFile &bake_file) {
|
||||
writer->write_string(bake_file.name);
|
||||
if (bake_file.packed_file) {
|
||||
BKE_packedfile_blend_write(writer, bake_file.packed_file);
|
||||
}
|
||||
};
|
||||
for (const NodesModifierBakeFile &meta_file :
|
||||
Span{bake.packed->meta_files, bake.packed->meta_files_num})
|
||||
{
|
||||
write_bake_file(meta_file);
|
||||
}
|
||||
for (const NodesModifierBakeFile &blob_file :
|
||||
Span{bake.packed->blob_files, bake.packed->blob_files_num})
|
||||
{
|
||||
write_bake_file(blob_file);
|
||||
}
|
||||
}
|
||||
}
|
||||
writer->write_struct_array(nmd->panels_num, nmd->panels);
|
||||
nodes_modifier_storage_write(writer, *nmd);
|
||||
}
|
||||
|
||||
static void blend_read(BlendDataReader *reader, ModifierData *md)
|
||||
{
|
||||
NodesModifierData *nmd = reinterpret_cast<NodesModifierData *>(md);
|
||||
BLO_read_string(reader, &nmd->bake_directory);
|
||||
if (nmd->node_group == nullptr || nmd->modifier.system_properties) {
|
||||
/* Don't bother reading old settings when modifier system properties are available. */
|
||||
nmd->settings_legacy.properties = nullptr;
|
||||
}
|
||||
else {
|
||||
BLO_read_struct(reader, IDProperty, &nmd->settings_legacy.properties);
|
||||
IDP_BlendDataRead(reader, &nmd->settings_legacy.properties);
|
||||
}
|
||||
|
||||
BLO_read_array_and_validate_size(reader, &nmd->bakes, &nmd->bakes_num);
|
||||
|
||||
if (nmd->bakes_num > 0 && nmd->bakes == nullptr) {
|
||||
/* This case generally shouldn't be allowed to happen. However, there is a bug report with a
|
||||
* corrupted .blend file (#123974) that triggers this case. Unfortunately, it's not clear how
|
||||
* that could have happened. For now, handle this case more gracefully in release builds, while
|
||||
* still crashing in debug builds. */
|
||||
nmd->bakes_num = 0;
|
||||
BLI_assert_unreachable();
|
||||
}
|
||||
|
||||
for (NodesModifierBake &bake : MutableSpan(nmd->bakes, nmd->bakes_num)) {
|
||||
BLO_read_string(reader, &bake.directory);
|
||||
|
||||
BLO_read_array_and_validate_size(reader, &bake.data_blocks, &bake.data_blocks_num);
|
||||
for (NodesModifierDataBlock &data_block : MutableSpan(bake.data_blocks, bake.data_blocks_num))
|
||||
{
|
||||
BLO_read_string(reader, &data_block.id_name);
|
||||
BLO_read_string(reader, &data_block.lib_name);
|
||||
}
|
||||
|
||||
BLO_read_struct(reader, NodesModifierPackedBake, &bake.packed);
|
||||
if (bake.packed) {
|
||||
BLO_read_array_and_validate_size(
|
||||
reader, &bake.packed->meta_files, &bake.packed->meta_files_num);
|
||||
BLO_read_array_and_validate_size(
|
||||
reader, &bake.packed->blob_files, &bake.packed->blob_files_num);
|
||||
const auto read_bake_file = [&](NodesModifierBakeFile &bake_file) {
|
||||
BLO_read_string(reader, &bake_file.name);
|
||||
if (bake_file.packed_file) {
|
||||
BKE_packedfile_blend_read(reader, &bake_file.packed_file, "");
|
||||
}
|
||||
};
|
||||
for (NodesModifierBakeFile &meta_file :
|
||||
MutableSpan{bake.packed->meta_files, bake.packed->meta_files_num})
|
||||
{
|
||||
read_bake_file(meta_file);
|
||||
}
|
||||
for (NodesModifierBakeFile &blob_file :
|
||||
MutableSpan{bake.packed->blob_files, bake.packed->blob_files_num})
|
||||
{
|
||||
read_bake_file(blob_file);
|
||||
}
|
||||
}
|
||||
}
|
||||
BLO_read_array_and_validate_size(reader, &nmd->panels, &nmd->panels_num);
|
||||
|
||||
nodes_modifier_storage_read(reader, *nmd);
|
||||
nmd->runtime = MEM_new<NodesModifierRuntime>(__func__);
|
||||
nmd->runtime->cache = std::make_shared<bake::ModifierCache>();
|
||||
}
|
||||
@@ -2090,119 +1982,25 @@ static void copy_data(const ModifierData *md, ModifierData *target, const int fl
|
||||
{
|
||||
const NodesModifierData *nmd = reinterpret_cast<const NodesModifierData *>(md);
|
||||
NodesModifierData *tnmd = reinterpret_cast<NodesModifierData *>(target);
|
||||
|
||||
BKE_modifier_copydata_generic(md, target, flag);
|
||||
|
||||
if (nmd->bakes) {
|
||||
tnmd->bakes = MEM_dupalloc(nmd->bakes);
|
||||
for (const int i : IndexRange(nmd->bakes_num)) {
|
||||
NodesModifierBake &bake = tnmd->bakes[i];
|
||||
if (bake.directory) {
|
||||
bake.directory = BLI_strdup(bake.directory);
|
||||
}
|
||||
if (bake.data_blocks) {
|
||||
bake.data_blocks = MEM_dupalloc(bake.data_blocks);
|
||||
for (const int i : IndexRange(bake.data_blocks_num)) {
|
||||
NodesModifierDataBlock &data_block = bake.data_blocks[i];
|
||||
if (data_block.id_name) {
|
||||
data_block.id_name = BLI_strdup(data_block.id_name);
|
||||
}
|
||||
if (data_block.lib_name) {
|
||||
data_block.lib_name = BLI_strdup(data_block.lib_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
nodes_modifier_packed_bake_copy(bake, nmd->bakes[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (nmd->panels) {
|
||||
tnmd->panels = MEM_dupalloc(nmd->panels);
|
||||
}
|
||||
|
||||
nodes_modifier_storage_copy(*nmd, *tnmd);
|
||||
tnmd->runtime = MEM_new<NodesModifierRuntime>(__func__);
|
||||
|
||||
if (flag & LIB_ID_COPY_SET_COPIED_ON_WRITE) {
|
||||
/* Share the simulation cache between the original and evaluated modifier. */
|
||||
/* Keep the original simulation cache and bake path for evaluated copies. */
|
||||
tnmd->runtime->cache = nmd->runtime->cache;
|
||||
/* Keep bake path in the evaluated modifier. */
|
||||
tnmd->bake_directory = nmd->bake_directory ? BLI_strdup(nmd->bake_directory) : nullptr;
|
||||
}
|
||||
else {
|
||||
tnmd->runtime->cache = std::make_shared<bake::ModifierCache>();
|
||||
/* Clear the bake path when duplicating. */
|
||||
tnmd->bake_directory = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void nodes_modifier_packed_bake_copy(NodesModifierBake &bake_dst,
|
||||
const NodesModifierBake &bake_src)
|
||||
{
|
||||
BLI_assert(ELEM(bake_dst.packed, bake_src.packed, nullptr));
|
||||
if (!bake_src.packed) {
|
||||
return;
|
||||
}
|
||||
|
||||
bake_dst.packed = MEM_dupalloc(bake_src.packed);
|
||||
const auto copy_bake_files_inplace = [](NodesModifierBakeFile **bake_files,
|
||||
const int bake_files_num) {
|
||||
if (!*bake_files) {
|
||||
return;
|
||||
}
|
||||
*bake_files = MEM_dupalloc(*bake_files);
|
||||
for (NodesModifierBakeFile &bake_file : MutableSpan{*bake_files, bake_files_num}) {
|
||||
bake_file.name = BLI_strdup_null(bake_file.name);
|
||||
if (bake_file.packed_file) {
|
||||
bake_file.packed_file = BKE_packedfile_duplicate(bake_file.packed_file);
|
||||
}
|
||||
}
|
||||
};
|
||||
copy_bake_files_inplace(&bake_dst.packed->meta_files, bake_dst.packed->meta_files_num);
|
||||
copy_bake_files_inplace(&bake_dst.packed->blob_files, bake_dst.packed->blob_files_num);
|
||||
}
|
||||
|
||||
void nodes_modifier_packed_bake_free(NodesModifierPackedBake *packed_bake)
|
||||
{
|
||||
const auto free_packed_files = [](NodesModifierBakeFile *files, const int files_num) {
|
||||
for (NodesModifierBakeFile &file : MutableSpan{files, files_num}) {
|
||||
MEM_SAFE_DELETE(file.name);
|
||||
if (file.packed_file) {
|
||||
BKE_packedfile_free(file.packed_file);
|
||||
}
|
||||
}
|
||||
MEM_SAFE_DELETE(files);
|
||||
};
|
||||
free_packed_files(packed_bake->meta_files, packed_bake->meta_files_num);
|
||||
free_packed_files(packed_bake->blob_files, packed_bake->blob_files_num);
|
||||
MEM_SAFE_DELETE(packed_bake);
|
||||
}
|
||||
|
||||
void nodes_modifier_bake_destruct(NodesModifierBake *bake, const bool do_id_user)
|
||||
{
|
||||
MEM_SAFE_DELETE(bake->directory);
|
||||
|
||||
for (NodesModifierDataBlock &data_block : MutableSpan(bake->data_blocks, bake->data_blocks_num))
|
||||
{
|
||||
nodes_modifier_data_block_destruct(&data_block, do_id_user);
|
||||
}
|
||||
MEM_SAFE_DELETE(bake->data_blocks);
|
||||
|
||||
if (bake->packed) {
|
||||
nodes_modifier_packed_bake_free(bake->packed);
|
||||
}
|
||||
}
|
||||
|
||||
static void free_data(ModifierData *md)
|
||||
{
|
||||
NodesModifierData *nmd = reinterpret_cast<NodesModifierData *>(md);
|
||||
for (NodesModifierBake &bake : MutableSpan(nmd->bakes, nmd->bakes_num)) {
|
||||
nodes_modifier_bake_destruct(&bake, false);
|
||||
}
|
||||
MEM_SAFE_DELETE(nmd->bakes);
|
||||
|
||||
MEM_SAFE_DELETE(nmd->panels);
|
||||
|
||||
MEM_SAFE_DELETE(nmd->bake_directory);
|
||||
nodes_modifier_storage_free(*nmd);
|
||||
MEM_delete(nmd->runtime);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,208 @@
|
||||
/* SPDX-FileCopyrightText: 2026 Blender Authors
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#include <utility>
|
||||
|
||||
#include "MEM_guardedalloc.h"
|
||||
#include "BLI_span.hh"
|
||||
#include "BLI_string.h"
|
||||
#include "BLI_utildefines.h"
|
||||
#include "DNA_modifier_types.h"
|
||||
#include "BKE_lib_id.hh"
|
||||
#include "BKE_packedFile.hh"
|
||||
#include "BLO_read_write.hh"
|
||||
#include "MOD_nodes.hh"
|
||||
#include "MOD_nodes_storage.hh"
|
||||
|
||||
namespace blender {
|
||||
|
||||
/* Shared with the original modifier: storage must not depend on which evaluator is linked. */
|
||||
NodesModifierBake *NodesModifierData::find_bake(const int id)
|
||||
{
|
||||
return const_cast<NodesModifierBake *>(std::as_const(*this).find_bake(id));
|
||||
}
|
||||
|
||||
const NodesModifierBake *NodesModifierData::find_bake(const int id) const
|
||||
{
|
||||
for (const NodesModifierBake &bake : Span{this->bakes, this->bakes_num}) {
|
||||
if (bake.id == id) {
|
||||
return &bake;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void nodes_modifier_data_block_destruct(NodesModifierDataBlock *data_block, const bool do_id_user)
|
||||
{
|
||||
MEM_SAFE_DELETE(data_block->id_name);
|
||||
MEM_SAFE_DELETE(data_block->lib_name);
|
||||
if (do_id_user) {
|
||||
id_us_min(data_block->id);
|
||||
}
|
||||
}
|
||||
|
||||
void nodes_modifier_packed_bake_copy(NodesModifierBake &bake_dst,
|
||||
const NodesModifierBake &bake_src)
|
||||
{
|
||||
BLI_assert(ELEM(bake_dst.packed, bake_src.packed, nullptr));
|
||||
if (!bake_src.packed) {
|
||||
return;
|
||||
}
|
||||
bake_dst.packed = MEM_dupalloc(bake_src.packed);
|
||||
const auto copy_bake_files_inplace = [](NodesModifierBakeFile **bake_files,
|
||||
const int bake_files_num) {
|
||||
if (!*bake_files) {
|
||||
return;
|
||||
}
|
||||
*bake_files = MEM_dupalloc(*bake_files);
|
||||
for (NodesModifierBakeFile &bake_file : MutableSpan{*bake_files, bake_files_num}) {
|
||||
bake_file.name = BLI_strdup_null(bake_file.name);
|
||||
if (bake_file.packed_file) {
|
||||
bake_file.packed_file = BKE_packedfile_duplicate(bake_file.packed_file);
|
||||
}
|
||||
}
|
||||
};
|
||||
copy_bake_files_inplace(&bake_dst.packed->meta_files, bake_dst.packed->meta_files_num);
|
||||
copy_bake_files_inplace(&bake_dst.packed->blob_files, bake_dst.packed->blob_files_num);
|
||||
}
|
||||
|
||||
void nodes_modifier_packed_bake_free(NodesModifierPackedBake *packed_bake)
|
||||
{
|
||||
const auto free_packed_files = [](NodesModifierBakeFile *files, const int files_num) {
|
||||
for (NodesModifierBakeFile &file : MutableSpan{files, files_num}) {
|
||||
MEM_SAFE_DELETE(file.name);
|
||||
if (file.packed_file) {
|
||||
BKE_packedfile_free(file.packed_file);
|
||||
}
|
||||
}
|
||||
MEM_SAFE_DELETE(files);
|
||||
};
|
||||
free_packed_files(packed_bake->meta_files, packed_bake->meta_files_num);
|
||||
free_packed_files(packed_bake->blob_files, packed_bake->blob_files_num);
|
||||
MEM_SAFE_DELETE(packed_bake);
|
||||
}
|
||||
|
||||
void nodes_modifier_bake_destruct(NodesModifierBake *bake, const bool do_id_user)
|
||||
{
|
||||
MEM_SAFE_DELETE(bake->directory);
|
||||
for (NodesModifierDataBlock &data_block : MutableSpan(bake->data_blocks, bake->data_blocks_num)) {
|
||||
nodes_modifier_data_block_destruct(&data_block, do_id_user);
|
||||
}
|
||||
MEM_SAFE_DELETE(bake->data_blocks);
|
||||
if (bake->packed) {
|
||||
nodes_modifier_packed_bake_free(bake->packed);
|
||||
}
|
||||
}
|
||||
|
||||
void nodes_modifier_storage_write(BlendWriter *writer, const NodesModifierData &nmd)
|
||||
{
|
||||
writer->write_string(nmd.bake_directory);
|
||||
writer->write_struct_array(nmd.bakes_num, nmd.bakes);
|
||||
for (const NodesModifierBake &bake : Span(nmd.bakes, nmd.bakes_num)) {
|
||||
writer->write_string(bake.directory);
|
||||
writer->write_struct_array(bake.data_blocks_num, bake.data_blocks);
|
||||
for (const NodesModifierDataBlock &item : Span(bake.data_blocks, bake.data_blocks_num)) {
|
||||
writer->write_string(item.id_name);
|
||||
writer->write_string(item.lib_name);
|
||||
}
|
||||
if (bake.packed) {
|
||||
writer->write_struct(bake.packed);
|
||||
writer->write_struct_array(bake.packed->meta_files_num, bake.packed->meta_files);
|
||||
writer->write_struct_array(bake.packed->blob_files_num, bake.packed->blob_files);
|
||||
const auto write_bake_file = [&](const NodesModifierBakeFile &bake_file) {
|
||||
writer->write_string(bake_file.name);
|
||||
if (bake_file.packed_file) {
|
||||
BKE_packedfile_blend_write(writer, bake_file.packed_file);
|
||||
}
|
||||
};
|
||||
for (const NodesModifierBakeFile &meta_file :
|
||||
Span{bake.packed->meta_files, bake.packed->meta_files_num}) {
|
||||
write_bake_file(meta_file);
|
||||
}
|
||||
for (const NodesModifierBakeFile &blob_file :
|
||||
Span{bake.packed->blob_files, bake.packed->blob_files_num}) {
|
||||
write_bake_file(blob_file);
|
||||
}
|
||||
}
|
||||
}
|
||||
writer->write_struct_array(nmd.panels_num, nmd.panels);
|
||||
}
|
||||
|
||||
void nodes_modifier_storage_read(BlendDataReader *reader, NodesModifierData &nmd)
|
||||
{
|
||||
BLO_read_string(reader, &nmd.bake_directory);
|
||||
BLO_read_array_and_validate_size(reader, &nmd.bakes, &nmd.bakes_num);
|
||||
if (nmd.bakes_num > 0 && nmd.bakes == nullptr) {
|
||||
nmd.bakes_num = 0;
|
||||
BLI_assert_unreachable();
|
||||
}
|
||||
for (NodesModifierBake &bake : MutableSpan(nmd.bakes, nmd.bakes_num)) {
|
||||
BLO_read_string(reader, &bake.directory);
|
||||
BLO_read_array_and_validate_size(reader, &bake.data_blocks, &bake.data_blocks_num);
|
||||
for (NodesModifierDataBlock &data_block : MutableSpan(bake.data_blocks, bake.data_blocks_num)) {
|
||||
BLO_read_string(reader, &data_block.id_name);
|
||||
BLO_read_string(reader, &data_block.lib_name);
|
||||
}
|
||||
BLO_read_struct(reader, NodesModifierPackedBake, &bake.packed);
|
||||
if (bake.packed) {
|
||||
BLO_read_array_and_validate_size(reader, &bake.packed->meta_files, &bake.packed->meta_files_num);
|
||||
BLO_read_array_and_validate_size(reader, &bake.packed->blob_files, &bake.packed->blob_files_num);
|
||||
const auto read_bake_file = [&](NodesModifierBakeFile &bake_file) {
|
||||
BLO_read_string(reader, &bake_file.name);
|
||||
if (bake_file.packed_file) {
|
||||
BKE_packedfile_blend_read(reader, &bake_file.packed_file, "");
|
||||
}
|
||||
};
|
||||
for (NodesModifierBakeFile &meta_file :
|
||||
MutableSpan{bake.packed->meta_files, bake.packed->meta_files_num}) {
|
||||
read_bake_file(meta_file);
|
||||
}
|
||||
for (NodesModifierBakeFile &blob_file :
|
||||
MutableSpan{bake.packed->blob_files, bake.packed->blob_files_num}) {
|
||||
read_bake_file(blob_file);
|
||||
}
|
||||
}
|
||||
}
|
||||
BLO_read_array_and_validate_size(reader, &nmd.panels, &nmd.panels_num);
|
||||
}
|
||||
|
||||
void nodes_modifier_storage_copy(const NodesModifierData &source, NodesModifierData &target)
|
||||
{
|
||||
if (source.bakes) {
|
||||
target.bakes = MEM_dupalloc(source.bakes);
|
||||
for (const int i : IndexRange(source.bakes_num)) {
|
||||
NodesModifierBake &bake = target.bakes[i];
|
||||
if (bake.directory) {
|
||||
bake.directory = BLI_strdup(bake.directory);
|
||||
}
|
||||
if (bake.data_blocks) {
|
||||
bake.data_blocks = MEM_dupalloc(bake.data_blocks);
|
||||
for (const int j : IndexRange(bake.data_blocks_num)) {
|
||||
NodesModifierDataBlock &data_block = bake.data_blocks[j];
|
||||
if (data_block.id_name) {
|
||||
data_block.id_name = BLI_strdup(data_block.id_name);
|
||||
}
|
||||
if (data_block.lib_name) {
|
||||
data_block.lib_name = BLI_strdup(data_block.lib_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
nodes_modifier_packed_bake_copy(bake, source.bakes[i]);
|
||||
}
|
||||
}
|
||||
if (source.panels) {
|
||||
target.panels = MEM_dupalloc(source.panels);
|
||||
}
|
||||
}
|
||||
|
||||
void nodes_modifier_storage_free(NodesModifierData &nmd)
|
||||
{
|
||||
for (NodesModifierBake &bake : MutableSpan(nmd.bakes, nmd.bakes_num)) {
|
||||
nodes_modifier_bake_destruct(&bake, false);
|
||||
}
|
||||
MEM_SAFE_DELETE(nmd.bakes);
|
||||
MEM_SAFE_DELETE(nmd.panels);
|
||||
MEM_SAFE_DELETE(nmd.bake_directory);
|
||||
}
|
||||
|
||||
} // namespace blender
|
||||
@@ -54,6 +54,7 @@
|
||||
#include "UI_resources.hh"
|
||||
|
||||
#include "MOD_modifiertypes.hh"
|
||||
#include "MOD_nodes_storage.hh"
|
||||
|
||||
namespace blender {
|
||||
|
||||
@@ -71,30 +72,31 @@ static void copy_data(const ModifierData *md, ModifierData *target, const int fl
|
||||
|
||||
destination->bake_directory = source->bake_directory ? BLI_strdup(source->bake_directory) :
|
||||
nullptr;
|
||||
destination->bakes = nullptr;
|
||||
destination->bakes_num = 0;
|
||||
destination->panels = source->panels ? MEM_dupalloc(source->panels) : nullptr;
|
||||
nodes_modifier_storage_copy(*source, *destination);
|
||||
destination->runtime = nullptr;
|
||||
}
|
||||
|
||||
static void free_data(ModifierData *md)
|
||||
{
|
||||
NodesModifierData *nmd = reinterpret_cast<NodesModifierData *>(md);
|
||||
MEM_SAFE_DELETE(nmd->bakes);
|
||||
MEM_SAFE_DELETE(nmd->panels);
|
||||
MEM_SAFE_DELETE(nmd->bake_directory);
|
||||
nodes_modifier_storage_free(*nmd);
|
||||
}
|
||||
|
||||
static void blend_write(BlendWriter *writer, const ID *, const ModifierData *md)
|
||||
{
|
||||
const NodesModifierData *nmd = reinterpret_cast<const NodesModifierData *>(md);
|
||||
writer->write_struct(nmd);
|
||||
nodes_modifier_storage_write(writer, *nmd);
|
||||
}
|
||||
|
||||
static void blend_read(BlendDataReader *reader, ModifierData *md)
|
||||
{
|
||||
NodesModifierData *nmd = reinterpret_cast<NodesModifierData *>(md);
|
||||
BLO_read_string(reader, &nmd->bake_directory);
|
||||
nmd->settings_legacy.properties = nullptr;
|
||||
|
||||
/* The bounded Web evaluator does not consume simulations, but all serialized
|
||||
* pointers must still be remapped before the modifier is copied by Depsgraph. */
|
||||
BLO_read_array_and_validate_size(reader, &nmd->bakes, &nmd->bakes_num);
|
||||
BLO_read_array_and_validate_size(reader, &nmd->panels, &nmd->panels_num);
|
||||
nodes_modifier_storage_read(reader, *nmd);
|
||||
nmd->runtime = nullptr;
|
||||
}
|
||||
|
||||
@@ -102,6 +104,11 @@ static void foreach_ID_link(ModifierData *md, Object *object, IDWalkFunc walk, v
|
||||
{
|
||||
NodesModifierData *nmd = reinterpret_cast<NodesModifierData *>(md);
|
||||
walk(user_data, object, reinterpret_cast<ID **>(&nmd->node_group), IDWALK_CB_USER);
|
||||
for (NodesModifierBake &bake : MutableSpan(nmd->bakes, nmd->bakes_num)) {
|
||||
for (NodesModifierDataBlock &data_block : MutableSpan(bake.data_blocks, bake.data_blocks_num)) {
|
||||
walk(user_data, object, &data_block.id, IDWALK_CB_USER);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void update_depsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
|
||||
@@ -929,7 +936,7 @@ ModifierTypeInfo modifierType_Nodes = {
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
/*panel_register*/ nullptr,
|
||||
/*blend_write*/ nullptr,
|
||||
/*blend_write*/ blend_write,
|
||||
/*blend_read*/ blend_read,
|
||||
/*foreach_cache*/ nullptr,
|
||||
/*foreach_working_space_color*/ nullptr,
|
||||
|
||||
@@ -252,13 +252,6 @@ static void blend_read(BlendDataReader *reader, ModifierData *md)
|
||||
psmd->mesh_original = nullptr;
|
||||
/* This is written as part of ob->particlesystem. */
|
||||
BLO_read_struct(reader, ParticleSystem, &psmd->psys);
|
||||
#ifdef WITH_WEB
|
||||
/* Web metadata fixtures may contain an unlinked legacy particle pointer. Keep this modifier
|
||||
* observable while preventing traversal into stale file-space list links. */
|
||||
psmd->psys = nullptr;
|
||||
psmd->modifier.next = nullptr;
|
||||
psmd->modifier.prev = nullptr;
|
||||
#endif
|
||||
psmd->flag &= ~eParticleSystemFlag_psys_updated;
|
||||
psmd->flag |= eParticleSystemFlag_file_loaded;
|
||||
}
|
||||
@@ -293,7 +286,11 @@ ModifierTypeInfo modifierType_ParticleSystem = {
|
||||
/*foreach_ID_link*/ nullptr,
|
||||
/*foreach_tex_link*/ nullptr,
|
||||
/*free_runtime_data*/ nullptr,
|
||||
#ifdef WITH_WEB
|
||||
/*panel_register*/ nullptr,
|
||||
#else
|
||||
/*panel_register*/ panel_register,
|
||||
#endif
|
||||
/*blend_write*/ nullptr,
|
||||
/*blend_read*/ blend_read,
|
||||
/*foreach_cache*/ nullptr,
|
||||
|
||||
@@ -39,8 +39,7 @@
|
||||
namespace blender {
|
||||
|
||||
#ifdef WITH_WEB
|
||||
/* Web keeps simulation modifiers metadata-only, but the concrete DNA type is
|
||||
* required so BLO_write_file serializes the same block layout it read. */
|
||||
/* Unported simulation modifiers retain their concrete DNA layouts for serialization. */
|
||||
static bool web_simulation_modifier_disabled(const Scene * /*scene*/,
|
||||
ModifierData * /*md*/,
|
||||
const bool /*use_render_params*/)
|
||||
@@ -68,8 +67,6 @@ static ModifierTypeInfo web_simulation_modifier_type(const char *idname,
|
||||
|
||||
ModifierTypeInfo modifierType_Softbody = web_simulation_modifier_type(
|
||||
"Softbody", "SoftbodyModifierData", sizeof(SoftbodyModifierData), ICON_MOD_SOFT);
|
||||
ModifierTypeInfo modifierType_Cloth = web_simulation_modifier_type(
|
||||
"Cloth", "ClothModifierData", sizeof(ClothModifierData), ICON_MOD_CLOTH);
|
||||
ModifierTypeInfo modifierType_Collision = web_simulation_modifier_type(
|
||||
"Collision", "CollisionModifierData", sizeof(CollisionModifierData), ICON_MOD_PHYSICS);
|
||||
#endif
|
||||
@@ -266,11 +263,12 @@ void modifier_type_init(ModifierTypeInfo *types[])
|
||||
INIT_TYPE(EdgeSplit);
|
||||
INIT_TYPE(Armature);
|
||||
INIT_TYPE(Hook);
|
||||
/* These simulation modifiers remain metadata-only in the Web evaluator,
|
||||
* but must retain their concrete DNA layouts when Main is serialized. */
|
||||
/* Unported simulation types retain their concrete DNA layouts. */
|
||||
INIT_TYPE(Softbody);
|
||||
INIT_TYPE(Cloth);
|
||||
INIT_TYPE(Collision);
|
||||
INIT_TYPE(Cloth);
|
||||
INIT_TYPE(Fluid);
|
||||
INIT_TYPE(ParticleSystem);
|
||||
INIT_TYPE(Boolean);
|
||||
INIT_TYPE(MeshDeform);
|
||||
INIT_TYPE(Nodes);
|
||||
@@ -343,6 +341,8 @@ void modifier_type_init(ModifierTypeInfo *types[])
|
||||
INIT_TYPE(VolumeDisplace);
|
||||
INIT_TYPE(VolumeToMesh);
|
||||
INIT_TYPE(Nodes);
|
||||
#endif
|
||||
/* Keep Grease Pencil data ownership and blend callbacks available in Web builds. */
|
||||
INIT_TYPE(GreasePencilOpacity);
|
||||
INIT_TYPE(GreasePencilSubdiv);
|
||||
INIT_TYPE(GreasePencilColor);
|
||||
@@ -369,7 +369,6 @@ void modifier_type_init(ModifierTypeInfo *types[])
|
||||
INIT_TYPE(GreasePencilShrinkwrap);
|
||||
INIT_TYPE(GreasePencilBuild);
|
||||
INIT_TYPE(GreasePencilTexture);
|
||||
#endif
|
||||
#undef INIT_TYPE
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user