Merge branch 'blender-v3.0-release'

This commit is contained in:
Sergey Sharybin 2021-11-16 17:25:48 +01:00
commit ba6427adfa
6 changed files with 38 additions and 9 deletions

View File

@ -296,13 +296,13 @@ static BufferParams scale_buffer_params(const BufferParams &params, int resoluti
scaled_params.window_x = params.window_x / resolution_divider;
scaled_params.window_y = params.window_y / resolution_divider;
scaled_params.window_width = params.window_width / resolution_divider;
scaled_params.window_height = params.window_height / resolution_divider;
scaled_params.window_width = max(1, params.window_width / resolution_divider);
scaled_params.window_height = max(1, params.window_height / resolution_divider);
scaled_params.full_x = params.full_x / resolution_divider;
scaled_params.full_y = params.full_y / resolution_divider;
scaled_params.full_width = params.full_width / resolution_divider;
scaled_params.full_height = params.full_height / resolution_divider;
scaled_params.full_width = max(1, params.full_width / resolution_divider);
scaled_params.full_height = max(1, params.full_height / resolution_divider);
scaled_params.update_offset_stride();

View File

@ -707,7 +707,8 @@ class ASSETBROWSER_PT_metadata(asset_utils.AssetBrowserPanel, Panel):
asset_library_ref = context.asset_library_ref
asset_lib_path = bpy.types.AssetHandle.get_full_library_path(asset_file_handle, asset_library_ref)
show_developer_ui = context.preferences.view.show_developer_ui
prefs = context.preferences
show_asset_debug_info = prefs.view.show_developer_ui and prefs.experimental.show_asset_debug_info
layout.use_property_split = True
layout.use_property_decorate = False # No animation.
@ -716,7 +717,7 @@ class ASSETBROWSER_PT_metadata(asset_utils.AssetBrowserPanel, Panel):
# If the active file is an ID, use its name directly so renaming is possible from right here.
layout.prop(asset_file_handle.local_id, "name")
if show_developer_ui:
if show_asset_debug_info:
col = layout.column(align=True)
col.label(text="Asset Catalog:")
col.prop(asset_file_handle.local_id.asset_data, "catalog_id", text="UUID")
@ -724,7 +725,7 @@ class ASSETBROWSER_PT_metadata(asset_utils.AssetBrowserPanel, Panel):
else:
layout.prop(asset_file_handle, "name")
if show_developer_ui:
if show_asset_debug_info:
col = layout.column(align=True)
col.enabled = False
col.label(text="Asset Catalog:")

View File

@ -2326,6 +2326,7 @@ class USERPREF_PT_experimental_debugging(ExperimentalPanel, Panel):
({"property": "proxy_to_override_auto_conversion"}, "T91671"),
({"property": "use_cycles_debug"}, None),
({"property": "use_geometry_nodes_legacy"}, "T91274"),
({"property": "show_asset_debug_info"}, None),
),
)

View File

@ -1149,7 +1149,27 @@ void psys_copy_particles(ParticleSystem *psys_dst, ParticleSystem *psys_src)
/* Copy particles and children. */
psys_dst->particles = MEM_dupallocN(psys_src->particles);
psys_dst->child = MEM_dupallocN(psys_src->child);
if (psys_dst->part->type == PART_HAIR) {
/* Ideally this should only be performed if `(psys_dst->part->type == PART_HAIR)`.
*
* But #ParticleData (`psys_dst`) is some sub-data of the #Object ID, while #ParticleSettings
* (`psys_dst->part`) is another ID. In case the particle settings is a linked ID that gets
* missing, it will be replaced (in readfile code) by a place-holder, which defaults to a
* `PART_EMITTER` type of particle settings.
*
* This leads to a situation where each particle of `psys_dst` still has a valid allocated `hair`
* data, which should still be preserved in case the missing particle settings ID becomes valid
* again.
*
* Furthermore, #free_hair() always frees `pa->hair` if it's not NULL, 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.
* 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 NULL in the new
* copy (in case of non-`PART_HAIR` type), it is probably safer for now to systematically
* duplicate the `hair` data if available. */
{
ParticleData *pa;
int p;
for (p = 0, pa = psys_dst->particles; p < psys_dst->totpart; p++, pa++) {

View File

@ -652,6 +652,7 @@ typedef struct UserDef_Experimental {
char no_proxy_to_override_conversion;
char use_cycles_debug;
char use_geometry_nodes_legacy;
char show_asset_debug_info;
char SANITIZE_AFTER_HERE;
/* The following options are automatically sanitized (set to 0)
* when the release cycle is not alpha. */
@ -662,7 +663,7 @@ typedef struct UserDef_Experimental {
char use_sculpt_tools_tilt;
char use_extended_asset_browser;
char use_override_templates;
char _pad[3];
char _pad[2];
/** `makesdna` does not allow empty structs. */
} UserDef_Experimental;

View File

@ -6399,6 +6399,12 @@ static void rna_def_userdef_experimental(BlenderRNA *brna)
"data-blocks as assets, not just poses");
RNA_def_property_update(prop, 0, "rna_userdef_ui_update");
prop = RNA_def_property(srna, "show_asset_debug_info", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_ui_text(prop,
"Asset Debug Info",
"Enable some extra fields in the Asset Browser to aid in debugging");
RNA_def_property_update(prop, 0, "rna_userdef_ui_update");
prop = RNA_def_property(srna, "use_override_templates", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "use_override_templates", 1);
RNA_def_property_ui_text(