Merge branch 'master' into geometry-nodes-simulation
This commit is contained in:
commit
ffe0db184a
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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])
|
||||
|
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
)
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -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,
|
||||
)
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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")
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
/** \} */
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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++;
|
||||
}
|
||||
|
|
|
@ -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. */
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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')");
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
|
|
@ -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)");
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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", ""},
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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},
|
||||
};
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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},
|
||||
};
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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"},
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue