Files
test2/source/blender/modifiers/CMakeLists.txt
YimingWu 9cb4d3bbff Fix #128887: LineArt: Prevent iterating over not evaluated objects
Line art uses `DEG_OBJECT_ITER_BEGIN` to load all objects that has a
geometry in the scene, which is kind of a hack since the beginning. This
left potential problem where the iterator could go through some objects
that line art didn't have a dependency on (e.g. other grease pencil
objects):

- Since those "other" objects often evaluates fast enough, so
line art always end up having valid data from everywhere after lengthy
mesh evaluation prior to itself, so this problem was not prominent.
- However, in rare cases, there are other objects that takes a lot of
time to evaluate, this causes line art to potentially iterate to objects
that are still invalid.

This fix will build a `Vector<Object *>` during `update_depsgraph`, and
use such list inside `DEGObjectIterSettings` to filter out objects that
the modifier isn't dependent on, thus remove the possibility of reading
objects that hasn't been evaluated.

Since Line art will not add grease pencil objects as potential geometry
inputs, all mesh/curve types of geometries generated by geometry nodes
modifier directly inside other grease pencil objects won't be loaded.
This can be mitigated by having a third mesh object that reads the
result from the grease pencil object that generates geometries, then
directly output them for line art to read.

This also fixes #128888.

Pull Request: https://projects.blender.org/blender/blender/pulls/128890
2024-10-16 15:15:11 +02:00

250 lines
5.4 KiB
CMake

# SPDX-FileCopyrightText: 2006 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(INC
.
intern
intern/lineart
../blenkernel
../blenloader
../blentranslation
../bmesh
../editors/include
../functions
../geometry
../makesrna
../nodes
../render
../windowmanager
../../../intern/eigen
# RNA_prototypes.hh
${CMAKE_BINARY_DIR}/source/blender/makesrna
)
set(INC_SYS
${ZLIB_INCLUDE_DIRS}
)
set(SRC
intern/MOD_armature.cc
intern/MOD_array.cc
intern/MOD_bevel.cc
intern/MOD_boolean.cc
intern/MOD_build.cc
intern/MOD_cast.cc
intern/MOD_cloth.cc
intern/MOD_collision.cc
intern/MOD_correctivesmooth.cc
intern/MOD_curve.cc
intern/MOD_datatransfer.cc
intern/MOD_decimate.cc
intern/MOD_displace.cc
intern/MOD_dynamicpaint.cc
intern/MOD_edgesplit.cc
intern/MOD_explode.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_laplaciandeform.cc
intern/MOD_laplaciansmooth.cc
intern/MOD_lattice.cc
intern/MOD_lineart.cc
intern/MOD_mask.cc
intern/MOD_mesh_to_volume.cc
intern/MOD_meshcache.cc
intern/MOD_meshcache_mdd.cc
intern/MOD_meshcache_pc2.cc
intern/MOD_meshcache_util.cc
intern/MOD_meshdeform.cc
intern/MOD_meshsequencecache.cc
intern/MOD_mirror.cc
intern/MOD_multires.cc
intern/MOD_nodes.cc
intern/MOD_none.cc
intern/MOD_normal_edit.cc
intern/MOD_ocean.cc
intern/MOD_particleinstance.cc
intern/MOD_particlesystem.cc
intern/MOD_remesh.cc
intern/MOD_screw.cc
intern/MOD_shapekey.cc
intern/MOD_shrinkwrap.cc
intern/MOD_simpledeform.cc
intern/MOD_skin.cc
intern/MOD_smooth.cc
intern/MOD_softbody.cc
intern/MOD_solidify.cc
intern/MOD_solidify_extrude.cc
intern/MOD_solidify_nonmanifold.cc
intern/MOD_subsurf.cc
intern/MOD_surface.cc
intern/MOD_surfacedeform.cc
intern/MOD_triangulate.cc
intern/MOD_ui_common.cc
intern/MOD_util.cc
intern/MOD_uvproject.cc
intern/MOD_uvwarp.cc
intern/MOD_volume_displace.cc
intern/MOD_volume_to_mesh.cc
intern/MOD_warp.cc
intern/MOD_wave.cc
intern/MOD_weighted_normal.cc
intern/MOD_weightvg_util.cc
intern/MOD_weightvgedit.cc
intern/MOD_weightvgmix.cc
intern/MOD_weightvgproximity.cc
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
MOD_nodes.hh
intern/MOD_grease_pencil_util.hh
intern/MOD_meshcache_util.hh
intern/MOD_solidify_util.hh
intern/MOD_ui_common.hh
intern/MOD_util.hh
intern/MOD_weightvg_util.hh
intern/lineart/MOD_lineart.hh
intern/lineart/lineart_intern.hh
)
set(LIB
PRIVATE bf::blenfont
bf_blenkernel
PRIVATE bf::blenlib
PRIVATE bf::depsgraph
PUBLIC bf::dna
PRIVATE bf::intern::guardedalloc
PRIVATE bf::extern::fmtlib
)
if(WITH_ALEMBIC)
add_definitions(-DWITH_ALEMBIC)
list(APPEND INC
../io/alembic
)
list(APPEND LIB
bf_io_alembic
)
endif()
if(WITH_USD)
add_definitions(-DWITH_USD)
list(APPEND INC
../io/usd
)
list(APPEND LIB
bf_io_usd
)
endif()
if(WITH_MOD_REMESH)
list(APPEND INC
../../../intern/dualcon
)
list(APPEND LIB
bf_intern_dualcon
)
add_definitions(-DWITH_MOD_REMESH)
endif()
if(WITH_MOD_FLUID)
add_definitions(-DWITH_FLUID)
endif()
if(WITH_MOD_OCEANSIM)
add_definitions(-DWITH_OCEANSIM)
endif()
if(WITH_OPENSUBDIV)
add_definitions(-DWITH_OPENSUBDIV)
endif()
if(WITH_BULLET)
list(APPEND LIB
${BULLET_LIBRARIES}
)
add_definitions(-DWITH_BULLET)
endif()
# To disable adaptive subdivision test in subsurf UI without cycles
if(WITH_CYCLES)
add_definitions(-DWITH_CYCLES)
endif()
if(WITH_GMP)
add_definitions(-DWITH_GMP)
list(APPEND INC_SYS
${GMP_INCLUDE_DIRS}
)
list(APPEND LIB
${GMP_LIBRARIES}
)
endif()
if(WITH_TBB)
if(WIN32)
# TBB includes Windows.h which will define min/max macros
# that will collide with the STL versions.
add_definitions(-DNOMINMAX)
endif()
endif()
if(WITH_OPENVDB)
list(APPEND INC
../../../intern/openvdb
)
list(APPEND INC_SYS
${OPENVDB_INCLUDE_DIRS}
)
list(APPEND LIB
bf_intern_openvdb
${OPENVDB_LIBRARIES}
)
add_definitions(-DWITH_OPENVDB ${OPENVDB_DEFINITIONS})
endif()
if(WITH_EXPERIMENTAL_FEATURES)
add_definitions(-DWITH_SIMULATION_DATABLOCK)
endif()
# So we can have special tricks in modifier system.
blender_add_lib(bf_modifiers "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
# RNA_prototypes.hh
add_dependencies(bf_modifiers bf_rna)