Merge branch 'master' into geometry-nodes-simulation

This commit is contained in:
Hans Goudey 2022-12-09 17:05:29 -06:00
commit ffe0db184a
63 changed files with 313 additions and 135 deletions

View File

@ -23,13 +23,11 @@ elseif(APPLE)
set(BOOST_BUILD_COMMAND ./b2)
set(BOOST_BUILD_OPTIONS toolset=clang-darwin cxxflags=${PLATFORM_CXXFLAGS} linkflags=${PLATFORM_LDFLAGS} visibility=global --disable-icu boost.locale.icu=off)
set(BOOST_HARVEST_CMD echo .)
set(BOOST_PATCH_COMMAND echo .)
else()
set(BOOST_HARVEST_CMD echo .)
set(BOOST_CONFIGURE_COMMAND ./bootstrap.sh)
set(BOOST_BUILD_COMMAND ./b2)
set(BOOST_BUILD_OPTIONS cxxflags=${PLATFORM_CXXFLAGS} --disable-icu boost.locale.icu=off)
set(BOOST_PATCH_COMMAND echo .)
endif()
set(JAM_FILE ${BUILD_DIR}/boost.user-config.jam)
@ -72,7 +70,7 @@ ExternalProject_Add(external_boost
URL_HASH ${BOOST_HASH_TYPE}=${BOOST_HASH}
PREFIX ${BUILD_DIR}/boost
UPDATE_COMMAND ""
PATCH_COMMAND ${BOOST_PATCH_COMMAND}
PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/boost/src/external_boost < ${PATCH_DIR}/boost.diff
CONFIGURE_COMMAND ${BOOST_CONFIGURE_COMMAND}
BUILD_COMMAND ${BOOST_BUILD_COMMAND} ${BOOST_BUILD_OPTIONS} -j${MAKE_THREADS} architecture=${BOOST_ARCHITECTURE} address-model=${BOOST_ADDRESS_MODEL} link=shared threading=multi ${BOOST_OPTIONS} --prefix=${LIBDIR}/boost install
BUILD_IN_SOURCE 1

View File

@ -63,6 +63,8 @@ endfunction()
# Ideally this would be done as part of the Blender build since it makes assumptions
# about where the files will be installed. However it would add patchelf as a new
# dependency for building.
#
# Also removes versioned symlinks, which give errors with macOS notarization.
if(APPLE)
set(set_rpath_cmd python3 ${CMAKE_CURRENT_SOURCE_DIR}/darwin/set_rpath.py @loader_path)
else()
@ -76,7 +78,11 @@ function(harvest_rpath_lib from to pattern)
cmake_policy(SET CMP0009 NEW)\n
file(GLOB_RECURSE shared_libs ${HARVEST_TARGET}/${to}/${pattern}) \n
foreach(f \${shared_libs}) \n
if(NOT IS_SYMLINK \${f})\n
if(IS_SYMLINK \${f})\n
if(APPLE)\n
file(REMOVE_RECURSE \${f})
endif()\n
else()\n
execute_process(COMMAND ${set_rpath_cmd} \${f}) \n
endif()\n
endforeach()")
@ -101,15 +107,21 @@ function(harvest_rpath_python from to pattern)
install(CODE "\
file(GLOB_RECURSE shared_libs ${HARVEST_TARGET}/${to}/${pattern}\.so*) \n
foreach(f \${shared_libs}) \n
get_filename_component(f_dir \${f} DIRECTORY) \n
file(RELATIVE_PATH relative_dir \${f_dir} ${HARVEST_TARGET}) \n
execute_process(COMMAND ${set_rpath_cmd}/\${relative_dir}../lib \${f}) \n
if(IS_SYMLINK \${f})\n
if(APPLE)\n
file(REMOVE_RECURSE \${f})
endif()\n
else()\n
get_filename_component(f_dir \${f} DIRECTORY) \n
file(RELATIVE_PATH relative_dir \${f_dir} ${HARVEST_TARGET}) \n
execute_process(COMMAND ${set_rpath_cmd}/\${relative_dir}../lib \${f}) \n
endif()\n
endforeach()")
endfunction()
harvest(alembic/include alembic/include "*.h")
harvest(alembic/lib/libAlembic.a alembic/lib/libAlembic.a)
harvest(alembic/bin alembic/bin "*")
harvest_rpath_bin(alembic/bin alembic/bin "*")
harvest(brotli/include brotli/include "*.h")
harvest(brotli/lib brotli/lib "*.a")
harvest(boost/include boost/include "*")
@ -151,7 +163,7 @@ harvest(llvm/lib llvm/lib "libLLVM*.a")
harvest(llvm/lib llvm/lib "libclang*.a")
harvest(llvm/lib/clang llvm/lib/clang "*.h")
if(APPLE)
harvest(openmp/lib openmp/lib "*")
harvest(openmp/lib openmp/lib "libomp.dylib")
harvest(openmp/include openmp/include "*.h")
endif()
if(BLENDER_PLATFORM_ARM)
@ -242,9 +254,8 @@ harvest(usd/lib/usd usd/lib/usd "*")
harvest_rpath_python(usd/lib/python/pxr python/lib/python${PYTHON_SHORT_VERSION}/site-packages/pxr "*")
harvest(usd/plugin usd/plugin "*")
harvest(materialx/include materialx/include "*.h")
harvest(materialx/lib materialx/lib "*")
harvest_rpath_lib(materialx/lib materialx/lib "*${SHAREDLIBEXT}*")
harvest(materialx/libraries materialx/libraries "*")
harvest(materialx/python materialx/python "*")
harvest(materialx/lib/cmake/MaterialX materialx/lib/cmake/MaterialX "*.cmake")
harvest_rpath_python(materialx/python/MaterialX python/lib/python${PYTHON_SHORT_VERSION}/site-packages/MaterialX "*")
# We do not need anything from the resources folder, but the MaterialX config

View File

@ -1,9 +1,19 @@
#!/usr/bin/env python3
# macOS utility to remove all rpaths and add a new one.
import os
import re
import subprocess
import sys
# Strip version numbers from dependenciesm macOS notarizatiom fails
# with version symlinks.
def strip_lib_version(name):
name = re.sub(r'(\.[0-9]+)+.dylib', '.dylib', name)
name = re.sub(r'(\.[0-9]+)+.so', '.so', name)
name = re.sub(r'(\.[0-9]+)+.cpython', '.cpython', name)
return name
rpath = sys.argv[1]
file = sys.argv[2]
@ -17,3 +27,18 @@ for i, token in enumerate(tokens):
subprocess.run(['install_name_tool', '-delete_rpath', old_rpath, file])
subprocess.run(['install_name_tool', '-add_rpath', rpath, file])
# Strip version from dependencies.
p = subprocess.run(['otool', '-L', file], capture_output=True)
tokens = p.stdout.split()
for i, token in enumerate(tokens):
token = token.decode("utf-8")
if token.startswith("@rpath"):
new_token = strip_lib_version(token)
subprocess.run(['install_name_tool', '-change', token, new_token, file])
# Strip version from library itself.
new_file = strip_lib_version(file)
new_id = '@rpath/' + os.path.basename(new_file)
os.rename(file, new_file)
subprocess.run(['install_name_tool', '-id', new_id, new_file])

View File

@ -0,0 +1,12 @@
--- a/boost/python//detail/wrap_python.hpp 2022-12-09 19:16:17
+++ b/boost/python//detail/wrap_python.hpp 2022-12-09 19:18:08
@@ -206,7 +206,8 @@
#ifdef DEBUG_UNDEFINED_FROM_WRAP_PYTHON_H
# undef DEBUG_UNDEFINED_FROM_WRAP_PYTHON_H
-# define _DEBUG
+// BLENDER: TBB excepts this to have a value.
+# define _DEBUG 1
# ifdef _CRT_NOFORCE_MANIFEST_DEFINED_FROM_WRAP_PYTHON_H
# undef _CRT_NOFORCE_MANIFEST_DEFINED_FROM_WRAP_PYTHON_H
# undef _CRT_NOFORCE_MANIFEST

View File

@ -36,3 +36,39 @@ index a97a755..07ce853 100644
if (self.compiler.find_library_file(self.lib_dirs, lib_name)):
ffi_lib = lib_name
break
--- a/Modules/posixmodule.c 2022-12-09 21:44:03
+++ b/Modules/posixmodule.c 2022-12-09 21:39:46
@@ -10564,10 +10564,15 @@
Py_BEGIN_ALLOW_THREADS
#ifdef HAVE_MKFIFOAT
if (dir_fd != DEFAULT_DIR_FD) {
+// BLENDER: disable also at compile time for compatibility when linking with older Xcode.
+// https://github.com/python/cpython/issues/97897
+#ifndef __APPLE__
if (HAVE_MKFIFOAT_RUNTIME) {
result = mkfifoat(dir_fd, path->narrow, mode);
+ } else
+#endif
+ {
- } else {
mkfifoat_unavailable = 1;
result = 0;
}
@@ -10638,10 +10633,15 @@
Py_BEGIN_ALLOW_THREADS
#ifdef HAVE_MKNODAT
if (dir_fd != DEFAULT_DIR_FD) {
+// BLENDER: disable also at compile time for compatibility when linking with older Xcode.
+// https://github.com/python/cpython/issues/97897
+#ifndef __APPLE__
if (HAVE_MKNODAT_RUNTIME) {
result = mknodat(dir_fd, path->narrow, mode, device);
+ } else
+#endif
+ {
- } else {
mknodat_unavailable = 1;
result = 0;
}

View File

@ -30,3 +30,19 @@ diff -ru ./src/video/SDL_video.c ./src/video/SDL_video.c
if (SDL_strcmp(_this->name, "cocoa") == 0) { /* don't do this for X11, etc */
if (Cocoa_IsWindowInFullscreenSpace(window)) {
return SDL_FALSE;
--- CMakeLists.txt 2022-12-09 20:40:00
+++ CMakeLists.txt 2022-12-09 20:40:00
@@ -526,6 +526,13 @@
list(APPEND EXTRA_CFLAGS "-fno-strict-aliasing")
endif()
+ # BLENDER: make libs compatible with older Xcode.
+ # https://github.com/KhronosGroup/MoltenVK/issues/1756
+ check_c_compiler_flag(-fno-objc-msgsend-selector-stubs HAVE_GCC_NO_OBJC_MSGSEND_SELECTOR_STUBS)
+ if(HAVE_GCC_NO_OBJC_MSGSEND_SELECTOR_STUBS)
+ list(APPEND EXTRA_CFLAGS "-fno-objc-msgsend-selector-stubs")
+ endif()
+
check_c_compiler_flag(-Wdeclaration-after-statement HAVE_GCC_WDECLARATION_AFTER_STATEMENT)
if(HAVE_GCC_WDECLARATION_AFTER_STATEMENT)
check_c_compiler_flag(-Werror=declaration-after-statement HAVE_GCC_WERROR_DECLARATION_AFTER_STATEMENT)

View File

@ -1206,7 +1206,7 @@ class CyclesWorldSettings(bpy.types.PropertyGroup):
)
homogeneous_volume: BoolProperty(
name="Homogeneous Volume",
description="When using volume rendering, assume volume has the same density everywhere"
description="When using volume rendering, assume volume has the same density everywhere "
"(not using any textures), for faster rendering",
default=False,
)

View File

@ -193,7 +193,7 @@ class CYCLES_RENDER_PT_sampling_viewport(CyclesButtonsPanel, Panel):
if cscene.use_preview_adaptive_sampling:
col = layout.column(align=True)
col.prop(cscene, "preview_samples", text=" Max Samples")
col.prop(cscene, "preview_samples", text="Max Samples")
col.prop(cscene, "preview_adaptive_min_samples", text="Min Samples")
else:
layout.prop(cscene, "preview_samples", text="Samples")
@ -255,7 +255,7 @@ class CYCLES_RENDER_PT_sampling_render(CyclesButtonsPanel, Panel):
col = layout.column(align=True)
if cscene.use_adaptive_sampling:
col.prop(cscene, "samples", text=" Max Samples")
col.prop(cscene, "samples", text="Max Samples")
col.prop(cscene, "adaptive_min_samples", text="Min Samples")
else:
col.prop(cscene, "samples", text="Samples")

View File

@ -171,7 +171,7 @@ colorspaces:
name: Non-Color
family: raw
description: |
Color space used for images which contains non-color data (i.e. normal maps)
Color space used for images which contain non-color data (e.g. normal maps)
equalitygroup:
bitdepth: 32f
isdata: true

View File

@ -214,7 +214,7 @@ class AddPresetBase:
class ExecutePreset(Operator):
"""Execute a preset"""
"""Load a preset"""
bl_idname = "script.execute_preset"
bl_label = "Execute a Python Preset"

View File

@ -228,8 +228,8 @@ def lightmap_uvpack(
"""
BOX_DIV if the maximum division of the UV map that
a box may be consolidated into.
Basically, a lower value will be slower but waist less space
and a higher value will have more clumpy boxes but more wasted space
A lower value will create more clumpy boxes and more wasted space,
and a higher value will be slower but waste less space
"""
import time
from math import sqrt
@ -623,7 +623,10 @@ class LightMapPack(Operator):
# UV Packing...
PREF_BOX_DIV: IntProperty(
name="Pack Quality",
description="Pre-packing before the complex boxpack",
description=(
"Quality of the packing. "
"Higher values will be slower but waste less space"
),
min=1, max=48,
default=12,
)

View File

@ -2084,7 +2084,7 @@ class WM_OT_operator_cheat_sheet(Operator):
# Add-on Operators
class WM_OT_owner_enable(Operator):
"""Enable workspace owner ID"""
"""Enable add-on for workspace"""
bl_idname = "wm.owner_enable"
bl_label = "Enable Add-on"
@ -2099,9 +2099,9 @@ class WM_OT_owner_enable(Operator):
class WM_OT_owner_disable(Operator):
"""Enable workspace owner ID"""
"""Disable add-on for workspace"""
bl_idname = "wm.owner_disable"
bl_label = "Disable UI Tag"
bl_label = "Disable Add-on"
owner_id: StringProperty(
name="UI Tag",

View File

@ -140,6 +140,7 @@ class NODE_MT_geometry_node_GEO_INPUT(Menu):
node_add_menu.add_node_type(layout, "FunctionNodeInputBool")
node_add_menu.add_node_type(layout, "GeometryNodeCollectionInfo")
node_add_menu.add_node_type(layout, "FunctionNodeInputColor")
node_add_menu.add_node_type(layout, "GeometryNodeInputImage")
node_add_menu.add_node_type(layout, "GeometryNodeImageInfo")
node_add_menu.add_node_type(layout, "FunctionNodeInputInt")
node_add_menu.add_node_type(layout, "GeometryNodeIsViewport")

View File

@ -428,7 +428,7 @@ class PHYSICS_PT_fire(PhysicButtonsPanel, Panel):
col.prop(domain, "flame_max_temp", text="Temperature Maximum")
col.prop(domain, "flame_ignition", text="Minimum")
row = col.row()
row.prop(domain, "flame_smoke_color", text="Flame Color")
row.prop(domain, "flame_smoke_color", text="Smoke Color")
class PHYSICS_PT_liquid(PhysicButtonsPanel, Panel):

View File

@ -214,8 +214,12 @@ class PHYSICS_PT_softbody_edge(PhysicButtonsPanel, Panel):
col = flow.column()
col.prop(softbody, "spring_length", text="Length")
col.prop(softbody, "use_edge_collision", text="Collision Edge")
col.prop(softbody, "use_face_collision", text="Face")
col.separator()
col = flow.column(align=True, heading="Collision")
col.prop(softbody, "use_edge_collision", text="Edge", toggle=False)
col.prop(softbody, "use_face_collision", text="Face", toggle=False)
class PHYSICS_PT_softbody_edge_aerodynamics(PhysicButtonsPanel, Panel):

View File

@ -2196,7 +2196,7 @@ class SEQUENCER_PT_cache_settings(SequencerButtonsPanel, Panel):
col = layout.column(heading="Cache", align=True)
col.prop(ed, "use_cache_raw", text="Raw")
col.prop(ed, "use_cache_preprocessed", text="Pre-Processed")
col.prop(ed, "use_cache_preprocessed", text="Preprocessed")
col.prop(ed, "use_cache_composite", text="Composite")
col.prop(ed, "use_cache_final", text="Final")
@ -2315,7 +2315,7 @@ class SEQUENCER_PT_strip_cache(SequencerButtonsPanel, Panel):
col = layout.column(heading="Cache")
col.prop(strip, "use_cache_raw", text="Raw")
col.prop(strip, "use_cache_preprocessed", text="Pre-Processed")
col.prop(strip, "use_cache_preprocessed", text="Preprocessed")
col.prop(strip, "use_cache_composite", text="Composite")

View File

@ -1545,6 +1545,7 @@ struct TexResult;
#define GEO_NODE_SET_CURVE_NORMAL 1188
#define GEO_NODE_IMAGE_INFO 1189
#define GEO_NODE_BLUR_ATTRIBUTE 1190
#define GEO_NODE_IMAGE 1191
/** \} */

View File

@ -1001,7 +1001,7 @@ static void blendfile_link_append_proxies_convert(Main *bmain, ReportList *repor
RPT_WARNING,
"Proxies have been removed from Blender (%d proxies were automatically converted "
"to library overrides, %d proxies could not be converted and were cleared). "
"Please consider re-saving any library .blend file with the newest Blender version",
"Consider re-saving any library .blend file with the newest Blender version",
bf_reports.count.proxies_to_lib_overrides_success,
bf_reports.count.proxies_to_lib_overrides_failures);
}

View File

@ -571,7 +571,7 @@ void BKE_crazyspace_api_displacement_to_original(struct Object *object,
if (vertex_index < 0 || vertex_index >= object->runtime.crazyspace_verts_num) {
BKE_reportf(reports,
RPT_ERROR,
"Invalid vertex index %d (expected to be within 0 to %d range))",
"Invalid vertex index %d (expected to be within 0 to %d range)",
vertex_index,
object->runtime.crazyspace_verts_num);
return;

View File

@ -509,20 +509,15 @@ static void determine_group_output_states(const bNodeTree &tree,
FieldInferencingInterface &new_inferencing_interface,
const Span<SocketFieldState> field_state_by_socket_id)
{
for (const bNode *group_output_node : tree.nodes_by_type("NodeGroupOutput")) {
/* Ignore inactive group output nodes. */
if (!(group_output_node->flag & NODE_DO_OUTPUT)) {
continue;
}
/* Determine dependencies of all group outputs. */
for (const bNodeSocket *group_output_socket :
group_output_node->input_sockets().drop_back(1)) {
OutputFieldDependency field_dependency = find_group_output_dependencies(
*group_output_socket, field_state_by_socket_id);
new_inferencing_interface.outputs[group_output_socket->index()] = std::move(
field_dependency);
}
break;
const bNode *group_output_node = tree.group_output_node();
if (!group_output_node) {
return;
}
for (const bNodeSocket *group_output_socket : group_output_node->input_sockets().drop_back(1)) {
OutputFieldDependency field_dependency = find_group_output_dependencies(
*group_output_socket, field_state_by_socket_id);
new_inferencing_interface.outputs[group_output_socket->index()] = std::move(field_dependency);
}
}

View File

@ -883,13 +883,13 @@ static void object_blend_read_lib(BlendLibReader *reader, ID *id)
if (ob->id.lib) {
BLO_reportf_wrap(reports,
RPT_INFO,
TIP_("Proxy lost from object %s lib %s\n"),
TIP_("Proxy lost from object %s lib %s\n"),
ob->id.name + 2,
ob->id.lib->filepath);
}
else {
BLO_reportf_wrap(
reports, RPT_INFO, TIP_("Proxy lost from object %s lib <NONE>\n"), ob->id.name + 2);
reports, RPT_INFO, TIP_("Proxy lost from object %s lib <NONE>\n"), ob->id.name + 2);
}
reports->count.missing_obproxies++;
}

View File

@ -79,7 +79,7 @@ static void planar_pool_ensure_alloc(EEVEE_Data *vedata, int num_planar_ref)
EEVEE_StorageList *stl = vedata->stl;
EEVEE_EffectsInfo *fx = stl->effects;
/* XXX TODO: OPTIMIZATION: This is a complete waist of texture memory.
/* XXX TODO: OPTIMIZATION: This is a complete waste of texture memory.
* Instead of allocating each planar probe for each viewport,
* only alloc them once using the biggest viewport resolution. */

View File

@ -247,7 +247,7 @@ static int cachefile_layer_remove_exec(bContext *C, wmOperator *UNUSED(op))
void CACHEFILE_OT_layer_remove(wmOperatorType *ot)
{
ot->name = "Add layer";
ot->description = "Remove an override layer to the archive";
ot->description = "Remove an override layer from the archive";
ot->idname = "CACHEFILE_OT_layer_remove";
/* api callbacks */

View File

@ -8687,7 +8687,7 @@ static int edbm_point_normals_modal(bContext *C, wmOperator *op, const wmEvent *
break;
default:
BKE_report(op->reports, RPT_WARNING, "Does not support Individual Origin as pivot");
BKE_report(op->reports, RPT_WARNING, "Does not support Individual Origins as pivot");
copy_v3_v3(target, obedit->loc);
}
ret = OPERATOR_RUNNING_MODAL;

View File

@ -1554,7 +1554,7 @@ void OBJECT_OT_gpencil_add(wmOperatorType *ot)
rna_enum_gpencil_add_stroke_depth_order_items,
GP_DRAWMODE_3D,
"Stroke Depth Order",
"Defines how the strokes are ordered in 3D space for objects not displayed 'In Front')");
"Defines how the strokes are ordered in 3D space (for objects not displayed 'In Front')");
}
/** \} */

View File

@ -1620,7 +1620,7 @@ void OBJECT_OT_shade_smooth(wmOperatorType *ot)
RNA_def_property_float_default(prop, DEG2RADF(30.0f));
RNA_def_property_ui_text(prop,
"Angle",
"Maximum angle between face normals that will be considered as smooth"
"Maximum angle between face normals that will be considered as smooth "
"(unused if custom split normals data are available)");
}

View File

@ -92,7 +92,7 @@ static bool object_remesh_poll(bContext *C)
}
if (ID_IS_LINKED(ob) || ID_IS_LINKED(ob->data) || ID_IS_OVERRIDE_LIBRARY(ob->data)) {
CTX_wm_operator_poll_msg_set(C, "The remesher cannot worked on linked or override data");
CTX_wm_operator_poll_msg_set(C, "The remesher cannot work on linked or override data");
return false;
}

View File

@ -748,7 +748,7 @@ static int apply_objects_internal(bContext *C,
if (apply_rot || apply_loc) {
BKE_reportf(reports,
RPT_ERROR,
"Text objects can only have scale applied: \"%s\"",
"Text objects can only have their scale applied: \"%s\"",
ob->id.name + 2);
changed = false;
}

View File

@ -1735,7 +1735,7 @@ static const EnumPropertyItem prop_actkeys_snap_types[] = {
0,
"Selection to Nearest Frame",
"Snap selected keyframes to the nearest (whole) frame "
"(use to fix accidental sub-frame offsets)"},
"(use to fix accidental subframe offsets)"},
{ACTKEYS_SNAP_NEAREST_SECOND,
"NEAREST_SECOND",
0,

View File

@ -622,7 +622,7 @@ void NODE_OT_add_collection(wmOperatorType *ot)
{
/* identifiers */
ot->name = "Add Node Collection";
ot->description = "Add an collection info node to the current node editor";
ot->description = "Add a collection info node to the current node editor";
ot->idname = "NODE_OT_add_collection";
/* callbacks */

View File

@ -587,7 +587,7 @@ void SEQUENCER_OT_scene_strip_add_new(struct wmOperatorType *ot)
/* Identifiers. */
ot->name = "Add Strip with a new Scene";
ot->idname = "SEQUENCER_OT_scene_strip_add_new";
ot->description = "Create a new Strip and add a assign a new Scene as source";
ot->description = "Create a new Strip and assign a new Scene as source";
/* Api callbacks. */
ot->invoke = sequencer_add_scene_strip_new_invoke;

View File

@ -141,7 +141,7 @@ void walk_modal_keymap(wmKeyConfig *keyconf)
{WALK_MODAL_DIR_DOWN, "DOWN", 0, "Down", ""},
{WALK_MODAL_DIR_FORWARD_STOP, "FORWARD_STOP", 0, "Stop Move Forward", ""},
{WALK_MODAL_DIR_BACKWARD_STOP, "BACKWARD_STOP", 0, "Stop Mode Backward", ""},
{WALK_MODAL_DIR_BACKWARD_STOP, "BACKWARD_STOP", 0, "Stop Move Backward", ""},
{WALK_MODAL_DIR_LEFT_STOP, "LEFT_STOP", 0, "Stop Move Left", ""},
{WALK_MODAL_DIR_RIGHT_STOP, "RIGHT_STOP", 0, "Stop Mode Right", ""},
{WALK_MODAL_DIR_UP_STOP, "UP_STOP", 0, "Stop Move Up", ""},

View File

@ -3127,7 +3127,7 @@ void VIEW3D_OT_select(wmOperatorType *ot)
"vert_without_handles",
false,
"Control Point Without Handles",
"Only select the curve control point, not it's handles");
"Only select the curve control point, not its handles");
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
prop = RNA_def_int_vector(ot->srna,

View File

@ -999,7 +999,7 @@ void UV_OT_minimize_stretch(wmOperatorType *ot)
"fill_holes",
1,
"Fill Holes",
"Virtual fill holes in mesh before unwrapping, to better avoid overlaps and "
"Virtually fill holes in mesh before unwrapping, to better avoid overlaps and "
"preserve symmetry");
RNA_def_float_factor(ot->srna,
"blend",
@ -2064,7 +2064,7 @@ void UV_OT_unwrap(wmOperatorType *ot)
"fill_holes",
1,
"Fill Holes",
"Virtual fill holes in mesh before unwrapping, to better avoid overlaps and "
"Virtually fill holes in mesh before unwrapping, to better avoid overlaps and "
"preserve symmetry");
RNA_def_boolean(ot->srna,
"correct_aspect",

View File

@ -385,7 +385,7 @@ static void object_offset_header_draw(const bContext *UNUSED(C), Panel *panel)
PointerRNA *ptr = gpencil_modifier_panel_get_property_pointers(panel, NULL);
uiItemR(layout, ptr, "use_object_offset", 0, NULL, ICON_NONE);
uiItemR(layout, ptr, "use_object_offset", 0, IFACE_("Object Offset"), ICON_NONE);
}
static void object_offset_draw(const bContext *UNUSED(C), Panel *panel)
@ -399,7 +399,7 @@ static void object_offset_draw(const bContext *UNUSED(C), Panel *panel)
uiLayout *col = uiLayoutColumn(layout, false);
uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_object_offset"));
uiItemR(col, ptr, "offset_object", 0, NULL, ICON_NONE);
uiItemR(col, ptr, "offset_object", 0, IFACE_("Object"), ICON_NONE);
}
static void random_panel_draw(const bContext *UNUSED(C), Panel *panel)

View File

@ -108,7 +108,7 @@ static const EnumPropertyItem rna_enum_override_library_property_operation_items
"INSERT_BEFORE",
0,
"Insert Before",
"Insert a new item into collection after the one referenced in subitem_reference_name or "
"Insert a new item into collection before the one referenced in subitem_reference_name or "
"_index (NOT USED)"},
{0, NULL, 0, NULL, NULL},
};
@ -1561,7 +1561,7 @@ static void rna_def_image_preview(BlenderRNA *brna)
RNA_def_property_boolean_funcs(prop, NULL, "rna_ImagePreview_is_image_custom_set");
RNA_def_property_ui_text(prop,
"Custom Image",
"True if this preview image has been modified by py script,"
"True if this preview image has been modified by py script, "
"and is no more auto-generated by Blender");
prop = RNA_def_int_vector(
@ -1594,7 +1594,7 @@ static void rna_def_image_preview(BlenderRNA *brna)
RNA_def_property_boolean_funcs(prop, NULL, "rna_ImagePreview_is_icon_custom_set");
RNA_def_property_ui_text(prop,
"Custom Icon",
"True if this preview icon has been modified by py script,"
"True if this preview icon has been modified by py script, "
"and is no more auto-generated by Blender");
prop = RNA_def_int_vector(

View File

@ -4385,7 +4385,7 @@ static int rna_raw_access(ReportList *reports,
itemtype = RNA_property_type(itemprop);
if (!ELEM(itemtype, PROP_BOOLEAN, PROP_INT, PROP_FLOAT, PROP_ENUM)) {
BKE_report(reports, RPT_ERROR, "Only boolean, int float and enum properties supported");
BKE_report(reports, RPT_ERROR, "Only boolean, int, float, and enum properties supported");
return 0;
}
@ -4471,7 +4471,7 @@ static int rna_raw_access(ReportList *reports,
}
if (!ELEM(itemtype, PROP_BOOLEAN, PROP_INT, PROP_FLOAT)) {
BKE_report(reports, RPT_ERROR, "Only boolean, int and float properties supported");
BKE_report(reports, RPT_ERROR, "Only boolean, int, and float properties supported");
err = 1;
break;
}

View File

@ -347,7 +347,7 @@ static void rna_def_camera_background_image(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_flag(prop, PROP_NO_DEG_UPDATE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_BGIMG_FLAG_EXPANDED);
RNA_def_property_ui_text(prop, "Show Expanded", "Show the expanded in the user interface");
RNA_def_property_ui_text(prop, "Show Expanded", "Show the details in the user interface");
RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
prop = RNA_def_property(srna, "use_camera_clip", PROP_BOOLEAN, PROP_NONE);

View File

@ -727,7 +727,7 @@ static void rna_def_curvemappoint(BlenderRNA *brna)
PropertyRNA *prop;
static const EnumPropertyItem prop_handle_type_items[] = {
{0, "AUTO", 0, "Auto Handle", ""},
{CUMA_HANDLE_AUTO_ANIM, "AUTO_CLAMPED", 0, "Auto Clamped Handle", ""},
{CUMA_HANDLE_AUTO_ANIM, "AUTO_CLAMPED", 0, "Auto-Clamped Handle", ""},
{CUMA_HANDLE_VECTOR, "VECTOR", 0, "Vector Handle", ""},
{0, NULL, 0, NULL, NULL},
};

View File

@ -997,7 +997,7 @@ static void rna_def_path(BlenderRNA *UNUSED(brna), StructRNA *srna)
RNA_def_property_int_sdna(prop, NULL, "pathlen");
RNA_def_property_range(prop, 1, MAXFRAME);
RNA_def_property_ui_text(prop,
"Path Length",
"Path Duration",
"The number of frames that are needed to traverse the path, "
"defining the maximum value for the 'Evaluation Time' setting");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");

View File

@ -68,12 +68,12 @@ static const EnumPropertyItem rna_enum_keyframe_type_items[] = {
"KEYFRAME",
ICON_KEYTYPE_KEYFRAME_VEC,
"Keyframe",
"Normal keyframe - e.g. for key poses"},
"Normal keyframe, e.g. for key poses"},
{BEZT_KEYTYPE_BREAKDOWN,
"BREAKDOWN",
ICON_KEYTYPE_BREAKDOWN_VEC,
"Breakdown",
"A breakdown pose - e.g. for transitions between key poses"},
"A breakdown pose, e.g. for transitions between key poses"},
{BEZT_KEYTYPE_MOVEHOLD,
"MOVING_HOLD",
ICON_KEYTYPE_MOVING_HOLD_VEC,
@ -98,12 +98,12 @@ static const EnumPropertyItem rna_enum_onion_keyframe_type_items[] = {
"KEYFRAME",
ICON_KEYTYPE_KEYFRAME_VEC,
"Keyframe",
"Normal keyframe - e.g. for key poses"},
"Normal keyframe, e.g. for key poses"},
{BEZT_KEYTYPE_BREAKDOWN,
"BREAKDOWN",
ICON_KEYTYPE_BREAKDOWN_VEC,
"Breakdown",
"A breakdown pose - e.g. for transitions between key poses"},
"A breakdown pose, e.g. for transitions between key poses"},
{BEZT_KEYTYPE_MOVEHOLD,
"MOVING_HOLD",
ICON_KEYTYPE_MOVING_HOLD_VEC,
@ -2561,7 +2561,7 @@ static void rna_def_gpencil_data(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "curve_edit_corner_angle");
RNA_def_property_range(prop, 0.0f, DEG2RADF(180.0f));
RNA_def_property_float_default(prop, DEG2RADF(90.0f));
RNA_def_property_ui_text(prop, "Corner Angle", "Angle threshold to be treated as corners");
RNA_def_property_ui_text(prop, "Corner Angle", "Angles above this are considered corners");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
prop = RNA_def_property(srna, "use_multiedit", PROP_BOOLEAN, PROP_NONE);

View File

@ -2267,7 +2267,7 @@ static void rna_def_modifier_gpencilarray(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "object");
RNA_def_property_ui_text(
prop,
"Object Offset",
"Offset Object",
"Use the location and rotation of another object to determine the distance and "
"rotational change between arrayed items");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
@ -2352,7 +2352,7 @@ static void rna_def_modifier_gpencilarray(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_object_offset", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_USE_OB_OFFSET);
RNA_def_property_ui_text(prop, "Object Offset", "Enable object offset");
RNA_def_property_ui_text(prop, "Use Object Offset", "Enable object offset");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
prop = RNA_def_property(srna, "use_relative_offset", PROP_BOOLEAN, PROP_NONE);
@ -3512,7 +3512,7 @@ static void rna_def_modifier_gpencillineart(BlenderRNA *brna)
RNA_def_property_ui_text(
prop,
"Instanced Objects",
"Support particle objects and face/vertex instances to show in line art");
"Allow particle objects and face/vertex instances to show in line art");
RNA_def_property_update(prop, NC_SCENE, "rna_GpencilModifier_update");
prop = RNA_def_property(srna, "use_edge_overlap", PROP_BOOLEAN, PROP_NONE);
@ -3895,9 +3895,9 @@ static void rna_def_modifier_gpencillineart(BlenderRNA *brna)
prop = RNA_def_property(srna, "shadow_camera_size", PROP_FLOAT, PROP_NONE);
RNA_def_property_ui_text(prop,
"Shadow Camera Size",
"This value represent the \"Orthographic Scale\" of an ortho camera."
"If the camera is put at the lamps position with this scale, it will "
"represent the coverage of the shadow \"camera\" ");
"Represents the \"Orthographic Scale\" of an orthographic camera. "
"If the camera is positioned at the light's location with this scale, it will "
"represent the coverage of the shadow \"camera\"");
RNA_def_property_ui_range(prop, 0.0f, 500.0f, 0.1f, 2);
RNA_def_property_range(prop, 0.0f, 10000.0f);

View File

@ -435,7 +435,7 @@ static void rna_def_layer_collection(BlenderRNA *brna)
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "collection->id.name");
RNA_def_property_clear_flag(prop, PROP_EDITABLE | PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Name", "Name of this view layer (same as its collection one)");
RNA_def_property_ui_text(prop, "Name", "Name of this layer collection (same as its collection one)");
RNA_def_property_string_funcs(
prop, "rna_LayerCollection_name_get", "rna_LayerCollection_name_length", NULL);
RNA_def_struct_name_property(srna, prop);
@ -443,7 +443,7 @@ static void rna_def_layer_collection(BlenderRNA *brna)
prop = RNA_def_property(srna, "children", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "layer_collections", NULL);
RNA_def_property_struct_type(prop, "LayerCollection");
RNA_def_property_ui_text(prop, "Children", "Child layer collections");
RNA_def_property_ui_text(prop, "Children", "Layer collection children");
RNA_def_property_collection_funcs(prop,
"rna_LayerCollection_children_begin",
NULL,
@ -614,7 +614,7 @@ void RNA_def_view_layer(BlenderRNA *brna)
RNA_def_property_ui_text(
prop,
"Layer Collection",
"Root of collections hierarchy of this view layer,"
"Root of collections hierarchy of this view layer, "
"its 'collection' pointer property is the same as the scene's master collection");
prop = RNA_def_property(srna, "active_layer_collection", PROP_POINTER, PROP_NONE);

View File

@ -5618,7 +5618,7 @@ static void rna_def_modifier_ocean(BlenderRNA *brna)
"JONSWAP",
0,
"Established Ocean (Sharp Peaks)",
"Use for sharp peaks ('JONSWAP', Pierson-Moskowitz method) with peak sharpening"},
"Use for established oceans ('JONSWAP', Pierson-Moskowitz method) with peak sharpening"},
{MOD_OCEAN_SPECTRUM_TEXEL_MARSEN_ARSLOE,
"TEXEL_MARSEN_ARSLOE",
0,
@ -5669,7 +5669,7 @@ static void rna_def_modifier_ocean(BlenderRNA *brna)
RNA_def_property_ui_text(
prop,
"Generate Normals",
"Output normals for bump mapping - disabling can speed up performance if its not needed");
"Output normals for bump mapping - disabling can speed up performance if it's not needed");
RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
prop = RNA_def_property(srna, "use_foam", PROP_BOOLEAN, PROP_NONE);

View File

@ -10030,7 +10030,10 @@ static void def_geo_collection_info(StructRNA *srna)
prop = RNA_def_property(srna, "transform_space", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, rna_node_geometry_collection_info_transform_space_items);
RNA_def_property_ui_text(prop, "Transform Space", "The transformation of the geometry output");
RNA_def_property_ui_text(
prop,
"Transform Space",
"The transformation of the instances output. Does not affect the internal geometry");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update_relations");
}
@ -10619,6 +10622,18 @@ static void def_geo_attribute_capture(StructRNA *srna)
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
}
static void def_geo_image(StructRNA *srna)
{
PropertyRNA *prop;
prop = RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "id");
RNA_def_property_struct_type(prop, "Image");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
RNA_def_property_ui_text(prop, "Image", "");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
}
static void def_geo_delete_geometry(StructRNA *srna)
{
PropertyRNA *prop;

View File

@ -784,7 +784,7 @@ static void rna_Object_dup_collection_set(PointerRNA *ptr,
else {
BKE_report(NULL,
RPT_ERROR,
"Cannot set instance-collection as object belongs in group being instanced, thus "
"Cannot set instance-collection as object belongs in collection being instanced, thus "
"causing a cycle");
}
}

View File

@ -1964,7 +1964,7 @@ static void rna_def_softbody(BlenderRNA *brna)
RNA_def_property_int_sdna(prop, NULL, "springpreload");
RNA_def_property_range(prop, 0.0f, 200.0f);
RNA_def_property_ui_text(
prop, "View Layer", "Alter spring length to shrink/blow up (unit %) 0 to disable");
prop, "Spring Length", "Alter spring length to shrink/blow up (unit %) 0 to disable");
RNA_def_property_update(prop, 0, "rna_softbody_update");
prop = RNA_def_property(srna, "aero", PROP_INT, PROP_NONE);
@ -2016,13 +2016,13 @@ static void rna_def_softbody(BlenderRNA *brna)
prop = RNA_def_property(srna, "ball_stiff", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ballstiff");
RNA_def_property_range(prop, 0.001f, 100.0f);
RNA_def_property_ui_text(prop, "Ball Size", "Ball inflating pressure");
RNA_def_property_ui_text(prop, "Stiffness", "Ball inflating pressure");
RNA_def_property_update(prop, 0, "rna_softbody_update");
prop = RNA_def_property(srna, "ball_damp", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "balldamp");
RNA_def_property_range(prop, 0.001f, 1.0f);
RNA_def_property_ui_text(prop, "Ball Size", "Blending to inelastic collision");
RNA_def_property_ui_text(prop, "Dampening", "Blending to inelastic collision");
RNA_def_property_update(prop, 0, "rna_softbody_update");
/* Solver */

View File

@ -1153,7 +1153,7 @@ static void rna_def_rigidbody_object(BlenderRNA *brna)
RNA_def_property_float_default(prop, 0.0f);
RNA_def_property_float_funcs(prop, NULL, "rna_RigidBodyOb_restitution_set", NULL);
RNA_def_property_ui_text(prop,
"Restitution",
"Bounciness",
"Tendency of object to bounce after colliding with another "
"(0 = stays still, 1 = perfectly elastic)");
RNA_def_property_update(prop, NC_OBJECT | ND_POINTCACHE, "rna_RigidBodyOb_reset");

View File

@ -7322,7 +7322,7 @@ static void rna_def_scene_eevee(BlenderRNA *brna)
RNA_def_property_ui_text(prop,
"Clamp Glossy",
"Clamp pixel intensity to reduce noise inside glossy reflections "
"from reflection cubemaps (0 to disabled)");
"from reflection cubemaps (0 to disable)");
RNA_def_property_range(prop, 0.0f, FLT_MAX);
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
@ -7380,7 +7380,7 @@ static void rna_def_scene_eevee(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
prop = RNA_def_property(srna, "taa_render_samples", PROP_INT, PROP_NONE);
RNA_def_property_ui_text(prop, "Render Samples", "Number of samples per pixels for rendering");
RNA_def_property_ui_text(prop, "Render Samples", "Number of samples per pixel for rendering");
RNA_def_property_range(prop, 1, INT_MAX);
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
@ -7454,7 +7454,7 @@ static void rna_def_scene_eevee(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
prop = RNA_def_property(srna, "ssr_firefly_fac", PROP_FLOAT, PROP_NONE);
RNA_def_property_ui_text(prop, "Clamp", "Clamp pixel intensity to remove noise (0 to disabled)");
RNA_def_property_ui_text(prop, "Clamp", "Clamp pixel intensity to remove noise (0 to disable)");
RNA_def_property_range(prop, 0.0f, FLT_MAX);
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
@ -7664,7 +7664,7 @@ static void rna_def_scene_eevee(BlenderRNA *brna)
prop = RNA_def_property(srna, "bloom_clamp", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_ui_text(
prop, "Clamp", "Maximum intensity a bloom pixel can have (0 to disabled)");
prop, "Clamp", "Maximum intensity a bloom pixel can have (0 to disable)");
RNA_def_property_range(prop, 0.0f, 100000.0f);
RNA_def_property_ui_range(prop, 0.0f, 1000.0f, 1, 3);
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
@ -7820,8 +7820,8 @@ void RNA_def_scene(BlenderRNA *brna)
{2, "INVERSE_CLAMPED", 0, "Inverse Clamped", "Inverse distance model with clamping"},
{3, "LINEAR", 0, "Linear", "Linear distance model"},
{4, "LINEAR_CLAMPED", 0, "Linear Clamped", "Linear distance model with clamping"},
{5, "EXPONENT", 0, "Exponent", "Exponent distance model"},
{6, "EXPONENT_CLAMPED", 0, "Exponent Clamped", "Exponent distance model with clamping"},
{5, "EXPONENT", 0, "Exponential", "Exponential distance model"},
{6, "EXPONENT_CLAMPED", 0, "Exponential Clamped", "Exponential distance model with clamping"},
{0, NULL, 0, NULL, NULL},
};

View File

@ -2272,7 +2272,7 @@ static void rna_def_editor(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_cache_preprocessed", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "cache_flag", SEQ_CACHE_VIEW_PREPROCESSED);
RNA_def_property_ui_text(prop, "Pre-processed Images", "Visualize cached pre-processed images");
RNA_def_property_ui_text(prop, "Preprocessed Images", "Visualize cached pre-processed images");
RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, NULL);
prop = RNA_def_property(srna, "show_cache_composite", PROP_BOOLEAN, PROP_NONE);
@ -2291,8 +2291,8 @@ static void rna_def_editor(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "cache_flag", SEQ_CACHE_STORE_PREPROCESSED);
RNA_def_property_ui_text(
prop,
"Cache Pre-processed",
"Cache pre-processed images, for faster tweaking of effects at the cost of memory usage");
"Cache Preprocessed",
"Cache preprocessed images, for faster tweaking of effects at the cost of memory usage");
prop = RNA_def_property(srna, "use_cache_composite", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "cache_flag", SEQ_CACHE_STORE_COMPOSITE);

View File

@ -432,7 +432,7 @@ static void rna_def_shader_fx_shadow(BlenderRNA *brna)
prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "scale");
RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
RNA_def_property_ui_text(prop, "Scale", "Offset of the shadow");
RNA_def_property_ui_text(prop, "Scale", "Scale of the shadow");
RNA_def_property_update(prop, NC_OBJECT | ND_SHADERFX, "rna_ShaderFx_update");
prop = RNA_def_property(srna, "shadow_color", PROP_FLOAT, PROP_COLOR);

View File

@ -6324,7 +6324,7 @@ static void rna_def_space_graph(BlenderRNA *brna)
/* editing */
prop = RNA_def_property(srna, "use_auto_merge_keyframes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SIPO_NOTRANSKEYCULL);
RNA_def_property_ui_text(prop, "AutoMerge Keyframes", "Automatically merge nearby keyframes");
RNA_def_property_ui_text(prop, "Auto-Merge Keyframes", "Automatically merge nearby keyframes");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
prop = RNA_def_property(srna, "use_realtime_update", PROP_BOOLEAN, PROP_NONE);

View File

@ -900,7 +900,7 @@ static void rna_def_trackingSettings(BlenderRNA *brna)
PropertyRNA *prop;
static const EnumPropertyItem speed_items[] = {
{0, "FASTEST", 0, "Fastest", "Track as fast as it's possible"},
{0, "FASTEST", 0, "Fastest", "Track as fast as possible"},
{TRACKING_SPEED_DOUBLE, "DOUBLE", 0, "Double", "Track with double speed"},
{TRACKING_SPEED_REALTIME, "REALTIME", 0, "Realtime", "Track with realtime speed"},
{TRACKING_SPEED_HALF, "HALF", 0, "Half", "Track with half of realtime speed"},

View File

@ -286,7 +286,7 @@ DefNode(GeometryNode, GEO_NODE_ATTRIBUTE_STATISTIC, def_geo_attribute_statistic,
DefNode(GeometryNode, GEO_NODE_BLUR_ATTRIBUTE, def_geo_blur_attribute, "BLUR_ATTRIBUTE", BlurAttribute, "Blur Attribute", "Mix attribute values of neighboring elements")
DefNode(GeometryNode, GEO_NODE_BOUNDING_BOX, 0, "BOUNDING_BOX", BoundBox, "Bounding Box", "Calculate the limits of a geometry's positions and generate a box mesh with those dimensions")
DefNode(GeometryNode, GEO_NODE_CAPTURE_ATTRIBUTE, def_geo_attribute_capture,"CAPTURE_ATTRIBUTE", CaptureAttribute, "Capture Attribute", "Store the result of a field on a geometry and output the data as a node socket. Allows remembering or interpolating data as the geometry changes, such as positions before deformation")
DefNode(GeometryNode, GEO_NODE_COLLECTION_INFO, def_geo_collection_info, "COLLECTION_INFO", CollectionInfo, "Collection Info", "Retrieve geometry from a collection")
DefNode(GeometryNode, GEO_NODE_COLLECTION_INFO, def_geo_collection_info, "COLLECTION_INFO", CollectionInfo, "Collection Info", "Retrieve geometry instances from a collection")
DefNode(GeometryNode, GEO_NODE_CONVEX_HULL, 0, "CONVEX_HULL", ConvexHull, "Convex Hull", "Create a mesh that encloses all points in the input geometry with the smallest number of points")
DefNode(GeometryNode, GEO_NODE_CURVE_ENDPOINT_SELECTION, 0, "CURVE_ENDPOINT_SELECTION", CurveEndpointSelection, "Endpoint Selection", "Provide a selection for an arbitrary number of endpoints in each spline")
DefNode(GeometryNode, GEO_NODE_CURVE_HANDLE_TYPE_SELECTION, def_geo_curve_handle_type_selection, "CURVE_HANDLE_TYPE_SELECTION", CurveHandleTypeSelection, "Handle Type Selection", "Provide a selection based on the handle types of Bézier control points")
@ -320,6 +320,7 @@ DefNode(GeometryNode, GEO_NODE_FILL_CURVE, def_geo_curve_fill, "FILL_CURVE", Fil
DefNode(GeometryNode, GEO_NODE_FILLET_CURVE, def_geo_curve_fillet, "FILLET_CURVE", FilletCurve, "Fillet Curve", "Round corners by generating circular arcs on each control point")
DefNode(GeometryNode, GEO_NODE_FLIP_FACES, 0, "FLIP_FACES", FlipFaces, "Flip Faces", "Reverse the order of the vertices and edges of selected faces, flipping their normal direction")
DefNode(GeometryNode, GEO_NODE_GEOMETRY_TO_INSTANCE, 0, "GEOMETRY_TO_INSTANCE", GeometryToInstance, "Geometry to Instance", "Convert each input geometry into an instance, which can be much faster than the Join Geometry node when the inputs are large")
DefNode(GeometryNode, GEO_NODE_IMAGE, def_geo_image, "IMAGE", InputImage, "Image", "Input image")
DefNode(GeometryNode, GEO_NODE_IMAGE_INFO, 0, "IMAGE_INFO", ImageInfo, "Image Info", "Retrieve information about an image")
DefNode(GeometryNode, GEO_NODE_IMAGE_TEXTURE, def_geo_image_texture, "IMAGE_TEXTURE", ImageTexture, "Image Texture", "Sample values from an image texture")
DefNode(GeometryNode, GEO_NODE_INPUT_CURVE_HANDLES, 0, "INPUT_CURVE_HANDLES", InputCurveHandlePositions,"Curve Handle Positions", "Retrieve the position of each Bézier control point's handles")

View File

@ -73,6 +73,7 @@ set(SRC
nodes/node_geo_field_at_index.cc
nodes/node_geo_flip_faces.cc
nodes/node_geo_geometry_to_instance.cc
nodes/node_geo_image.cc
nodes/node_geo_image_info.cc
nodes/node_geo_image_texture.cc
nodes/node_geo_input_curve_handles.cc

View File

@ -57,6 +57,7 @@ void register_geometry_nodes()
register_node_type_geo_field_at_index();
register_node_type_geo_flip_faces();
register_node_type_geo_geometry_to_instance();
register_node_type_geo_image();
register_node_type_geo_image_info();
register_node_type_geo_image_texture();
register_node_type_geo_input_curve_handles();

View File

@ -54,6 +54,7 @@ void register_node_type_geo_extrude_mesh();
void register_node_type_geo_field_at_index();
void register_node_type_geo_flip_faces();
void register_node_type_geo_geometry_to_instance();
void register_node_type_geo_image();
void register_node_type_geo_image_info();
void register_node_type_geo_image_texture();
void register_node_type_geo_input_curve_handles();

View File

@ -14,6 +14,7 @@
#include "BKE_attribute_math.hh"
#include "BKE_curves.hh"
#include "BKE_geometry_fields.hh"
#include "BKE_mesh.h"
#include "BKE_mesh_mapping.h"
@ -443,6 +444,11 @@ class BlurAttributeFieldInput final : public bke::GeometryFieldInput {
}
return false;
}
std::optional<eAttrDomain> preferred_domain(const GeometryComponent &component) const override
{
return bke::try_detect_field_domain(component, value_field_);
}
};
static StringRefNull identifier_suffix(eCustomDataType data_type)

View File

@ -0,0 +1,50 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include "DNA_image_types.h"
#include "node_geometry_util.hh"
#include "UI_interface.h"
#include "UI_resources.h"
namespace blender::nodes::node_geo_image_cc {
static void node_declare(NodeDeclarationBuilder &b)
{
b.add_output<decl::Image>(N_("Image"));
}
static void node_layout(uiLayout *layout, bContext *C, PointerRNA *ptr)
{
uiTemplateID(layout,
C,
ptr,
"image",
"IMAGE_OT_new",
"IMAGE_OT_open",
nullptr,
UI_TEMPLATE_ID_FILTER_ALL,
false,
nullptr);
}
static void node_geo_exec(GeoNodeExecParams params)
{
params.set_output("Image", reinterpret_cast<Image *>(params.node().id));
}
} // namespace blender::nodes::node_geo_image_cc
void register_node_type_geo_image()
{
namespace file_ns = blender::nodes::node_geo_image_cc;
static bNodeType ntype;
geo_node_type_base(&ntype, GEO_NODE_IMAGE, "Image", NODE_CLASS_INPUT);
ntype.geometry_node_execute = file_ns::node_geo_exec;
ntype.draw_buttons = file_ns::node_layout;
ntype.declare = file_ns::node_declare;
node_type_size_preset(&ntype, NODE_SIZE_LARGE);
nodeRegisterType(&ntype);
}

View File

@ -29,7 +29,7 @@ static void node_declare(NodeDeclarationBuilder &b)
b.add_input<decl::Int>(N_("Instance Index"))
.implicit_field(implicit_field_inputs::id_or_index)
.description(N_(
"Index of the instance that used for each point. This is only used when Pick Instances "
"Index of the instance used for each point. This is only used when Pick Instances "
"is on. By default the point index is used"));
b.add_input<decl::Vector>(N_("Rotation"))
.subtype(PROP_EULER)

View File

@ -43,19 +43,20 @@ static void group_gpu_copy_inputs(bNode *gnode, GPUNodeStack *in, bNodeStack *gs
*/
static void group_gpu_move_outputs(bNode *gnode, GPUNodeStack *out, bNodeStack *gstack)
{
bNodeTree *ngroup = (bNodeTree *)gnode->id;
const bNodeTree &ngroup = *reinterpret_cast<bNodeTree *>(gnode->id);
for (bNode *node : ngroup->all_nodes()) {
if (node->type == NODE_GROUP_OUTPUT && (node->flag & NODE_DO_OUTPUT)) {
int a;
LISTBASE_FOREACH_INDEX (bNodeSocket *, sock, &node->inputs, a) {
bNodeStack *ns = node_get_socket_stack(gstack, sock);
if (ns) {
/* convert the node stack data result back to gpu stack */
node_gpu_stack_from_data(&out[a], sock->type, ns);
}
}
break; /* only one active output node */
ngroup.ensure_topology_cache();
const bNode *group_output_node = ngroup.group_output_node();
if (!group_output_node) {
return;
}
int a;
LISTBASE_FOREACH_INDEX (bNodeSocket *, sock, &group_output_node->inputs, a) {
bNodeStack *ns = node_get_socket_stack(gstack, sock);
if (ns) {
/* convert the node stack data result back to gpu stack */
node_gpu_stack_from_data(&out[a], sock->type, ns);
}
}
}

View File

@ -84,24 +84,24 @@ static void group_copy_inputs(bNode *gnode, bNodeStack **in, bNodeStack *gstack)
*/
static void group_copy_outputs(bNode *gnode, bNodeStack **out, bNodeStack *gstack)
{
bNodeTree *ngroup = (bNodeTree *)gnode->id;
bNode *node;
bNodeSocket *sock;
bNodeStack *ns;
int a;
const bNodeTree &ngroup = *reinterpret_cast<bNodeTree *>(gnode->id);
for (node = static_cast<bNode *>(ngroup->nodes.first); node; node = node->next) {
if (node->type == NODE_GROUP_OUTPUT && (node->flag & NODE_DO_OUTPUT)) {
for (sock = static_cast<bNodeSocket *>(node->inputs.first), a = 0; sock;
sock = sock->next, a++) {
if (out[a]) { /* shouldn't need to check this T36694. */
ns = node_get_socket_stack(gstack, sock);
if (ns) {
copy_stack(out[a], ns);
}
}
}
break; /* only one active output node */
ngroup.ensure_topology_cache();
const bNode *group_output_node = ngroup.group_output_node();
if (!group_output_node) {
return;
}
int a;
LISTBASE_FOREACH_INDEX (bNodeSocket *, sock, &group_output_node->inputs, a) {
if (!out[a]) {
/* shouldn't need to check this T36694. */
continue;
}
bNodeStack *ns = node_get_socket_stack(gstack, sock);
if (ns) {
copy_stack(out[a], ns);
}
}
}

View File

@ -896,7 +896,7 @@ static void file_read_reports_finalize(BlendFileReadReport *bf_reports)
RPT_WARNING,
"Proxies have been removed from Blender (%d proxies were automatically converted "
"to library overrides, %d proxies could not be converted and were cleared). "
"Please also consider re-saving any library .blend file with the newest Blender version",
"Consider re-saving any library .blend file with the newest Blender version",
bf_reports->count.proxies_to_lib_overrides_success,
bf_reports->count.proxies_to_lib_overrides_failures);
}