Merge branch 'blender-v4.1-release'
This commit is contained in:
@@ -219,9 +219,9 @@ set(TIFF_HOMEPAGE http://www.simplesystems.org/libtiff/)
|
||||
# Recent commit from 1.13.5.0 under development, which includes string table
|
||||
# changes that make the Cycles OptiX implementation work. Official 1.12 OSL
|
||||
# releases should also build but without OptiX support.
|
||||
set(OSL_VERSION 3d52f3906b12d38ad0f4b991a8f9ea678171bd28)
|
||||
set(OSL_URI https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/archive/${OSL_VERSION}.tar.gz)
|
||||
set(OSL_HASH dfe5d69f48930badc1ad39a4e11e2e98)
|
||||
set(OSL_VERSION 1.13.7.0)
|
||||
set(OSL_URI https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/archive/refs/tags/v${OSL_VERSION}.tar.gz)
|
||||
set(OSL_HASH 769ae444a7df0e6561b3e745fd2eb50d)
|
||||
set(OSL_HASH_TYPE MD5)
|
||||
set(OSL_FILE OpenShadingLanguage-${OSL_VERSION}.tar.gz)
|
||||
|
||||
@@ -529,9 +529,9 @@ set(MATERIALX_HASH fad8f4e19305fb2ee920cbff638f3560)
|
||||
set(MATERIALX_HASH_TYPE MD5)
|
||||
set(MATERIALX_FILE materialx-v${MATERIALX_VERSION}.tar.gz)
|
||||
|
||||
set(OIDN_VERSION 2.2.0-rc2)
|
||||
set(OIDN_VERSION 2.2.1)
|
||||
set(OIDN_URI https://github.com/OpenImageDenoise/oidn/releases/download/v${OIDN_VERSION}/oidn-${OIDN_VERSION}.src.tar.gz)
|
||||
set(OIDN_HASH 14b261af3a719c49ab10e71583f1a61a)
|
||||
set(OIDN_HASH a1c5299b2b640a0e0569afcf405c82bf)
|
||||
set(OIDN_HASH_TYPE MD5)
|
||||
set(OIDN_FILE oidn-${OIDN_VERSION}.src.tar.gz)
|
||||
|
||||
|
||||
@@ -165,6 +165,36 @@ static bool bke_id_attribute_rename_if_exists(ID *id,
|
||||
return BKE_id_attribute_rename(id, old_name, new_name, reports);
|
||||
}
|
||||
|
||||
static bool mesh_edit_mode_attribute_valid(const blender::StringRef name,
|
||||
const AttrDomain domain,
|
||||
const eCustomDataType data_type,
|
||||
ReportList *reports)
|
||||
{
|
||||
if (ELEM(name,
|
||||
"position",
|
||||
".edge_verts",
|
||||
".corner_vert",
|
||||
".corner_edge",
|
||||
"sharp_edge",
|
||||
"sharp_face",
|
||||
"material_index"))
|
||||
{
|
||||
BKE_report(reports, RPT_ERROR, "Unable to create builtin attribute in edit mode");
|
||||
return false;
|
||||
}
|
||||
if (name == "id") {
|
||||
if (domain != AttrDomain::Point) {
|
||||
BKE_report(reports, RPT_ERROR, "Domain unsupported for \"id\" attribute");
|
||||
return false;
|
||||
}
|
||||
if (data_type != CD_PROP_INT32) {
|
||||
BKE_report(reports, RPT_ERROR, "Type unsupported for \"id\" attribute");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool BKE_id_attribute_rename(ID *id,
|
||||
const char *old_name,
|
||||
const char *new_name,
|
||||
@@ -200,6 +230,17 @@ bool BKE_id_attribute_rename(ID *id,
|
||||
return false;
|
||||
}
|
||||
|
||||
if (GS(id->name) == ID_ME) {
|
||||
Mesh *mesh = reinterpret_cast<Mesh *>(id);
|
||||
if (mesh->edit_mesh) {
|
||||
if (!mesh_edit_mode_attribute_valid(
|
||||
new_name, BKE_id_attribute_domain(id, layer), eCustomDataType(layer->type), reports))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::string result_name = BKE_id_attribute_calc_unique_name(*id, new_name);
|
||||
|
||||
if (layer->type == CD_PROP_FLOAT2 && GS(id->name) == ID_ME) {
|
||||
@@ -286,6 +327,9 @@ CustomDataLayer *BKE_id_attribute_new(ID *id,
|
||||
if (GS(id->name) == ID_ME) {
|
||||
Mesh *mesh = reinterpret_cast<Mesh *>(id);
|
||||
if (BMEditMesh *em = mesh->edit_mesh) {
|
||||
if (!mesh_edit_mode_attribute_valid(name, domain, type, reports)) {
|
||||
return nullptr;
|
||||
}
|
||||
BM_data_layer_add_named(em->bm, customdata, type, uniquename.c_str());
|
||||
const int index = CustomData_get_named_layer_index(customdata, type, uniquename);
|
||||
return (index == -1) ? nullptr : &(customdata->layers[index]);
|
||||
|
||||
@@ -1257,6 +1257,7 @@ static void bm_to_mesh_verts(const BMesh &bm,
|
||||
MutableSpan<bool> select_vert,
|
||||
MutableSpan<bool> hide_vert)
|
||||
{
|
||||
CustomData_free_layer_named(&mesh.vert_data, "position", mesh.verts_num);
|
||||
CustomData_add_layer_named(
|
||||
&mesh.vert_data, CD_PROP_FLOAT3, CD_CONSTRUCT, mesh.verts_num, "position");
|
||||
const Vector<BMeshToMeshLayerInfo> info = bm_to_mesh_copy_info_calc(bm.vdata, mesh.vert_data);
|
||||
@@ -1299,6 +1300,7 @@ static void bm_to_mesh_edges(const BMesh &bm,
|
||||
MutableSpan<bool> sharp_edge,
|
||||
MutableSpan<bool> uv_seams)
|
||||
{
|
||||
CustomData_free_layer_named(&mesh.edge_data, ".edge_verts", mesh.edges_num);
|
||||
CustomData_add_layer_named(
|
||||
&mesh.edge_data, CD_PROP_INT32_2D, CD_CONSTRUCT, mesh.edges_num, ".edge_verts");
|
||||
const Vector<BMeshToMeshLayerInfo> info = bm_to_mesh_copy_info_calc(bm.edata, mesh.edge_data);
|
||||
@@ -1385,10 +1387,12 @@ static void bm_to_mesh_faces(const BMesh &bm,
|
||||
|
||||
static void bm_to_mesh_loops(const BMesh &bm, const Span<const BMLoop *> bm_loops, Mesh &mesh)
|
||||
{
|
||||
CustomData_free_layer_named(&mesh.corner_data, ".corner_vert", mesh.corners_num);
|
||||
CustomData_free_layer_named(&mesh.corner_data, ".corner_edge", mesh.corners_num);
|
||||
CustomData_add_layer_named(
|
||||
&mesh.corner_data, CD_PROP_INT32, CD_CONSTRUCT, bm.totloop, ".corner_vert");
|
||||
&mesh.corner_data, CD_PROP_INT32, CD_CONSTRUCT, mesh.corners_num, ".corner_vert");
|
||||
CustomData_add_layer_named(
|
||||
&mesh.corner_data, CD_PROP_INT32, CD_CONSTRUCT, bm.totloop, ".corner_edge");
|
||||
&mesh.corner_data, CD_PROP_INT32, CD_CONSTRUCT, mesh.corners_num, ".corner_edge");
|
||||
const Vector<BMeshToMeshLayerInfo> info = bm_to_mesh_copy_info_calc(bm.ldata, mesh.corner_data);
|
||||
MutableSpan<int> dst_corner_verts = mesh.corner_verts_for_write();
|
||||
MutableSpan<int> dst_corner_edges = mesh.corner_edges_for_write();
|
||||
|
||||
@@ -40,8 +40,10 @@ static void sh_node_tex_noise_declare(NodeDeclarationBuilder &b)
|
||||
.max(1000.0f)
|
||||
.default_value(2.0f)
|
||||
.description("The scale of a Perlin noise octave relative to that of the previous octave");
|
||||
b.add_input<decl::Float>("Offset").min(-1000.0f).max(1000.0f).default_value(0.0f);
|
||||
b.add_input<decl::Float>("Gain").min(0.0f).max(1000.0f).default_value(1.0f);
|
||||
b.add_input<decl::Float>("Offset").min(-1000.0f).max(1000.0f).default_value(0.0f).make_available(
|
||||
[](bNode &node) { node_storage(node).type = SHD_NOISE_RIDGED_MULTIFRACTAL; });
|
||||
b.add_input<decl::Float>("Gain").min(0.0f).max(1000.0f).default_value(1.0f).make_available(
|
||||
[](bNode &node) { node_storage(node).type = SHD_NOISE_RIDGED_MULTIFRACTAL; });
|
||||
b.add_input<decl::Float>("Distortion").min(-1000.0f).max(1000.0f).default_value(0.0f);
|
||||
b.add_output<decl::Float>("Fac").no_muted_links();
|
||||
b.add_output<decl::Color>("Color").no_muted_links();
|
||||
|
||||
Reference in New Issue
Block a user