In Geometry Nodes a geometry is represented by a `GeometrySet`. This is a container that can contain one geometry of each of the supported types (mesh, curves, volume, grease pencil, pointcloud, instances). It's possible for a `GeometrySet` to contain e.g. a mesh and a point cloud. This patch creates a Python wrapper for the built-in `GeometrySet`. For now, it's main purpose is to consume the complete evaluated geometry of an object without having to go through complex hoops via `depsgraph.object_instances`. It also also allows retrieving instances that have been created with legacy instancing systems such as dupli-verts or particles. In the future, the `GeometrySet` API could also be used for more kinds of geometry processing from Python, similar to how we use `GeometrySet` internally as generic geometry storage. Since we can't really have constness guarantees in Python currently, it's enforced that the `GeometrySet` wrapper always has its own copy of each geometry type (so e.g. it does not share a `Mesh` data-block pointer with any other place in Blender). Without the copy, changes to the mesh in the geometry set would also affect the evaluated geometry that Blender sees. The copy has a small cost, but typically the overhead should be low, because attributes and other run-time data can still be shared. This should be entirely thread-safe, assuming that no code modifies implicitly shared data, which is forbidden. For historic reasons there are still cases like #132423 where this assumption does not hold in all cases. Those cases should be fixed. To my knowledge, this patch does not introduce any new such issues or makes existing issues worse. Pull Request: https://projects.blender.org/blender/blender/pulls/135318
387 lines
7.3 KiB
CMake
387 lines
7.3 KiB
CMake
# SPDX-FileCopyrightText: 2006 Blender Authors
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
set(INC
|
|
..
|
|
../../editors/include
|
|
../../imbuf/intern/oiio
|
|
../../makesrna
|
|
../../../../intern/mantaflow/extern
|
|
../../../../intern/opencolorio
|
|
# RNA_prototypes.hh
|
|
${CMAKE_BINARY_DIR}/source/blender/makesrna
|
|
)
|
|
|
|
set(INC_SYS
|
|
${PYTHON_INCLUDE_DIRS}
|
|
)
|
|
|
|
set(SRC
|
|
bpy.cc
|
|
bpy_app.cc
|
|
bpy_app_alembic.cc
|
|
bpy_app_build_options.cc
|
|
bpy_app_ffmpeg.cc
|
|
bpy_app_handlers.cc
|
|
bpy_app_icons.cc
|
|
bpy_app_ocio.cc
|
|
bpy_app_oiio.cc
|
|
bpy_app_opensubdiv.cc
|
|
bpy_app_openvdb.cc
|
|
bpy_app_sdl.cc
|
|
bpy_app_timers.cc
|
|
bpy_app_translations.cc
|
|
bpy_app_usd.cc
|
|
bpy_capi_utils.cc
|
|
bpy_cli_command.cc
|
|
bpy_driver.cc
|
|
bpy_geometry_set.cc
|
|
bpy_gizmo_wrap.cc
|
|
bpy_interface.cc
|
|
bpy_interface_atexit.cc
|
|
bpy_interface_run.cc
|
|
bpy_intern_string.cc
|
|
bpy_library_load.cc
|
|
bpy_library_write.cc
|
|
bpy_msgbus.cc
|
|
bpy_operator.cc
|
|
bpy_operator_wrap.cc
|
|
bpy_path.cc
|
|
bpy_props.cc
|
|
bpy_rna.cc
|
|
bpy_rna_anim.cc
|
|
bpy_rna_array.cc
|
|
bpy_rna_callback.cc
|
|
bpy_rna_context.cc
|
|
bpy_rna_data.cc
|
|
bpy_rna_driver.cc
|
|
bpy_rna_gizmo.cc
|
|
bpy_rna_id_collection.cc
|
|
bpy_rna_operator.cc
|
|
bpy_rna_text.cc
|
|
bpy_rna_types_capi.cc
|
|
bpy_rna_ui.cc
|
|
bpy_traceback.cc
|
|
bpy_utils_previews.cc
|
|
bpy_utils_units.cc
|
|
stubs.cc
|
|
|
|
bpy.hh
|
|
bpy_app.hh
|
|
bpy_app_alembic.hh
|
|
bpy_app_build_options.hh
|
|
bpy_app_ffmpeg.hh
|
|
bpy_app_handlers.hh
|
|
bpy_app_icons.hh
|
|
bpy_app_ocio.hh
|
|
bpy_app_oiio.hh
|
|
bpy_app_opensubdiv.hh
|
|
bpy_app_openvdb.hh
|
|
bpy_app_sdl.hh
|
|
bpy_app_timers.hh
|
|
bpy_app_translations.hh
|
|
bpy_app_usd.hh
|
|
bpy_capi_utils.hh
|
|
bpy_cli_command.hh
|
|
bpy_driver.hh
|
|
bpy_geometry_set.hh
|
|
bpy_gizmo_wrap.hh
|
|
bpy_intern_string.hh
|
|
bpy_library.hh
|
|
bpy_msgbus.hh
|
|
bpy_operator.hh
|
|
bpy_operator_wrap.hh
|
|
bpy_path.hh
|
|
bpy_props.hh
|
|
bpy_rna.hh
|
|
bpy_rna_anim.hh
|
|
bpy_rna_callback.hh
|
|
bpy_rna_context.hh
|
|
bpy_rna_data.hh
|
|
bpy_rna_driver.hh
|
|
bpy_rna_gizmo.hh
|
|
bpy_rna_id_collection.hh
|
|
bpy_rna_operator.hh
|
|
bpy_rna_text.hh
|
|
bpy_rna_types_capi.hh
|
|
bpy_rna_ui.hh
|
|
bpy_traceback.hh
|
|
bpy_utils_previews.hh
|
|
bpy_utils_units.hh
|
|
../BPY_extern.hh
|
|
../BPY_extern_clog.hh
|
|
../BPY_extern_python.hh
|
|
../BPY_extern_run.hh
|
|
)
|
|
|
|
set(LIB
|
|
PRIVATE bf::blenkernel
|
|
PRIVATE bf::blenlib
|
|
PRIVATE bf::blenloader
|
|
PRIVATE bf::blentranslation
|
|
PRIVATE bf::depsgraph
|
|
PRIVATE bf::dna
|
|
bf_editor_animation
|
|
bf_editor_interface
|
|
bf_editor_space_api
|
|
PRIVATE bf::gpu
|
|
PRIVATE bf::imbuf
|
|
PRIVATE bf::intern::clog
|
|
PRIVATE bf::intern::guardedalloc
|
|
PRIVATE bf::animrig
|
|
bf_python_gpu
|
|
|
|
${PYTHON_LINKFLAGS}
|
|
${PYTHON_LIBRARIES}
|
|
PRIVATE bf::windowmanager
|
|
)
|
|
|
|
# Only to check if `buildinfo` is available.
|
|
if(WITH_BUILDINFO)
|
|
add_definitions(-DBUILD_DATE)
|
|
endif()
|
|
|
|
if(WITH_INSTALL_PORTABLE)
|
|
add_definitions(-DWITH_INSTALL_PORTABLE)
|
|
endif()
|
|
|
|
if(WITH_PYTHON_MODULE)
|
|
add_definitions(-DWITH_PYTHON_MODULE)
|
|
endif()
|
|
|
|
|
|
# Find the SSL certificate for the portable Blender installation.
|
|
# Without this, the absolute path on the builder is used, causing HTTPS access to fail.
|
|
# For example `urllib.request.urlopen("https://projects.blender.org")` fails
|
|
# (or any other HTTPS site). see: #102300 for details.
|
|
# NOTE: that this isn't necessary on WIN32.
|
|
if(WITH_PYTHON AND WITH_PYTHON_INSTALL AND (APPLE OR WITH_INSTALL_PORTABLE) AND (NOT WIN32))
|
|
# - `PYTHON_SSL_CERT_FILE` absolute path to the PEM file.
|
|
find_python_module_file("certifi/cacert.pem" PYTHON_SSL_CERT_FILE _python_ssl_cert_file_relative)
|
|
mark_as_advanced(PYTHON_SSL_CERT_FILE)
|
|
if(PYTHON_SSL_CERT_FILE)
|
|
add_definitions(-DPYTHON_SSL_CERT_FILE="${_python_ssl_cert_file_relative}")
|
|
else()
|
|
message(WARNING
|
|
"Unable to find \"certifi/cacert.pem\" within \"${PYTHON_LIBPATH}\", "
|
|
"this build will not be able to use bundled certificates with the \"ssl\" module!"
|
|
)
|
|
endif()
|
|
unset(_python_ssl_cert_file_relative)
|
|
endif()
|
|
|
|
if(WITH_PYTHON_SAFETY)
|
|
add_definitions(-DWITH_PYTHON_SAFETY)
|
|
endif()
|
|
|
|
if(WITH_AUDASPACE)
|
|
# It's possible to build with AUDASPACE (for file IO) but without the `aud` Python API,
|
|
# when building without NUMPY so define both `WITH_AUDASPACE` & `DWITH_AUDASPACE_PY`.
|
|
add_definitions(-DWITH_AUDASPACE)
|
|
if(WITH_PYTHON_NUMPY)
|
|
add_definitions(-DWITH_AUDASPACE_PY)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_BULLET)
|
|
add_definitions(-DWITH_BULLET)
|
|
endif()
|
|
|
|
if(WITH_CODEC_FFMPEG)
|
|
list(APPEND INC_SYS
|
|
${FFMPEG_INCLUDE_DIRS}
|
|
)
|
|
list(APPEND LIB
|
|
${FFMPEG_LIBRARIES}
|
|
)
|
|
add_definitions(-DWITH_FFMPEG)
|
|
endif()
|
|
|
|
if(WITH_CODEC_SNDFILE)
|
|
add_definitions(-DWITH_SNDFILE)
|
|
endif()
|
|
|
|
if(WITH_CYCLES)
|
|
list(APPEND INC
|
|
../../../../intern/cycles/blender
|
|
)
|
|
list(APPEND LIB
|
|
bf_intern_cycles
|
|
)
|
|
add_definitions(-DWITH_CYCLES)
|
|
endif()
|
|
|
|
if(WITH_CYCLES_OSL)
|
|
add_definitions(-DWITH_CYCLES_OSL)
|
|
endif()
|
|
|
|
if(WITH_CYCLES_EMBREE)
|
|
add_definitions(-DWITH_CYCLES_EMBREE)
|
|
endif()
|
|
|
|
if(WITH_FREESTYLE)
|
|
list(APPEND INC
|
|
../../freestyle/intern/python
|
|
)
|
|
add_definitions(-DWITH_FREESTYLE)
|
|
endif()
|
|
|
|
if(WITH_IMAGE_CINEON)
|
|
add_definitions(-DWITH_CINEON)
|
|
endif()
|
|
|
|
if(WITH_IMAGE_OPENEXR)
|
|
add_definitions(-DWITH_OPENEXR)
|
|
endif()
|
|
|
|
if(WITH_IMAGE_OPENJPEG)
|
|
add_definitions(-DWITH_OPENJPEG)
|
|
endif()
|
|
|
|
if(WITH_WEBP)
|
|
add_definitions(-DWITH_WEBP)
|
|
endif()
|
|
|
|
if(WITH_INPUT_NDOF)
|
|
add_definitions(-DWITH_INPUT_NDOF)
|
|
endif()
|
|
|
|
if(WITH_INTERNATIONAL)
|
|
add_definitions(-DWITH_INTERNATIONAL)
|
|
endif()
|
|
|
|
if(WITH_OPENAL)
|
|
add_definitions(-DWITH_OPENAL)
|
|
endif()
|
|
|
|
if(WITH_OPENSUBDIV)
|
|
add_definitions(-DWITH_OPENSUBDIV)
|
|
endif()
|
|
|
|
if(WITH_SDL)
|
|
list(APPEND INC_SYS
|
|
${SDL_INCLUDE_DIR}
|
|
)
|
|
list(APPEND LIB
|
|
${SDL_LIBRARY}
|
|
)
|
|
add_definitions(-DWITH_SDL)
|
|
endif()
|
|
|
|
if(WITH_JACK)
|
|
add_definitions(-DWITH_JACK)
|
|
endif()
|
|
|
|
if(WITH_COREAUDIO)
|
|
add_definitions(-DWITH_COREAUDIO)
|
|
endif()
|
|
|
|
if(WITH_LIBMV)
|
|
add_definitions(-DWITH_LIBMV)
|
|
endif()
|
|
|
|
if(WITH_PULSEAUDIO)
|
|
add_definitions(-DWITH_PULSEAUDIO)
|
|
endif()
|
|
|
|
if(WITH_WASAPI)
|
|
add_definitions(-DWITH_WASAPI)
|
|
endif()
|
|
|
|
if(WITH_MOD_OCEANSIM)
|
|
add_definitions(-DWITH_OCEANSIM)
|
|
endif()
|
|
|
|
if(WITH_MOD_REMESH)
|
|
add_definitions(-DWITH_MOD_REMESH)
|
|
endif()
|
|
|
|
if(WITH_MOD_FLUID)
|
|
add_definitions(-DWITH_FLUID)
|
|
endif()
|
|
|
|
if(WITH_OPENCOLLADA)
|
|
add_definitions(-DWITH_COLLADA)
|
|
endif()
|
|
|
|
if(WITH_IO_WAVEFRONT_OBJ)
|
|
add_definitions(-DWITH_IO_WAVEFRONT_OBJ)
|
|
endif()
|
|
|
|
if(WITH_IO_PLY)
|
|
add_definitions(-DWITH_IO_PLY)
|
|
endif()
|
|
|
|
if(WITH_IO_STL)
|
|
add_definitions(-DWITH_IO_STL)
|
|
endif()
|
|
|
|
if(WITH_IO_GREASE_PENCIL)
|
|
add_definitions(-DWITH_IO_GREASE_PENCIL)
|
|
endif()
|
|
|
|
if(WITH_ALEMBIC)
|
|
add_definitions(-DWITH_ALEMBIC)
|
|
endif()
|
|
|
|
if(WITH_OPENCOLORIO)
|
|
add_definitions(-DWITH_OCIO)
|
|
endif()
|
|
|
|
if(WITH_OPENVDB)
|
|
add_definitions(-DWITH_OPENVDB)
|
|
list(APPEND INC
|
|
../../../../intern/openvdb
|
|
)
|
|
endif()
|
|
|
|
if(WITH_ALEMBIC)
|
|
add_definitions(-DWITH_ALEMBIC)
|
|
list(APPEND INC
|
|
../../io/alembic
|
|
)
|
|
endif()
|
|
|
|
if(WITH_USD)
|
|
add_definitions(-DWITH_USD)
|
|
list(APPEND INC
|
|
../../io/usd
|
|
)
|
|
endif()
|
|
|
|
if(WITH_OPENSUBDIV)
|
|
add_definitions(-DWITH_OPENSUBDIV)
|
|
list(APPEND INC
|
|
../../../../intern/opensubdiv
|
|
)
|
|
endif()
|
|
|
|
if(WITH_XR_OPENXR)
|
|
add_definitions(-DWITH_XR_OPENXR)
|
|
endif()
|
|
|
|
if(WITH_POTRACE)
|
|
add_definitions(-DWITH_POTRACE)
|
|
endif()
|
|
|
|
if(WITH_PUGIXML)
|
|
add_definitions(-DWITH_PUGIXML)
|
|
endif()
|
|
|
|
if(WITH_HARU)
|
|
add_definitions(-DWITH_HARU)
|
|
endif()
|
|
|
|
if(WITH_HYDRA)
|
|
list(APPEND LIB
|
|
bf_render_hydra
|
|
)
|
|
add_definitions(-DWITH_HYDRA)
|
|
endif()
|
|
|
|
blender_add_lib(bf_python "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
|
|
|
|
# RNA_prototypes.hh
|
|
add_dependencies(bf_python bf_rna)
|