Files
test2/source/blender/nodes/CMakeLists.txt
Jacques Lucke 5457cca3de Nodes: auto-hide unused inputs if usage depends on menu
Previously, when a socket was detected to be unused, it was just grayed out.
This patch adds support for automatically hiding unused sockets based on this
convention: Menu inputs control visibility while other inputs only control
whether something is grayed out.

More specifically, an input is visible if any of these conditions is met:
* It affects the output currently.
* It never affects the output. In this case its usage does not depend on any
  menu input.
* It is used if all non-menu inputs are considered to be unknown.

In the future, we could support customizing which inputs are allowed to control
visibility. For now it's good to use the convention that Blender generally
follows itself.

As before, panels are grayed out if they only contain grayed out sockets and
panels are hidden when they don't contain any visible sockets.

Hiding inputs works in group nodes, the Geometry Nodes modifier and node
operators. In theory it will work for all node tree types, but since only
Geometry Nodes supports the Menu Switch node currently, this patch currently
only makes a difference there.

The implementation reuses the existing `SocketUsageInferencer` with a different
sets of inputs. So no new core-inferencing logic was needed.

Design task: #132706.

Pull Request: https://projects.blender.org/blender/blender/pulls/138186
2025-05-22 04:48:43 +02:00

242 lines
5.3 KiB
CMake

# SPDX-FileCopyrightText: 2006 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(DISCOVER_NODES_PATH ${CMAKE_CURRENT_SOURCE_DIR}/intern/discover_nodes.py)
# Creates a library with the given name that exposes one function which calls
# the register functions of all nodes in the provided source files.
function(add_node_discovery
lib_name
sources
output_file
output_function
)
set(extra_args "")
# See `add_definitions(-DUSE_MAKEFILE_WORKAROUND)` comment for `makesrna`.
if(CMAKE_GENERATOR MATCHES ".*Unix Makefiles")
set(extra_args "--use-makefile-workaround")
endif()
add_custom_command(
OUTPUT
${output_file}
COMMAND
${PYTHON_EXECUTABLE}
${DISCOVER_NODES_PATH}
${CMAKE_CURRENT_SOURCE_DIR}
${output_file}
${output_function}
${sources}
${extra_args}
DEPENDS
${SRC}
${DISCOVER_NODES_PATH}
)
set_source_files_properties(${output_file} PROPERTIES GENERATED TRUE)
add_library(${lib_name} ${output_file})
endfunction()
add_subdirectory(composite)
add_subdirectory(function)
add_subdirectory(geometry)
add_subdirectory(shader)
add_subdirectory(texture)
set(INC
PUBLIC .
composite
function
geometry
intern
shader
texture
geometry/include
../animrig
../editors/include
../depsgraph
../makesrna
../modifiers
# RNA_prototypes.hh
${CMAKE_BINARY_DIR}/source/blender/makesrna
)
set(INC_SYS
)
set(SRC
intern/derived_node_tree.cc
intern/geometry_nodes_bundle.cc
intern/geometry_nodes_closure.cc
intern/geometry_nodes_closure_zone.cc
intern/geometry_nodes_dependencies.cc
intern/geometry_nodes_execute.cc
intern/geometry_nodes_foreach_geometry_element_zone.cc
intern/geometry_nodes_gizmos.cc
intern/geometry_nodes_lazy_function.cc
intern/geometry_nodes_log.cc
intern/geometry_nodes_repeat_zone.cc
intern/inverse_eval.cc
intern/math_functions.cc
intern/node_common.cc
intern/node_declaration.cc
intern/node_exec.cc
intern/node_geometry_exec.cc
intern/node_multi_function.cc
intern/node_register.cc
intern/node_rna_define.cc
intern/node_socket.cc
intern/node_socket_declarations.cc
intern/node_util.cc
intern/partial_eval.cc
intern/socket_search_link.cc
intern/socket_usage_inference.cc
intern/value_elem.cc
intern/volume_grid_function_eval.cc
NOD_common.hh
NOD_composite.hh
NOD_derived_node_tree.hh
NOD_geometry.hh
NOD_geometry_exec.hh
NOD_geometry_nodes_bundle.hh
NOD_geometry_nodes_bundle_fwd.hh
NOD_geometry_nodes_closure.hh
NOD_geometry_nodes_closure_eval.hh
NOD_geometry_nodes_closure_fwd.hh
NOD_geometry_nodes_closure_location.hh
NOD_geometry_nodes_dependencies.hh
NOD_geometry_nodes_execute.hh
NOD_geometry_nodes_gizmos.hh
NOD_geometry_nodes_lazy_function.hh
NOD_geometry_nodes_log.hh
NOD_inverse_eval_params.hh
NOD_inverse_eval_path.hh
NOD_inverse_eval_run.hh
NOD_math_functions.hh
NOD_multi_function.hh
NOD_node_declaration.hh
NOD_node_extra_info.hh
NOD_node_in_compute_context.hh
NOD_partial_eval.hh
NOD_register.hh
NOD_rna_define.hh
NOD_shader.h
NOD_socket.hh
NOD_socket_declarations.hh
NOD_socket_declarations_geometry.hh
NOD_socket_items.hh
NOD_socket_items_blend.hh
NOD_socket_items_ops.hh
NOD_socket_items_ui.hh
NOD_socket_search_link.hh
NOD_socket_usage_inference.hh
NOD_socket_usage_inference_fwd.hh
NOD_texture.h
NOD_value_elem.hh
NOD_value_elem_eval.hh
intern/node_common.h
intern/node_exec.hh
intern/node_util.hh
intern/volume_grid_function_eval.hh
)
set(LIB
PRIVATE bf::blenkernel
PRIVATE bf::blenlib
PRIVATE bf::blenloader
PRIVATE bf::blentranslation
PRIVATE bf::bmesh
PRIVATE bf::depsgraph
PRIVATE bf::dna
PRIVATE bf::functions
PRIVATE bf::geometry
PRIVATE bf::gpu
PRIVATE bf::imbuf
PRIVATE bf::intern::guardedalloc
bf_nodes_composite
bf_nodes_function
bf_nodes_geometry
bf_nodes_shader
bf_nodes_texture
PRIVATE bf::extern::fmtlib
PRIVATE bf::extern::xxhash
PRIVATE bf::render
PRIVATE bf::windowmanager
PRIVATE bf::intern::clog
)
if(WITH_BULLET)
list(APPEND INC_SYS
${BULLET_INCLUDE_DIRS}
../../../intern/rigidbody
)
list(APPEND LIB
${BULLET_LIBRARIES}
)
add_definitions(-DWITH_BULLET)
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_IMAGE_OPENEXR)
add_definitions(-DWITH_IMAGE_OPENEXR)
endif()
if(WITH_FREESTYLE)
add_definitions(-DWITH_FREESTYLE)
endif()
if(WITH_OPENSUBDIV)
add_definitions(-DWITH_OPENSUBDIV)
endif()
if(WITH_GMP)
add_definitions(-DWITH_GMP)
list(APPEND INC_SYS
${GMP_INCLUDE_DIRS}
)
list(APPEND LIB
${GMP_LIBRARIES}
)
endif()
if(WITH_OPENVDB)
list(APPEND INC
../../../intern/openvdb
)
list(APPEND INC_SYS
${OPENVDB_INCLUDE_DIRS}
)
add_definitions(-DWITH_OPENVDB ${OPENVDB_DEFINITIONS})
endif()
blender_add_lib(bf_nodes "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
add_library(bf::nodes ALIAS bf_nodes)
# RNA_prototypes.hh
add_dependencies(bf_nodes bf_rna)
if(WITH_GTESTS)
set(TEST_INC
)
set(TEST_SRC
intern/node_iterator_tests.cc
)
set(TEST_LIB
bf_nodes
)
blender_add_test_suite_lib(nodes "${TEST_SRC}" "${INC};${TEST_INC}" "${INC_SYS}" "${LIB}")
endif()