BLF: Utility to Wrap a String into Multiple Lines #118436

Merged
Harley Acheson merged 7 commits from Harley/blender:WrapString into main 2024-02-21 01:19:14 +01:00
342 changed files with 11581 additions and 3968 deletions
Showing only changes of commit a4be7d2c12 - Show all commits

View File

@ -387,6 +387,18 @@ else()
set(WITH_SYSTEM_EIGEN3 OFF)
endif()
if((NOT WITH_PYTHON_MODULE) AND (
(WIN32 AND (CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64")) OR
((UNIX AND NOT APPLE) AND (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64"))))
option(WITH_CPU_CHECK "\
Report when a CPU is not compatible on startup \
instead of failing to start with an inscrutable error."
ON
)
mark_as_advanced(WITH_CPU_CHECK)
else()
set(WITH_CPU_CHECK OFF)
endif()
# Modifiers
option(WITH_MOD_FLUID "Enable Mantaflow Fluid Simulation Framework" ON)

View File

@ -639,10 +639,10 @@ set(BROTLI_HASH_TYPE SHA256)
set(BROTLI_FILE brotli-v${BROTLI_VERSION}.tar.gz)
set(BROTLI_CPE "cpe:2.3:a:google:brotli:${BROTLI_VERSION}:*:*:*:*:*:*:*")
set(OPENPGL_VERSION v0.5.0)
set(OPENPGL_SHORT_VERSION 0.5.0)
set(OPENPGL_VERSION v0.6.0)
set(OPENPGL_SHORT_VERSION 0.6.0)
set(OPENPGL_URI https://github.com/OpenPathGuidingLibrary/openpgl/archive/refs/tags/${OPENPGL_VERSION}.tar.gz)
set(OPENPGL_HASH 1ec806d434d45e43e098f82ee9be0cb74928343898c57490b34ff80584e9805a)
set(OPENPGL_HASH 4192a4096ee3e3d31878cd013f8de23418c8037c576537551f946c4811931c5e)
set(OPENPGL_HASH_TYPE SHA256)
set(OPENPGL_FILE openpgl-${OPENPGL_VERSION}.tar.gz)

View File

@ -899,7 +899,7 @@ PACKAGES_ALL = (
DISTRO_ID_ARCH: "level-zero-headers", # ???
},
),
Package(name="OpenPGL Library", is_mandatory=False, version="0.5.0", version_short="0.5", version_min="0.5.0", version_mex="0.6",
Package(name="OpenPGL Library", is_mandatory=False, version="0.6.0", version_short="0.6", version_min="0.5.0", version_mex="0.7",
sub_packages=(),
distro_package_names={DISTRO_ID_DEBIAN: None,
DISTRO_ID_FEDORA: "openpgl-devel",

View File

@ -70,7 +70,7 @@ static inline BL::Mesh object_to_mesh(BL::BlendData & /*data*/,
bool /*calc_undeformed*/,
Mesh::SubdivisionType subdivision_type)
{
/* TODO: make this work with copy-on-write, modifiers are already evaluated. */
/* TODO: make this work with copy-on-evaluation, modifiers are already evaluated. */
#if 0
bool subsurf_mod_show_render = false;
bool subsurf_mod_show_viewport = false;

View File

@ -1285,42 +1285,78 @@ void PathTrace::set_guiding_params(const GuidingParams &guiding_params, const bo
if (guiding_params_.modified(guiding_params)) {
guiding_params_ = guiding_params;
# if !(OPENPGL_VERSION_MAJOR == 0 && OPENPGL_VERSION_MINOR <= 5)
# define OPENPGL_USE_FIELD_CONFIG
# endif
if (guiding_params_.use) {
# ifdef OPENPGL_USE_FIELD_CONFIG
openpgl::cpp::FieldConfig field_config;
# else
PGLFieldArguments field_args;
# endif
switch (guiding_params_.type) {
default:
/* Parallax-aware von Mises-Fisher mixture models. */
case GUIDING_TYPE_PARALLAX_AWARE_VMM: {
# ifdef OPENPGL_USE_FIELD_CONFIG
field_config.Init(
PGL_SPATIAL_STRUCTURE_TYPE::PGL_SPATIAL_STRUCTURE_KDTREE,
PGL_DIRECTIONAL_DISTRIBUTION_TYPE::PGL_DIRECTIONAL_DISTRIBUTION_PARALLAX_AWARE_VMM,
guiding_params.deterministic);
# else
pglFieldArgumentsSetDefaults(
field_args,
PGL_SPATIAL_STRUCTURE_TYPE::PGL_SPATIAL_STRUCTURE_KDTREE,
PGL_DIRECTIONAL_DISTRIBUTION_TYPE::PGL_DIRECTIONAL_DISTRIBUTION_PARALLAX_AWARE_VMM);
# endif
break;
}
/* Directional quad-trees. */
case GUIDING_TYPE_DIRECTIONAL_QUAD_TREE: {
# ifdef OPENPGL_USE_FIELD_CONFIG
field_config.Init(
PGL_SPATIAL_STRUCTURE_TYPE::PGL_SPATIAL_STRUCTURE_KDTREE,
PGL_DIRECTIONAL_DISTRIBUTION_TYPE::PGL_DIRECTIONAL_DISTRIBUTION_QUADTREE,
guiding_params.deterministic);
# else
pglFieldArgumentsSetDefaults(
field_args,
PGL_SPATIAL_STRUCTURE_TYPE::PGL_SPATIAL_STRUCTURE_KDTREE,
PGL_DIRECTIONAL_DISTRIBUTION_TYPE::PGL_DIRECTIONAL_DISTRIBUTION_QUADTREE);
# endif
break;
}
/* von Mises-Fisher mixture models. */
case GUIDING_TYPE_VMM: {
# ifdef OPENPGL_USE_FIELD_CONFIG
field_config.Init(PGL_SPATIAL_STRUCTURE_TYPE::PGL_SPATIAL_STRUCTURE_KDTREE,
PGL_DIRECTIONAL_DISTRIBUTION_TYPE::PGL_DIRECTIONAL_DISTRIBUTION_VMM,
guiding_params.deterministic);
# else
pglFieldArgumentsSetDefaults(
field_args,
PGL_SPATIAL_STRUCTURE_TYPE::PGL_SPATIAL_STRUCTURE_KDTREE,
PGL_DIRECTIONAL_DISTRIBUTION_TYPE::PGL_DIRECTIONAL_DISTRIBUTION_VMM);
# endif
break;
}
}
# ifdef OPENPGL_USE_FIELD_CONFIG
field_config.SetSpatialStructureArgMaxDepth(16);
# else
field_args.deterministic = guiding_params.deterministic;
reinterpret_cast<PGLKDTreeArguments *>(field_args.spatialSturctureArguments)->maxDepth = 16;
# endif
openpgl::cpp::Device *guiding_device = static_cast<openpgl::cpp::Device *>(
device_->get_guiding_device());
if (guiding_device) {
guiding_sample_data_storage_ = make_unique<openpgl::cpp::SampleStorage>();
# ifdef OPENPGL_USE_FIELD_CONFIG
guiding_field_ = make_unique<openpgl::cpp::Field>(guiding_device, field_config);
# else
guiding_field_ = make_unique<openpgl::cpp::Field>(guiding_device, field_args);
# endif
}
else {
guiding_sample_data_storage_ = nullptr;

View File

@ -1002,7 +1002,7 @@ NSCursor *GHOST_WindowCocoa::getStandardCursor(GHOST_TStandardCursor shape) cons
case GHOST_kStandardCursorStop:
return [NSCursor operationNotAllowedCursor];
case GHOST_kStandardCursorMove:
return [NSCursor pointingHandCursor];
return [NSCursor openHandCursor];
case GHOST_kStandardCursorDefault:
return [NSCursor arrowCursor];
case GHOST_kStandardCursorKnife:

View File

@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"\"POT-Creation-Date: 2019-02-25 20:41:30\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2016-04-23 22:41+0300\n"
"Last-Translator: Yousef Harfoush <bat3a@msn.com>\n"
"Language-Team: Yousef Harfoush, Amine Moussaoui <bat3a@msn.com>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2023-12-11 10:35+0000\n"
"Last-Translator: Aleh <zucchini.enjoyer@protonmail.com>\n"
"Language-Team: Belarusian <https://translate.blender.org/projects/blender-ui/ui/be/>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2023-09-26 10:37+0000\n"
"Last-Translator: Gilberto Rodrigues <gilbertorodrigues@outlook.com>\n"
"Language-Team: Bulgarian <https://translate.blender.org/projects/blender-ui/ui/bg/>\n"

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2023-12-12 02:28+0000\n"
"Last-Translator: Zdeněk Doležal <Griperis@outlook.cz>\n"
"Language-Team: Czech <https://translate.blender.org/projects/blender-ui/ui/cs/>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2023-11-06 03:54+0000\n"
"Last-Translator: leif larsen <linuxdk1978@gmail.com>\n"
"Language-Team: Danish <https://translate.blender.org/projects/blender-ui/ui/da/>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: \n"
"Last-Translator: Martin Reininger <martinreininger@gmx.net>\n"
"Language-Team: German translation team\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2008-03-23 12:20+0200\n"
"Last-Translator: Kostas Karvouniaris <neogen556@yahoo.gr>\n"
"Language-Team: \n"

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Ainhize & Miriam <agoenaga006@ikasle.ehu.eus>\n"
"Language-Team: Euskara <agoenaga006@ikasle.ehu.eus>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2023-11-30 20:00+0000\n"
"Last-Translator: \"M. Amin Taheri\" <amintaheri2001@gmail.com>\n"
"Language-Team: Persian <https://translate.blender.org/projects/blender-ui/ui/fa/>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2017-12-25 14:01+0100\n"
"Last-Translator: UMAR HARUNA ABDULLAHI <umarbrowser20@gmail.com>\n"
"Language-Team: BlenderNigeria <pyc0der@outlook.com>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2023-10-06 09:54+0000\n"
"Last-Translator: Eitan Traurig <eitant13@gmail.com>\n"
"Language-Team: Hebrew <https://translate.blender.org/projects/blender-ui/ui/he/>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2015-03-03 16:21+0530\n"
"Last-Translator: Roshan Lal Gumasta <roshan@anisecrets.com>\n"
"Language-Team: Hindi <www.anisecrets.com>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2024-01-11 03:55+0000\n"
"Last-Translator: Répási Dávid <hu.repasidavid@protonmail.com>\n"
"Language-Team: Hungarian <https://translate.blender.org/projects/blender-ui/ui/hu/>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2023-12-04 11:07+0000\n"
"Last-Translator: Mohamad Rido <mohamadrido@mail.ru>\n"
"Language-Team: Indonesian <https://translate.blender.org/projects/blender-ui/ui/id/>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2023-12-17 02:53+0000\n"
"Last-Translator: Jad Musallam <rubber.444332@gmail.com>\n"
"Language-Team: Italian <https://translate.blender.org/projects/blender-ui/ui/it/>\n"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2023-11-14 19:14+0000\n"
"Last-Translator: Lee YeonJoo <yzoo2@naver.com>\n"
"Language-Team: Korean <https://translate.blender.org/projects/blender-ui/ui/ko/>\n"

View File

@ -1,10 +1,10 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"(b'0000000000000000000000000000000000000000')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2013-11-05 13:47+0600\n"
"Last-Translator: Chyngyz Dzhumaliev <kyrgyzl10n@gmail.com>\n"
"Language-Team: Kirghiz <kyrgyzl10n@gmail.com>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: \n"
"Last-Translator: Yudhir Khanal <yudhir.khanal@gmail.com>\n"
"Language-Team: Yudhir\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2023-12-21 01:55+0000\n"
"Last-Translator: Lisa <blendergirl@tutanota.com>\n"
"Language-Team: Dutch <https://translate.blender.org/projects/blender-ui/ui/nl/>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2017-08-26 11:13+0200\n"
"Last-Translator: Mikołaj Juda <mikolaj.juda@gmail.com>\n"
"Language: pl\n"

View File

@ -1,10 +1,10 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: Ivan Paulos Tomé <ivan.paulos.tome@yandex.com>\n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"PO-Revision-Date: 2024-02-10 00:02+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2024-02-16 19:55+0000\n"
"Last-Translator: Duarte Ramos <duarte.framos@gmail.com>\n"
"Language-Team: Portuguese <https://translate.blender.org/projects/blender-ui/ui/pt/>\n"
"Language: pt\n"
@ -658,6 +658,14 @@ msgid "Motion Path settings for animation visualization"
msgstr "As definições de caminhos de movimento para a visualização de animação."
msgid "Bake to active Camera"
msgstr "Fazer bake para a Câmara activa"
msgid "Motion path points will be baked into the camera space of the active camera. This means they will only look right when looking through that camera. Switching cameras using markers is not supported"
msgstr "Os pontos do traçado de movimento serão calculados para o espaço de coordenadas da câmara activa. Isto significa que só aparecerão correctamente quando vendo por essa câmara. Mudar de câmara usando marcadores não é suportado"
msgid "Bake Location"
msgstr "Gerar e gravar posição"
@ -1490,6 +1498,10 @@ msgid "ID Name"
msgstr "Nome do identificador"
msgid "If this is set, the asset gets a custom ID, otherwise it takes the name of the class used to define the asset (for example, if the class name is \"OBJECT_AST_hello\", and bl_idname is not set by the script, then bl_idname = \"OBJECT_AST_hello\")"
msgstr "Quando definido, o recurso recebe um ID personalizado, caso contrário assume o nome da classe utilizada para definir o recurso (por exemplo, se o nome da classe é \"OBJECT_AST_hello\", e bl_idname não está definido pelo script, então bl_idname = \"OBJECT_AST_hello\")"
msgid "Options"
msgstr "Opções"
@ -2214,6 +2226,14 @@ msgid "Horizontal dimension of the baking map"
msgstr "Dimensão horizontal do mapa para geração e gravação."
msgid "Bézier Curve Point"
msgstr "Ponto de Curva Bézier"
msgid "Bézier curve point with two handles"
msgstr "Ponto de curva Bézier com dois manípulos"
msgid "Control Point"
msgstr "Pontos de controlo"
@ -3499,11 +3519,19 @@ msgid "Ease In"
msgstr "Suavizar Entrada"
msgid "Length of first Bézier Handle (for B-Bones only)"
msgstr "Comprimento do primeiro Manípulo Bézier (apenas para B-Bones)"
msgctxt "Armature"
msgid "Ease Out"
msgstr "Suavizar Saída"
msgid "Length of second Bézier Handle (for B-Bones only)"
msgstr "Comprimento do segundo Manípulo Bézier (apenas para B-Bones)"
msgid "B-Bone End Handle Type"
msgstr "Tipo de manípulo de fim do B-Bone"
@ -7214,6 +7242,10 @@ msgid "Floor"
msgstr "Piso"
msgid "Use position (and optionally rotation) of target to define a 'wall' or 'floor' that the owner cannot cross"
msgstr "Usa posição (e opcionalmente rotação) do alvo para definir uma \"parede\" ou \"piso\" que o proprietário não pode atravessar"
msgid "Follow Path"
msgstr "Seguir caminho"
@ -9275,6 +9307,10 @@ msgid "Handle Type"
msgstr "Tipo de manípulo"
msgid "Curve interpolation at this point: Bézier or vector"
msgstr "Interpolação de curva neste ponto: Bézier ou vetor"
msgid "Auto Handle"
msgstr "Manípulo automático"
@ -9395,6 +9431,10 @@ msgid "Poly"
msgstr "Polígonos"
msgid "Bézier"
msgstr "Bézier"
msgid "Depth"
msgstr "Profundidade"
@ -16838,18 +16878,127 @@ msgid "Show an indicator for the current value while dragging"
msgstr "Mostrar um indicador para o valor actual enquanto arrasta"
msgid "Handle All Events"
msgstr "Lidar com Todos os Eventos"
msgid "When highlighted, do not pass events through to be handled by other keymaps"
msgstr "Quando realçado, não deixar passar eventos para serem processados por outros mapeamentos de teclas"
msgid "Grab Cursor"
msgstr "Agarrar o cursor"
msgid "Tool Property Init"
msgstr "Iniciação de Propriedades de Ferramentas"
msgid "Merge active tool properties on activation (does not overwrite existing)"
msgstr "Juntar propriedades da ferramenta activa na activação (não sobrepõe existentes)"
msgid "Select Background"
msgstr "Seleccionar Fundo"
msgid "Don't write into the depth buffer"
msgstr "Não escrever no buffer de profundidade"
msgid "Use Tooltip"
msgstr "Usar Dica de Ferramenta"
msgid "Use tooltips when hovering over this gizmo"
msgstr "Mostrar dicas quando pairar sobre o gizmo"
msgctxt "Operator"
msgid "GizmoGroup"
msgstr "GrupoGizmo"
msgid "Storage of an operator being executed, or registered after execution"
msgstr "Armazenamento de um operador a ser executado, ou registado após execução"
msgid "Options for this operator type"
msgstr "Opções para este tipo de operador"
msgid "Use in 3D viewport"
msgstr "Usar na janela de visualização 3D"
msgid "Scale to respect zoom (otherwise zoom independent display size)"
msgstr "Redimensionar para respeitar o nível de aproximação (caso contrário tamanho de exibição independente do nível de aproximação)"
msgid "Depth 3D"
msgstr "Profundidade 3D"
msgid "Supports culled depth by other objects in the view"
msgstr "Suporta profundidade oculta por outros objectos no campo de visão"
msgid "Supports selection"
msgstr "Suportar selecção"
msgid "Persistent"
msgstr "Persistente"
msgid "Show Modal All"
msgstr "Mostrar Todos dos Modais"
msgid "Show all while interacting, as well as this group when another is being interacted with"
msgstr "Mostrar todos durante interacção, assim como este grupo durante interacção com outro"
msgid "Exclude Modal"
msgstr "Excluir Modal"
msgid "Show all except this group while interacting"
msgstr "Mostrar todos excepto este grupo durante interacção"
msgid "Tool Init"
msgstr "Inicialização de Ferramenta"
msgid "Postpone running until tool operator run (when used with a tool)"
msgstr "Adiar execução até correr operador de ferramenta (quando usado com uma ferramenta)"
msgid "Use fallback tools keymap"
msgstr "Usar mapeamento de teclas de reserva da ferramenta"
msgid "Add fallback tools keymap to this gizmo type"
msgstr "Adicionar mapeamento de teclas de ferramentas de reserva a este tipo de gizmo"
msgid "VR Redraws"
msgstr "Redesenhar para RV"
msgid "The gizmos are made for use with virtual reality sessions and require special redraw management"
msgstr "Os Gizmos são feitos para usar com sessões de realidade virtual e requerem gestão especial de representação"
msgid "Region Type"
msgstr "Tipo de região"
msgid "The region where the panel is going to be used in"
msgstr "A região em que o painel vai ser usado"
msgid "Window"
msgstr "Janela"
@ -16862,6 +17011,10 @@ msgid "Temporary"
msgstr "Temporário"
msgid "Sidebar"
msgstr "Barra Lateral"
msgid "Tools"
msgstr "Ferramentas"
@ -16870,6 +17023,90 @@ msgid "Tool Properties"
msgstr "Ferramentas de propriedades"
msgid "Asset Shelf Header"
msgstr "Cabeçalho da Prateleira de Recursos"
msgid "Floating Region"
msgstr "Região Flutuante"
msgid "Navigation Bar"
msgstr "Barra de Navegação"
msgid "Execute Buttons"
msgstr "Botões de Execução"
msgid "Footer"
msgstr "Rodapé"
msgid "Tool Header"
msgstr "Cabeçalho de Ferramentas"
msgid "XR"
msgstr "XR"
msgid "The space where the panel is going to be used in"
msgstr "O espaço no qual o painel vai ser usado"
msgid "Gizmos"
msgstr "Gizmos"
msgid "List of gizmos in the Gizmo Map"
msgstr "Lista de gizmos no Mapa de Gizmo"
msgid "Has Reports"
msgstr "Tem Relatórios"
msgid "GizmoGroup has a set of reports (warnings and errors) from last execution"
msgstr "O GizmoGroup tem um conjunto de relatórios (avisos e erros) da última execução"
msgid "VR Controller Poses Indicator"
msgstr "Indicador de Poses do Controlador de RV"
msgid "VR Viewer Pose Indicator"
msgstr "Indicador de Pose de Visualizador de RV"
msgid "Gizmo Group Properties"
msgstr "Propriedades do Grupo de Gizmos"
msgid "Input properties of a Gizmo Group"
msgstr "Propriedade de Entrada de um Grupo de Gizmos"
msgid "Gizmo Properties"
msgstr "Propriedades de Gizmo"
msgid "Input properties of a Gizmo"
msgstr "Propriedades de entrada de um Gizmo"
msgid "Modifier affecting the Grease Pencil object"
msgstr "Modificador afectando os objecto Grease Pencil"
msgid "Override Modifier"
msgstr "Revogar Modificador"
msgid "In a local override object, whether this modifier comes from the linked reference object, or is local to the override"
msgstr "Num objecto com revogação local, se este modificador vem do objecto de referência vinculado, ou é local da revogação"
msgid "Modifier name"
msgstr "Nome do modificador"
@ -16898,22 +17135,58 @@ msgid "Texture Mapping"
msgstr "Mapeamento de textura"
msgid "Change stroke UV texture values"
msgstr "Alterar valores UV de traço"
msgid "Time Offset"
msgstr "Deslocamento de tempo"
msgid "Offset keyframes"
msgstr "Afastar Fotogramas"
msgid "Vertex Weight Angle"
msgstr "Ângulo de Peso de Vértices"
msgid "Generate Vertex Weights base on stroke angle"
msgstr "Gerar Pesos de Vértices baseados no ângulo de traços"
msgid "Vertex Weight Proximity"
msgstr "Aproximar peso de vértices"
msgid "Generate Vertex Weights base on distance to object"
msgstr "Gerar Pesos de Vértices baseados na distância ao objecto"
msgid "Array"
msgstr "Matriz"
msgid "Create array of duplicate instances"
msgstr "Criar disposição de instâncias duplicadas"
msgid "Build"
msgstr "Construir"
msgid "Create duplication of strokes"
msgstr "Criar duplicação de traços"
msgid "Dot Dash"
msgstr "Ponto Traço"
msgid "Generate dot-dash styled strokes"
msgstr "Gerar traços com estilo de linha ponto-traço"
msgid "Envelope"
msgstr "Envelope"

View File

@ -1,11 +1,11 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: Leandro Paganelli <leandrobp@fastmail.com>\n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"PO-Revision-Date: 2024-01-18 19:12+0000\n"
"Last-Translator: Ruan da Silva Andrade <ruanandrade818@gmail.com>\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2024-02-19 09:39+0000\n"
"Last-Translator: Gilberto Rodrigues <gilbertorodrigues@outlook.com>\n"
"Language-Team: Portuguese (Brazil) <https://translate.blender.org/projects/blender-ui/ui/pt_BR/>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
@ -408,6 +408,14 @@ msgid "Display glTF UI to manage animations"
msgstr "Exibe a interface de usuario do glTF para gerenciar animações"
msgid "glTFpack file path"
msgstr "Caminho do arquivo glTFpack"
msgid "Path to gltfpack binary"
msgstr "Caminho para o executável glTFpack"
msgid "Displays glTF Material Output node in Shader Editor (Menu Add > Output)"
msgstr "Exibe o nó de saída de material glTF no Editor de Sombreamento (menu Adicionar > Saída)"
@ -504,6 +512,10 @@ msgid "Replace"
msgstr "Substituir"
msgid "The strip values replace the accumulated results by amount specified by influence"
msgstr "O resultado da faixa substitui os resultados acumulados pela quantidade especificada pela influência"
msgid "Combine"
msgstr "Combinar"
@ -524,14 +536,26 @@ msgid "Subtract"
msgstr "Subtrair"
msgid "Weighted result of strip is removed from the accumulated results"
msgstr "O resultado após a aplicação do peso da faixa é removido dos resultados acumulados"
msgid "Multiply"
msgstr "Multiplicar"
msgid "Weighted result of strip is multiplied with the accumulated results"
msgstr "O resultado ponderado é multiplicado com os resultados acumulados"
msgid "Action Extrapolation"
msgstr "Extrapolação de ação"
msgid "Action to take for gaps past the Active Action's range (when evaluating with NLA)"
msgstr "Ação a ser tomada para lacunas além do intervalo da Ação Ativa (ao evaluar com o Editor de Animação Não Linear)"
msgid "Nothing"
msgstr "Nenhum"
@ -576,6 +600,10 @@ msgid "NLA Tracks"
msgstr "Trilhas de animação não linear"
msgid "NLA Tracks (i.e. Animation Layers)"
msgstr "Trilhas de Animação Não Linear (ex: Camadas de Animação)"
msgid "NLA Evaluation Enabled"
msgstr "Avaliação de animação não linear habilitada"
@ -620,6 +648,14 @@ msgid "Motion Path settings for animation visualization"
msgstr "As definições de caminhos de movimento para a visualização de animação"
msgid "Bake to active Camera"
msgstr "Gravar à Câmera Ativa"
msgid "Motion path points will be baked into the camera space of the active camera. This means they will only look right when looking through that camera. Switching cameras using markers is not supported"
msgstr "Pontos de caminho de movimento serão pré-calculados para o espaço de câmera da câmera ativa. Isso significa que eles só irão aparecer corretos se vistos por aquela câmera. A troca de câmeras usando marcadores não é suportada"
msgid "Bake Location"
msgstr "Gerar e gravar posição"
@ -640,6 +676,10 @@ msgid "Tails"
msgstr "Bases"
msgid "Calculate bone paths from tails"
msgstr "Calcular o caminho dos ossos a partir das caudas"
msgid "After Current"
msgstr "Depois do atual"
@ -696,6 +736,10 @@ msgid "Type of range to calculate for Motion Paths"
msgstr "Tipo de intervalo a exibir para os caminhos de movimento"
msgid "All Keys"
msgstr "Todas as teclas"
msgid "From the first keyframe to the last"
msgstr "Do primeiro quadro ao último"
@ -708,10 +752,18 @@ msgid "From the first selected keyframe to the last"
msgstr "Do primeiro quadro-chave selecionado ao último"
msgid "Scene Frame Range"
msgstr "Intervalo de Quadros da Cena"
msgid "The entire Scene / Preview range"
msgstr "Toda a faixa de cena/visualização"
msgid "Manual Range"
msgstr "Intervalo Manual"
msgid "Manually determined frame range"
msgstr "Intervalo de quadros determinado manualmente"
@ -920,6 +972,10 @@ msgid "Top Bar"
msgstr "Barra Superior"
msgid "Global bar at the top of the screen for global per-window settings"
msgstr "Barra global no topo da tela para configurações globais por janela"
msgid "Status Bar"
msgstr "Barra de Status"
@ -1024,40 +1080,52 @@ msgid "Armature's active bone"
msgstr "Osso ativo da armação"
msgid "Armature Deform Constraint Targets"
msgstr "Alvos de Restrição de Deformação da Armação"
msgid "Collection of target bones and weights"
msgstr "Coleção de ossos e pesos alvo"
msgid "Armature EditBones"
msgstr "Ossos de edição nas armações"
msgstr "Ossos Editáveis da Armação"
msgid "Collection of armature edit bones"
msgstr "Coleção de ossos de edição nas armações"
msgstr "Coleção de ossos de edição da armação"
msgid "Active EditBone"
msgstr "Osso de edição ativo"
msgstr "Osso de Edição Ativo"
msgid "Armatures active edit bone"
msgstr "Osso ativo na edição da armação de ossos"
msgstr "Osso de edição ativo na armação"
msgid "Catalog Path"
msgstr "Caminho do catálogo"
msgstr "Caminho do Catálogo"
msgid "User Asset Libraries"
msgstr "Bibliotecas de Ativos do Usuário"
msgid "Asset Library Reference"
msgstr "Referência da Biblioteca de Ativos"
msgstr "Referência da Biblioteca de Itens"
msgid "Identifier to refer to the asset library"
msgstr "Identificador para se referir à biblioteca de ativos"
msgstr "Identificador para se referir à Biblioteca de Itens"
msgid "Asset Data"
msgstr "Dados de ativos"
msgstr "Dados de Itens"
msgid "Additional data stored for an asset data-block"
msgstr "Dados adicionais armazenados para um bloco de dados de ativos"
msgstr "Dados adicionais armazenados para um bloco de dados de item"
msgid "Active Tag"
@ -1329,6 +1397,14 @@ msgid "World"
msgstr "Ambiente"
msgid "The local data-block this asset represents; only valid if that is a data-block in this file"
msgstr "O bloco de dados local que este item representa; válido apenas se for um bloco de dados neste arquivo"
msgid "Asset Metadata"
msgstr "Meta-Dados de Item"
msgid "Additional information about the asset"
msgstr "Informações adicionais sobre o ativo"
@ -1353,6 +1429,22 @@ msgid "All"
msgstr "Todos"
msgid "Show assets from all of the listed asset libraries"
msgstr "Mostrar itens de todas as bibliotecas listadas"
msgid "Show the assets currently available in this Blender session"
msgstr "Mostrar os itens atualmente disponíveis nesta sessão do Blender"
msgid "Essentials"
msgstr "Essenciais"
msgid "Show the basic building blocks and utilities coming with Blender"
msgstr "Mostre os blocos de construção básicos e utilidades que vêm com o Blender"
msgid "Custom"
msgstr "Personalizar"
@ -1373,6 +1465,10 @@ msgid "No Asset Dragging"
msgstr "Sem arrastar ativos"
msgid "Disable the default asset dragging on drag events. Useful for implementing custom dragging via custom key-map items"
msgstr "Desativar o arrastar de itens padrão. Útil para implementar o arrasto personalizado por meio de mapa de teclas personalizados"
msgid "Space Type"
msgstr "Tipo de espaço"
@ -1465,6 +1561,10 @@ msgid "RGBA color with 32-bit floating-point values"
msgstr "Cor RGBA com valores de ponto flutuante de 32 bits"
msgid "RGBA color with 8-bit positive integer values"
msgstr "Cor RGBA com valores inteiros positivos de 8 bits"
msgid "String"
msgstr "Variável de texto"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2024-02-08 02:55+0000\n"
"Last-Translator: Andrej <azhilenkov@gmail.com>\n"
"Language-Team: Russian <https://translate.blender.org/projects/blender-ui/ui/ru/>\n"

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2012-09-07 22:32+0100\n"
"Last-Translator: Nikola Radovanovic <cobisimo@gmail.com>\n"
"Language-Team: Nikola Radovanovic\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2012-09-07 22:32+0100\n"
"Last-Translator: Nikola Radovanovic <cobisimo@gmail.com>\n"
"Language-Team: Nikola Radovanovic\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2024-01-17 19:22+0000\n"
"Last-Translator: Peter Simonsson <peter@simonsson.com>\n"
"Language-Team: Swedish <https://translate.blender.org/projects/blender-ui/ui/sv/>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2023-11-16 03:55+0000\n"
"Last-Translator: Isaac Gicheha <shwaky3@gmail.com>\n"
"Language-Team: Swahili <https://translate.blender.org/projects/blender-ui/ui/sw/>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2024-01-20 18:03+0000\n"
"Last-Translator: தமிழ்நேரம் <anishprabu.t@gmail.com>\n"
"Language-Team: Tamil <https://translate.blender.org/projects/blender-ui/ui/ta/>\n"
@ -135421,10 +135421,6 @@ msgid "Surface UV Coordinate"
msgstr "மேற்பரப்பு புறஊதா ஒருங்கிணைப்பு"
msgid "Surface UV coordinate at the attachment point"
msgstr "இணைப்பு புள்ளியில் மேற்பரப்பு புறஊதா ஒருங்கிணைப்பு"
msgid "Surface Normal"
msgstr "மேற்பரப்பு இயல்பானது"
@ -135433,16 +135429,12 @@ msgid "Surface normal at the attachment point"
msgstr "இணைப்பு புள்ளியில் மேற்பரப்பு இயல்பானது"
msgid "Surface Geometry to attach hair curves to"
msgstr "முடி வளைவுகளை இணைக்க மேற்பரப்பு வடிவியல்"
msgid "Surface Object to attach to (needs to have matching transforms)"
msgstr "இணைக்க வேண்டிய மேற்பரப்பு பொருள் (பொருந்தக்கூடிய மாற்றங்களைக் கொண்டிருக்க வேண்டும்)"
msgid "Surface UV map used for attachment "
msgstr "இணைப்புக்கு பயன்படுத்தப்படும் மேற்பரப்பு புறஊதா வரைபடம் "
msgid "Surface UV map used for attachment"
msgstr "இணைப்புக்கு பயன்படுத்தப்படும் மேற்பரப்பு புறஊதா வரைபடம்"
msgid "Surface Rest Position"
@ -135473,10 +135465,6 @@ msgid "Align to Surface Normal"
msgstr "மேற்பரப்பு இயல்புடன் சீரமைக்கவும்"
msgid "Align the curve to the surface normal (need guide as reference)"
msgstr "வளைவை மேற்பரப்பு இயல்புக்கு சீரமைக்கவும் (வழிகாட்டியாக தேவை)"
msgid "Blend along Curve"
msgstr "வளைவுடன் கலக்கவும்"
@ -135569,10 +135557,6 @@ msgid "Guide Mask"
msgstr "வழிகாட்டி முகமூடி"
msgid "Mask for which curve are eligible to be selected as guides"
msgstr "எந்த வளைவு வழிகாட்டிகளாகத் தேர்ந்தெடுக்க தகுதியானது"
msgid "Existing Guide Map"
msgstr "தற்போதுள்ள வழிகாட்டி வரைபடம்"
@ -135737,18 +135721,10 @@ msgid "Guide Selection"
msgstr "வழிகாட்டி தேர்வு"
msgid "Guide Curves or Points used for the selection of Guide Curves"
msgstr "வழிகாட்டி வளைவுகள் அல்லது வழிகாட்டி வளைவுகளைத் தேர்ந்தெடுப்பதற்கு பயன்படுத்தப்படும் புள்ளிகள்"
msgid "Minimum distance between two guides"
msgstr "இரண்டு வழிகாட்டிகளுக்கு இடையில் குறைந்தபட்ச தூரம்"
msgid "ID to group together curves for guide map creation"
msgstr "வழிகாட்டி வரைபடத்தை உருவாக்குவதற்கு வளைவுகளை ஒன்றிணைக்க ஐடி"
msgid "Curl Hair Curves"
msgstr "முடி வளைவுகளை சுருட்டுங்கள்"
@ -135805,30 +135781,10 @@ msgid "Curve ID"
msgstr "வளைவு ஐடி"
msgid "ID of each Curve"
msgstr "ஒவ்வொரு வளைவின் ஐடி"
msgid "Length of each Curve"
msgstr "ஒவ்வொரு வளைவின் நீளம்"
msgid "Direction from root to tip of each Curve"
msgstr "ஒவ்வொரு வளைவின் வேர் முதல் நுனி வரை திசை"
msgid "Random vector for each Curve"
msgstr "ஒவ்வொரு வளைவுக்கும் சீரற்ற திசையன்"
msgid "Surface UV"
msgstr "மேற்பரப்பு புறஊதா"
msgid "Attachment surface UV coordinate of each Curve"
msgstr "இணைப்பு மேற்பரப்பு UV ஒவ்வொரு வளைவின் ஒருங்கிணைப்பு"
msgid "Curve Root"
msgstr "வளைவு வேர்"
@ -135849,26 +135805,14 @@ msgid "Root Position"
msgstr "வேர் நிலை"
msgid "Position of the root point of a Curve"
msgstr "ஒரு வளைவின் வேர் புள்ளியின் நிலை"
msgid "Root Direction"
msgstr "வேர் திசை"
msgid "Direction of the root segment of a Curve"
msgstr "ஒரு வளைவின் வேர் பிரிவின் திசை"
msgid "Root Index"
msgstr "வேர் அட்டவணை"
msgid "Index of the root point of a Curve"
msgstr "ஒரு வளைவின் மூல புள்ளியின் அட்டவணை"
msgid "Curve Segment"
msgstr "வளைவு பிரிவு"
@ -135881,10 +135825,6 @@ msgid "Segment Length"
msgstr "பிரிவு நீளம்"
msgid "Distance to previous point on Curve"
msgstr "வளைவில் முந்தைய புள்ளிக்கான தூரம்"
msgid "Segment Direction"
msgstr "பிரிவு திசை"
@ -135921,26 +135861,14 @@ msgid "Tip Position"
msgstr "முனை நிலை"
msgid "Position of the tip point of a Curve"
msgstr "ஒரு வளைவின் முனை புள்ளியின் நிலை"
msgid "Tip Direction"
msgstr "உதவிக்குறிப்பு திசை"
msgid "Direction of the tip segment of a Curve"
msgstr "ஒரு வளைவின் முனை பிரிவின் திசை"
msgid "Tip Index"
msgstr "உதவிக்குறிப்பு அட்டவணை"
msgid "Index of the tip point of a Curve"
msgstr "ஒரு வளைவின் முனை புள்ளியின் அட்டவணை"
msgid "Displace Hair Curves"
msgstr "முடி வளைவுகளை இடமாற்றம் செய்யுங்கள்"
@ -136061,14 +135989,6 @@ msgid "Normal direction of the surface mesh at the attachment point"
msgstr "இணைப்பு புள்ளியில் மேற்பரப்பு கண்ணி இயல்பான திசை"
msgid "Surface geometry for generation "
msgstr "தலைமுறைக்கான மேற்பரப்பு வடிவியல் "
msgid "Surface object for generation (Needs matching transforms)"
msgstr "தலைமுறைக்கான மேற்பரப்பு பொருள் (பொருந்தும் மாற்றங்கள் தேவை)"
msgid "Length of the generated hair curves"
msgstr "உருவாக்கப்பட்ட முடி வளைவுகளின் நீளம்"
@ -136089,10 +136009,6 @@ msgid "Poisson Disk Distribution"
msgstr "பாய்சன் வட்டு விநியோகம்"
msgid "Use poisson disk distribution method to keep a minimum distance"
msgstr "குறைந்தபட்ச தூரத்தை வைத்திருக்க பாய்சன் வட்டு விநியோக முறையைப் பயன்படுத்தவும்"
msgid "Surface density of generated hair curves"
msgstr "உருவாக்கப்பட்ட முடி வளைவுகளின் மேற்பரப்பு அடர்த்தி"
@ -136105,10 +136021,6 @@ msgid "Factor applied on the density for curve distribution"
msgstr "வளைவு விநியோகத்திற்கான அடர்த்தியில் பயன்படுத்தப்படும் காரணி"
msgid "Discard points based on an mask texture after distribution"
msgstr "விநியோகத்திற்குப் பிறகு முகமூடி அமைப்பின் அடிப்படையில் புள்ளிகளை நிராகரிக்கவும்"
msgid "Factor applied on the density for the viewport"
msgstr "காட்சியமைப்புக்கான அடர்த்தியில் காரணி பயன்படுத்தப்படுகிறது"
@ -136125,10 +136037,6 @@ msgid "Attachment UV"
msgstr "இணைப்பு புறஊதா"
msgid "Surface attachment UV coordinate stored on each curve"
msgstr "ஒவ்வொரு வளைவிலும் சேமிக்கப்பட்டுள்ள மேற்பரப்பு இணைப்பு புறஊதா ஒருங்கிணைப்பு"
msgid "Attachment is Valid"
msgstr "இணைப்பு செல்லுபடியாகும்"
@ -136145,10 +136053,6 @@ msgid "Surface geometry of the curve attachment"
msgstr "வளைவு இணைப்பின் மேற்பரப்பு வடிவியல்"
msgid "Surface UV map used for attachment"
msgstr "இணைப்புக்கு பயன்படுத்தப்படும் மேற்பரப்பு புறஊதா வரைபடம்"
msgid "Deforms hair curves using a noise texture"
msgstr "சத்தம் அமைப்பைப் பயன்படுத்தி முடி வளைவுகளை சிதைக்கிறது"
@ -136169,26 +136073,14 @@ msgid "Scale along Curve"
msgstr "வளைவுடன் அளவிடவும்"
msgid "Scale of noise texture along each Curve"
msgstr "ஒவ்வொரு வளைவிலும் இரைச்சல் அமைப்பின் அளவு"
msgid "Offset per Curve"
msgstr "ஒரு வளைவுக்கு ஆஃப்செட்"
msgid "Random offset of noise texture for each Curve"
msgstr "ஒவ்வொரு வளைவுக்கும் இரைச்சல் அமைப்பின் சீரற்ற ஆஃப்செட்"
msgid "Seed value for randomization"
msgstr "சீரற்றமயமாக்கலுக்கான விதை மதிப்பு"
msgid "Preserve the length of the Curves on a segment basis"
msgstr "வளைவுகளின் நீளத்தை ஒரு பிரிவு அடிப்படையில் பாதுகாக்கவும்"
msgid "Interpolates existing guide curves on a surface mesh"
msgstr "மேற்பரப்பு கண்ணி மீது இருக்கும் வழிகாட்டி வளைவுகளை இடைக்கணிக்கிறது"
@ -136241,10 +136133,6 @@ msgid "Feature Awareness"
msgstr "அம்ச விழிப்புணர்வு"
msgid "Use simeple feature awareness to keep feature definition"
msgstr "அம்ச வரையறையை வைத்திருக்க சிமிப்பிள் அம்ச விழிப்புணர்வைப் பயன்படுத்தவும்"
msgid "Restore Curve Segment Length"
msgstr "வளைவு பிரிவு நீளத்தை மீட்டமை"
@ -136353,14 +136241,6 @@ msgid "Factor to influence the rotation angle"
msgstr "சுழற்சி கோணத்தை பாதிக்கும் காரணி"
msgid "Rotation Axis (Default: Tangent at root)"
msgstr "சுழற்சி அச்சு (இயல்புநிலை: வேரில் தொடுகோடு)"
msgid "Random offset to the rotation angle per Curve"
msgstr "ஒரு வளைவுக்கு சுழற்சி கோணத்திற்கு சீரற்ற ஆஃப்செட்"
msgid "Lock Ends"
msgstr "பூட்டு முனைகள்"
@ -136429,10 +136309,6 @@ msgid "Smoothing Steps"
msgstr "மென்மையாக்கும் படிகள்"
msgid "Amount of steps of smoothing applied after shwrinkwrap"
msgstr "சுருக்கத்திற்குப் பிறகு பயன்படுத்தப்படும் மென்மையாக்கலின் படிகளின் அளவு"
msgid "Lock Roots"
msgstr "பூட்டு வேர்கள்"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2019-12-08 17:40+0700\n"
"Last-Translator: gongpha <gongpha@gmail.com>\n"
"Language-Team: Thai Translation Team <gongpha@gmail.com>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2024-01-18 08:08+0000\n"
"Last-Translator: Emre İnan <emre4321a@gmail.com>\n"
"Language-Team: Turkish <https://translate.blender.org/projects/blender-ui/ui/tr/>\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2021-03-01 19:15+0000\n"
"Last-Translator: lxlalexlxl <lxlalexlxl@ukr.net>\n"
"Language-Team: Ukrainian (Ukraine) (http://www.transifex.com/lxlalexlxl/blender/language/uk_UA/)\n"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2024-01-25 18:24+0000\n"
"Last-Translator: Hoang Duy Tran <hoangduytran1960@googlemail.com>\n"
"Language-Team: Vietnamese <https://translate.blender.org/projects/blender-ui/ui/vi/>\n"
@ -135202,10 +135202,6 @@ msgid "Surface UV Coordinate"
msgstr "Tọa Độ UV của Bề Mặt"
msgid "Surface UV coordinate at the attachment point"
msgstr "Tọa độ UV bề mặt tại điểm đính vào"
msgid "Surface Normal"
msgstr "Pháp Tuyến Bề Mặt"
@ -135214,16 +135210,12 @@ msgid "Surface normal at the attachment point"
msgstr "Pháp tuyến Bề mặt tại điểm đính kèm"
msgid "Surface Geometry to attach hair curves to"
msgstr "Hình Học Bề Mặt để gắn các đường cong tóc vào"
msgid "Surface Object to attach to (needs to have matching transforms)"
msgstr "Đối Tượng Bề Mặt để gắn vào (cần có các biến hóa xứng khớp)"
msgid "Surface UV map used for attachment "
msgstr "Ánh xạ UV bề mặt sử dụng để đính vào "
msgid "Surface UV map used for attachment"
msgstr "Ánh xạ UV bề mặt sử dụng cho vật đính kèm"
msgid "Surface Rest Position"
@ -135254,10 +135246,6 @@ msgid "Align to Surface Normal"
msgstr "Căn Chỉnh theo Pháp Tuyến Bề Mặt"
msgid "Align the curve to the surface normal (need guide as reference)"
msgstr "Căn chỉnh đường cong theo pháp tuyến bề mặt (cần hướng dẫn làm tham chiếu)"
msgid "Blend along Curve"
msgstr "Pha Trộn dọc theo Đường Cong"
@ -135350,10 +135338,6 @@ msgid "Guide Mask"
msgstr "Chắn Lọc Hướng Dẫn"
msgid "Mask for which curve are eligible to be selected as guides"
msgstr "Chắn lọc cho đường cong nào đủ điều kiện được chọn làm hướng dẫn"
msgid "Existing Guide Map"
msgstr "Bản Đồ Hướng Dẫn Hiện Có"
@ -135518,18 +135502,10 @@ msgid "Guide Selection"
msgstr "Lựa Chọn Hướng Dẫn"
msgid "Guide Curves or Points used for the selection of Guide Curves"
msgstr "Đường Cong Hướng Dẫn hoặc các Điểm sử dụng để chọn Đường Cong Hướng Dẫn"
msgid "Minimum distance between two guides"
msgstr "Khoảng cách tối thiểu giữa hai hướng dẫn"
msgid "ID to group together curves for guide map creation"
msgstr "ID để nhóm các đường cong lại với nhau hòng tạo bản đồ hướng dẫn"
msgid "Curl Hair Curves"
msgstr "Đường Cong Tóc Xoăn Lọn"
@ -135586,30 +135562,10 @@ msgid "Curve ID"
msgstr "ID của Đường Cong"
msgid "ID of each Curve"
msgstr "ID của mỗi Đường Cong"
msgid "Length of each Curve"
msgstr "Chiều Dài của mỗi Đường Cong"
msgid "Direction from root to tip of each Curve"
msgstr "Chiều hướng từ gốc đến ngọn của mỗi Đường Cong"
msgid "Random vector for each Curve"
msgstr "Vector ngẫu nhiên cho mỗi đường cong"
msgid "Surface UV"
msgstr "UV của Bề Mặt"
msgid "Attachment surface UV coordinate of each Curve"
msgstr "Tọa độ UV bề mặt đính vào của mỗi Đường cong"
msgid "Curve Root"
msgstr "Gốc Đường Cong"
@ -135630,26 +135586,14 @@ msgid "Root Position"
msgstr "Vị Trí Gốc"
msgid "Position of the root point of a Curve"
msgstr "Vị trí điểm gốc của một Đường Cong"
msgid "Root Direction"
msgstr "Chiều Hướng Gốc"
msgid "Direction of the root segment of a Curve"
msgstr "Chiều hướng của phân đoạn gốc của một Đường Cong"
msgid "Root Index"
msgstr "Chỉ Số Gốc"
msgid "Index of the root point of a Curve"
msgstr "Chỉ số điểm gốc của một Đường Cong"
msgid "Curve Segment"
msgstr "Phân Đoạn Đường Cong"
@ -135662,10 +135606,6 @@ msgid "Segment Length"
msgstr "Chiều Dài Phân Đoạn"
msgid "Distance to previous point on Curve"
msgstr "Khoảng cách tới điểm trước đó trên Đường Cong"
msgid "Segment Direction"
msgstr "Chiều Hướng Phân Đoạn"
@ -135702,26 +135642,14 @@ msgid "Tip Position"
msgstr "Vị Trí Đỉnh"
msgid "Position of the tip point of a Curve"
msgstr "Vị trí điểm đầu của một Đường Cong"
msgid "Tip Direction"
msgstr "Chiều Hướng Đỉnh"
msgid "Direction of the tip segment of a Curve"
msgstr "Chiều hướng của phân đoạn đỉnh của một Đường Cong"
msgid "Tip Index"
msgstr "Chỉ Số Đỉnh"
msgid "Index of the tip point of a Curve"
msgstr "Chỉ số điểm đỉnh của một Đường Cong"
msgid "Displace Hair Curves"
msgstr "Dịch chuyển các đường cong tóc"
@ -135842,14 +135770,6 @@ msgid "Normal direction of the surface mesh at the attachment point"
msgstr "Chiều hướng pháp tuyến của khung lưới bề mặt tại điểm gắn vào"
msgid "Surface geometry for generation "
msgstr "Hình học bề mặt để sinh tạo "
msgid "Surface object for generation (Needs matching transforms)"
msgstr "Đối tượng bề mặt để sinh tạo (Cần các biến dạng xứng khớp)"
msgid "Length of the generated hair curves"
msgstr "Chiều dài của đường cong tóc sinh tạo ra"
@ -135870,10 +135790,6 @@ msgid "Poisson Disk Distribution"
msgstr "Phân Phối Đĩa Poisson"
msgid "Use poisson disk distribution method to keep a minimum distance"
msgstr "Sử dụng phương pháp phân phối đĩa poisson để giữ một khoảng cách tối thiểu"
msgid "Surface density of generated hair curves"
msgstr "Mật độ bề mặt của đường cong tóc sinh tạo ra"
@ -135886,10 +135802,6 @@ msgid "Factor applied on the density for curve distribution"
msgstr "Hệ số áp dụng cho mật độ để phân bố đường cong"
msgid "Discard points based on an mask texture after distribution"
msgstr "Loại bỏ các điểm dựa trên chất liệu màn chắn lọc sau khi phân bổ"
msgid "Factor applied on the density for the viewport"
msgstr "Hệ số áp dụng trên mật độ cho khung nhìn"
@ -135906,10 +135818,6 @@ msgid "Attachment UV"
msgstr "UV của vật Đính Kèm"
msgid "Surface attachment UV coordinate stored on each curve"
msgstr "Tọa độ UV của vật đính kèm bề mặt được lưu trữ trên mỗi đường cong"
msgid "Attachment is Valid"
msgstr "Vật Đính Kèm là Hợp Lệ"
@ -135926,10 +135834,6 @@ msgid "Surface geometry of the curve attachment"
msgstr "Hình học bề mặt của phần đính kèm đường cong"
msgid "Surface UV map used for attachment"
msgstr "Ánh xạ UV bề mặt sử dụng cho vật đính kèm"
msgid "Deforms hair curves using a noise texture"
msgstr "Làm biến dạng các đường cong tóc bằng cách sử dụng chất liệu nhiễu"
@ -135950,26 +135854,14 @@ msgid "Scale along Curve"
msgstr "Đổi Tỷ Lệ dọc theo Đường Cong"
msgid "Scale of noise texture along each Curve"
msgstr "Tỷ lệ của chất liệu nhiễu dọc theo mỗi Đường Cong"
msgid "Offset per Curve"
msgstr "Dịch Chuyển mỗi Đường Cong"
msgid "Random offset of noise texture for each Curve"
msgstr "Dịch chuyển ngẫu nhiên chất liệu nhiễu cho mỗi Đường Cong"
msgid "Seed value for randomization"
msgstr "Giá trị mầm ngẫu nhiên"
msgid "Preserve the length of the Curves on a segment basis"
msgstr "Bảo tồn độ dài của Đường Cong trên cơ sở phân đoạn"
msgid "Interpolates existing guide curves on a surface mesh"
msgstr "Nội suy các đường cong hướng dẫn hiện có trên khung lưới bề mặt"
@ -136022,10 +135914,6 @@ msgid "Feature Awareness"
msgstr "Nhận Thức Hình Thể"
msgid "Use simeple feature awareness to keep feature definition"
msgstr "Sử dụng tính năng nhận thức hình thể đơn giản để duy trì các định hình về hình thể"
msgid "Restore Curve Segment Length"
msgstr "Khôi Phục Độ Dài Phân Đoạn Đường Cong"
@ -136134,14 +136022,6 @@ msgid "Factor to influence the rotation angle"
msgstr "Hiệu số ảnh hưởng đến góc xoay chiều"
msgid "Rotation Axis (Default: Tangent at root)"
msgstr "Trục Xoay Chiều (Mặc Định: Tiếp tuyến tại gốc)"
msgid "Random offset to the rotation angle per Curve"
msgstr "Dịch chuyển ngẫu nhiên cho góc xoay chiều trên mỗi Đường Cong"
msgid "Lock Ends"
msgstr "Khóa các Đầu"
@ -136210,10 +136090,6 @@ msgid "Smoothing Steps"
msgstr "Số Bước Làm Mịn"
msgid "Amount of steps of smoothing applied after shwrinkwrap"
msgstr "Số bước làm mịn được áp dụng sau khi co bọc"
msgid "Lock Roots"
msgstr "Khóa Gốc"

View File

@ -1,10 +1,10 @@
msgid ""
msgstr ""
"Project-Id-Version: Blender 4.1.0 Beta (b'835651cfddcb')\n"
"Project-Id-Version: Blender 4.1.0 Beta (b'09ff1b1f7e3f')\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 11:01+0000\n"
"PO-Revision-Date: 2024-02-11 19:00+0000\n"
"POT-Creation-Date: 2024-02-19 09:41+0000\n"
"PO-Revision-Date: 2024-02-18 18:33+0000\n"
"Last-Translator: Ye Gui <ziweidao@foxmail.com>\n"
"Language-Team: Chinese (Simplified) <https://translate.blender.org/projects/blender-ui/ui/zh_Hans/>\n"
"Language: zh_HANS\n"
@ -522,7 +522,7 @@ msgstr "合并"
msgid "The strip values are combined with accumulated results by appropriately using addition, multiplication, or quaternion math, based on channel type"
msgstr "根据通道类型,适当地使用加法、乘法或四元数运算,将片段值与累积结果合并"
msgstr "根据通道类型,适当地使用加法、乘法或四元数运算,将片段值与累积结果合并"
msgid "Add"
@ -1734,7 +1734,7 @@ msgstr "该属性供Blender内部使用"
msgid "Is Required"
msgstr "是必的"
msgstr "是必的"
msgid "Whether the attribute can be removed or renamed"
@ -1926,7 +1926,7 @@ msgstr "文件路径"
msgid "Image filepath to use when saving externally"
msgstr "将图像存为外部文件时使用的文件路径"
msgstr "将图像存为外部文件时使用的文件路径"
msgid "Vertical dimension of the baking map"
@ -3090,7 +3090,7 @@ msgstr "排列系数"
msgid "Avoid object if danger from it is above this threshold"
msgstr "如果超过当前阈值躲避物体"
msgstr "如果超过当前阈值躲避物体"
msgid "Object to avoid"
@ -3262,7 +3262,7 @@ msgstr "健康状态"
msgid "Initial boid health when born"
msgstr "出生的初始健康状态"
msgstr "出生的初始健康状态"
msgid "Boid height relative to particle size"
@ -4068,7 +4068,7 @@ msgstr "雕刻能力"
msgid "Read-only indications of which brush operations are supported by the current sculpt tool"
msgstr "只读型标, 标示的是哪个笔刷操作被当前雕刻工具所支持"
msgstr "只读型标, 标示的是哪个笔刷操作被当前雕刻工具所支持"
msgid "Has Auto Smooth"
@ -6443,7 +6443,7 @@ msgstr "光源为 D65白点下的线性 DCI-P3"
msgid "Linear FilmLight E-Gamut"
msgstr "线性 FilmLight E-Gamut 色域)"
msgstr "线性 FilmLight E-Gamut (色域)"
msgid "Linear E-Gamut with illuminant D65 white point"
@ -7916,7 +7916,7 @@ msgstr "偏移系数"
msgid "Percentage value defining target position along length of curve"
msgstr "确定目标位置在曲线长度上的百分比值"
msgstr "确定目标位置在曲线长度上的百分比值"
msgid "Target Curve object"
@ -10135,7 +10135,7 @@ msgstr "仅显示已选中"
msgid "Only include channels relating to selected objects and data"
msgstr "包含与选择物体和数据相关的通道"
msgstr "包含与选择物体和数据相关的通道"
msgid "Display Particle"
@ -11153,7 +11153,7 @@ msgstr "平滑度"
msgid "Limit maximum steepness of wave slope between simulation points (use higher values for smoother waves at expense of reduced detail)"
msgstr "将波形的最大斜度限制在模拟点之间 (使用更高的值做出更平滑的波形, 将损失一定的细节)"
msgstr "将波形的最大斜度限制在模拟点之间 (使用更高的值得到更平滑的波形, 将损失一定的细节)"
msgid "Wave propagation speed"
@ -19976,11 +19976,11 @@ msgstr "排除"
msgid "Use Exclusion blending mode while painting"
msgstr "在绘制时使用排混合模式"
msgstr "在绘制时使用排混合模式"
msgid "Use Subtract blending mode while painting"
msgstr "在绘制时使用 '相减' 混合模式"
msgstr "在绘制时使用相减混合模式"
msgid "Use Hue blending mode while painting"
@ -20448,7 +20448,7 @@ msgstr "通过改变布料模拟的约束形状来使网格变形"
msgid "Amount of random elements that are going to be affected by the brush"
msgstr "将受笔刷影响的随机元素的数量"
msgstr "将受笔刷影响的随机元素的数量"
msgid "Max Element Distance"
@ -20782,7 +20782,7 @@ msgstr "基于屏幕空间或相对于笔刷大小执行抖动"
msgid "Jittering happens in screen space, in pixels"
msgstr "屏幕空间中抖动, 单位为像素"
msgstr "屏幕空间中抖动, 单位为像素"
msgid "Jittering happens relative to the brush size"
@ -21395,7 +21395,7 @@ msgstr "仅影响与笔画起始位置法向相似的顶点"
msgid "Affect only vertices connected to the active vertex under the brush"
msgstr "仅影响笔刷下与活动顶点相连的顶点"
msgstr "仅影响笔刷下与活动顶点相连的顶点"
msgid "View Normal"
@ -21883,7 +21883,7 @@ msgstr "重写帧"
msgid "Whether to use a custom frame for looking up data in the cache file, instead of using the current scene frame"
msgstr "是否要使用自定义帧用于查找在缓存文件中的数据,而不是使用当前的场景帧"
msgstr "是否需要使用自定义帧来查找在缓存文件中的数据,而不是使用当前的场景帧"
msgid "Prefetch Cache Size"
@ -30571,7 +30571,7 @@ msgstr "类别"
msgid "Filter add-ons by category"
msgstr "以分类筛选插件"
msgstr "按类别筛选插件"
msgid "Filter by add-on name, author & category"
@ -31631,7 +31631,7 @@ msgstr "模态键位映射表"
msgid "Indicates that a keymap is used for translate modal events for an operator"
msgstr "键位映射表被定义为录用于响应促动器的模态事件"
msgstr "键位映射表被定义为录用于响应促动器的模态事件"
msgid "Keymap is defined by the user"
@ -39307,7 +39307,7 @@ msgstr "用于选择/加权受影响区域的顶点组名称"
msgid "Ocean Modifier"
msgstr "洋面修改器"
msgstr "洋面修改器"
msgid "Simulate an ocean surface"
@ -39423,11 +39423,11 @@ msgstr "随机生成器的种数"
msgid "Repetitions of the generated surface in X"
msgstr "所生成表面的 X 向重复量"
msgstr "所生成表面的 X 向重复量"
msgid "Repetitions of the generated surface in Y"
msgstr "所生成表面的 Y 向重复量"
msgstr "所生成表面的 Y 向重复量"
msgid "Render Resolution"
@ -45154,7 +45154,7 @@ msgstr "输出指定帧号上某个标记的绝对位置"
msgid "Method to use to filter transform"
msgstr "用于过滤变化的的方法"
msgstr "用于过滤变的方法"
msgid "Translate"
@ -48530,7 +48530,7 @@ msgstr "偏移量"
msgid "Offset Frequency"
msgstr "品议频率"
msgstr "偏移频率"
msgid "Squash Amount"
@ -50151,15 +50151,15 @@ msgstr "布尔节点接口界面"
msgid "Collection Node Socket Interface"
msgstr "集合节点接口"
msgstr "集合节点接口界面"
msgid "Color Node Socket Interface"
msgstr "色彩型节点接口"
msgstr "色彩型节点接口界面"
msgid "Float Node Socket Interface"
msgstr "浮点型节点接口"
msgstr "浮点型节点接口界面"
msgid "Maximum value"
@ -50179,23 +50179,27 @@ msgstr "默认值的子类型"
msgid "Geometry Node Socket Interface"
msgstr "几何节点接口"
msgstr "几何节点接口界面"
msgid "Image Node Socket Interface"
msgstr "图像节点接口"
msgstr "图像节点接口界面"
msgid "Integer Node Socket Interface"
msgstr "整数型节点接口"
msgstr "整数型节点接口界面"
msgid "Material Node Socket Interface"
msgstr "材质节点接口"
msgstr "材质节点接口界面"
msgid "Menu Node Socket Interface"
msgstr "菜单节点接口界面"
msgid "Object Node Socket Interface"
msgstr "物体节点接口"
msgstr "物体节点接口界面"
msgid "Rotation Node Socket Interface"
@ -50203,19 +50207,19 @@ msgstr "旋转节点接口界面"
msgid "Shader Node Socket Interface"
msgstr "着色器型节点接口"
msgstr "着色器型节点接口界面"
msgid "String Node Socket Interface"
msgstr "字符串型节点接口"
msgstr "字符串型节点接口界面"
msgid "Texture Node Socket Interface"
msgstr "纹理节点接口"
msgstr "纹理节点接口界面"
msgid "Vector Node Socket Interface"
msgstr "矢量型节点接口"
msgstr "矢量型节点接口界面"
msgid "Node Tree Path"
@ -51090,7 +51094,7 @@ msgstr "帧吸附"
msgid "Snap selected keyframes to the times specified"
msgstr "选择的关键帧吸附至指定的时间点"
msgstr "选择的关键帧吸附至指定的时间点"
msgid "Selection to Current Frame"
@ -64220,7 +64224,7 @@ msgstr "使用顶点组影响精减结果"
msgid "Delete selected vertices, edges or faces"
msgstr "删除选中的顶点、边或面"
msgstr "删除选中的顶点、边或面"
msgid "Method used for deleting mesh data"
@ -66495,7 +66499,7 @@ msgstr "所选的点/边/面的修改次序, 基于指定的方法"
msgid "Which elements to affect (vertices, edges and/or faces)"
msgstr "删除选中的的顶点、边或面"
msgstr "哪类元素将受影响 (顶点, 边和/或面)"
msgid "Reverse the sorting effect"
@ -70694,7 +70698,7 @@ msgstr "执行大小写匹配"
msgid "Name filter using '*', '?' and '[abc]' unix style wildcards"
msgstr "使用通配符'*'和'?'进行名称过滤"
msgstr "使用unix通配符'*', '?' 和 '[abc]' 进行名称过滤"
msgid "Select or deselect random visible objects"
@ -73372,7 +73376,7 @@ msgstr "从上下文中使用活动的粒子系统"
msgid "Delete selected particles or keys"
msgstr "删除选中的粒子或关键帧"
msgstr "删除选中的粒子或关键帧"
msgid "Delete a full particle or only keys"
@ -98244,6 +98248,10 @@ msgid "Use nearest sample"
msgstr "使用邻近采样"
msgid "Interpolate between 2×2 samples"
msgstr "在 2×2 采样之间插值"
msgid "Move along X axis"
msgstr "沿 X 轴移动"
@ -117016,7 +117024,7 @@ msgstr "退出"
msgctxt "Operator"
msgid "Last Session"
msgstr "最近的话"
msgstr "最近的话"
msgctxt "Operator"
@ -117056,7 +117064,7 @@ msgstr "重复历史..."
msgctxt "Operator"
msgid "Menu Search..."
msgstr "菜单查找..."
msgstr "菜单搜索..."
msgctxt "Operator"
@ -136610,10 +136618,6 @@ msgid "Surface UV Coordinate"
msgstr "表面UV坐标"
msgid "Surface UV coordinate at the attachment point"
msgstr "附着点表面的UV坐标"
msgid "Surface Normal"
msgstr "表面法线"
@ -136622,16 +136626,12 @@ msgid "Surface normal at the attachment point"
msgstr "附着点表面法线"
msgid "Surface Geometry to attach hair curves to"
msgstr "毛发曲线附加到的曲面几何体"
msgid "Surface Object to attach to (needs to have matching transforms)"
msgstr "表面物体附加到 (需要进行匹配的转换)"
msgid "Surface UV map used for attachment "
msgstr "用于附着的表面UV映射 "
msgid "Surface UV map used for attachment"
msgstr "用于附着的表面UV映射"
msgid "Surface Rest Position"
@ -136662,10 +136662,6 @@ msgid "Align to Surface Normal"
msgstr "对齐到表面法线"
msgid "Align the curve to the surface normal (need guide as reference)"
msgstr "将曲线与表面法线对齐(需要导线作为参考)"
msgid "Blend along Curve"
msgstr "沿曲线混合"
@ -136758,10 +136754,6 @@ msgid "Guide Mask"
msgstr "引导遮罩"
msgid "Mask for which curve are eligible to be selected as guides"
msgstr "适合被选择用作于引导的曲线遮罩"
msgid "Existing Guide Map"
msgstr "现有的引导映射"
@ -136926,18 +136918,10 @@ msgid "Guide Selection"
msgstr "引导选择"
msgid "Guide Curves or Points used for the selection of Guide Curves"
msgstr "用于选择的导向曲线的导向曲线或点"
msgid "Minimum distance between two guides"
msgstr "两条引导线之间的最小距离"
msgid "ID to group together curves for guide map creation"
msgstr "用于将曲线组群以创建引导映射的ID"
msgid "Curl Hair Curves"
msgstr "卷发曲线"
@ -136994,30 +136978,10 @@ msgid "Curve ID"
msgstr "曲线ID"
msgid "ID of each Curve"
msgstr "每条曲线的ID"
msgid "Length of each Curve"
msgstr "每条曲线的长度"
msgid "Direction from root to tip of each Curve"
msgstr "从每条曲线的根部到梢部的方向"
msgid "Random vector for each Curve"
msgstr "每条曲线的随机矢量"
msgid "Surface UV"
msgstr "表面UV"
msgid "Attachment surface UV coordinate of each Curve"
msgstr "每条曲线的附着表面UV坐标"
msgid "Curve Root"
msgstr "曲线根部"
@ -137038,26 +137002,14 @@ msgid "Root Position"
msgstr "根部位置"
msgid "Position of the root point of a Curve"
msgstr "曲线的根点位置"
msgid "Root Direction"
msgstr "根部方向"
msgid "Direction of the root segment of a Curve"
msgstr "曲线根部线段的方向"
msgid "Root Index"
msgstr "根部编号"
msgid "Index of the root point of a Curve"
msgstr "曲线的根点编号"
msgid "Curve Segment"
msgstr "曲线片段"
@ -137070,10 +137022,6 @@ msgid "Segment Length"
msgstr "片段长度"
msgid "Distance to previous point on Curve"
msgstr "到曲线上前一点的距离"
msgid "Segment Direction"
msgstr "片段方向"
@ -137110,26 +137058,14 @@ msgid "Tip Position"
msgstr "梢部位置"
msgid "Position of the tip point of a Curve"
msgstr "曲线梢部点的位置"
msgid "Tip Direction"
msgstr "梢部方向"
msgid "Direction of the tip segment of a Curve"
msgstr "曲线梢部片段的方向"
msgid "Tip Index"
msgstr "梢部编号"
msgid "Index of the tip point of a Curve"
msgstr "曲线发梢点的编号"
msgid "Displace Hair Curves"
msgstr "置换毛发曲线"
@ -137250,14 +137186,6 @@ msgid "Normal direction of the surface mesh at the attachment point"
msgstr "附着点位置的表面网格法线方向"
msgid "Surface geometry for generation "
msgstr "用于生成的曲面几何图形 "
msgid "Surface object for generation (Needs matching transforms)"
msgstr "用于生成的曲面物体(需要匹配变换)"
msgid "Length of the generated hair curves"
msgstr "生成的毛发曲线的长度"
@ -137278,10 +137206,6 @@ msgid "Poisson Disk Distribution"
msgstr "泊松盘分布"
msgid "Use poisson disk distribution method to keep a minimum distance"
msgstr "使用泊松圆盘分布方法保持最小距离"
msgid "Surface density of generated hair curves"
msgstr "生成的毛发曲线的表面密度"
@ -137294,10 +137218,6 @@ msgid "Factor applied on the density for curve distribution"
msgstr "应用于曲线分布密度的系数"
msgid "Discard points based on an mask texture after distribution"
msgstr "分布后,基于一个遮罩纹理舍弃点"
msgid "Factor applied on the density for the viewport"
msgstr "应用于视口密度的系数"
@ -137314,10 +137234,6 @@ msgid "Attachment UV"
msgstr "附加UV"
msgid "Surface attachment UV coordinate stored on each curve"
msgstr "存储在每条曲线上的曲面UV坐标"
msgid "Attachment is Valid"
msgstr "附加有效性"
@ -137334,10 +137250,6 @@ msgid "Surface geometry of the curve attachment"
msgstr "曲线附着的表面几何"
msgid "Surface UV map used for attachment"
msgstr "用于附着的表面UV映射"
msgid "Deforms hair curves using a noise texture"
msgstr "使用噪波纹理变形毛发曲线"
@ -137358,26 +137270,14 @@ msgid "Scale along Curve"
msgstr "沿曲线缩放"
msgid "Scale of noise texture along each Curve"
msgstr "沿每条曲线的噪波纹理缩放"
msgid "Offset per Curve"
msgstr "每条曲线的偏移"
msgid "Random offset of noise texture for each Curve"
msgstr "每条曲线的噪波纹理的随机偏移"
msgid "Seed value for randomization"
msgstr "随机化的种子值"
msgid "Preserve the length of the Curves on a segment basis"
msgstr "以片段为基础保留曲线的长度"
msgid "Interpolates existing guide curves on a surface mesh"
msgstr "插值曲面网格上的现有引导曲线"
@ -137430,10 +137330,6 @@ msgid "Feature Awareness"
msgstr "特征意识"
msgid "Use simeple feature awareness to keep feature definition"
msgstr "使用简单的特征意识来保持特征定义"
msgid "Restore Curve Segment Length"
msgstr "恢复曲线段长度"
@ -137542,14 +137438,6 @@ msgid "Factor to influence the rotation angle"
msgstr "旋转角度系数"
msgid "Rotation Axis (Default: Tangent at root)"
msgstr "旋转轴(默认为发根的切线方向)"
msgid "Random offset to the rotation angle per Curve"
msgstr "每条曲线旋转角度的随机偏移量"
msgid "Lock Ends"
msgstr "锁定发稍"
@ -137618,10 +137506,6 @@ msgid "Smoothing Steps"
msgstr "平滑步数"
msgid "Amount of steps of smoothing applied after shwrinkwrap"
msgstr "缩裹后应用的平滑步数"
msgid "Lock Roots"
msgstr "锁定发根"

File diff suppressed because it is too large Load Diff

View File

@ -25,7 +25,7 @@ PERFORMANCE OF THIS SOFTWARE.
** Embree; version 4.1.0 -- https://github.com/embree/embree
** Intel(R) oneAPI DPC++ compiler; version 2022-12 --
https://github.com/intel/llvm#oneapi-dpc-compiler
** Intel® Open Path Guiding Library; version 0.5.0 -- http://www.openpgl.org/
** Intel® Open Path Guiding Library; version 0.6.0 -- http://www.openpgl.org/
** Mantaflow; version 0.13 -- http://mantaflow.com/
** materialX; version 1.38.6 --
https://github.com/AcademySoftwareFoundation/MaterialX

View File

@ -108,6 +108,7 @@ class OBJECT_MT_modifier_add_edit(ModifierAddMenu, Menu):
self.operator_modifier_add(layout, 'VERTEX_WEIGHT_MIX')
self.operator_modifier_add(layout, 'VERTEX_WEIGHT_PROXIMITY')
if ob_type == 'GREASEPENCIL':
self.operator_modifier_add(layout, 'GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY')
self.operator_modifier_add(layout, 'GREASE_PENCIL_VERTEX_WEIGHT_ANGLE')
layout.template_modifier_asset_menu_items(catalog_path=self.bl_label)

View File

@ -4704,7 +4704,6 @@ class VIEW3D_MT_edit_mesh_edges(Menu):
layout.operator("mesh.set_sharpness_by_angle")
if with_freestyle:
layout.separator()

View File

@ -51,7 +51,7 @@ BoneCollection *ANIM_bonecoll_new(const char *name) ATTR_WARN_UNUSED_RESULT;
* \see ANIM_armature_bonecoll_remove
*
* \param do_id_user_count whether to update user counts for IDs referenced from IDProperties of
* the bone collection. Needs to be false when freeing a CoW copy, true otherwise.
* the bone collection. Needs to be false when freeing an evaluated copy, true otherwise.
*/
void ANIM_bonecoll_free(BoneCollection *bcoll, bool do_id_user_count = true);

View File

@ -18,18 +18,21 @@ AllAssetLibrary::AllAssetLibrary() : AssetLibrary(ASSET_LIBRARY_ALL) {}
void AllAssetLibrary::rebuild(const bool reload_catalogs)
{
/* Start with empty catalog storage. */
catalog_service = std::make_unique<AssetCatalogService>(AssetCatalogService::read_only_tag());
/* Start with empty catalog storage. Don't do this directly in #this.catalog_service to avoid
* race conditions. Rather build into a new service and replace the current one when done. */
std::unique_ptr<AssetCatalogService> new_catalog_service = std::make_unique<AssetCatalogService>(
AssetCatalogService::read_only_tag());
AssetLibrary::foreach_loaded(
[&](AssetLibrary &nested) {
if (reload_catalogs) {
nested.catalog_service->reload_catalogs();
}
catalog_service->add_from_existing(*nested.catalog_service);
new_catalog_service->add_from_existing(*nested.catalog_service);
},
false);
catalog_service->rebuild_tree();
new_catalog_service->rebuild_tree();
this->catalog_service = std::move(new_catalog_service);
}
void AllAssetLibrary::refresh_catalogs()

View File

@ -1400,7 +1400,6 @@ static void blf_font_fill(FontBLF *font)
font->char_width = 1.0f;
font->char_spacing = 0.0f;
BLI_listbase_clear(&font->cache);
font->kerning_cache = nullptr;
#if BLF_BLUR_ENABLE
font->blur = 0;
@ -1760,7 +1759,7 @@ static FontBLF *blf_font_new_impl(const char *filepath,
const size_t mem_size,
void *ft_library)
{
FontBLF *font = (FontBLF *)MEM_callocN(sizeof(FontBLF), "blf_font_new");
FontBLF *font = MEM_new<FontBLF>(__func__);
font->mem_name = mem_name ? BLI_strdup(mem_name) : nullptr;
font->filepath = filepath ? BLI_strdup(filepath) : nullptr;
@ -1780,8 +1779,6 @@ static FontBLF *blf_font_new_impl(const char *filepath,
font->ft_lib = ft_library ? (FT_Library)ft_library : ft_lib;
BLI_mutex_init(&font->glyph_cache_mutex);
/* If we have static details about this font file, we don't have to load the Face yet. */
bool face_needed = true;
@ -1878,9 +1875,7 @@ void blf_font_free(FontBLF *font)
MEM_freeN(font->mem_name);
}
BLI_mutex_end(&font->glyph_cache_mutex);
MEM_freeN(font);
MEM_delete(font);
}
/** \} */

View File

@ -75,28 +75,24 @@ static float from_16dot16(FT_Fixed value)
/** \name Glyph Cache
* \{ */
static GlyphCacheBLF *blf_glyph_cache_find(const FontBLF *font, const float size)
static GlyphCacheBLF *blf_glyph_cache_find(FontBLF *font, const float size)
{
GlyphCacheBLF *gc = (GlyphCacheBLF *)font->cache.first;
while (gc) {
for (std::unique_ptr<GlyphCacheBLF> &gc : font->cache) {
if (gc->size == size && (gc->bold == ((font->flags & BLF_BOLD) != 0)) &&
(gc->italic == ((font->flags & BLF_ITALIC) != 0)) &&
(gc->char_weight == font->char_weight) && (gc->char_slant == font->char_slant) &&
(gc->char_width == font->char_width) && (gc->char_spacing == font->char_spacing))
{
return gc;
return gc.get();
}
gc = gc->next;
}
return nullptr;
}
static GlyphCacheBLF *blf_glyph_cache_new(FontBLF *font)
{
GlyphCacheBLF *gc = (GlyphCacheBLF *)MEM_callocN(sizeof(GlyphCacheBLF), "blf_glyph_cache_new");
std::unique_ptr<GlyphCacheBLF> gc = std::make_unique<GlyphCacheBLF>(GlyphCacheBLF{});
gc->next = nullptr;
gc->prev = nullptr;
gc->size = font->size;
gc->bold = ((font->flags & BLF_BOLD) != 0);
gc->italic = ((font->flags & BLF_ITALIC) != 0);
@ -125,13 +121,14 @@ static GlyphCacheBLF *blf_glyph_cache_new(FontBLF *font)
gc->fixed_width = 1;
}
BLI_addhead(&font->cache, gc);
return gc;
font->cache.append(std::move(gc));
return font->cache.last().get();
}
GlyphCacheBLF *blf_glyph_cache_acquire(FontBLF *font)
{
BLI_mutex_lock(&font->glyph_cache_mutex);
font->glyph_cache_mutex.lock();
GlyphCacheBLF *gc = blf_glyph_cache_find(font, font->size);
@ -144,34 +141,28 @@ GlyphCacheBLF *blf_glyph_cache_acquire(FontBLF *font)
void blf_glyph_cache_release(FontBLF *font)
{
BLI_mutex_unlock(&font->glyph_cache_mutex);
font->glyph_cache_mutex.unlock();
}
static void blf_glyph_cache_free(GlyphCacheBLF *gc)
GlyphCacheBLF::~GlyphCacheBLF()
{
for (uint i = 0; i < ARRAY_SIZE(gc->bucket); i++) {
while (GlyphBLF *g = static_cast<GlyphBLF *>(BLI_pophead(&gc->bucket[i]))) {
for (uint i = 0; i < ARRAY_SIZE(this->bucket); i++) {
while (GlyphBLF *g = static_cast<GlyphBLF *>(BLI_pophead(&this->bucket[i]))) {
blf_glyph_free(g);
}
}
if (gc->texture) {
GPU_texture_free(gc->texture);
if (this->texture) {
GPU_texture_free(this->texture);
}
if (gc->bitmap_result) {
MEM_freeN(gc->bitmap_result);
if (this->bitmap_result) {
MEM_freeN(this->bitmap_result);
}
MEM_freeN(gc);
}
void blf_glyph_cache_clear(FontBLF *font)
{
BLI_mutex_lock(&font->glyph_cache_mutex);
while (GlyphCacheBLF *gc = static_cast<GlyphCacheBLF *>(BLI_pophead(&font->cache))) {
blf_glyph_cache_free(gc);
}
BLI_mutex_unlock(&font->glyph_cache_mutex);
std::lock_guard lock{font->glyph_cache_mutex};
font->cache.clear_and_shrink();
}
/**

View File

@ -8,6 +8,10 @@
#pragma once
#include <mutex>
#include "BLI_vector.hh"
#include "GPU_texture.h"
#include "GPU_vertex_buffer.h"
@ -113,9 +117,6 @@ struct KerningCacheBLF {
};
struct GlyphCacheBLF {
GlyphCacheBLF *next;
GlyphCacheBLF *prev;
/** Font size. */
float size;
@ -139,6 +140,8 @@ struct GlyphCacheBLF {
int bitmap_len;
int bitmap_len_landed;
int bitmap_len_alloc;
~GlyphCacheBLF();
};
struct GlyphBLF {
@ -361,7 +364,7 @@ struct FontBLF {
* List of glyph caches (#GlyphCacheBLF) for this font for size, DPI, bold, italic.
* Use blf_glyph_cache_acquire(font) and blf_glyph_cache_release(font) to access cache!
*/
ListBase cache;
blender::Vector<std::unique_ptr<GlyphCacheBLF>> cache;
/** Cache of unscaled kerning values. Will be NULL if font does not have kerning. */
KerningCacheBLF *kerning_cache;
@ -385,5 +388,5 @@ struct FontBLF {
FontBufInfoBLF buf_info;
/** Mutex lock for glyph cache. */
ThreadMutex glyph_cache_mutex;
std::mutex glyph_cache_mutex;
};

View File

@ -181,7 +181,7 @@ void BKE_driver_invalidate_expression(struct ChannelDriver *driver,
*
* - `anim_eval_context->eval_time` is the frame at which F-Curve is being evaluated.
* - Has to return a float value.
* - \a driver_orig is where we cache Python expressions, in case of COW
* - \a driver_orig is where we cache Python expressions, in case of copy-on-eval
*/
float evaluate_driver(struct PathResolvedRNA *anim_rna,
struct ChannelDriver *driver,

View File

@ -139,7 +139,7 @@ enum {
* specific code in some copy cases (mostly for node trees). */
LIB_ID_CREATE_LOCAL = 1 << 9,
/** Create for the depsgraph, when set #LIB_TAG_COPIED_ON_WRITE must be set.
/** Create for the depsgraph, when set #LIB_TAG_COPIED_ON_EVAL must be set.
* Internally this is used to share some pointers instead of duplicating them. */
LIB_ID_COPY_SET_COPIED_ON_WRITE = 1 << 10,
@ -182,7 +182,7 @@ enum {
/** Create a local, outside of bmain, data-block to work on. */
LIB_ID_CREATE_LOCALIZE = LIB_ID_CREATE_NO_MAIN | LIB_ID_CREATE_NO_USER_REFCOUNT |
LIB_ID_CREATE_NO_DEG_TAG,
/** Generate a local copy, outside of bmain, to work on (used by COW e.g.). */
/** Generate a local copy, outside of bmain, to work on (used by copy-on-eval e.g.). */
LIB_ID_COPY_LOCALIZE = LIB_ID_CREATE_LOCALIZE | LIB_ID_COPY_NO_PREVIEW | LIB_ID_COPY_CACHES |
LIB_ID_COPY_NO_LIB_OVERRIDE,
};

View File

@ -588,7 +588,7 @@ void BKE_modifier_deform_vertsEM(ModifierData *md,
/**
* Get evaluated mesh for other evaluated object, which is used as an operand for the modifier,
* e.g. second operand for boolean modifier.
* Note that modifiers in stack always get fully evaluated COW ID pointers,
* Note that modifiers in stack always get fully evaluated ID pointers,
* never original ones. Makes things simpler.
*/
Mesh *BKE_modifier_get_evaluated_mesh_from_evaluated_object(Object *ob_eval);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,7 @@
#include "DNA_node_tree_interface_types.h"
#include "DNA_node_types.h"
#include "BKE_node.h"
#include "BKE_node.hh"
#include <queue>
#include <type_traits>

View File

@ -67,7 +67,7 @@ struct ObjectRuntime {
/**
* Original data pointer, before object->data was changed to point
* to data_eval.
* Is assigned by dependency graph's copy-on-write evaluation.
* Is assigned by dependency graph's copy-on-evaluation.
*/
ID *data_orig = nullptr;
/**
@ -103,7 +103,7 @@ struct ObjectRuntime {
/**
* Original grease pencil bGPdata pointer, before object->data was changed to point
* to gpd_eval.
* Is assigned by dependency graph's copy-on-write evaluation.
* Is assigned by dependency graph's copy-on-evaluation.
*/
bGPdata *gpd_orig = nullptr;
/**

View File

@ -460,7 +460,6 @@ set(SRC
BKE_movieclip.h
BKE_multires.hh
BKE_nla.h
BKE_node.h
BKE_node.hh
BKE_node_enum.hh
BKE_node_runtime.hh

View File

@ -570,7 +570,7 @@ static void mesh_calc_modifiers(Depsgraph *depsgraph,
/* This geometry set contains the non-mesh data that might be generated by modifiers. */
GeometrySet geometry_set_final;
BLI_assert((mesh_input->id.tag & LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT) == 0);
BLI_assert((mesh_input->id.tag & LIB_TAG_COPIED_ON_EVAL_FINAL_RESULT) == 0);
/* Mesh with constructive modifiers but no deformation applied. Tracked
* along with final mesh if undeformed / orco coordinates are requested
@ -1446,7 +1446,7 @@ void makeDerivedMesh(Depsgraph *depsgraph,
/* Evaluated meshes aren't supposed to be created on original instances. If you do,
* they aren't cleaned up properly on mode switch, causing crashes, e.g #58150. */
BLI_assert(ob->id.tag & LIB_TAG_COPIED_ON_WRITE);
BLI_assert(ob->id.tag & LIB_TAG_COPIED_ON_EVAL);
BKE_object_free_derived_caches(ob);
if (DEG_is_active(depsgraph)) {
@ -1492,7 +1492,7 @@ Mesh *mesh_get_eval_deform(Depsgraph *depsgraph,
/* Evaluated meshes aren't supposed to be created on original instances. If you do,
* they aren't cleaned up properly on mode switch, causing crashes, e.g #58150. */
BLI_assert(ob->id.tag & LIB_TAG_COPIED_ON_WRITE);
BLI_assert(ob->id.tag & LIB_TAG_COPIED_ON_EVAL);
/* if there's no derived mesh or the last data mask used doesn't include
* the data we need, rebuild the derived mesh
@ -1576,7 +1576,7 @@ Mesh *editbmesh_get_eval_cage_from_orig(Depsgraph *depsgraph,
Object *obedit,
const CustomData_MeshMasks *dataMask)
{
BLI_assert((obedit->id.tag & LIB_TAG_COPIED_ON_WRITE) == 0);
BLI_assert((obedit->id.tag & LIB_TAG_COPIED_ON_EVAL) == 0);
const Scene *scene_eval = (const Scene *)DEG_get_evaluated_id(depsgraph, (ID *)&scene->id);
Object *obedit_eval = (Object *)DEG_get_evaluated_id(depsgraph, &obedit->id);
BMEditMesh *em_eval = BKE_editmesh_from_object(obedit_eval);

View File

@ -458,7 +458,7 @@ void BKE_action_flip_with_pose(bAction *act, Object *ob_arm)
action_flip_pchan_rna_paths(act);
DEG_id_tag_update(&act->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&act->id, ID_RECALC_SYNC_TO_EVAL);
}
/** \} */

View File

@ -21,7 +21,7 @@
#include "BKE_lib_query.hh"
#include "BKE_main.hh"
#include "BKE_nla.h"
#include "BKE_node.h"
#include "BKE_node.hh"
#include "BKE_report.hh"
#include "DNA_ID.h"
@ -689,7 +689,7 @@ void BKE_animdata_transfer_by_basepath(Main *bmain, ID *srcID, ID *dstID, ListBa
}
}
/* Tag source action because list of fcurves changed. */
DEG_id_tag_update(&srcAdt->action->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&srcAdt->action->id, ID_RECALC_SYNC_TO_EVAL);
}
/* Path Validation -------------------------------------------- */
@ -1025,14 +1025,14 @@ void BKE_animdata_fix_paths_rename(ID *owner_id,
if (fcurves_path_rename_fix(
owner_id, prefix, oldName, newName, oldN, newN, &adt->action->curves, verify_paths))
{
DEG_id_tag_update(&adt->action->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&adt->action->id, ID_RECALC_SYNC_TO_EVAL);
}
}
if (adt->tmpact) {
if (fcurves_path_rename_fix(
owner_id, prefix, oldName, newName, oldN, newN, &adt->tmpact->curves, verify_paths))
{
DEG_id_tag_update(&adt->tmpact->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&adt->tmpact->id, ID_RECALC_SYNC_TO_EVAL);
}
}
/* Drivers - Drivers are really F-Curves */
@ -1045,7 +1045,7 @@ void BKE_animdata_fix_paths_rename(ID *owner_id,
}
/* Tag owner ID if it */
if (is_self_changed) {
DEG_id_tag_update(owner_id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(owner_id, ID_RECALC_SYNC_TO_EVAL);
}
/* free the temp names */
MEM_freeN(oldN);

View File

@ -46,7 +46,7 @@
#include "BKE_main.hh"
#include "BKE_material.h"
#include "BKE_nla.h"
#include "BKE_node.h"
#include "BKE_node.hh"
#include "BKE_report.hh"
#include "BKE_texture.h"
@ -4116,7 +4116,7 @@ void BKE_animsys_update_driver_array(ID *id)
AnimData *adt = BKE_animdata_from_id(id);
/* Runtime driver map to avoid O(n^2) lookups in BKE_animsys_eval_driver.
* Ideally the depsgraph could pass a pointer to the COW driver directly,
* Ideally the depsgraph could pass a pointer to the evaluated driver directly,
* but this is difficult in the current design. */
if (adt && adt->drivers.first) {
BLI_assert(!adt->driver_array);
@ -4168,7 +4168,7 @@ void BKE_animsys_eval_driver(Depsgraph *depsgraph, ID *id, int driver_index, FCu
PathResolvedRNA anim_rna;
if (BKE_animsys_rna_path_resolve(&id_ptr, fcu->rna_path, fcu->array_index, &anim_rna)) {
/* Evaluate driver, and write results to COW-domain destination */
/* Evaluate driver, and write results to copy-on-eval-domain destination */
const float ctime = DEG_get_ctime(depsgraph);
const AnimationEvalContext anim_eval_context = BKE_animsys_eval_context_construct(
depsgraph, ctime);

View File

@ -31,7 +31,7 @@
#include "BKE_global.hh"
#include "BKE_idprop.h"
#include "BKE_main.hh"
#include "BKE_node.h"
#include "BKE_node.hh"
#include "BKE_report.hh"
#include "BKE_screen.hh"
#include "BKE_studiolight.h"

View File

@ -917,7 +917,7 @@ static void setup_app_data(bContext *C,
}
}
/* Setting scene might require having a dependency graph, with copy on write
/* Setting scene might require having a dependency graph, with copy-on-eval
* we need to make sure we ensure scene has correct color management before
* constructing dependency graph.
*/

View File

@ -61,7 +61,7 @@
#include "BKE_lib_id.hh"
#include "BKE_library.hh"
#include "BKE_main.hh"
#include "BKE_node.h"
#include "BKE_node.hh"
#include "BKE_report.hh"
#include "BKE_vfont.hh"
@ -118,7 +118,7 @@ void BKE_bpath_foreach_path_id(BPathForeachPathData *bpath_data, ID *id)
id_type->foreach_path(id, bpath_data);
if (bpath_data->is_path_modified) {
DEG_id_tag_update(id, ID_RECALC_SOURCE | ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(id, ID_RECALC_SOURCE | ID_RECALC_SYNC_TO_EVAL);
}
}

View File

@ -168,7 +168,7 @@ void BKE_cachefile_reader_open(CacheFile *cache_file,
{
#if defined(WITH_ALEMBIC) || defined(WITH_USD)
BLI_assert(cache_file->id.tag & LIB_TAG_COPIED_ON_WRITE);
BLI_assert(cache_file->id.tag & LIB_TAG_COPIED_ON_EVAL);
if (cache_file->handle == nullptr) {
return;
@ -220,7 +220,7 @@ void BKE_cachefile_reader_free(CacheFile *cache_file, CacheReader **reader)
BLI_spin_lock(&spin);
if (*reader != nullptr) {
if (cache_file) {
BLI_assert(cache_file->id.tag & LIB_TAG_COPIED_ON_WRITE);
BLI_assert(cache_file->id.tag & LIB_TAG_COPIED_ON_EVAL);
switch (cache_file->type) {
case CACHEFILE_TYPE_ALEMBIC:
@ -328,12 +328,12 @@ void BKE_cachefile_reload(Depsgraph *depsgraph, CacheFile *cache_file)
cachefile_handle_free(cache_file_eval);
}
DEG_id_tag_update(&cache_file->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&cache_file->id, ID_RECALC_SYNC_TO_EVAL);
}
void BKE_cachefile_eval(Main *bmain, Depsgraph *depsgraph, CacheFile *cache_file)
{
BLI_assert(cache_file->id.tag & LIB_TAG_COPIED_ON_WRITE);
BLI_assert(cache_file->id.tag & LIB_TAG_COPIED_ON_EVAL);
/* Compute filepath. */
char filepath[FILE_MAX];

View File

@ -1859,7 +1859,7 @@ void BKE_collection_parent_relations_rebuild(Collection *collection)
/* Can happen when remapping data partially out-of-Main (during advanced ID management
* operations like lib-override resync e.g.). */
if ((child->collection->id.tag & (LIB_TAG_NO_MAIN | LIB_TAG_COPIED_ON_WRITE)) != 0) {
if ((child->collection->id.tag & (LIB_TAG_NO_MAIN | LIB_TAG_COPIED_ON_EVAL)) != 0) {
continue;
}
@ -1883,7 +1883,7 @@ static void collection_parents_rebuild_recursive(Collection *collection)
LISTBASE_FOREACH (CollectionChild *, child, &collection->children) {
/* See comment above in `BKE_collection_parent_relations_rebuild`. */
if ((child->collection->id.tag & (LIB_TAG_NO_MAIN | LIB_TAG_COPIED_ON_WRITE)) != 0) {
if ((child->collection->id.tag & (LIB_TAG_NO_MAIN | LIB_TAG_COPIED_ON_EVAL)) != 0) {
continue;
}
collection_parents_rebuild_recursive(child->collection);

View File

@ -1086,7 +1086,7 @@ static void childof_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *tar
data->flag &= ~CHILDOF_SET_INVERSE;
/* Write the computed matrix back to the master copy if in COW evaluation. */
/* Write the computed matrix back to the master copy if in copy-on-eval evaluation. */
bConstraint *orig_con = constraint_find_original_for_update(cob, con);
if (orig_con != nullptr) {
@ -3359,7 +3359,7 @@ static void distlimit_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *t
if (data->dist == 0) {
data->dist = dist;
/* Write the computed distance back to the master copy if in COW evaluation. */
/* Write the computed distance back to the master copy if in copy-on-eval evaluation. */
bConstraint *orig_con = constraint_find_original_for_update(cob, con);
if (orig_con != nullptr) {
@ -3526,7 +3526,7 @@ static void stretchto_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *t
if (data->orglength == 0) {
data->orglength = dist;
/* Write the computed length back to the master copy if in COW evaluation. */
/* Write the computed length back to the master copy if in copy-on-eval evaluation. */
bConstraint *orig_con = constraint_find_original_for_update(cob, con);
if (orig_con != nullptr) {
@ -5327,7 +5327,7 @@ static void objectsolver_evaluate(bConstraint *con, bConstraintOb *cob, ListBase
data->flag &= ~OBJECTSOLVER_SET_INVERSE;
/* Write the computed matrix back to the master copy if in COW evaluation. */
/* Write the computed matrix back to the master copy if in copy-on-eval evaluation. */
bConstraint *orig_con = constraint_find_original_for_update(cob, con);
if (orig_con != nullptr) {
@ -6106,7 +6106,7 @@ bConstraint *BKE_constraint_find_from_target(Object *ob,
return nullptr;
}
/* Finds the original copy of the constraint based on a COW copy. */
/* Finds the original copy of the constraint based on an evaluated copy. */
static bConstraint *constraint_find_original(Object *ob,
bPoseChannel *pchan,
bConstraint *con,
@ -6157,7 +6157,7 @@ static bConstraint *constraint_find_original(Object *ob,
static bConstraint *constraint_find_original_for_update(bConstraintOb *cob, bConstraint *con)
{
/* Write the computed distance back to the master copy if in COW evaluation. */
/* Write the computed distance back to the master copy if in copy-on-eval evaluation. */
if (!DEG_is_active(cob->depsgraph)) {
return nullptr;
}
@ -6166,7 +6166,7 @@ static bConstraint *constraint_find_original_for_update(bConstraintOb *cob, bCon
bConstraint *orig_con = constraint_find_original(cob->ob, cob->pchan, con, &orig_ob);
if (orig_con != nullptr) {
DEG_id_tag_update(&orig_ob->id, ID_RECALC_COPY_ON_WRITE | ID_RECALC_TRANSFORM);
DEG_id_tag_update(&orig_ob->id, ID_RECALC_SYNC_TO_EVAL | ID_RECALC_TRANSFORM);
}
return orig_con;

View File

@ -534,7 +534,7 @@ void BKE_gpencil_convert_curve(Main *bmain,
ob_gp->actcol = actcol;
/* Tag for recalculation */
DEG_id_tag_update(&gpd->id, ID_RECALC_GEOMETRY | ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&gpd->id, ID_RECALC_GEOMETRY | ID_RECALC_SYNC_TO_EVAL);
DEG_id_tag_update(&ob_gp->id, ID_RECALC_GEOMETRY);
}

View File

@ -2788,7 +2788,7 @@ bool BKE_gpencil_convert_mesh(Main *bmain,
use_vgroups);
/* Tag for recalculation */
DEG_id_tag_update(&gpd->id, ID_RECALC_GEOMETRY | ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&gpd->id, ID_RECALC_GEOMETRY | ID_RECALC_SYNC_TO_EVAL);
return true;
}

View File

@ -330,7 +330,7 @@ void BKE_gpencil_frame_active_set(Depsgraph *depsgraph, bGPdata *gpd)
bGPdata *gpd_orig = (bGPdata *)DEG_get_original_id(&gpd->id);
/* sync "actframe" changes back to main-db too,
* so that editing tools work with copy-on-write
* so that editing tools work with copy-on-evaluation
* when the current frame changes
*/
LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd_orig->layers) {
@ -640,13 +640,13 @@ bGPDframe *BKE_gpencil_frame_retime_get(Depsgraph *depsgraph,
static void gpencil_assign_object_eval(Object *object)
{
BLI_assert(object->id.tag & LIB_TAG_COPIED_ON_WRITE);
BLI_assert(object->id.tag & LIB_TAG_COPIED_ON_EVAL);
bGPdata *gpd_eval = object->runtime->gpd_eval;
gpd_eval->id.tag |= LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT;
gpd_eval->id.tag |= LIB_TAG_COPIED_ON_EVAL_FINAL_RESULT;
if (object->id.tag & LIB_TAG_COPIED_ON_WRITE) {
if (object->id.tag & LIB_TAG_COPIED_ON_EVAL) {
object->data = gpd_eval;
}
}

View File

@ -7,15 +7,17 @@
*/
#include "BKE_attribute.hh"
#include "BKE_colortools.hh"
#include "BKE_curves.hh"
#include "BKE_deform.hh"
#include "BKE_gpencil_modifier_legacy.h"
#include "BKE_grease_pencil.hh"
#include "BKE_grease_pencil_legacy_convert.hh"
#include "BKE_idprop.hh"
#include "BKE_lib_id.hh"
#include "BKE_material.h"
#include "BKE_modifier.hh"
#include "BKE_node.h"
#include "BKE_node.hh"
#include "BKE_node_tree_update.hh"
#include "BKE_object.hh"
@ -23,11 +25,13 @@
#include "BLI_listbase.h"
#include "BLI_math_vector_types.hh"
#include "BLI_string.h"
#include "BLI_string_utf8.h"
#include "BLI_vector.hh"
#include "BLT_translation.hh"
#include "DNA_gpencil_legacy_types.h"
#include "DNA_gpencil_modifier_types.h"
#include "DNA_grease_pencil_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
@ -496,7 +500,7 @@ static bNodeTree *add_offset_radius_node_tree(Main &bmain)
void thickness_factor_to_modifier(const bGPdata &src_object_data, Object &dst_object)
{
if (src_object_data.pixfactor <= 0.0f) {
if (src_object_data.pixfactor == 1.0f) {
return;
}
const float thickness_factor = src_object_data.pixfactor;
@ -577,6 +581,157 @@ void layer_adjustments_to_modifiers(Main &bmain,
DEG_relations_tag_update(&bmain);
}
static ModifierData &legacy_object_modifier_common(Object &object,
const ModifierType type,
GpencilModifierData &legacy_md)
{
/* TODO: Copy of most of #ED_object_modifier_add, this should be a BKE_modifiers function
* actually. */
const ModifierTypeInfo *mti = BKE_modifier_get_info(type);
ModifierData &new_md = *BKE_modifier_new(type);
if (mti->flags & eModifierTypeFlag_RequiresOriginalData) {
ModifierData *md;
for (md = static_cast<ModifierData *>(object.modifiers.first);
md && BKE_modifier_get_info(ModifierType(md->type))->type == ModifierTypeType::OnlyDeform;
md = md->next)
;
BLI_insertlinkbefore(&object.modifiers, md, &new_md);
}
else {
BLI_addtail(&object.modifiers, &new_md);
}
/* Generate new persistent UID and best possible unique name. */
BKE_modifiers_persistent_uid_init(object, new_md);
if (legacy_md.name[0]) {
STRNCPY_UTF8(new_md.name, legacy_md.name);
}
BKE_modifier_unique_name(&object.modifiers, &new_md);
/* Handle commom modifier data. */
new_md.mode = legacy_md.mode;
new_md.flag |= legacy_md.flag & (eModifierFlag_OverrideLibrary_Local | eModifierFlag_Active);
/* Attempt to copy UI state (panels) as best as possible. */
new_md.ui_expand_flag = legacy_md.ui_expand_flag;
return new_md;
}
static void legacy_object_modifier_noise(GreasePencilNoiseModifierData &gp_md_noise,
NoiseGpencilModifierData &legacy_md_noise)
{
gp_md_noise.flag = legacy_md_noise.flag;
gp_md_noise.factor = legacy_md_noise.factor;
gp_md_noise.factor_strength = legacy_md_noise.factor_strength;
gp_md_noise.factor_thickness = legacy_md_noise.factor_thickness;
gp_md_noise.factor_uvs = legacy_md_noise.factor_uvs;
gp_md_noise.noise_scale = legacy_md_noise.noise_scale;
gp_md_noise.noise_offset = legacy_md_noise.noise_offset;
gp_md_noise.noise_mode = legacy_md_noise.noise_mode;
gp_md_noise.step = legacy_md_noise.step;
gp_md_noise.seed = legacy_md_noise.seed;
STRNCPY(gp_md_noise.influence.layer_name, legacy_md_noise.layername);
if (legacy_md_noise.flag & GP_NOISE_INVERT_LAYER) {
gp_md_noise.influence.flag |= GREASE_PENCIL_INFLUENCE_INVERT_LAYER_FILTER;
}
gp_md_noise.influence.layer_pass = legacy_md_noise.layer_pass;
if (gp_md_noise.influence.layer_pass > 0) {
gp_md_noise.influence.flag |= GREASE_PENCIL_INFLUENCE_USE_LAYER_PASS_FILTER;
}
if (legacy_md_noise.flag & GP_NOISE_INVERT_LAYERPASS) {
gp_md_noise.influence.flag |= GREASE_PENCIL_INFLUENCE_INVERT_LAYER_PASS_FILTER;
}
if (legacy_md_noise.material) {
gp_md_noise.influence.material = legacy_md_noise.material;
legacy_md_noise.material = nullptr;
}
if (legacy_md_noise.flag & GP_NOISE_INVERT_MATERIAL) {
gp_md_noise.influence.flag |= GREASE_PENCIL_INFLUENCE_INVERT_MATERIAL_FILTER;
}
gp_md_noise.influence.material_pass = legacy_md_noise.pass_index;
if (gp_md_noise.influence.material_pass > 0) {
gp_md_noise.influence.flag |= GREASE_PENCIL_INFLUENCE_USE_MATERIAL_PASS_FILTER;
}
if (legacy_md_noise.flag & GP_NOISE_INVERT_PASS) {
gp_md_noise.influence.flag |= GREASE_PENCIL_INFLUENCE_INVERT_MATERIAL_PASS_FILTER;
}
if (legacy_md_noise.vgname[0] != '\0') {
STRNCPY(gp_md_noise.influence.vertex_group_name, legacy_md_noise.vgname);
}
if (legacy_md_noise.flag & GP_NOISE_INVERT_VGROUP) {
gp_md_noise.influence.flag |= GREASE_PENCIL_INFLUENCE_INVERT_VERTEX_GROUP;
}
if (legacy_md_noise.curve_intensity) {
if (gp_md_noise.influence.custom_curve) {
BKE_curvemapping_free(gp_md_noise.influence.custom_curve);
}
gp_md_noise.influence.custom_curve = legacy_md_noise.curve_intensity;
legacy_md_noise.curve_intensity = nullptr;
}
if (legacy_md_noise.flag & GP_NOISE_CUSTOM_CURVE) {
gp_md_noise.influence.flag |= GREASE_PENCIL_INFLUENCE_USE_CUSTOM_CURVE;
}
}
static void legacy_object_modifiers(Main & /*bmain*/, Object &object)
{
BLI_assert(BLI_listbase_is_empty(&object.modifiers));
while (GpencilModifierData *gpd_md = static_cast<GpencilModifierData *>(
BLI_pophead(&object.greasepencil_modifiers)))
{
switch (gpd_md->type) {
case eGpencilModifierType_None:
/* Unknown type, just ignore. */
break;
case eGpencilModifierType_Noise: {
NoiseGpencilModifierData &legacy_md_noise = *reinterpret_cast<NoiseGpencilModifierData *>(
gpd_md);
GreasePencilNoiseModifierData &gp_md_noise =
reinterpret_cast<GreasePencilNoiseModifierData &>(
legacy_object_modifier_common(object, eModifierType_GreasePencilNoise, *gpd_md));
legacy_object_modifier_noise(gp_md_noise, legacy_md_noise);
break;
}
case eGpencilModifierType_Subdiv:
case eGpencilModifierType_Thick:
case eGpencilModifierType_Tint:
case eGpencilModifierType_Array:
case eGpencilModifierType_Build:
case eGpencilModifierType_Opacity:
case eGpencilModifierType_Color:
case eGpencilModifierType_Lattice:
case eGpencilModifierType_Simplify:
case eGpencilModifierType_Smooth:
case eGpencilModifierType_Hook:
case eGpencilModifierType_Offset:
case eGpencilModifierType_Mirror:
case eGpencilModifierType_Armature:
case eGpencilModifierType_Time:
case eGpencilModifierType_Multiply:
case eGpencilModifierType_Texture:
case eGpencilModifierType_Lineart:
case eGpencilModifierType_Length:
case eGpencilModifierType_WeightProximity:
case eGpencilModifierType_Dash:
case eGpencilModifierType_WeightAngle:
case eGpencilModifierType_Shrinkwrap:
case eGpencilModifierType_Envelope:
case eGpencilModifierType_Outline:
break;
}
BKE_gpencil_modifier_free_ex(gpd_md, 0);
}
}
void legacy_gpencil_object(Main &bmain, Object &object)
{
bGPdata *gpd = static_cast<bGPdata *>(object.data);
@ -588,10 +743,14 @@ void legacy_gpencil_object(Main &bmain, Object &object)
/* NOTE: Could also use #BKE_id_free_us, to also free the legacy GP if not used anymore? */
id_us_min(&gpd->id);
/* No need to increase usercount of `new_grease_pencil`, since ID creation already set it
* to 1. */
/* No need to increase user-count of `new_grease_pencil`,
* since ID creation already set it to 1. */
legacy_gpencil_to_grease_pencil(bmain, *new_grease_pencil, *gpd);
legacy_object_modifiers(bmain, object);
/* Layer adjusments should be added after all other modifiers. */
layer_adjustments_to_modifiers(bmain, *gpd, object);
/* Thickness factor is applied after all other changes to the radii. */
thickness_factor_to_modifier(*gpd, object);

View File

@ -24,7 +24,7 @@
#include "DNA_scene_types.h"
#include "BKE_main.hh"
#include "BKE_node.h"
#include "BKE_node.hh"
#include "BKE_idtype.hh"

View File

@ -2996,8 +2996,8 @@ static void image_tag_frame_recalc(Image *ima, ID *iuser_id, ImageUser *iuser, v
iuser->flag |= IMA_NEED_FRAME_RECALC;
if (iuser_id) {
/* Must copy image user changes to CoW data-block. */
DEG_id_tag_update(iuser_id, ID_RECALC_COPY_ON_WRITE);
/* Must copy image user changes to evaluated data-block. */
DEG_id_tag_update(iuser_id, ID_RECALC_SYNC_TO_EVAL);
}
}
}
@ -3011,8 +3011,8 @@ static void image_tag_reload(Image *ima, ID *iuser_id, ImageUser *iuser, void *c
image_update_views_format(ima, iuser);
}
if (iuser_id) {
/* Must copy image user changes to CoW data-block. */
DEG_id_tag_update(iuser_id, ID_RECALC_COPY_ON_WRITE);
/* Must copy image user changes to evaluated data-block. */
DEG_id_tag_update(iuser_id, ID_RECALC_SYNC_TO_EVAL);
}
BKE_image_partial_update_mark_full_update(ima);
}

View File

@ -1470,14 +1470,14 @@ void BKE_main_collection_sync_remap(const Main *bmain)
view_layer_bases_hash_create(view_layer, true);
}
DEG_id_tag_update_ex((Main *)bmain, &scene->master_collection->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update_ex((Main *)bmain, &scene->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update_ex((Main *)bmain, &scene->master_collection->id, ID_RECALC_SYNC_TO_EVAL);
DEG_id_tag_update_ex((Main *)bmain, &scene->id, ID_RECALC_SYNC_TO_EVAL);
}
for (Collection *collection = static_cast<Collection *>(bmain->collections.first); collection;
collection = static_cast<Collection *>(collection->id.next))
{
DEG_id_tag_update_ex((Main *)bmain, &collection->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update_ex((Main *)bmain, &collection->id, ID_RECALC_SYNC_TO_EVAL);
}
BKE_main_collection_sync(bmain);

View File

@ -56,7 +56,7 @@
#include "BKE_lib_remap.hh"
#include "BKE_main.hh"
#include "BKE_main_namemap.hh"
#include "BKE_node.h"
#include "BKE_node.hh"
#include "BKE_rigidbody.h"
#include "DEG_depsgraph.hh"
@ -178,9 +178,10 @@ static int lib_id_clear_library_data_users_update_cb(LibraryIDLinkCallbackData *
ID *id = static_cast<ID *>(cb_data->user_data);
if (*cb_data->id_pointer == id) {
/* Even though the ID itself remain the same after being made local, from depsgraph point of
* view this is a different ID. Hence we need to tag all of its users for COW update. */
* view this is a different ID. Hence we need to tag all of its users for a copy-on-eval
* update. */
DEG_id_tag_update_ex(
cb_data->bmain, cb_data->owner_id, ID_RECALC_TAG_FOR_UNDO | ID_RECALC_COPY_ON_WRITE);
cb_data->bmain, cb_data->owner_id, ID_RECALC_TAG_FOR_UNDO | ID_RECALC_SYNC_TO_EVAL);
return IDWALK_RET_STOP_ITER;
}
return IDWALK_RET_NOP;
@ -227,7 +228,7 @@ void BKE_lib_id_clear_library_data(Main *bmain, ID *id, const int flags)
/* We need to tag this IDs and all of its users, conceptually new local ID and original linked
* ones are two completely different data-blocks that were virtually remapped, even though in
* reality they remain the same data. For undo this info is critical now. */
DEG_id_tag_update_ex(bmain, id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update_ex(bmain, id, ID_RECALC_SYNC_TO_EVAL);
ID *id_iter;
FOREACH_MAIN_ID_BEGIN (bmain, id_iter) {
BKE_library_foreach_ID_link(
@ -1273,7 +1274,7 @@ void *BKE_libblock_alloc(Main *bmain, short type, const char *name, const int fl
/* We also need to ensure a valid `session_uid` for some non-main data (like embedded IDs).
* IDs not allocated however should not need those (this would e.g. avoid generating session
* uids for depsgraph CoW IDs, if it was using this function). */
* uids for depsgraph evaluated IDs, if it was using this function). */
if ((flag & LIB_ID_CREATE_NO_ALLOCATE) == 0) {
BKE_lib_libblock_session_uid_ensure(id);
}
@ -1393,10 +1394,10 @@ void BKE_libblock_copy_ex(Main *bmain, const ID *id, ID **r_newid, const int ori
BLI_assert(new_id != nullptr);
if ((flag & LIB_ID_COPY_SET_COPIED_ON_WRITE) != 0) {
new_id->tag |= LIB_TAG_COPIED_ON_WRITE;
new_id->tag |= LIB_TAG_COPIED_ON_EVAL;
}
else {
new_id->tag &= ~LIB_TAG_COPIED_ON_WRITE;
new_id->tag &= ~LIB_TAG_COPIED_ON_EVAL;
}
const size_t id_len = BKE_libblock_get_alloc_info(GS(new_id->name), nullptr);

View File

@ -20,7 +20,7 @@
void BKE_id_eval_properties_copy(ID *id_cow, ID *id)
{
const ID_Type id_type = GS(id->name);
BLI_assert((id_cow->tag & LIB_TAG_COPIED_ON_WRITE) && !(id->tag & LIB_TAG_COPIED_ON_WRITE));
BLI_assert((id_cow->tag & LIB_TAG_COPIED_ON_EVAL) && !(id->tag & LIB_TAG_COPIED_ON_EVAL));
BLI_assert(ID_TYPE_SUPPORTS_PARAMS_WITHOUT_COW(id_type));
if (id_type == ID_ME) {
BKE_mesh_copy_parameters((Mesh *)id_cow, (const Mesh *)id);

View File

@ -4178,7 +4178,7 @@ void BKE_lib_override_library_validate(Main * /*bmain*/, ID *id, ReportList *rep
/* NOTE: In code deleting liboverride data below, #BKE_lib_override_library_make_local is used
* instead of directly calling #BKE_lib_override_library_free, because the former also handles
* properly 'liboverride embedded' IDs, like root nodetrees, or shapekeys. */
* properly 'liboverride embedded' IDs, like root node-trees, or shape-keys. */
if (id->override_library->reference == nullptr) {
/* This (probably) used to be a template ID, could be linked or local, not an override. */
@ -4651,7 +4651,7 @@ static bool lib_override_library_id_reset_do(Main *bmain,
}
if (was_op_deleted) {
DEG_id_tag_update_ex(bmain, id_root, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update_ex(bmain, id_root, ID_RECALC_SYNC_TO_EVAL);
IDOverrideLibraryRuntime *liboverride_runtime = override_library_runtime_ensure(
id_root->override_library);
liboverride_runtime->tag |= LIBOVERRIDE_TAG_NEEDS_RELOAD;

View File

@ -69,7 +69,7 @@ bool BKE_lib_override_library_proxy_convert(Main *bmain,
ob_proxy->proxy->proxy_from = nullptr;
ob_proxy->proxy = ob_proxy->proxy_group = nullptr;
DEG_id_tag_update(&ob_proxy->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&ob_proxy->id, ID_RECALC_SYNC_TO_EVAL);
/* In case of proxy conversion, remap all local ID usages to linked IDs to their newly created
* overrides. Also do that for the IDs from the same lib as the proxy in case it is linked.

View File

@ -22,7 +22,7 @@
#include "BKE_lib_id.hh"
#include "BKE_lib_query.hh"
#include "BKE_main.hh"
#include "BKE_node.h"
#include "BKE_node.hh"
/* status */
enum {

View File

@ -29,7 +29,7 @@
#include "BKE_mball.hh"
#include "BKE_modifier.hh"
#include "BKE_multires.hh"
#include "BKE_node.h"
#include "BKE_node.hh"
#include "BKE_node_tree_update.hh"
#include "BKE_object.hh"
@ -123,11 +123,11 @@ static void foreach_libblock_remap_callback_apply(ID *id_owner,
if (id_remap_data->bmain != nullptr) {
DEG_id_tag_update_ex(id_remap_data->bmain,
id_self,
ID_RECALC_COPY_ON_WRITE | ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY);
ID_RECALC_SYNC_TO_EVAL | ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY);
if (id_self != id_owner) {
DEG_id_tag_update_ex(id_remap_data->bmain,
id_owner,
ID_RECALC_COPY_ON_WRITE | ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY);
ID_RECALC_SYNC_TO_EVAL | ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY);
}
}
if (GS(id_owner->name) == ID_NT) {

View File

@ -26,7 +26,7 @@
#include "BKE_lib_id.hh"
#include "BKE_lib_query.hh"
#include "BKE_light.h"
#include "BKE_node.h"
#include "BKE_node.hh"
#include "BKE_preview_image.hh"
#include "BLT_translation.hh"

View File

@ -129,7 +129,7 @@ void BKE_light_linking_collection_assign(Main *bmain,
{
BKE_light_linking_collection_assign_only(object, new_collection, link_type);
DEG_id_tag_update(&object->id, ID_RECALC_COPY_ON_WRITE | ID_RECALC_SHADING);
DEG_id_tag_update(&object->id, ID_RECALC_SYNC_TO_EVAL | ID_RECALC_SHADING);
DEG_relations_tag_update(bmain);
}

View File

@ -551,7 +551,7 @@ void BKE_id_materials_copy(Main *bmain, ID *id_src, ID *id_dst)
id_us_plus((ID *)(*matar_dst)[a]);
}
DEG_id_tag_update(id_dst, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(id_dst, ID_RECALC_SYNC_TO_EVAL);
DEG_relations_tag_update(bmain);
}
}
@ -583,7 +583,7 @@ void BKE_id_material_resize(Main *bmain, ID *id, short totcol, bool do_id_user)
}
*totcolp = totcol;
DEG_id_tag_update(id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(id, ID_RECALC_SYNC_TO_EVAL);
DEG_relations_tag_update(bmain);
}
@ -606,7 +606,7 @@ void BKE_id_material_append(Main *bmain, ID *id, Material *ma)
id_us_plus((ID *)ma);
BKE_objects_materials_test_all(bmain, id);
DEG_id_tag_update(id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(id, ID_RECALC_SYNC_TO_EVAL);
DEG_relations_tag_update(bmain);
}
}
@ -641,7 +641,7 @@ Material *BKE_id_material_pop(Main *bmain, ID *id, int index_i)
material_data_index_remove_id(id, index);
DEG_id_tag_update(id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(id, ID_RECALC_SYNC_TO_EVAL);
DEG_relations_tag_update(bmain);
}
}
@ -667,7 +667,7 @@ void BKE_id_material_clear(Main *bmain, ID *id)
BKE_objects_materials_test_all(bmain, id);
material_data_index_clear_id(id);
DEG_id_tag_update(id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(id, ID_RECALC_SYNC_TO_EVAL);
DEG_relations_tag_update(bmain);
}
}
@ -916,7 +916,7 @@ void BKE_object_material_resize(Main *bmain, Object *ob, const short totcol, boo
ob->actcol = ob->totcol;
}
DEG_id_tag_update(&ob->id, ID_RECALC_COPY_ON_WRITE | ID_RECALC_GEOMETRY);
DEG_id_tag_update(&ob->id, ID_RECALC_SYNC_TO_EVAL | ID_RECALC_GEOMETRY);
DEG_relations_tag_update(bmain);
}
@ -1614,7 +1614,7 @@ void BKE_texpaint_slot_refresh_cache(Scene *scene, Material *ma, const Object *o
}
}
/* COW needed when adding texture slot on an object with no materials.
/* Copy-on-eval needed when adding texture slot on an object with no materials.
* But do it only when slots actually change to avoid continuous depsgraph updates. */
if (ma->tot_slots != prev_tot_slots || ma->paint_active_slot != prev_paint_active_slot ||
ma->paint_clone_slot != prev_paint_clone_slot ||
@ -1622,7 +1622,7 @@ void BKE_texpaint_slot_refresh_cache(Scene *scene, Material *ma, const Object *o
memcmp(ma->texpaintslot, prev_texpaintslot, sizeof(*ma->texpaintslot) * ma->tot_slots) !=
0))
{
DEG_id_tag_update(&ma->id, ID_RECALC_SHADING | ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&ma->id, ID_RECALC_SHADING | ID_RECALC_SYNC_TO_EVAL);
}
MEM_SAFE_FREE(prev_texpaintslot);

View File

@ -760,7 +760,7 @@ void BKE_mesh_copy_parameters(Mesh *me_dst, const Mesh *me_src)
void BKE_mesh_copy_parameters_for_eval(Mesh *me_dst, const Mesh *me_src)
{
/* User counts aren't handled, don't copy into a mesh from #G_MAIN. */
BLI_assert(me_dst->id.tag & (LIB_TAG_NO_MAIN | LIB_TAG_COPIED_ON_WRITE));
BLI_assert(me_dst->id.tag & (LIB_TAG_NO_MAIN | LIB_TAG_COPIED_ON_EVAL));
BKE_mesh_copy_parameters(me_dst, me_src);
copy_attribute_names(*me_src, *me_dst);

View File

@ -1073,7 +1073,7 @@ class NodeTreeMainUpdater {
* be used without causing updates all the time currently. In the future we could try to
* handle other drivers better as well.
* Note that this optimization only works in practice when the depsgraph didn't also get a
* copy-on-write tag for the node tree (which happens when changing node properties). It
* copy-on-evaluation tag for the node tree (which happens when changing node properties). It
* does work in a few situations like adding reroutes and duplicating nodes though. */
LISTBASE_FOREACH (const FCurve *, fcurve, &adt->drivers) {
const ChannelDriver *driver = fcurve->driver;

View File

@ -1543,7 +1543,7 @@ static void object_update_from_subsurf_ccg(Object *object)
return;
}
/* If object does not own evaluated mesh we can not access it since it might be freed already
* (happens on dependency graph free where order of CoW-ed IDs free is undefined).
* (happens on dependency graph free where order of evaluated IDs free is undefined).
*
* Good news is: such mesh does not have modifiers applied, so no need to worry about CCG. */
if (!object->runtime->is_data_eval_owned) {
@ -1610,13 +1610,13 @@ static void object_update_from_subsurf_ccg(Object *object)
void BKE_object_eval_assign_data(Object *object_eval, ID *data_eval, bool is_owned)
{
BLI_assert(object_eval->id.tag & LIB_TAG_COPIED_ON_WRITE);
BLI_assert(object_eval->id.tag & LIB_TAG_COPIED_ON_EVAL);
BLI_assert(object_eval->runtime->data_eval == nullptr);
BLI_assert(data_eval->tag & LIB_TAG_NO_MAIN);
if (is_owned) {
/* Set flag for debugging. */
data_eval->tag |= LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT;
data_eval->tag |= LIB_TAG_COPIED_ON_EVAL_FINAL_RESULT;
}
/* Assigned evaluated data. */
@ -1628,7 +1628,7 @@ void BKE_object_eval_assign_data(Object *object_eval, ID *data_eval, bool is_own
if (GS(data->name) == GS(data_eval->name)) {
/* NOTE: we are not supposed to invoke evaluation for original objects,
* but some areas are still being ported, so we play safe here. */
if (object_eval->id.tag & LIB_TAG_COPIED_ON_WRITE) {
if (object_eval->id.tag & LIB_TAG_COPIED_ON_EVAL) {
object_eval->data = data_eval;
}
}
@ -1670,7 +1670,7 @@ void BKE_object_free_derived_caches(Object *ob)
ob->runtime->mesh_deform_eval = nullptr;
}
/* Restore initial pointer for copy-on-write data-blocks, object->data
/* Restore initial pointer for copy-on-evaluation data-blocks, object->data
* might be pointing to an evaluated data-block data was just freed above. */
if (ob->runtime->data_orig != nullptr) {
ob->data = ob->runtime->data_orig;
@ -4178,15 +4178,15 @@ Mesh *BKE_object_get_evaluated_mesh(const Object *object)
Mesh *BKE_object_get_pre_modified_mesh(const Object *object)
{
if (object->type == OB_MESH && object->runtime->data_orig != nullptr) {
BLI_assert(object->id.tag & LIB_TAG_COPIED_ON_WRITE);
BLI_assert(object->id.tag & LIB_TAG_COPIED_ON_EVAL);
BLI_assert(object->id.orig_id != nullptr);
BLI_assert(object->runtime->data_orig->orig_id == ((Object *)object->id.orig_id)->data);
Mesh *result = (Mesh *)object->runtime->data_orig;
BLI_assert((result->id.tag & LIB_TAG_COPIED_ON_WRITE) != 0);
BLI_assert((result->id.tag & LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT) == 0);
BLI_assert((result->id.tag & LIB_TAG_COPIED_ON_EVAL) != 0);
BLI_assert((result->id.tag & LIB_TAG_COPIED_ON_EVAL_FINAL_RESULT) == 0);
return result;
}
BLI_assert((object->id.tag & LIB_TAG_COPIED_ON_WRITE) == 0);
BLI_assert((object->id.tag & LIB_TAG_COPIED_ON_EVAL) == 0);
return (Mesh *)object->data;
}
@ -4194,15 +4194,15 @@ Mesh *BKE_object_get_original_mesh(const Object *object)
{
Mesh *result = nullptr;
if (object->id.orig_id == nullptr) {
BLI_assert((object->id.tag & LIB_TAG_COPIED_ON_WRITE) == 0);
BLI_assert((object->id.tag & LIB_TAG_COPIED_ON_EVAL) == 0);
result = (Mesh *)object->data;
}
else {
BLI_assert((object->id.tag & LIB_TAG_COPIED_ON_WRITE) != 0);
BLI_assert((object->id.tag & LIB_TAG_COPIED_ON_EVAL) != 0);
result = (Mesh *)((Object *)object->id.orig_id)->data;
}
BLI_assert(result != nullptr);
BLI_assert((result->id.tag & (LIB_TAG_COPIED_ON_WRITE | LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT)) ==
BLI_assert((result->id.tag & (LIB_TAG_COPIED_ON_EVAL | LIB_TAG_COPIED_ON_EVAL_FINAL_RESULT)) ==
0);
return result;
}
@ -4281,10 +4281,10 @@ static int pc_cmp(const void *a, const void *b)
return 0;
}
/* TODO: Review the usages of this function, currently with COW it will be called for orig object
* and then again for COW copies of it, think this is bad since there is no guarantee that we get
* the same stack index in both cases? Order is important since this index is used for filenames
* on disk. */
/* TODO: Review the usages of this function, currently with copy-on-eval it will be called for orig
* object and then again for evaluated copies of it, think this is bad since there is no guarantee
* that we get the same stack index in both cases? Order is important since this index is used for
* filenames on disk. */
int BKE_object_insert_ptcache(Object *ob)
{
LinkData *link = nullptr;
@ -5024,7 +5024,7 @@ void BKE_object_groups_clear(Main *bmain, Scene *scene, Object *ob)
Collection *collection = nullptr;
while ((collection = BKE_collection_object_find(bmain, scene, collection, ob))) {
BKE_collection_object_remove(bmain, collection, ob, false);
DEG_id_tag_update(&collection->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&collection->id, ID_RECALC_SYNC_TO_EVAL);
}
}

View File

@ -1077,7 +1077,7 @@ void psys_copy_particles(ParticleSystem *psys_dst, ParticleSystem *psys_src)
*
* Furthermore, #free_hair() always frees `pa->hair` if it's not nullptr, regardless of the
* particle type. So *not* copying here would cause a double free (or more), e.g. freeing the
* copy-on-write copy and the original data will crash Blender.
* copy-on-evaluation copy and the original data will crash Blender.
* In any case, sharing pointers between `psys_src` and `psys_dst` should be forbidden.
*
* So while we could in theory 'sanitize' the situation by setting `pa->hair` to nullptr in the
@ -4084,7 +4084,7 @@ void object_remove_particle_system(Main *bmain,
DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
/* Flush object mode. */
DEG_id_tag_update(&ob->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&ob->id, ID_RECALC_SYNC_TO_EVAL);
}
ParticleSettings *BKE_particlesettings_add(Main *bmain, const char *name)

View File

@ -89,7 +89,7 @@ static void RB_constraint_delete(void * /*con*/) {}
void BKE_rigidbody_free_world(Scene *scene)
{
bool is_orig = (scene->id.tag & LIB_TAG_COPIED_ON_WRITE) == 0;
bool is_orig = (scene->id.tag & LIB_TAG_COPIED_ON_EVAL) == 0;
RigidBodyWorld *rbw = scene->rigidbody_world;
scene->rigidbody_world = nullptr;
@ -146,7 +146,7 @@ void BKE_rigidbody_free_world(Scene *scene)
void BKE_rigidbody_free_object(Object *ob, RigidBodyWorld *rbw)
{
bool is_orig = (ob->id.tag & LIB_TAG_COPIED_ON_WRITE) == 0;
bool is_orig = (ob->id.tag & LIB_TAG_COPIED_ON_EVAL) == 0;
RigidBodyOb *rbo = ob->rigidbody_object;
/* sanity check */
@ -253,7 +253,7 @@ static RigidBodyOb *rigidbody_copy_object(const Object *ob, const int flag)
rboN = static_cast<RigidBodyOb *>(MEM_dupallocN(ob->rigidbody_object));
if (is_orig) {
/* This is a regular copy, and not a CoW copy for depsgraph evaluation */
/* This is a regular copy, and not an evaluated copy for depsgraph evaluation */
rboN->shared = static_cast<RigidBodyOb_Shared *>(
MEM_callocN(sizeof(*rboN->shared), "RigidBodyOb_Shared"));
}
@ -323,10 +323,10 @@ void BKE_rigidbody_object_copy(Main *bmain, Object *ob_dst, const Object *ob_src
DEG_relations_tag_update(bmain);
if (need_objects_update) {
DEG_id_tag_update(&rigidbody_world->group->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&rigidbody_world->group->id, ID_RECALC_SYNC_TO_EVAL);
}
if (need_constraints_update) {
DEG_id_tag_update(&rigidbody_world->constraints->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&rigidbody_world->constraints->id, ID_RECALC_SYNC_TO_EVAL);
}
DEG_id_tag_update(&ob_dst->id, ID_RECALC_TRANSFORM);
}
@ -349,7 +349,7 @@ static Mesh *rigidbody_get_mesh(Object *ob)
return BKE_object_get_evaluated_mesh(ob);
case RBO_MESH_BASE:
/* This mesh may be used for computing corner_tris, which should be done
* on the original; otherwise every time the CoW is recreated it will
* on the original; otherwise every time the evaluated copy is recreated it will
* have to be recomputed. */
BLI_assert(ob->rigidbody_object->mesh_source == RBO_MESH_BASE);
return (Mesh *)ob->runtime->data_orig;
@ -1257,7 +1257,7 @@ RigidBodyWorld *BKE_rigidbody_world_copy(RigidBodyWorld *rbw, const int flag)
}
if ((flag & LIB_ID_COPY_SET_COPIED_ON_WRITE) == 0) {
/* This is a regular copy, and not a CoW copy for depsgraph evaluation. */
/* This is a regular copy, and not an evaluated copy for depsgraph evaluation. */
rbw_copy->shared = static_cast<RigidBodyWorld_Shared *>(
MEM_callocN(sizeof(*rbw_copy->shared), "RigidBodyWorld_Shared"));
BKE_ptcache_copy_list(&rbw_copy->shared->ptcaches, &rbw->shared->ptcaches, LIB_ID_COPY_CACHES);
@ -1513,7 +1513,7 @@ static bool rigidbody_add_object_to_scene(Main *bmain, Scene *scene, Object *ob)
BKE_rigidbody_cache_reset(rbw);
DEG_relations_tag_update(bmain);
DEG_id_tag_update(&rbw->group->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&rbw->group->id, ID_RECALC_SYNC_TO_EVAL);
return true;
}
@ -1542,7 +1542,7 @@ static bool rigidbody_add_constraint_to_scene(Main *bmain, Scene *scene, Object
BKE_rigidbody_cache_reset(rbw);
DEG_relations_tag_update(bmain);
DEG_id_tag_update(&rbw->constraints->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&rbw->constraints->id, ID_RECALC_SYNC_TO_EVAL);
return true;
}
@ -1622,11 +1622,11 @@ void BKE_rigidbody_remove_object(Main *bmain, Scene *scene, Object *ob, const bo
rbc = obt->rigidbody_constraint;
if (rbc->ob1 == ob) {
rbc->ob1 = nullptr;
DEG_id_tag_update(&obt->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&obt->id, ID_RECALC_SYNC_TO_EVAL);
}
if (rbc->ob2 == ob) {
rbc->ob2 = nullptr;
DEG_id_tag_update(&obt->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&obt->id, ID_RECALC_SYNC_TO_EVAL);
}
}
}
@ -1668,7 +1668,7 @@ void BKE_rigidbody_remove_constraint(Main *bmain, Scene *scene, Object *ob, cons
/* Remove from RBW constraints collection. */
if (rbw->constraints != nullptr) {
BKE_collection_object_remove(bmain, rbw->constraints, ob, free_us);
DEG_id_tag_update(&rbw->constraints->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&rbw->constraints->id, ID_RECALC_SYNC_TO_EVAL);
}
/* remove from rigidbody world, free object won't do this */
@ -1856,10 +1856,10 @@ static void rigidbody_update_simulation(Depsgraph *depsgraph,
RigidBodyOb *rbo = ob->rigidbody_object;
/* TODO: remove this whole block once we are sure we never get nullptr rbo here anymore. */
/* This cannot be done in CoW evaluation context anymore... */
/* This cannot be done in copy-on-eval evaluation context anymore... */
if (rbo == nullptr) {
BLI_assert_msg(0,
"CoW object part of RBW object collection without RB object data, "
"Evaluated object part of RBW object collection without RB object data, "
"should not happen.\n");
/* Since this object is included in the sim group but doesn't have
* rigid body settings (perhaps it was added manually), add!
@ -1916,11 +1916,12 @@ static void rigidbody_update_simulation(Depsgraph *depsgraph,
RigidBodyCon *rbc = ob->rigidbody_constraint;
/* TODO: remove this whole block once we are sure we never get nullptr rbo here anymore. */
/* This cannot be done in CoW evaluation context anymore... */
/* This cannot be done in copy-on-eval evaluation context anymore... */
if (rbc == nullptr) {
BLI_assert_msg(0,
"CoW object part of RBW constraints collection without RB constraint data, "
"should not happen.\n");
BLI_assert_msg(
0,
"Evaluated object part of RBW constraints collection without RB constraint data, "
"should not happen.\n");
/* Since this object is included in the group but doesn't have
* constraint settings (perhaps it was added manually), add!
*/

View File

@ -2269,7 +2269,7 @@ bool BKE_scene_camera_switch_update(Scene *scene)
Object *camera = BKE_scene_camera_switch_find(scene);
if (camera && (camera != scene->camera)) {
scene->camera = camera;
DEG_id_tag_update(&scene->id, ID_RECALC_COPY_ON_WRITE);
DEG_id_tag_update(&scene->id, ID_RECALC_SYNC_TO_EVAL);
return true;
}
#else

View File

@ -3173,12 +3173,12 @@ void sbFree(Object *ob)
return;
}
const bool is_orig = (ob->id.tag & LIB_TAG_COPIED_ON_WRITE) == 0;
const bool is_orig = (ob->id.tag & LIB_TAG_COPIED_ON_EVAL) == 0;
free_softbody_intern(sb);
if (is_orig) {
/* Only free shared data on non-CoW copies */
/* Only free shared data on non-evaluated copies */
BKE_ptcache_free_list(&sb->shared->ptcaches);
sb->shared->pointcache = nullptr;
MEM_freeN(sb->shared);

View File

@ -230,11 +230,11 @@ BLI_INLINE void sound_verify_evaluated_id(const ID *id)
* We don't want audio system handles to be allocated on an original data-blocks, and only want
* them to be allocated on a data-blocks which are result of dependency graph evaluation.
*
* Data-blocks which are covered by a copy-on-write system of dependency graph will have
* LIB_TAG_COPIED_ON_WRITE tag set on them. But if some of data-blocks during its evaluation
* Data-blocks which are covered by a copy-on-evaluation system of dependency graph will have
* LIB_TAG_COPIED_ON_EVAL tag set on them. But if some of data-blocks during its evaluation
* decides to re-allocate its nested one (for example, object evaluation could re-allocate mesh
* when evaluating modifier stack). Such data-blocks will have
* LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT tag set on them.
* LIB_TAG_COPIED_ON_EVAL_FINAL_RESULT tag set on them.
*
* Additionally, we also allow data-blocks outside of main database. Those can not be "original"
* and could be used as a temporary evaluated result during operations like baking.
@ -242,7 +242,7 @@ BLI_INLINE void sound_verify_evaluated_id(const ID *id)
* NOTE: We consider ID evaluated if ANY of those flags is set. We do NOT require ALL of them.
*/
BLI_assert(id->tag &
(LIB_TAG_COPIED_ON_WRITE | LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT | LIB_TAG_NO_MAIN));
(LIB_TAG_COPIED_ON_EVAL | LIB_TAG_COPIED_ON_EVAL_FINAL_RESULT | LIB_TAG_NO_MAIN));
}
bSound *BKE_sound_new_file(Main *bmain, const char *filepath)

View File

@ -777,19 +777,19 @@ void BKE_volume_grids_backup_restore(Volume *volume, VolumeGridVector *grids, co
#ifdef WITH_OPENVDB
/* Restore grids after datablock was re-copied from original by depsgraph,
* we don't want to load them again if possible. */
BLI_assert(volume->id.tag & LIB_TAG_COPIED_ON_WRITE);
BLI_assert(volume->id.tag & LIB_TAG_COPIED_ON_EVAL);
BLI_assert(volume->runtime->grids != nullptr && grids != nullptr);
if (!grids->is_loaded()) {
/* No grids loaded in CoW datablock, nothing lost by discarding. */
/* No grids loaded in evaluated datablock, nothing lost by discarding. */
MEM_delete(grids);
}
else if (!STREQ(volume->filepath, filepath)) {
/* Filepath changed, discard grids from CoW datablock. */
/* Filepath changed, discard grids from evaluated datablock. */
MEM_delete(grids);
}
else {
/* Keep grids from CoW datablock. We might still unload them a little
/* Keep grids from evaluated datablock. We might still unload them a little
* later in BKE_volume_eval_geometry if the frame changes. */
MEM_delete(volume->runtime->grids);
volume->runtime->grids = grids;

Some files were not shown because too many files have changed in this diff Show More