[Bf-blender-cvs] [34748961a42] refactor-mesh-selection-generic: Merge branch 'master' into refactor-mesh-selection-generic
Commit: 34748961a429d2b89bafd73050439158df68cb45 Author: Hans Goudey Date: Wed Aug 31 23:04:50 2022 -0500 Branches: refactor-mesh-selection-generic https://developer.blender.org/rB34748961a429d2b89bafd73050439158df68cb45 Merge branch 'master' into refactor-mesh-selection-generic === === ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [bf5c103d834] refactor-mesh-remove-pointers: Fix errors in Alembic export, remove changes in that area
Commit: bf5c103d83472b5a5ff63cd8310d9122afaf55ce Author: Hans Goudey Date: Wed Aug 31 22:55:49 2022 -0500 Branches: refactor-mesh-remove-pointers https://developer.blender.org/rBbf5c103d83472b5a5ff63cd8310d9122afaf55ce Fix errors in Alembic export, remove changes in that area === M source/blender/io/alembic/exporter/abc_writer_mesh.cc M source/blender/io/alembic/intern/abc_customdata.cc M source/blender/io/alembic/intern/abc_customdata.h M source/blender/io/alembic/intern/abc_reader_mesh.cc === diff --git a/source/blender/io/alembic/exporter/abc_writer_mesh.cc b/source/blender/io/alembic/exporter/abc_writer_mesh.cc index 3805f1bc0b2..acfa4c1ea08 100644 --- a/source/blender/io/alembic/exporter/abc_writer_mesh.cc +++ b/source/blender/io/alembic/exporter/abc_writer_mesh.cc @@ -176,6 +176,11 @@ void ABCGenericMeshWriter::do_write(HierarchyContext &context) m_custom_data_config.pack_uvs = args_.export_params->packuv; m_custom_data_config.mesh = mesh; + m_custom_data_config.mpoly = mesh->polygons_for_write().data(); + m_custom_data_config.mloop = mesh->loops_for_write().data(); + m_custom_data_config.totpoly = mesh->totpoly; + m_custom_data_config.totloop = mesh->totloop; + m_custom_data_config.totvert = mesh->totvert; m_custom_data_config.timesample_index = timesample_index_; try { @@ -431,9 +436,9 @@ static void get_vertices(struct Mesh *mesh, std::vector &points) points.clear(); points.resize(mesh->totvert); - const Span vertices = mesh->vertices(); + const Span verts = mesh->vertices(); for (int i = 0, e = mesh->totvert; i < e; i++) { -copy_yup_from_zup(points[i].getValue(), vertices[i].co); +copy_yup_from_zup(points[i].getValue(), verts[i].co); } } diff --git a/source/blender/io/alembic/intern/abc_customdata.cc b/source/blender/io/alembic/intern/abc_customdata.cc index 211ce9a45ff..64f1087a5de 100644 --- a/source/blender/io/alembic/intern/abc_customdata.cc +++ b/source/blender/io/alembic/intern/abc_customdata.cc @@ -56,17 +56,18 @@ static void get_uvs(const CDStreamConfig &config, return; } - const Span polys = config.polys; - const Span loops = config.loops; + const int num_poly = config.totpoly; + MPoly *polygons = config.mpoly; + MLoop *mloop = config.mloop; if (!config.pack_uvs) { int count = 0; -uvidx.resize(loops.size()); -uvs.resize(loops.size()); +uvidx.resize(config.totloop); +uvs.resize(config.totloop); /* Iterate in reverse order to match exported polygons. */ -for (const int i : polys.index_range()) { - const MPoly ¤t_poly = polys[i]; +for (int i = 0; i < num_poly; i++) { + MPoly ¤t_poly = polygons[i]; const MLoopUV *loopuv = mloopuv_array + current_poly.loopstart + current_poly.totloop; for (int j = 0; j < current_poly.totloop; j++, count++) { @@ -80,12 +81,12 @@ static void get_uvs(const CDStreamConfig &config, } else { /* Mapping for indexed UVs, deduplicating UV coordinates at vertices. */ -std::vector> idx_map(config.verts.size()); +std::vector> idx_map(config.totvert); int idx_count = 0; -for (const int i : polys.index_range()) { - const MPoly ¤t_poly = polys[i]; - const MLoop *looppoly = &loops[current_poly.loopstart + current_poly.totloop]; +for (int i = 0; i < num_poly; i++) { + MPoly ¤t_poly = polygons[i]; + MLoop *looppoly = mloop + current_poly.loopstart + current_poly.totloop; const MLoopUV *loopuv = mloopuv_array + current_poly.loopstart + current_poly.totloop; for (int j = 0; j < current_poly.totloop; j++) { @@ -171,19 +172,19 @@ static void get_cols(const CDStreamConfig &config, const void *cd_data) { const float cscale = 1.0f / 255.0f; - const Span polys = config.polys; - const Span loops = config.loops; + const MPoly *polys = config.mpoly; + const MLoop *mloops = config.mloop; const MCol *cfaces = static_cast(cd_data); - buffer.reserve(config.verts.size()); - uvidx.reserve(config.verts.size()); + buffer.reserve(config.totvert); + uvidx.reserve(config.totvert); Imath::C4f col; - for (const int i : polys.index_range()) { + for (int i = 0; i < config.totpoly; i++) { const MPoly *p = &polys[i]; const MCol *cface = &cfaces[p->loopstart + p->totloop]; -const MLoop *mloop = &loops[p->loopstart + p->totloop]; +const MLoop *mloop = &mloops[p->loopstart + p->totloop]; for (int j = 0; j < p->totloop; j++) { cface--; @@ -246,9 +247,9 @@ void write_generated_coordinates(const OCompoundProperty &prop, CDStreamConfig & const float(*orcodata)[3] = static_cast(customdata); /* Convert 3D vertices from float[3] z=up to V3f y=up. */ - std::vector coords(mesh->totvert); + std::vector coords(config.totvert); float orco_yup[3]; - for (int vertex_id
[Bf-blender-cvs] [ab9227fe003] refactor-mesh-remove-pointers: Fix alembic particle export
Commit: ab9227fe0033a73e249541a13aa63f4da94a4165 Author: Hans Goudey Date: Wed Aug 31 22:42:53 2022 -0500 Branches: refactor-mesh-remove-pointers https://developer.blender.org/rBab9227fe0033a73e249541a13aa63f4da94a4165 Fix alembic particle export === M source/blender/io/alembic/intern/abc_customdata.cc M source/blender/io/alembic/intern/abc_customdata.h === diff --git a/source/blender/io/alembic/intern/abc_customdata.cc b/source/blender/io/alembic/intern/abc_customdata.cc index b63f63b7919..211ce9a45ff 100644 --- a/source/blender/io/alembic/intern/abc_customdata.cc +++ b/source/blender/io/alembic/intern/abc_customdata.cc @@ -246,9 +246,9 @@ void write_generated_coordinates(const OCompoundProperty &prop, CDStreamConfig & const float(*orcodata)[3] = static_cast(customdata); /* Convert 3D vertices from float[3] z=up to V3f y=up. */ - std::vector coords(config.verts.size()); + std::vector coords(mesh->totvert); float orco_yup[3]; - for (int vertex_idx = 0; vertex_idx < config.verts.size(); vertex_idx++) { + for (int vertex_idx = 0; vertex_idx < mesh->totvert; vertex_idx++) { copy_yup_from_zup(orco_yup, orcodata[vertex_idx]); coords[vertex_idx].setValue(orco_yup[0], orco_yup[1], orco_yup[2]); } diff --git a/source/blender/io/alembic/intern/abc_customdata.h b/source/blender/io/alembic/intern/abc_customdata.h index 24fc05de263..d4b4fa8c33f 100644 --- a/source/blender/io/alembic/intern/abc_customdata.h +++ b/source/blender/io/alembic/intern/abc_customdata.h @@ -30,6 +30,8 @@ struct UVSample { }; struct CDStreamConfig { + + /* Only set for import. */ MutableSpan verts; MutableSpan polys; MutableSpan loops; ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [d7a131ed304] refactor-mesh-remove-pointers: Fix retrieval of MFace data from poly custom data
Commit: d7a131ed304ede3aa7d878866d7232c7fdb5a590 Author: Hans Goudey Date: Wed Aug 31 22:33:51 2022 -0500 Branches: refactor-mesh-remove-pointers https://developer.blender.org/rBd7a131ed304ede3aa7d878866d7232c7fdb5a590 Fix retrieval of MFace data from poly custom data === M source/blender/draw/intern/draw_cache_impl_particles.c === diff --git a/source/blender/draw/intern/draw_cache_impl_particles.c b/source/blender/draw/intern/draw_cache_impl_particles.c index 5edbe671e4a..9dbf826dd54 100644 --- a/source/blender/draw/intern/draw_cache_impl_particles.c +++ b/source/blender/draw/intern/draw_cache_impl_particles.c @@ -313,7 +313,7 @@ static void particle_calculate_parent_uvs(ParticleSystem *psys, } } if (!ELEM(num, DMCACHE_NOTFOUND, DMCACHE_ISCHILD)) { -MFace *mfaces = CustomData_get_layer(&psmd->mesh_final->pdata, CD_MFACE); +MFace *mfaces = CustomData_get_layer(&psmd->mesh_final->fdata, CD_MFACE); MFace *mface = &mfaces[num]; for (int j = 0; j < num_uv_layers; j++) { psys_interpolate_uvs(mtfaces[j] + num, mface->v4, particle->fuv, r_uv[j]); @@ -343,7 +343,7 @@ static void particle_calculate_parent_mcol(ParticleSystem *psys, } } if (!ELEM(num, DMCACHE_NOTFOUND, DMCACHE_ISCHILD)) { -MFace *mfaces = CustomData_get_layer(&psmd->mesh_final->pdata, CD_MFACE); +MFace *mfaces = CustomData_get_layer(&psmd->mesh_final->fdata, CD_MFACE); MFace *mface = &mfaces[num]; for (int j = 0; j < num_col_layers; j++) { /* CustomDataLayer CD_MCOL has 4 structs per face. */ @@ -370,7 +370,7 @@ static void particle_interpolate_children_uvs(ParticleSystem *psys, ChildParticle *particle = &psys->child[child_index]; int num = particle->num; if (num != DMCACHE_NOTFOUND) { -MFace *mfaces = CustomData_get_layer(&psmd->mesh_final->pdata, CD_MFACE); +MFace *mfaces = CustomData_get_layer(&psmd->mesh_final->fdata, CD_MFACE); MFace *mface = &mfaces[num]; for (int j = 0; j < num_uv_layers; j++) { psys_interpolate_uvs(mtfaces[j] + num, mface->v4, particle->fuv, r_uv[j]); @@ -395,7 +395,7 @@ static void particle_interpolate_children_mcol(ParticleSystem *psys, ChildParticle *particle = &psys->child[child_index]; int num = particle->num; if (num != DMCACHE_NOTFOUND) { -MFace *mfaces = CustomData_get_layer(&psmd->mesh_final->pdata, CD_MFACE); +MFace *mfaces = CustomData_get_layer(&psmd->mesh_final->fdata, CD_MFACE); MFace *mface = &mfaces[num]; for (int j = 0; j < num_col_layers; j++) { /* CustomDataLayer CD_MCOL has 4 structs per face. */ ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [6170fd0d76a] refactor-mesh-remove-pointers: Update Cycles Blender mesh sync to use raw pointers
Commit: 6170fd0d76acc099dfb7eb5e478fe4fbd63cf5df Author: Hans Goudey Date: Wed Aug 31 22:15:51 2022 -0500 Branches: refactor-mesh-remove-pointers https://developer.blender.org/rB6170fd0d76acc099dfb7eb5e478fe4fbd63cf5df Update Cycles Blender mesh sync to use raw pointers === M intern/cycles/blender/mesh.cpp === diff --git a/intern/cycles/blender/mesh.cpp b/intern/cycles/blender/mesh.cpp index 2e2dfd6583b..e6f6ba5e3bd 100644 --- a/intern/cycles/blender/mesh.cpp +++ b/intern/cycles/blender/mesh.cpp @@ -30,6 +30,39 @@ CCL_NAMESPACE_BEGIN /* Tangent Space */ +/** Corresponds to Blender #MVert type. */ +struct BlenderVertex { + float co[3]; + char _pad[4]; +}; + +/** Corresponds to Blender #MEdge type. */ +struct BlenderEdge { + unsigned int v1; + unsigned int v2; + char crease; + char _pad[3]; +}; + +/** Corresponds to Blender #MPoly type. */ +struct BlenderPolygon { + int loopstart; + int totloop; + short _pad1; + char flag; + char _pad2; +}; + +enum { + ME_SMOOTH = (1 << 0), +}; + +/** Corresponds to Blender #MLoop type. */ +struct BlenderLoop { + unsigned int v; + unsigned int e; +}; + struct MikkUserData { MikkUserData(const BL::Mesh &b_mesh, const char *layer_name, @@ -279,10 +312,13 @@ static void fill_generic_attribute(BL::Mesh &b_mesh, switch (b_domain) { case BL::Attribute::domain_CORNER: { if (subdivision) { -for (BL::MeshPolygon &p : b_mesh.polygons) { - int n = p.loop_total(); - for (int i = 0; i < n; i++) { -*data = get_value_at_index(p.loop_start() + i); +const BlenderPolygon *polys = static_cast( +b_mesh.polygons[0].ptr.data); +const int polys_num = b_mesh.polygons.length(); +for (int i = 0; i < polys_num; i++) { + const BlenderPolygon &b_poly = polys[i]; + for (int j = 0; j < b_poly.totloop; j++) { +*data = get_value_at_index(b_poly.loopstart + j); data++; } } @@ -305,21 +341,23 @@ static void fill_generic_attribute(BL::Mesh &b_mesh, assert(0); } else { -/* Average edge attributes at vertices. */ -const size_t num_verts = b_mesh.vertices.length(); -vector count(num_verts, 0); +const BlenderEdge *edges = static_cast(b_mesh.edges[0].ptr.data); +const size_t verts_num = b_mesh.vertices.length(); +const size_t edges_num = b_mesh.edges.length(); +vector count(verts_num, 0); -for (BL::MeshEdge &e : b_mesh.edges) { - BL::Array vertices = e.vertices(); - TypeInCycles value = get_value_at_index(e.index()); - - data[vertices[0]] += value; - data[vertices[1]] += value; - count[vertices[0]]++; - count[vertices[1]]++; +/* Average edge attributes at vertices. */ +for (int i = 0; i < edges_num; i++) { + TypeInCycles value = get_value_at_index(i); + + const BlenderEdge &b_edge = edges[i]; + data[b_edge.v1] += value; + data[b_edge.v2] += value; + count[b_edge.v1]++; + count[b_edge.v2]++; } -for (size_t i = 0; i < num_verts; i++) { +for (size_t i = 0; i < verts_num; i++) { if (count[i] > 1) { data[i] /= (float)count[i]; } @@ -607,6 +645,9 @@ static void attr_create_subd_uv_map(Scene *scene, Mesh *mesh, BL::Mesh &b_mesh, BL::Mesh::uv_layers_iterator l; int i = 0; +const BlenderPolygon *polys = static_cast(b_mesh.polygons[0].ptr.data); +const int polys_num = b_mesh.polygons.length(); + for (b_mesh.uv_layers.begin(l); l != b_mesh.uv_layers.end(); ++l, ++i) { bool active_render = l->active_render(); AttributeStandard uv_std = (active_render) ? ATTR_STD_UV : ATTR_STD_NONE; @@ -636,10 +677,10 @@ static void attr_create_subd_uv_map(Scene *scene, Mesh *mesh, BL::Mesh &b_mesh, float2 *fdata = uv_attr->data_float2(); -for (BL::MeshPolygon &p : b_mesh.polygons) { - int n = p.loop_total(); - for (int j = 0; j < n; j++) { -*(fdata++) = get_float2(l->data[p.loop_start() + j].uv()); +for (int i = 0; i < polys_num; i++) { + const BlenderPolygon &b_poly = polys[i]; + for (int j = 0; j < b_poly.totloop; j++) { +*(fdata++) = get_float2(l->data[b_poly.loopstart + j].uv()); } } } @@ -702,6 +743,8 @@ static void attr_create_pointiness(Scene *scene, Mesh *mesh, BL::Mesh &b_mesh, b if (num_verts == 0) { return; } + const BlenderVertex *verts = static_cast(b_mesh.vertices[0].ptr.data); + /* STEP 1: Find out duplicated vertices and point duplicates to a single * original vertex. */ @@ -754,10 +797,12 @@ static void attr_create_pointiness(Scene *scene, Mesh
[Bf-blender-cvs] [9bacb2672b7] refactor-mesh-remove-pointers: Merge branch 'master' into refactor-mesh-remove-pointers
Commit: 9bacb2672b77f27f1ef6d2fb26bf00d8361aaf9a Author: Hans Goudey Date: Wed Aug 31 18:07:47 2022 -0500 Branches: refactor-mesh-remove-pointers https://developer.blender.org/rB9bacb2672b77f27f1ef6d2fb26bf00d8361aaf9a Merge branch 'master' into refactor-mesh-remove-pointers === === ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [9806672e868] master: Fix: Build error in Cycles with OpenVDB turned off
Commit: 9806672e86838f6b93722bdc860121fbd2cc5795 Author: Hans Goudey Date: Wed Aug 31 18:06:13 2022 -0500 Branches: master https://developer.blender.org/rB9806672e86838f6b93722bdc860121fbd2cc5795 Fix: Build error in Cycles with OpenVDB turned off === M intern/cycles/scene/volume.cpp === diff --git a/intern/cycles/scene/volume.cpp b/intern/cycles/scene/volume.cpp index 337e1833a42..573800fcf80 100644 --- a/intern/cycles/scene/volume.cpp +++ b/intern/cycles/scene/volume.cpp @@ -294,11 +294,13 @@ void VolumeMeshBuilder::create_mesh(vector &vertices, #endif } +#ifdef WITH_OPENVDB static bool is_non_empty_leaf(const openvdb::MaskGrid::TreeType &tree, const openvdb::Coord coord) { auto *leaf_node = tree.probeLeaf(coord); return (leaf_node && !leaf_node->isEmpty()); } +#endif void VolumeMeshBuilder::generate_vertices_and_quads(vector &vertices_is, vector &quads) ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [b2a5da96b7f] refactor-mesh-remove-pointers: Fix active layer retrieval
Commit: b2a5da96b7fb14997a1c69809ec55861ec62e61d Author: Hans Goudey Date: Wed Aug 31 17:01:49 2022 -0500 Branches: refactor-mesh-remove-pointers https://developer.blender.org/rBb2a5da96b7fb14997a1c69809ec55861ec62e61d Fix active layer retrieval === M source/blender/editors/mesh/mesh_data.cc === diff --git a/source/blender/editors/mesh/mesh_data.cc b/source/blender/editors/mesh/mesh_data.cc index f41a5128c5c..09673b3d7ad 100644 --- a/source/blender/editors/mesh/mesh_data.cc +++ b/source/blender/editors/mesh/mesh_data.cc @@ -404,7 +404,7 @@ int ED_mesh_color_add(Mesh *me, else { layernum = CustomData_number_of_layers(&me->ldata, CD_PROP_BYTE_COLOR); -if (CustomData_get_active_layer(&me->ldata, CD_PROP_BYTE_COLOR) && do_init) { +if (CustomData_get_active_layer(&me->ldata, CD_PROP_BYTE_COLOR) != -1 && do_init) { CustomData_add_layer_named(&me->ldata, CD_PROP_BYTE_COLOR, CD_DUPLICATE, ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [f2a35c3b9a4] refactor-mesh-remove-pointers: Merge branch 'master' into refactor-mesh-remove-pointers
Commit: f2a35c3b9a437f28ee5c19e49357e35fb76b Author: Hans Goudey Date: Wed Aug 31 17:01:05 2022 -0500 Branches: refactor-mesh-remove-pointers https://developer.blender.org/rBf2a35c3b9a437f28ee5c19e49357e35fb76b Merge branch 'master' into refactor-mesh-remove-pointers === === ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [85a2a38ba77] refactor-mesh-remove-pointers: Fix bug in DispList mesh conversion
Commit: 85a2a38ba7748b152b3b08f6e1941f8b0becb93d Author: Hans Goudey Date: Wed Aug 31 16:43:49 2022 -0500 Branches: refactor-mesh-remove-pointers https://developer.blender.org/rB85a2a38ba7748b152b3b08f6e1941f8b0becb93d Fix bug in DispList mesh conversion === M source/blender/blenkernel/intern/mesh_convert.cc === diff --git a/source/blender/blenkernel/intern/mesh_convert.cc b/source/blender/blenkernel/intern/mesh_convert.cc index 5a44c46e999..f9952de1250 100644 --- a/source/blender/blenkernel/intern/mesh_convert.cc +++ b/source/blender/blenkernel/intern/mesh_convert.cc @@ -92,6 +92,7 @@ static void make_edges_mdata_extend(Mesh &mesh) BKE_mesh_poly_edgehash_insert(eh, &poly, &loops[poly.loopstart]); } + const int totedge_old = mesh.totedge; const int totedge_new = BLI_edgehash_len(eh); #ifdef DEBUG @@ -106,9 +107,9 @@ static void make_edges_mdata_extend(Mesh &mesh) if (totedge_new) { CustomData_realloc(&mesh.edata, totedge + totedge_new); -MEdge *medge = &edges[totedge]; - mesh.totedge += totedge_new; +edges = mesh.edges_for_write(); +MEdge *medge = &edges[totedge_old]; EdgeHashIterator *ehi; uint e_index = totedge; ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [495df255251] refactor-mesh-remove-pointers: Use C++ methods to retrieve geometry data
Commit: 495df255251137e5ea9c72d63cae49074c83e695 Author: Hans Goudey Date: Wed Aug 31 14:17:29 2022 -0500 Branches: refactor-mesh-remove-pointers https://developer.blender.org/rB495df255251137e5ea9c72d63cae49074c83e695 Use C++ methods to retrieve geometry data === M source/blender/blenkernel/BKE_mesh.h M source/blender/blenkernel/intern/DerivedMesh.cc M source/blender/blenkernel/intern/bvhutils.cc M source/blender/blenkernel/intern/crazyspace.cc M source/blender/blenkernel/intern/curve_to_mesh_convert.cc M source/blender/blenkernel/intern/geometry_component_mesh.cc M source/blender/blenkernel/intern/gpencil_geom.cc M source/blender/blenkernel/intern/mesh.cc M source/blender/blenkernel/intern/mesh_boolean_convert.cc M source/blender/blenkernel/intern/mesh_calc_edges.cc M source/blender/blenkernel/intern/mesh_convert.cc M source/blender/blenkernel/intern/mesh_evaluate.cc M source/blender/blenkernel/intern/mesh_fair.cc M source/blender/blenkernel/intern/mesh_legacy_convert.cc M source/blender/blenkernel/intern/mesh_normals.cc M source/blender/blenkernel/intern/mesh_remesh_voxel.cc M source/blender/blenkernel/intern/mesh_runtime.cc M source/blender/blenkernel/intern/mesh_sample.cc M source/blender/blenkernel/intern/mesh_validate.cc M source/blender/blenkernel/intern/mesh_wrapper.cc M source/blender/blenkernel/intern/object.cc M source/blender/blenkernel/intern/object_dupli.cc M source/blender/blenkernel/intern/paint.cc M source/blender/blenkernel/intern/pbvh_pixels.cc M source/blender/blenkernel/intern/subdiv_mesh.cc M source/blender/blenkernel/intern/volume_to_mesh.cc M source/blender/bmesh/intern/bmesh_mesh_convert.cc M source/blender/compositor/nodes/COM_ConvertColorSpaceNode.cc M source/blender/compositor/nodes/COM_GlareNode.cc M source/blender/compositor/nodes/COM_SunBeamsNode.cc M source/blender/depsgraph/intern/builder/deg_builder_nodes.cc M source/blender/draw/intern/draw_cache_impl_subdivision.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_sculpt_data.cc M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc M source/blender/editors/curves/intern/curves_ops.cc M source/blender/editors/mesh/editface.cc M source/blender/editors/mesh/mesh_data.cc M source/blender/editors/mesh/meshtools.cc M source/blender/editors/object/object_modifier.cc M source/blender/editors/object/object_remesh.cc M source/blender/editors/object/object_vgroup.cc M source/blender/editors/sculpt_paint/curves_sculpt_add.cc M source/blender/editors/sculpt_paint/curves_sculpt_puff.cc M source/blender/editors/sculpt_paint/curves_sculpt_slide.cc M source/blender/editors/sculpt_paint/paint_vertex.cc M source/blender/editors/sculpt_paint/paint_vertex_color_ops.cc M source/blender/editors/space_spreadsheet/spreadsheet_data_source_geometry.cc M source/blender/editors/transform/transform_snap_object.cc M source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp M source/blender/geometry/intern/add_curves_on_mesh.cc M source/blender/geometry/intern/mesh_merge_by_distance.cc M source/blender/geometry/intern/mesh_primitive_cuboid.cc M source/blender/geometry/intern/mesh_to_curve_convert.cc M source/blender/geometry/intern/mesh_to_volume.cc M source/blender/geometry/intern/realize_instances.cc M source/blender/io/alembic/exporter/abc_writer_mesh.cc M source/blender/io/alembic/intern/abc_reader_mesh.cc M source/blender/io/collada/GeometryExporter.cpp M source/blender/io/collada/MeshImporter.cpp M source/blender/io/stl/importer/stl_import_mesh.cc M source/blender/io/usd/intern/usd_reader_mesh.cc M source/blender/io/usd/intern/usd_writer_mesh.cc M source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc M source/blender/io/wavefront_obj/importer/obj_import_mesh.cc M source/blender/io/wavefront_obj/tests/obj_importer_tests.cc M source/blender/makesdna/DNA_mesh_types.h M source/blender/modifiers/intern/MOD_boolean.cc M source/blender/modifiers/intern/MOD_mask.cc M source/blender/modifiers/intern/MOD_meshsequencecache.cc M source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc M source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc M source/blender/nodes/geometry/nodes/node_geo_deform_curves_on_surface.cc M source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc M source/blender/nodes/geometry/nodes/node_geo_distribute_points_on_faces.cc M source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc M source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc M
[Bf-blender-cvs] [b9998541e19] master: Fix part of T100626: Cycles not using tiles for baking
Commit: b9998541e193b1f30728fc034c7a10daae183a08 Author: Brecht Van Lommel Date: Tue Aug 30 17:20:00 2022 +0200 Branches: master https://developer.blender.org/rBb9998541e193b1f30728fc034c7a10daae183a08 Fix part of T100626: Cycles not using tiles for baking Leading to excessive memory usage compared to Blender 2.93. There's still some avoidable memory usage remaining, due to the full float buffer in the new image editor drawing and not loading the cached EXR from disk in tiles. Main difficulty was handling multi-image baking and disk caches, which is solved by associating a unique layer name with each image so it can be matched when reading back the image from the disk. Also some minor header changes to be able to use RE_MAXNAME in RE_bake.h. === M intern/cycles/blender/session.cpp M intern/cycles/session/session.cpp M source/blender/freestyle/intern/application/Controller.h M source/blender/render/RE_bake.h M source/blender/render/RE_engine.h M source/blender/render/RE_pipeline.h M source/blender/render/intern/engine.cc M source/blender/render/intern/render_types.h === diff --git a/intern/cycles/blender/session.cpp b/intern/cycles/blender/session.cpp index 5954d5fb572..321771b67a5 100644 --- a/intern/cycles/blender/session.cpp +++ b/intern/cycles/blender/session.cpp @@ -659,6 +659,7 @@ void BlenderSession::bake(BL::Depsgraph &b_depsgraph_, session->set_display_driver(nullptr); session->set_output_driver(make_unique(b_engine)); + session->full_buffer_written_cb = [&](string_view filename) { full_buffer_written(filename); }; /* Sync scene. */ BL::Object b_camera_override(b_engine.camera_override()); @@ -700,6 +701,10 @@ void BlenderSession::bake(BL::Depsgraph &b_depsgraph_, BufferParams buffer_params; buffer_params.width = bake_width; buffer_params.height = bake_height; +buffer_params.window_width = bake_width; +buffer_params.window_height = bake_height; +/* Unique layer name for multi-image baking. */ +buffer_params.layer = string_printf("bake_%d\n", (int)full_buffer_files_.size()); /* Update session. */ session->reset(session_params, buffer_params); @@ -713,8 +718,6 @@ void BlenderSession::bake(BL::Depsgraph &b_depsgraph_, session->start(); session->wait(); } - - session->set_output_driver(nullptr); } void BlenderSession::synchronize(BL::Depsgraph &b_depsgraph_) diff --git a/intern/cycles/session/session.cpp b/intern/cycles/session/session.cpp index e5df22211e7..a2955da5480 100644 --- a/intern/cycles/session/session.cpp +++ b/intern/cycles/session/session.cpp @@ -436,8 +436,7 @@ int2 Session::get_effective_tile_size() const const int image_width = buffer_params_.width; const int image_height = buffer_params_.height; - /* No support yet for baking with tiles. */ - if (!params.use_auto_tile || scene->bake_manager->get_baking()) { + if (!params.use_auto_tile) { return make_int2(image_width, image_height); } diff --git a/source/blender/freestyle/intern/application/Controller.h b/source/blender/freestyle/intern/application/Controller.h index b5ef0fba1f7..8e59b277ff3 100644 --- a/source/blender/freestyle/intern/application/Controller.h +++ b/source/blender/freestyle/intern/application/Controller.h @@ -20,6 +20,10 @@ # include "MEM_guardedalloc.h" #endif +struct Depsgraph; +struct Render; +struct ViewLayer; + namespace Freestyle { class AppCanvas; diff --git a/source/blender/render/RE_bake.h b/source/blender/render/RE_bake.h index 56c66df5925..ebfc7509504 100644 --- a/source/blender/render/RE_bake.h +++ b/source/blender/render/RE_bake.h @@ -7,6 +7,8 @@ #pragma once +#include "RE_pipeline.h" + struct Depsgraph; struct ImBuf; struct MLoopUV; @@ -24,6 +26,9 @@ typedef struct BakeImage { int width; int height; size_t offset; + + /* For associating render result layer with image. */ + char render_layer_name[RE_MAXNAME]; } BakeImage; typedef struct BakeTargets { diff --git a/source/blender/render/RE_engine.h b/source/blender/render/RE_engine.h index 822f07c0dce..d5ad70e5a03 100644 --- a/source/blender/render/RE_engine.h +++ b/source/blender/render/RE_engine.h @@ -15,6 +15,7 @@ #include "BLI_threads.h" +struct BakeTargets; struct BakePixel; struct Depsgraph; struct Main; @@ -140,9 +141,10 @@ typedef struct RenderEngine { struct ReportList *reports; struct { +const struct BakeTargets *targets; const struct BakePixel *pixels; float *result; -int width, height, depth; +int image_id; int object_id; } bake; diff --git a/source/blender/render/RE_pipeline.h b/source/blender/render/RE_pipeline.h index 548e38d3ef3..66057c06058 100644 --- a/source/blender/render/RE_pipeline.h +++ b/source/blender/render/RE_pipeline.h @@ -7,7 +7,7 @@ #pragma once -#include "DEG
[Bf-blender-cvs] [3a605b23d02] master: Fix T100708: Cycles bake of diffuse/glossy color not outputting alpha
Commit: 3a605b23d02263be6bca9046e20b46a60832d971 Author: Brecht Van Lommel Date: Wed Aug 31 20:09:12 2022 +0200 Branches: master https://developer.blender.org/rB3a605b23d02263be6bca9046e20b46a60832d971 Fix T100708: Cycles bake of diffuse/glossy color not outputting alpha === M intern/cycles/integrator/pass_accessor.cpp M intern/cycles/kernel/film/read.h M intern/cycles/kernel/integrator/init_from_bake.h === diff --git a/intern/cycles/integrator/pass_accessor.cpp b/intern/cycles/integrator/pass_accessor.cpp index 05318b7545b..ab056e953c2 100644 --- a/intern/cycles/integrator/pass_accessor.cpp +++ b/intern/cycles/integrator/pass_accessor.cpp @@ -191,6 +191,12 @@ bool PassAccessor::get_render_tile_pixels(const RenderBuffers *render_buffers, * had the computation done. */ if (pass_info.num_components == 3) { get_pass_float3(render_buffers, buffer_params, destination); + +/* Use alpha for colors passes. */ +if (type == PASS_DIFFUSE_COLOR || type == PASS_GLOSSY_COLOR || +type == PASS_TRANSMISSION_COLOR) { + num_written_components = destination.num_components; +} } else if (pass_info.num_components == 4) { if (destination.num_components == 3) { diff --git a/intern/cycles/kernel/film/read.h b/intern/cycles/kernel/film/read.h index a0236909f4b..995c20a0053 100644 --- a/intern/cycles/kernel/film/read.h +++ b/intern/cycles/kernel/film/read.h @@ -235,6 +235,21 @@ ccl_device_inline void film_get_pass_pixel_float3(ccl_global const KernelFilmCon pixel[0] = f.x; pixel[1] = f.y; pixel[2] = f.z; + + /* Optional alpha channel. */ + if (kfilm_convert->num_components >= 4) { +if (kfilm_convert->pass_combined != PASS_UNUSED) { + float scale, scale_exposure; + film_get_scale_and_scale_exposure(kfilm_convert, buffer, &scale, &scale_exposure); + + ccl_global const float *in_combined = buffer + kfilm_convert->pass_combined; + const float alpha = in_combined[3] * scale; + pixel[3] = film_transparency_to_alpha(alpha); +} +else { + pixel[3] = 1.0f; +} + } } /* diff --git a/intern/cycles/kernel/integrator/init_from_bake.h b/intern/cycles/kernel/integrator/init_from_bake.h index dd26215bcd2..c77fc2540c1 100644 --- a/intern/cycles/kernel/integrator/init_from_bake.h +++ b/intern/cycles/kernel/integrator/init_from_bake.h @@ -113,7 +113,7 @@ ccl_device bool integrator_init_from_bake(KernelGlobals kg, if (prim == -1) { /* Accumulate transparency for empty pixels. */ kernel_accum_transparent(kg, state, 0, 1.0f, buffer); -return false; +return true; } prim += kernel_data.bake.tri_offset; ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [e665f0f497f] master: Fix T100714: Cycles volume render artifacts with negative value grids
Commit: e665f0f497f6ea6a4cff36e977bbac29dd762c00 Author: Brecht Van Lommel Date: Wed Aug 31 18:04:15 2022 +0200 Branches: master https://developer.blender.org/rBe665f0f497f6ea6a4cff36e977bbac29dd762c00 Fix T100714: Cycles volume render artifacts with negative value grids The volume bounds were not constructed correctly in this case. === M intern/cycles/scene/volume.cpp === diff --git a/intern/cycles/scene/volume.cpp b/intern/cycles/scene/volume.cpp index 77955350305..337e1833a42 100644 --- a/intern/cycles/scene/volume.cpp +++ b/intern/cycles/scene/volume.cpp @@ -183,7 +183,7 @@ class VolumeMeshBuilder { typename GridType::ValueOnIter iter = copy->beginValueOn(); for (; iter; ++iter) { -if (iter.getValue() < ValueType(volume_clipping)) { +if (openvdb::math::Abs(iter.getValue()) < ValueType(volume_clipping)) { iter.setValueOff(); } } @@ -294,6 +294,12 @@ void VolumeMeshBuilder::create_mesh(vector &vertices, #endif } +static bool is_non_empty_leaf(const openvdb::MaskGrid::TreeType &tree, const openvdb::Coord coord) +{ + auto *leaf_node = tree.probeLeaf(coord); + return (leaf_node && !leaf_node->isEmpty()); +} + void VolumeMeshBuilder::generate_vertices_and_quads(vector &vertices_is, vector &quads) { @@ -306,6 +312,10 @@ void VolumeMeshBuilder::generate_vertices_and_quads(vector &vertices_ unordered_map used_verts; for (auto iter = tree.cbeginLeaf(); iter; ++iter) { +if (iter->isEmpty()) { + continue; +} + openvdb::CoordBBox leaf_bbox = iter->getNodeBoundingBox(); /* +1 to convert from exclusive to include bounds. */ leaf_bbox.max() = leaf_bbox.max().offsetBy(1); @@ -333,27 +343,27 @@ void VolumeMeshBuilder::generate_vertices_and_quads(vector &vertices_ static const int LEAF_DIM = openvdb::MaskGrid::TreeType::LeafNodeType::DIM; auto center = leaf_bbox.min() + openvdb::Coord(LEAF_DIM / 2); -if (!tree.probeLeaf(openvdb::Coord(center.x() - LEAF_DIM, center.y(), center.z( { +if (!is_non_empty_leaf(tree, openvdb::Coord(center.x() - LEAF_DIM, center.y(), center.z( { create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_X_MIN); } -if (!tree.probeLeaf(openvdb::Coord(center.x() + LEAF_DIM, center.y(), center.z( { +if (!is_non_empty_leaf(tree, openvdb::Coord(center.x() + LEAF_DIM, center.y(), center.z( { create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_X_MAX); } -if (!tree.probeLeaf(openvdb::Coord(center.x(), center.y() - LEAF_DIM, center.z( { +if (!is_non_empty_leaf(tree, openvdb::Coord(center.x(), center.y() - LEAF_DIM, center.z( { create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_Y_MIN); } -if (!tree.probeLeaf(openvdb::Coord(center.x(), center.y() + LEAF_DIM, center.z( { +if (!is_non_empty_leaf(tree, openvdb::Coord(center.x(), center.y() + LEAF_DIM, center.z( { create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_Y_MAX); } -if (!tree.probeLeaf(openvdb::Coord(center.x(), center.y(), center.z() - LEAF_DIM))) { +if (!is_non_empty_leaf(tree, openvdb::Coord(center.x(), center.y(), center.z() - LEAF_DIM))) { create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_Z_MIN); } -if (!tree.probeLeaf(openvdb::Coord(center.x(), center.y(), center.z() + LEAF_DIM))) { +if (!is_non_empty_leaf(tree, openvdb::Coord(center.x(), center.y(), center.z() + LEAF_DIM))) { create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_Z_MAX); } } ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [44f8056fdf6] refactor-mesh-remove-pointers: Cleanup, fixes
Commit: 44f8056fdf69ee499b22f36e30c059eb4c4c Author: Hans Goudey Date: Wed Aug 31 13:32:33 2022 -0500 Branches: refactor-mesh-remove-pointers https://developer.blender.org/rB44f8056fdf69ee499b22f36e30c059eb4c4c Cleanup, fixes === M source/blender/blenkernel/intern/DerivedMesh.cc M source/blender/blenkernel/intern/dynamicpaint.c M source/blender/blenkernel/intern/mesh_legacy_convert.cc M source/blender/editors/curves/intern/curves_ops.cc M source/blender/editors/object/object_modifier.cc M source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp M source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c M source/blender/io/collada/MeshImporter.cpp M source/blender/io/stl/importer/stl_import_mesh.cc M source/blender/io/usd/intern/usd_reader_mesh.h M source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc M source/blender/makesdna/DNA_mesh_types.h M source/blender/makesrna/intern/rna_mesh.c M source/blender/modifiers/intern/MOD_meshsequencecache.cc M source/blender/modifiers/intern/MOD_ocean.c M source/blender/nodes/geometry/nodes/node_geo_edge_paths_to_curves.cc M source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_neighbors.cc M source/blender/nodes/geometry/nodes/node_geo_material_selection.cc === diff --git a/source/blender/blenkernel/intern/DerivedMesh.cc b/source/blender/blenkernel/intern/DerivedMesh.cc index c70e6d72e54..cb3f9113747 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.cc +++ b/source/blender/blenkernel/intern/DerivedMesh.cc @@ -586,7 +586,7 @@ static void add_orco_mesh(Object *ob, BMEditMesh *em, Mesh *mesh, Mesh *mesh_orc } if (!(layerorco = (float(*)[3])CustomData_get_layer(&mesh->vdata, layer))) { - CustomData_add_layer(&mesh->vdata, layer, CD_CALLOC, nullptr, mesh->totvert); + CustomData_add_layer(&mesh->vdata, layer, CD_SET_DEFAULT, nullptr, mesh->totvert); layerorco = (float(*)[3])CustomData_get_layer(&mesh->vdata, layer); } diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c index c157fb3036b..9c09ebb6973 100644 --- a/source/blender/blenkernel/intern/dynamicpaint.c +++ b/source/blender/blenkernel/intern/dynamicpaint.c @@ -1988,7 +1988,7 @@ static Mesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData *pmd, Object * /* apply weights into a vertex group, if doesn't exists add a new layer */ if (defgrp_index != -1 && !dvert && (surface->output_name[0] != '\0')) { dvert = CustomData_add_layer( - &result->vdata, CD_MDEFORMVERT, CD_CALLOC, NULL, sData->total_points); + &result->vdata, CD_MDEFORMVERT, CD_SET_DEFAULT, NULL, sData->total_points); } if (defgrp_index != -1 && dvert) { for (int i = 0; i < sData->total_points; i++) { diff --git a/source/blender/blenkernel/intern/mesh_legacy_convert.cc b/source/blender/blenkernel/intern/mesh_legacy_convert.cc index db234f78f04..d06c7acfefa 100644 --- a/source/blender/blenkernel/intern/mesh_legacy_convert.cc +++ b/source/blender/blenkernel/intern/mesh_legacy_convert.cc @@ -184,7 +184,7 @@ static void convert_mfaces_to_mpolys(ID *id, CustomData_free(pdata, totpoly_i); totpoly = totface_i; - mpoly = (MPoly *)CustomData_add_layer(pdata, CD_MPOLY, CD_CALLOC, nullptr, totpoly); + mpoly = (MPoly *)CustomData_add_layer(pdata, CD_MPOLY, CD_SET_DEFAULT, nullptr, totpoly); numTex = CustomData_number_of_layers(fdata, CD_MTFACE); numCol = CustomData_number_of_layers(fdata, CD_MCOL); @@ -195,7 +195,7 @@ static void convert_mfaces_to_mpolys(ID *id, totloop += mf->v4 ? 4 : 3; } - mloop = (MLoop *)CustomData_add_layer(ldata, CD_MLOOP, CD_CALLOC, nullptr, totloop); + mloop = (MLoop *)CustomData_add_layer(ldata, CD_MLOOP, CD_SET_DEFAULT, nullptr, totloop); CustomData_to_bmeshpoly(fdata, ldata, totloop); @@ -1003,7 +1003,7 @@ void BKE_mesh_legacy_convert_material_indices_to_mpoly(Mesh *mesh) using namespace blender; using namespace blender::bke; const AttributeAccessor attributes = mesh_attributes(*mesh); - MutableSpan polys(mesh->mpoly, mesh->totpoly); + MutableSpan polys = mesh_polygons_for_write(*mesh); const VArray material_indices = attributes.lookup_or_default( "material_index", ATTR_DOMAIN_FACE, 0); threading::parallel_for(polys.index_range(), 4096, [&](IndexRange range) { @@ -1018,7 +1018,7 @@ void BKE_mesh_legacy_convert_mpoly_to_material_indices(Mesh *mesh) using namespace blender; using namespace blender::bke; MutableAttributeAccessor attributes = mesh_attributes_for_write(*mesh); - const Span polys(mesh->mpoly, mesh->totpoly); + const Span polys = mesh_polygons(
[Bf-blender-cvs] [54b650bc297] refactor-mesh-remove-pointers: Merge branch 'master' into refactor-mesh-remove-pointers
Commit: 54b650bc297cce00a44da527f7e63e07c4d7e21f Author: Hans Goudey Date: Wed Aug 31 12:40:18 2022 -0500 Branches: refactor-mesh-remove-pointers https://developer.blender.org/rB54b650bc297cce00a44da527f7e63e07c4d7e21f Merge branch 'master' into refactor-mesh-remove-pointers === === diff --cc source/blender/blenkernel/BKE_mesh.h index 7e36f0e5b31,ec6799ee995..0adcbd74e31 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@@ -6,16 -6,13 +6,20 @@@ * \ingroup bke */ + #include "DNA_mesh_types.h" + + #include "BKE_customdata.h" + #include "BKE_mesh_types.h" #include "BLI_compiler_attrs.h" +#include "BLI_compiler_compat.h" #include "BLI_utildefines.h" +#include "DNA_mesh_types.h" +#include "DNA_meshdata_types.h" + +#include "BKE_customdata.h" +#include "BKE_mesh_types.h" + struct BLI_Stack; struct BMesh; struct BMeshCreateParams; @@@ -1026,103 -1022,30 +1030,127 @@@ char *BKE_mesh_debug_info(const struct void BKE_mesh_debug_print(const struct Mesh *me) ATTR_NONNULL(1); #endif + /** + * \return The material index for each polygon. May be null. + * \note In C++ code, prefer using the attribute API (#MutableAttributeAccessor)/ + */ + BLI_INLINE const int *BKE_mesh_material_indices(const Mesh *mesh) + { + return (const int *)CustomData_get_layer_named(&mesh->pdata, CD_PROP_INT32, "material_index"); + } + + /** + * \return The material index for each polygon. Create the layer if it doesn't exist. + * \note In C++ code, prefer using the attribute API (#MutableAttributeAccessor)/ + */ + BLI_INLINE int *BKE_mesh_material_indices_for_write(Mesh *mesh) + { + int *indices = (int *)CustomData_duplicate_referenced_layer_named( + &mesh->pdata, CD_PROP_INT32, "material_index", mesh->totpoly); + if (indices) { + return indices; + } + return (int *)CustomData_add_layer_named( + &mesh->pdata, CD_PROP_INT32, CD_SET_DEFAULT, NULL, mesh->totpoly, "material_index"); + } + +BLI_INLINE const MVert *BKE_mesh_vertices(const Mesh *mesh) +{ + return (const MVert *)CustomData_get_layer(&mesh->vdata, CD_MVERT); +} +BLI_INLINE MVert *BKE_mesh_vertices_for_write(Mesh *mesh) +{ + return (MVert *)CustomData_duplicate_referenced_layer(&mesh->vdata, CD_MVERT, mesh->totvert); +} + +BLI_INLINE const MEdge *BKE_mesh_edges(const Mesh *mesh) +{ + return (const MEdge *)CustomData_get_layer(&mesh->edata, CD_MEDGE); +} +BLI_INLINE MEdge *BKE_mesh_edges_for_write(Mesh *mesh) +{ + return (MEdge *)CustomData_duplicate_referenced_layer(&mesh->edata, CD_MEDGE, mesh->totedge); +} + +BLI_INLINE const MPoly *BKE_mesh_polygons(const Mesh *mesh) +{ + return (const MPoly *)CustomData_get_layer(&mesh->pdata, CD_MPOLY); +} +BLI_INLINE MPoly *BKE_mesh_polygons_for_write(Mesh *mesh) +{ + return (MPoly *)CustomData_duplicate_referenced_layer(&mesh->pdata, CD_MPOLY, mesh->totpoly); +} + +BLI_INLINE const MLoop *BKE_mesh_loops(const Mesh *mesh) +{ + return (const MLoop *)CustomData_get_layer(&mesh->ldata, CD_MLOOP); +} +BLI_INLINE MLoop *BKE_mesh_loops_for_write(Mesh *mesh) +{ + return (MLoop *)CustomData_duplicate_referenced_layer(&mesh->ldata, CD_MLOOP, mesh->totloop); +} + +BLI_INLINE const MDeformVert *BKE_mesh_deform_verts(const Mesh *mesh) +{ + return (const MDeformVert *)CustomData_get_layer(&mesh->vdata, CD_MDEFORMVERT); +} +BLI_INLINE MDeformVert *BKE_mesh_deform_verts_for_write(Mesh *mesh) +{ + MDeformVert *dvert = (MDeformVert *)CustomData_duplicate_referenced_layer( + &mesh->vdata, CD_MDEFORMVERT, mesh->totvert); + if (dvert) { +return dvert; + } + return (MDeformVert *)CustomData_add_layer( - &mesh->vdata, CD_MDEFORMVERT, CD_CALLOC, NULL, mesh->totvert); ++ &mesh->vdata, CD_MDEFORMVERT, CD_SET_DEFAULT, NULL, mesh->totvert); +} + +#ifdef __cplusplus +} +#endif + #ifdef __cplusplus + +# include "BLI_span.hh" + +namespace blender::bke { + +inline Span mesh_vertices(const Mesh &mesh) +{ + return {BKE_mesh_vertices(&mesh), mesh.totvert}; +} +inline MutableSpan mesh_vertices_for_write(Mesh &mesh) +{ + return {BKE_mesh_vertices_for_write(&mesh), mesh.totvert}; +} + +inline Span mesh_edges(const Mesh &mesh) +{ + return {BKE_mesh_edges(&mesh), mesh.totedge}; } +inline MutableSpan mesh_edges_for_write(Mesh &mesh) +{ + return {BKE_mesh_edges_for_write(&mesh), mesh.totedge}; +} + +inline Span mesh_polygons(const Mesh &mesh) +{ + return {BKE_mesh_polygons(&mesh), mesh.totpoly}; +} +inline MutableSpan mesh_polygons_for_write(Mesh &mesh) +{ + return {BKE_mesh_polygons_for_write(&mesh), mesh.totpoly}; +} + +inline Span mesh_loops(const Mesh &mesh) +{ + return {BKE_mesh_loops(&mesh), mesh.totloop}; +} +inline MutableSpan mesh_loops_for_write(Mesh &mesh) +{ + return {BKE_mesh_loops_for_write(
[Bf-blender-cvs] [d7b33cd8c88] master: Sculpt: Fix T100479: Memory corruption in sculpt_boundary_edit_data_init
Commit: d7b33cd8c881b9a4c13eef9b6bd6192a56710f78 Author: Joseph Eagar Date: Wed Aug 31 10:19:34 2022 -0700 Branches: master https://developer.blender.org/rBd7b33cd8c881b9a4c13eef9b6bd6192a56710f78 Sculpt: Fix T100479: Memory corruption in sculpt_boundary_edit_data_init === M source/blender/editors/sculpt_paint/sculpt_boundary.c === diff --git a/source/blender/editors/sculpt_paint/sculpt_boundary.c b/source/blender/editors/sculpt_paint/sculpt_boundary.c index 8d08c338b93..93da767e3c5 100644 --- a/source/blender/editors/sculpt_paint/sculpt_boundary.c +++ b/source/blender/editors/sculpt_paint/sculpt_boundary.c @@ -423,7 +423,7 @@ static void sculpt_boundary_edit_data_init(SculptSession *ss, /* Copy the new vertices to the queue to be processed in the next iteration. */ while (!BLI_gsqueue_is_empty(next_iteration)) { - int next_v; + PBVHVertRef next_v; BLI_gsqueue_pop(next_iteration, &next_v); BLI_gsqueue_push(current_iteration, &next_v); } ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [70f1711324e] master: Mesh: Remove unnecessary copy in modifier stack
Commit: 70f1711324e27e8189b401b40cc0f41564f15441 Author: Hans Goudey Date: Wed Aug 31 12:12:09 2022 -0500 Branches: master https://developer.blender.org/rB70f1711324e27e8189b401b40cc0f41564f15441 Mesh: Remove unnecessary copy in modifier stack These few lines making a copy of the final mesh were confusing. The goal (I'm fairly certain) is to make sure the cage mesh and final mesh aren't shared when applying the vertex coordinates to the final mesh. This can be done more simply though, in a way that avoids duplicating the final mesh if it already isn't shared. This works well in some basic tests with different modifiers. Though I doubt it was really a bottleneck anywhere, simplifying the modifier stack internals is always nice. Differential Revision: https://developer.blender.org/D15814 === M source/blender/blenkernel/intern/DerivedMesh.cc === diff --git a/source/blender/blenkernel/intern/DerivedMesh.cc b/source/blender/blenkernel/intern/DerivedMesh.cc index e83720e99f1..7ef6eaa64cd 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.cc +++ b/source/blender/blenkernel/intern/DerivedMesh.cc @@ -1572,11 +1572,9 @@ static void editbmesh_calc_modifiers(struct Depsgraph *depsgraph, * then we need to build one. */ if (mesh_final) { if (deformed_verts) { - Mesh *mesh_tmp = BKE_mesh_copy_for_eval(mesh_final, false); - if (mesh_final != mesh_cage) { -BKE_id_free(nullptr, mesh_final); + if (mesh_final == mesh_cage) { +mesh_final = BKE_mesh_copy_for_eval(mesh_final, false); } - mesh_final = mesh_tmp; BKE_mesh_vert_coords_apply(mesh_final, deformed_verts); } } ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [91d9f46aeca] master: Cleanup: Use const for node data in compositor
Commit: 91d9f46aecacab60d747b757cf57ecdc1b18913a Author: Hans Goudey Date: Wed Aug 31 11:49:35 2022 -0500 Branches: master https://developer.blender.org/rB91d9f46aecacab60d747b757cf57ecdc1b18913a Cleanup: Use const for node data in compositor Push the const usage a bit further for compositor nodes, so that they are more explicit about not modifying original nodes from the editor. Differential Revision: https://developer.blender.org/D15822 === M source/blender/compositor/intern/COM_Node.h M source/blender/compositor/nodes/COM_AlphaOverNode.cc M source/blender/compositor/nodes/COM_AntiAliasingNode.cc M source/blender/compositor/nodes/COM_BlurNode.cc M source/blender/compositor/nodes/COM_BokehBlurNode.cc M source/blender/compositor/nodes/COM_BokehImageNode.cc M source/blender/compositor/nodes/COM_BoxMaskNode.cc M source/blender/compositor/nodes/COM_BrightnessNode.cc M source/blender/compositor/nodes/COM_ChannelMatteNode.cc M source/blender/compositor/nodes/COM_ChromaMatteNode.cc M source/blender/compositor/nodes/COM_ColorBalanceNode.cc M source/blender/compositor/nodes/COM_ColorCorrectionNode.cc M source/blender/compositor/nodes/COM_ColorCurveNode.cc M source/blender/compositor/nodes/COM_ColorMatteNode.cc M source/blender/compositor/nodes/COM_ColorRampNode.cc M source/blender/compositor/nodes/COM_ColorSpillNode.cc M source/blender/compositor/nodes/COM_CombineColorNode.cc M source/blender/compositor/nodes/COM_CombineColorNodeLegacy.cc M source/blender/compositor/nodes/COM_CompositorNode.cc M source/blender/compositor/nodes/COM_ConvertAlphaNode.cc M source/blender/compositor/nodes/COM_ConvertColorSpaceNode.cc M source/blender/compositor/nodes/COM_CropNode.cc M source/blender/compositor/nodes/COM_CryptomatteNode.cc M source/blender/compositor/nodes/COM_DefocusNode.cc M source/blender/compositor/nodes/COM_DenoiseNode.cc M source/blender/compositor/nodes/COM_DespeckleNode.cc M source/blender/compositor/nodes/COM_DifferenceMatteNode.cc M source/blender/compositor/nodes/COM_DilateErodeNode.cc M source/blender/compositor/nodes/COM_DirectionalBlurNode.cc M source/blender/compositor/nodes/COM_DistanceMatteNode.cc M source/blender/compositor/nodes/COM_DoubleEdgeMaskNode.cc M source/blender/compositor/nodes/COM_GlareNode.cc M source/blender/compositor/nodes/COM_HueSaturationValueCorrectNode.cc M source/blender/compositor/nodes/COM_IDMaskNode.cc M source/blender/compositor/nodes/COM_ImageNode.cc M source/blender/compositor/nodes/COM_InpaintNode.cc M source/blender/compositor/nodes/COM_InvertNode.cc M source/blender/compositor/nodes/COM_KeyingNode.cc M source/blender/compositor/nodes/COM_KeyingScreenNode.cc M source/blender/compositor/nodes/COM_LensDistortionNode.cc M source/blender/compositor/nodes/COM_LuminanceMatteNode.cc M source/blender/compositor/nodes/COM_MapUVNode.cc M source/blender/compositor/nodes/COM_MapValueNode.cc M source/blender/compositor/nodes/COM_MaskNode.cc M source/blender/compositor/nodes/COM_MixNode.cc M source/blender/compositor/nodes/COM_MovieClipNode.cc M source/blender/compositor/nodes/COM_MovieDistortionNode.cc M source/blender/compositor/nodes/COM_OutputFileNode.cc M source/blender/compositor/nodes/COM_PlaneTrackDeformNode.cc M source/blender/compositor/nodes/COM_ScaleNode.cc M source/blender/compositor/nodes/COM_SeparateColorNode.cc M source/blender/compositor/nodes/COM_SeparateColorNodeLegacy.cc M source/blender/compositor/nodes/COM_SplitViewerNode.cc M source/blender/compositor/nodes/COM_Stabilize2dNode.cc M source/blender/compositor/nodes/COM_SunBeamsNode.cc M source/blender/compositor/nodes/COM_SwitchViewNode.cc M source/blender/compositor/nodes/COM_TextureNode.cc M source/blender/compositor/nodes/COM_TimeNode.cc M source/blender/compositor/nodes/COM_TonemapNode.cc M source/blender/compositor/nodes/COM_TrackPositionNode.cc M source/blender/compositor/nodes/COM_TranslateNode.cc M source/blender/compositor/nodes/COM_VectorBlurNode.cc M source/blender/compositor/nodes/COM_VectorCurveNode.cc M source/blender/compositor/nodes/COM_ViewerNode.cc M source/blender/compositor/operations/COM_BokehImageOperation.h M source/blender/compositor/operations/COM_BoxMaskOperation.h M source/blender/compositor/operations/COM_CurveBaseOperation.cc M source/blender/compositor/operations/COM_CurveBaseOperation.h M source/blender/compositor/operations/COM_DenoiseOperation.cc M source/blender/compositor/operations/COM_DenoiseOperation.h M source/blender/compositor/operations/COM_DirectionalBlurOperation.h M source/blende
[Bf-blender-cvs] [fae955fdb11] master: Fix merge error.
Commit: fae955fdb11e49d8c2fad29da6546038ae7386db Author: Joseph Eagar Date: Wed Aug 31 10:04:23 2022 -0700 Branches: master https://developer.blender.org/rBfae955fdb11e49d8c2fad29da6546038ae7386db Fix merge error. === M source/blender/editors/mesh/mesh_data.cc === diff --git a/source/blender/editors/mesh/mesh_data.cc b/source/blender/editors/mesh/mesh_data.cc index 92350af857d..1511da810cb 100644 --- a/source/blender/editors/mesh/mesh_data.cc +++ b/source/blender/editors/mesh/mesh_data.cc @@ -454,7 +454,6 @@ static bool layers_poll(bContext *C) int ED_mesh_sculpt_color_add(Mesh *me, const char *name, - const bool active_set, const bool do_init, ReportList *UNUSED(reports)) { ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [ab8240fcff1] master: Fix submodule refs
Commit: ab8240fcff15780729842ee711cedf9fba440d62 Author: Joseph Eagar Date: Wed Aug 31 10:02:42 2022 -0700 Branches: master https://developer.blender.org/rBab8240fcff15780729842ee711cedf9fba440d62 Fix submodule refs === M release/datafiles/locale M release/scripts/addons M source/tools === diff --git a/release/datafiles/locale b/release/datafiles/locale index a2eb5078914..1b891478f44 16 --- a/release/datafiles/locale +++ b/release/datafiles/locale @@ -1 +1 @@ -Subproject commit a2eb507891449a0b67582be9561840075513661d +Subproject commit 1b891478f44dd047c3a92fda3ebd17fae1c3acd3 diff --git a/release/scripts/addons b/release/scripts/addons index 7a8502871c3..25ffc6f430f 16 --- a/release/scripts/addons +++ b/release/scripts/addons @@ -1 +1 @@ -Subproject commit 7a8502871c34db0343cc7de52d6b49b15a84238a +Subproject commit 25ffc6f430fc995b1c046b01acba1c3e6c1896b0 diff --git a/source/tools b/source/tools index da8bdd7244c..2a541f164a2 16 --- a/source/tools +++ b/source/tools @@ -1 +1 @@ -Subproject commit da8bdd7244c7b6c2eadf4c949ff391d0cc430275 +Subproject commit 2a541f164a222ef7bcd036d37687738acee8d946 ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [373e69b94e1] master: Merge branch 'blender-v3.3-release'
Commit: 373e69b94e1a11fa86c8d1547782126a422ed2d2 Author: Joseph Eagar Date: Wed Aug 31 09:46:33 2022 -0700 Branches: master https://developer.blender.org/rB373e69b94e1a11fa86c8d1547782126a422ed2d2 Merge branch 'blender-v3.3-release' === === diff --cc source/blender/editors/mesh/mesh_data.cc index 8e6723f5f0c,88caa191b18..92350af857d --- a/source/blender/editors/mesh/mesh_data.cc +++ b/source/blender/editors/mesh/mesh_data.cc @@@ -449,7 -489,28 +452,11 @@@ static bool layers_poll(bContext *C /*** Sculpt Vertex colors operators / - int ED_mesh_sculpt_color_add(Mesh *me, const char *name, const bool do_init, ReportList *reports) -static bool sculpt_vertex_color_remove_poll(bContext *C) -{ - if (!layers_poll(C)) { -return false; - } - - Object *ob = ED_object_context(C); - Mesh *me = static_cast(ob->data); - CustomData *vdata = GET_CD_DATA(me, vdata); - const int active = CustomData_get_active_layer(vdata, CD_PROP_COLOR); - if (active != -1) { -return true; - } - - return false; -} - + int ED_mesh_sculpt_color_add(Mesh *me, + const char *name, + const bool active_set, + const bool do_init, + ReportList *UNUSED(reports)) { /* NOTE: keep in sync with #ED_mesh_uv_add. */ ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [e202e27b144] refactor-mesh-bevel-weight-generic: Merge branch 'master' into refactor-mesh-bevel-weight-generic
Commit: e202e27b144265f5de7c1044638057d792b6ffaf Author: Hans Goudey Date: Wed Aug 31 11:45:08 2022 -0500 Branches: refactor-mesh-bevel-weight-generic https://developer.blender.org/rBe202e27b144265f5de7c1044638057d792b6ffaf Merge branch 'master' into refactor-mesh-bevel-weight-generic === === diff --cc source/blender/blenkernel/intern/mball_tessellate.c index 1ca4f120bc2,bfa11b74782..36e900a14d8 --- a/source/blender/blenkernel/intern/mball_tessellate.c +++ b/source/blender/blenkernel/intern/mball_tessellate.c @@@ -1444,9 -1444,10 +1444,9 @@@ Mesh *BKE_mball_polygonize(Depsgraph *d Mesh *mesh = (Mesh *)BKE_id_new_nomain(ID_ME, ((ID *)ob->data)->name + 2); mesh->totvert = (int)process.curvertex; - MVert *mvert = CustomData_add_layer(&mesh->vdata, CD_MVERT, CD_DEFAULT, NULL, mesh->totvert); + MVert *mvert = CustomData_add_layer(&mesh->vdata, CD_MVERT, CD_CONSTRUCT, NULL, mesh->totvert); for (int i = 0; i < mesh->totvert; i++) { copy_v3_v3(mvert[i].co, process.co[i]); -mvert->bweight = 0; mvert->flag = 0; } MEM_freeN(process.co); diff --cc source/blender/blenkernel/intern/mesh.cc index cd076b370f1,b44a956eec4..af061a9daae --- a/source/blender/blenkernel/intern/mesh.cc +++ b/source/blender/blenkernel/intern/mesh.cc @@@ -249,7 -254,7 +254,8 @@@ static void mesh_blend_write(BlendWrite Set names_to_skip; if (!BLO_write_is_undo(writer)) { BKE_mesh_legacy_convert_hide_layers_to_flags(mesh); + BKE_mesh_legacy_bevel_weight_from_layers(mesh); + BKE_mesh_legacy_convert_material_indices_to_mpoly(mesh); /* When converting to the old mesh format, don't save redundant attributes. */ names_to_skip.add_multiple_new({".hide_vert", ".hide_edge", ".hide_poly"}); } @@@ -338,7 -343,7 +344,6 @@@ static void mesh_blend_read_data(BlendD if (!BLO_read_data_is_undo(reader)) { BKE_mesh_legacy_convert_flags_to_hide_layers(mesh); - BKE_mesh_legacy_bevel_weight_to_layers(mesh); -BKE_mesh_legacy_convert_mpoly_to_material_indices(mesh); } /* We don't expect to load normals from files, since they are derived data. */ diff --cc source/blender/blenkernel/intern/mesh_legacy_convert.cc index 19594282b3f,2fc984997b8..e0f33fb038e --- a/source/blender/blenkernel/intern/mesh_legacy_convert.cc +++ b/source/blender/blenkernel/intern/mesh_legacy_convert.cc @@@ -877,67 -878,6 +878,67 @@@ void BKE_mesh_add_mface_layers(CustomDa /** \} */ +/* */ +/** \name Bevel Weight Conversion + * \{ */ + +void BKE_mesh_legacy_bevel_weight_from_layers(Mesh *mesh) +{ + using namespace blender; + MutableSpan vertices(mesh->mvert, mesh->totvert); + if (const float *weights = static_cast( + CustomData_get_layer(&mesh->vdata, CD_BWEIGHT))) { +mesh->cd_flag |= ME_CDFLAG_VERT_BWEIGHT; +for (const int i : vertices.index_range()) { + vertices[i].bweight = std::clamp(weights[i], 0.0f, 1.0f) * 255.0f; +} + } + else { +mesh->cd_flag &= ~ME_CDFLAG_VERT_BWEIGHT; +for (const int i : vertices.index_range()) { + vertices[i].bweight = 0; +} + } + MutableSpan edges(mesh->medge, mesh->totedge); + if (const float *weights = static_cast( + CustomData_get_layer(&mesh->edata, CD_BWEIGHT))) { +mesh->cd_flag |= ME_CDFLAG_EDGE_BWEIGHT; +for (const int i : edges.index_range()) { + edges[i].bweight = std::clamp(weights[i], 0.0f, 1.0f) * 255.0f; +} + } + else { +mesh->cd_flag &= ~ME_CDFLAG_EDGE_BWEIGHT; +for (const int i : edges.index_range()) { + edges[i].bweight = 0; +} + } +} + +void BKE_mesh_legacy_bevel_weight_to_layers(Mesh *mesh) +{ + using namespace blender; + const Span vertices(mesh->mvert, mesh->totvert); + if (mesh->cd_flag & ME_CDFLAG_VERT_BWEIGHT) { +float *weights = static_cast( - CustomData_add_layer(&mesh->vdata, CD_BWEIGHT, CD_DEFAULT, nullptr, vertices.size())); ++CustomData_add_layer(&mesh->vdata, CD_BWEIGHT, CD_CONSTRUCT, nullptr, vertices.size())); +for (const int i : vertices.index_range()) { + weights[i] = vertices[i].bweight / 255.0f; +} + } + + const Span edges(mesh->medge, mesh->totedge); + if (mesh->cd_flag & ME_CDFLAG_EDGE_BWEIGHT) { +float *weights = static_cast( - CustomData_add_layer(&mesh->edata, CD_BWEIGHT, CD_DEFAULT, nullptr, edges.size())); ++CustomData_add_layer(&mesh->edata, CD_BWEIGHT, CD_CONSTRUCT, nullptr, edges.size())); +for (const int i : edges.index_range()) { + weights[i] = edges[i].bweight / 255.0f; +} + } +} + +/** \} */ + /* */ /** \name Hide Attribute and Legacy Flag Conversion * \{ */ diff --cc source/b
[Bf-blender-cvs] [cdc0be48c95] blender-v3.3-release: Cleanup: fix warnings from vcol limit commit
Commit: cdc0be48c95c379b75143a60e935a416d99eb8bf Author: Joseph Eagar Date: Wed Aug 31 09:43:52 2022 -0700 Branches: blender-v3.3-release https://developer.blender.org/rBcdc0be48c95c379b75143a60e935a416d99eb8bf Cleanup: fix warnings from vcol limit commit === M source/blender/blenkernel/intern/mesh_validate.cc M source/blender/editors/mesh/mesh_data.cc M source/blender/io/alembic/intern/abc_customdata.cc === diff --git a/source/blender/blenkernel/intern/mesh_validate.cc b/source/blender/blenkernel/intern/mesh_validate.cc index d17885e1214..5231c550fa7 100644 --- a/source/blender/blenkernel/intern/mesh_validate.cc +++ b/source/blender/blenkernel/intern/mesh_validate.cc @@ -1017,7 +1017,6 @@ bool BKE_mesh_validate_all_customdata(CustomData *vdata, pdata, mask.pmask, totpoly, do_verbose, do_fixes, &is_change_p); const int tot_uvloop = CustomData_number_of_layers(ldata, CD_MLOOPUV); - const int tot_vcolloop = CustomData_number_of_layers(ldata, CD_PROP_BYTE_COLOR); if (tot_uvloop > MAX_MTFACE) { PRINT_ERR( "\tMore UV layers than %d allowed, %d last ones won't be available for render, shaders, " diff --git a/source/blender/editors/mesh/mesh_data.cc b/source/blender/editors/mesh/mesh_data.cc index c850e2f1e7a..88caa191b18 100644 --- a/source/blender/editors/mesh/mesh_data.cc +++ b/source/blender/editors/mesh/mesh_data.cc @@ -368,8 +368,11 @@ bool ED_mesh_uv_remove_named(Mesh *me, const char *name) return false; } -int ED_mesh_color_add( -Mesh *me, const char *name, const bool active_set, const bool do_init, ReportList *reports) +int ED_mesh_color_add(Mesh *me, + const char *name, + const bool active_set, + const bool do_init, + ReportList *UNUSED(reports)) { /* NOTE: keep in sync with #ED_mesh_uv_add. */ @@ -503,8 +506,11 @@ static bool sculpt_vertex_color_remove_poll(bContext *C) return false; } -int ED_mesh_sculpt_color_add( -Mesh *me, const char *name, const bool active_set, const bool do_init, ReportList *reports) +int ED_mesh_sculpt_color_add(Mesh *me, + const char *name, + const bool active_set, + const bool do_init, + ReportList *UNUSED(reports)) { /* NOTE: keep in sync with #ED_mesh_uv_add. */ @@ -529,7 +535,7 @@ int ED_mesh_sculpt_color_add( } else { layernum = CustomData_number_of_layers(&me->vdata, CD_PROP_COLOR); - + if (CustomData_has_layer(&me->vdata, CD_PROP_COLOR) && do_init) { const MPropCol *color_data = (const MPropCol *)CustomData_get_layer(&me->vdata, CD_PROP_COLOR); diff --git a/source/blender/io/alembic/intern/abc_customdata.cc b/source/blender/io/alembic/intern/abc_customdata.cc index 35be9f9fc4d..6664417823c 100644 --- a/source/blender/io/alembic/intern/abc_customdata.cc +++ b/source/blender/io/alembic/intern/abc_customdata.cc @@ -564,7 +564,6 @@ void read_custom_data(const std::string &iobject_full_name, } int num_uvs = 0; - int num_colors = 0; const size_t num_props = prop.getNumProperties(); ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [1394e14ad9b] refactor-mesh-selection-generic: Merge branch 'master' into refactor-mesh-selection-generic
Commit: 1394e14ad9be138816c760d1996e3f7388f8c8b4 Author: Hans Goudey Date: Wed Aug 31 09:50:19 2022 -0500 Branches: refactor-mesh-selection-generic https://developer.blender.org/rB1394e14ad9be138816c760d1996e3f7388f8c8b4 Merge branch 'master' into refactor-mesh-selection-generic === === diff --cc source/blender/blenkernel/BKE_mesh_legacy_convert.h index c9c428e0dec,11ee86c62a7..1ce2f0c9dcc --- a/source/blender/blenkernel/BKE_mesh_legacy_convert.h +++ b/source/blender/blenkernel/BKE_mesh_legacy_convert.h @@@ -27,16 -27,16 +27,26 @@@ void BKE_mesh_legacy_convert_hide_layer */ void BKE_mesh_legacy_convert_flags_to_hide_layers(struct Mesh *mesh); +/** + * Convert the selected element attributes to the old flag format for writing. + */ +void BKE_mesh_legacy_convert_selection_layers_to_flags(struct Mesh *mesh); +/** + * Convert the old selection flags (#SELECT/#ME_FACE_SEL) to the selected element attribute for + * reading. Only add the attributes when there are any elements in each domain selected. + */ +void BKE_mesh_legacy_convert_flags_to_selection_layers(struct Mesh *mesh); + + /** + * Move material indices from a generic attribute to #MPoly. + */ + void BKE_mesh_legacy_convert_material_indices_to_mpoly(struct Mesh *mesh); + /** + * Move material indices from the #MPoly struct to a generic attributes. + * Only add the attribute when the indices are not all zero. + */ + void BKE_mesh_legacy_convert_mpoly_to_material_indices(struct Mesh *mesh); + /** * Recreate #MFace Tessellation. * diff --cc source/blender/blenkernel/intern/customdata.cc index 65f05d34f51,51edf8308c3..5dfcb3105a2 --- a/source/blender/blenkernel/intern/customdata.cc +++ b/source/blender/blenkernel/intern/customdata.cc @@@ -2346,13 -2375,7 +2375,14 @@@ bool CustomData_merge(const CustomData static bool attribute_stored_in_bmesh_flag(const StringRef name) { - return ELEM(name, ".hide_vert", ".hide_edge", ".hide_poly", "material_index"); + return ELEM(name, + ".hide_vert", + ".hide_edge", + ".hide_poly", + ".selection_vert", + ".selection_edge", - ".selection_poly"); ++ ".selection_poly", ++ "material_index"); } static CustomData shallow_copy_remove_non_bmesh_attributes(const CustomData &src) diff --cc source/blender/blenkernel/intern/mesh.cc index 8496f37736b,b44a956eec4..caeb1da57d9 --- a/source/blender/blenkernel/intern/mesh.cc +++ b/source/blender/blenkernel/intern/mesh.cc @@@ -249,14 -254,9 +254,15 @@@ static void mesh_blend_write(BlendWrite Set names_to_skip; if (!BLO_write_is_undo(writer)) { BKE_mesh_legacy_convert_hide_layers_to_flags(mesh); + BKE_mesh_legacy_convert_selection_layers_to_flags(mesh); + BKE_mesh_legacy_convert_material_indices_to_mpoly(mesh); /* When converting to the old mesh format, don't save redundant attributes. */ - names_to_skip.add_multiple_new({".hide_vert", ".hide_edge", ".hide_poly"}); + names_to_skip.add_multiple_new({".hide_vert", + ".hide_edge", + ".hide_poly", + ".selection_vert", + ".selection_edge", + ".selection_poly"}); } CustomData_blend_write_prepare(mesh->vdata, vert_layers, names_to_skip); @@@ -343,7 -343,7 +349,8 @@@ static void mesh_blend_read_data(BlendD if (!BLO_read_data_is_undo(reader)) { BKE_mesh_legacy_convert_flags_to_hide_layers(mesh); +BKE_mesh_legacy_convert_flags_to_selection_layers(mesh); + BKE_mesh_legacy_convert_mpoly_to_material_indices(mesh); } /* We don't expect to load normals from files, since they are derived data. */ diff --cc source/blender/blenkernel/intern/mesh_legacy_convert.cc index bfe7c588ca0,2fc984997b8..345cb38bb07 --- a/source/blender/blenkernel/intern/mesh_legacy_convert.cc +++ b/source/blender/blenkernel/intern/mesh_legacy_convert.cc @@@ -963,89 -963,42 +964,129 @@@ void BKE_mesh_legacy_convert_flags_to_h } /** \} */ + + /* */ + /** \name Material Index Conversion + * \{ */ + + void BKE_mesh_legacy_convert_material_indices_to_mpoly(Mesh *mesh) + { + using namespace blender; + using namespace blender::bke; + const AttributeAccessor attributes = mesh_attributes(*mesh); + MutableSpan polys(mesh->mpoly, mesh->totpoly); + const VArray material_indices = attributes.lookup_or_default( + "material_index", ATTR_DOMAIN_FACE, 0); + threading::parallel_for(polys.index_range(), 4096, [&](IndexRange range) { + for (const int i : range) { + polys[i].mat_nr = material_indices[i]; + } + }
[Bf-blender-cvs] [00a72e770fd] refactor-mesh-selection-generic: Fix error in logic
Commit: 00a72e770fd767533dce7b0743be2a7ebd861263 Author: Hans Goudey Date: Wed Aug 31 11:38:33 2022 -0500 Branches: refactor-mesh-selection-generic https://developer.blender.org/rB00a72e770fd767533dce7b0743be2a7ebd861263 Fix error in logic === M source/blender/editors/object/object_vgroup.cc === diff --git a/source/blender/editors/object/object_vgroup.cc b/source/blender/editors/object/object_vgroup.cc index 282667dd575..56258df6b06 100644 --- a/source/blender/editors/object/object_vgroup.cc +++ b/source/blender/editors/object/object_vgroup.cc @@ -1066,7 +1066,7 @@ static void vgroup_select_verts(Object *ob, int select) const MDeformVert *dverts = me->dvert; for (const int i : selection_vert.span.index_range()) { - if (hide_vert[i]) { + if (!hide_vert[i]) { if (BKE_defvert_find_index(&dverts[i], def_nr)) { selection_vert.span[i] = select; } ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [e6557785edc] master: Fix: crash on undo due to missing node declaration
Commit: e6557785edc65c7a58568437e19a56489d06bd72 Author: Jacques Lucke Date: Wed Aug 31 18:34:53 2022 +0200 Branches: master https://developer.blender.org/rBe6557785edc65c7a58568437e19a56489d06bd72 Fix: crash on undo due to missing node declaration This was broken in {rB25e307d725d0b924fb0e87e4ffde84f915b74310}. === M source/blender/blenkernel/intern/node_tree_update.cc === diff --git a/source/blender/blenkernel/intern/node_tree_update.cc b/source/blender/blenkernel/intern/node_tree_update.cc index a9097bcb94a..929d20a3b07 100644 --- a/source/blender/blenkernel/intern/node_tree_update.cc +++ b/source/blender/blenkernel/intern/node_tree_update.cc @@ -1048,6 +1048,7 @@ class NodeTreeMainUpdater { void update_individual_nodes(bNodeTree &ntree) { LISTBASE_FOREACH (bNode *, node, &ntree.nodes) { + nodeDeclarationEnsure(&ntree, node); if (this->should_update_individual_node(ntree, *node)) { bNodeType &ntype = *node->typeinfo; if (ntype.group_update_func) { ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [0a4249561cf] master: Fix compile error from merge.
Commit: 0a4249561cf0545ce0d46e547ee2760f57948db6 Author: Joseph Eagar Date: Wed Aug 31 09:08:17 2022 -0700 Branches: master https://developer.blender.org/rB0a4249561cf0545ce0d46e547ee2760f57948db6 Fix compile error from merge. === M source/blender/modifiers/intern/MOD_ocean.c === diff --git a/source/blender/modifiers/intern/MOD_ocean.c b/source/blender/modifiers/intern/MOD_ocean.c index fb28c08d60b..ea8e534f585 100644 --- a/source/blender/modifiers/intern/MOD_ocean.c +++ b/source/blender/modifiers/intern/MOD_ocean.c @@ -441,46 +441,47 @@ static Mesh *doOcean(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mes } } } + } -/* displace the geometry */ + /* displace the geometry */ -/* NOTE: tried to parallelized that one and previous foam loop, - * but gives 20% slower results... odd. */ -{ - const int verts_num = result->totvert; + /* NOTE: tried to parallelized that one and previous foam loop, + * but gives 20% slower results... odd. */ + { +const int verts_num = result->totvert; - for (i = 0; i < verts_num; i++) { -float *vco = mverts[i].co; -const float u = OCEAN_CO(size_co_inv, vco[0]); -const float v = OCEAN_CO(size_co_inv, vco[1]); +for (i = 0; i < verts_num; i++) { + float *vco = mverts[i].co; + const float u = OCEAN_CO(size_co_inv, vco[0]); + const float v = OCEAN_CO(size_co_inv, vco[1]); -if (omd->oceancache && omd->cached == true) { - BKE_ocean_cache_eval_uv(omd->oceancache, &ocr, cfra_for_cache, u, v); -} -else { - BKE_ocean_eval_uv(omd->ocean, &ocr, u, v); -} + if (omd->oceancache && omd->cached == true) { +BKE_ocean_cache_eval_uv(omd->oceancache, &ocr, cfra_for_cache, u, v); + } + else { +BKE_ocean_eval_uv(omd->ocean, &ocr, u, v); + } -vco[2] += ocr.disp[1]; + vco[2] += ocr.disp[1]; -if (omd->chop_amount > 0.0f) { - vco[0] += ocr.disp[0]; - vco[1] += ocr.disp[2]; -} + if (omd->chop_amount > 0.0f) { +vco[0] += ocr.disp[0]; +vco[1] += ocr.disp[2]; } } + } -BKE_mesh_tag_coords_changed(mesh); + BKE_mesh_tag_coords_changed(mesh); -if (allocated_ocean) { - BKE_ocean_free(omd->ocean); - omd->ocean = NULL; -} + if (allocated_ocean) { +BKE_ocean_free(omd->ocean); +omd->ocean = NULL; + } # undef OCEAN_CO -return result; - } + return result; +} #else /* WITH_OCEANSIM */ static Mesh *doOcean(ModifierData *UNUSED(md), const ModifierEvalContext *UNUSED(ctx), Mesh *mesh) { @@ -488,249 +489,249 @@ static Mesh *doOcean(ModifierData *UNUSED(md), const ModifierEvalContext *UNUSED } #endif /* WITH_OCEANSIM */ - static Mesh *modifyMesh(ModifierData * md, const ModifierEvalContext *ctx, Mesh *mesh) - { -return doOcean(md, ctx, mesh); - } - // #define WITH_OCEANSIM - static void panel_draw(const bContext *UNUSED(C), Panel *panel) - { -uiLayout *layout = panel->layout; +static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh) +{ + return doOcean(md, ctx, mesh); +} +// #define WITH_OCEANSIM +static void panel_draw(const bContext *UNUSED(C), Panel *panel) +{ + uiLayout *layout = panel->layout; #ifdef WITH_OCEANSIM -uiLayout *col, *sub; + uiLayout *col, *sub; -PointerRNA ob_ptr; -PointerRNA *ptr = modifier_panel_get_property_pointers(panel, &ob_ptr); + PointerRNA ob_ptr; + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, &ob_ptr); -uiLayoutSetPropSep(layout, true); - -col = uiLayoutColumn(layout, false); -uiItemR(col, ptr, "geometry_mode", 0, NULL, ICON_NONE); -if (RNA_enum_get(ptr, "geometry_mode") == MOD_OCEAN_GEOM_GENERATE) { - sub = uiLayoutColumn(col, true); - uiItemR(sub, ptr, "repeat_x", 0, IFACE_("Repeat X"), ICON_NONE); - uiItemR(sub, ptr, "repeat_y", 0, IFACE_("Y"), ICON_NONE); -} + uiLayoutSetPropSep(layout, true); + col = uiLayoutColumn(layout, false); + uiItemR(col, ptr, "geometry_mode", 0, NULL, ICON_NONE); + if (RNA_enum_get(ptr, "geometry_mode") == MOD_OCEAN_GEOM_GENERATE) { sub = uiLayoutColumn(col, true); -uiItemR(sub, ptr, "viewport_resolution", 0, IFACE_("Resolution Viewport"), ICON_NONE); -uiItemR(sub, ptr, "resolution", 0, IFACE_("Render"), ICON_NONE); +uiItemR(sub, ptr, "repeat_x", 0, IFACE_("Repeat X"), ICON_NONE); +uiItemR(sub, ptr, "repeat_y", 0, IFACE_("Y"), ICON_NONE); + } -uiItemR(col, ptr, "time", 0, NULL, ICON_NONE); + sub = uiLayoutColumn(col, true); + uiItemR(sub, ptr, "viewport_resolution", 0, IFACE_("Resolution Viewport"), ICON_NONE); + uiItemR(sub, ptr, "resolution", 0, IFACE_("Render"), ICON_NONE); -uiItemR(col, ptr, "depth", 0, NULL, ICON_NONE); -
[Bf-blender-cvs] [2f729bc1117] master: Fix T98525: depsgraph for indirectly referenced ID Properties in drivers.
Commit: 2f729bc1117cddd809a8545ae7f4dd424e689dbc Author: Alexander Gavrilov Date: Wed Jun 29 19:03:46 2022 +0300 Branches: master https://developer.blender.org/rB2f729bc1117cddd809a8545ae7f4dd424e689dbc Fix T98525: depsgraph for indirectly referenced ID Properties in drivers. If the RNA path of a Single Property variable goes through a pointer to a different ID, the property should be attached to that ID using the owner reference in the RNA pointer. This already happened when building some, but not all of the relations and nodes. This patch fixes the remaining cases. Differential Revision: https://developer.blender.org/D15323 === M source/blender/depsgraph/intern/builder/deg_builder_nodes.cc M source/blender/depsgraph/intern/builder/deg_builder_relations.cc === diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index dd62a6cdea2..d25adc279d7 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -1219,11 +1219,11 @@ void DepsgraphNodeBuilder::build_driver_id_property(ID *id, const char *rna_path if (RNA_struct_is_a(ptr.type, &RNA_PoseBone)) { const bPoseChannel *pchan = static_cast(ptr.data); ensure_operation_node( -id, NodeType::BONE, pchan->name, OperationCode::ID_PROPERTY, nullptr, prop_identifier); +ptr.owner_id, NodeType::BONE, pchan->name, OperationCode::ID_PROPERTY, nullptr, prop_identifier); } else { ensure_operation_node( -id, NodeType::PARAMETERS, OperationCode::ID_PROPERTY, nullptr, prop_identifier); +ptr.owner_id, NodeType::PARAMETERS, OperationCode::ID_PROPERTY, nullptr, prop_identifier); } } diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index 730096e3110..313d4996dcf 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -1865,18 +1865,20 @@ void DepsgraphRelationBuilder::build_driver_id_property(ID *id, const char *rna_ if (RNA_struct_is_a(ptr.type, &RNA_PoseBone)) { const bPoseChannel *pchan = static_cast(ptr.data); id_property_key = OperationKey( -id, NodeType::BONE, pchan->name, OperationCode::ID_PROPERTY, prop_identifier); +ptr.owner_id, NodeType::BONE, pchan->name, OperationCode::ID_PROPERTY, prop_identifier); /* Create relation from the parameters component so that tagging armature for parameters update * properly propagates updates to all properties on bones and deeper (if needed). */ -OperationKey parameters_init_key(id, NodeType::PARAMETERS, OperationCode::PARAMETERS_ENTRY); +OperationKey parameters_init_key( +ptr.owner_id, NodeType::PARAMETERS, OperationCode::PARAMETERS_ENTRY); add_relation( parameters_init_key, id_property_key, "Init -> ID Property", RELATION_CHECK_BEFORE_ADD); } else { id_property_key = OperationKey( -id, NodeType::PARAMETERS, OperationCode::ID_PROPERTY, prop_identifier); +ptr.owner_id, NodeType::PARAMETERS, OperationCode::ID_PROPERTY, prop_identifier); } - OperationKey parameters_exit_key(id, NodeType::PARAMETERS, OperationCode::PARAMETERS_EXIT); + OperationKey parameters_exit_key( + ptr.owner_id, NodeType::PARAMETERS, OperationCode::PARAMETERS_EXIT); add_relation( id_property_key, parameters_exit_key, "ID Property -> Done", RELATION_CHECK_BEFORE_ADD); } ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [f987d9b7583] master: Merge branch 'blender-v3.3-release'
Commit: f987d9b7583c1ce45c6c19eec054d023e12a0f57 Author: Joseph Eagar Date: Wed Aug 31 08:33:23 2022 -0700 Branches: master https://developer.blender.org/rBf987d9b7583c1ce45c6c19eec054d023e12a0f57 Merge branch 'blender-v3.3-release' === === diff --cc source/blender/blenkernel/intern/customdata.cc index 51edf8308c3,1c7b78fd902..9a9128387b1 --- a/source/blender/blenkernel/intern/customdata.cc +++ b/source/blender/blenkernel/intern/customdata.cc @@@ -1688,16 -1652,7 +1678,16 @@@ static const LayerTypeInfo LAYERTYPEINF nullptr, nullptr, nullptr, - nullptr}, + layerMaxNum_tface}, +/* 6: CD_MCOL */ +/* 4 MCol structs per face */ +{sizeof(MCol[4]), "MCol", 4, + N_("Col"),nullptr,nullptr, + layerInterp_mcol, layerSwap_mcol, layerDefault_mcol, + nullptr, nullptr,nullptr, + nullptr, nullptr,nullptr, + nullptr, nullptr,nullptr, - nullptr, nullptr,layerMaxNum_mloopcol}, ++ nullptr, nullptr,nullptr}, /* 7: CD_ORIGINDEX */ {sizeof(int), "", 0, nullptr, nullptr, nullptr, nullptr, nullptr, layerDefault_origindex}, /* 8: CD_NORMAL */ diff --cc source/blender/modifiers/intern/MOD_ocean.c index c84d1b56cec,b596d493453..fb28c08d60b --- a/source/blender/modifiers/intern/MOD_ocean.c +++ b/source/blender/modifiers/intern/MOD_ocean.c @@@ -373,117 -373,111 +373,114 @@@ static Mesh *doOcean(ModifierData *md, /* add vcols before displacement - allows lookup based on position */ if (omd->flag & MOD_OCEAN_GENERATE_FOAM) { - if (CustomData_number_of_layers(&result->ldata, CD_PROP_BYTE_COLOR) < MAX_MCOL) { - const int polys_num = result->totpoly; - const int loops_num = result->totloop; - MLoop *mloops = result->mloop; - MLoopCol *mloopcols = CustomData_add_layer_named( - &result->ldata, CD_PROP_BYTE_COLOR, CD_SET_DEFAULT, NULL, loops_num, omd->foamlayername); - - MLoopCol *mloopcols_spray = NULL; - if (omd->flag & MOD_OCEAN_GENERATE_SPRAY) { - mloopcols_spray = CustomData_add_layer_named(&result->ldata, - CD_PROP_BYTE_COLOR, - CD_SET_DEFAULT, - NULL, - loops_num, - omd->spraylayername); - } + const int polys_num = result->totpoly; + const int loops_num = result->totloop; + MLoop *mloops = result->mloop; + MLoopCol *mloopcols = CustomData_add_layer_named( -&result->ldata, CD_PROP_BYTE_COLOR, CD_CALLOC, NULL, loops_num, omd->foamlayername); ++&result->ldata, CD_PROP_BYTE_COLOR, CD_SET_DEFAULT, NULL, loops_num, omd->foamlayername); + + MLoopCol *mloopcols_spray = NULL; + if (omd->flag & MOD_OCEAN_GENERATE_SPRAY) { - mloopcols_spray = CustomData_add_layer_named( - &result->ldata, CD_PROP_BYTE_COLOR, CD_CALLOC, NULL, loops_num, omd->spraylayername); ++ mloopcols_spray = CustomData_add_layer_named(&result->ldata, ++ CD_PROP_BYTE_COLOR, ++ CD_SET_DEFAULT, ++ NULL, ++ loops_num, ++ omd->spraylayername); + } - if (mloopcols) { /* unlikely to fail */ - MPoly *mpolys = result->mpoly; - MPoly *mp; + if (mloopcols) { /* unlikely to fail */ + MPoly *mpolys = result->mpoly; + MPoly *mp; - for (i = 0, mp = mpolys; i < polys_num; i++, mp++) { - MLoop *ml = &mloops[mp->loopstart]; - MLoopCol *mlcol = &mloopcols[mp->loopstart]; + for (i = 0, mp = mpolys; i < polys_num; i++, mp++) { + MLoop *ml = &mloops[mp->loopstart]; + MLoopCol *mlcol = &mloopcols[mp->loopstart]; - MLoopCol *mlcolspray = NULL; - if (omd->flag & MOD_OCEAN_GENERATE_SPRAY) { - mlcolspray = &mloopcols_spray[mp->loopstart]; + MLoopCol *mlcolspray = NULL; + if (omd->flag & MOD_OCEAN_GENERATE_SPRAY) { + mlcolspray = &mloopcols_spray[mp->loopstart]; + } + + for (j = mp->totloop; j--; ml++, mlcol++) { + const float *vco = mverts[ml->v].co; + const float u = OCEAN_CO(size_co_inv, vco[0]); + const float v = OCEAN_CO(size_co_inv, vco[1]); + float foam; + + if (omd->oceancache && omd->cached == true) { + BKE_ocean_cache_eval_uv(omd->oceancache, &ocr, cfra_for_cache, u, v); +
[Bf-blender-cvs] [30ec628d432] blender-v3.3-release: UI: Fix Geometry Nodes "Is Face Planar" name
Commit: 30ec628d432af2bbf729aeba7fa1bd14d2c06811 Author: Dalai Felinto Date: Wed Aug 31 17:28:44 2022 +0200 Branches: blender-v3.3-release https://developer.blender.org/rB30ec628d432af2bbf729aeba7fa1bd14d2c06811 UI: Fix Geometry Nodes "Is Face Planar" name Old name: "Face is Planar" New name: "Is Face Planar" This follows the current convention (Is Shade Smooth, Is Viewport, ...). === M source/blender/nodes/NOD_static_types.h === diff --git a/source/blender/nodes/NOD_static_types.h b/source/blender/nodes/NOD_static_types.h index 8a89dd46e30..8e306b16b07 100644 --- a/source/blender/nodes/NOD_static_types.h +++ b/source/blender/nodes/NOD_static_types.h @@ -328,7 +328,7 @@ DefNode(GeometryNode, GEO_NODE_INPUT_MESH_EDGE_ANGLE, 0, "MESH_EDGE_ANGLE", Inpu DefNode(GeometryNode, GEO_NODE_INPUT_MESH_EDGE_NEIGHBORS, 0, "MESH_EDGE_NEIGHBORS",InputMeshEdgeNeighbors, "Edge Neighbors", "Retrieve the number of faces that use each edge as one of their sides") DefNode(GeometryNode, GEO_NODE_INPUT_MESH_EDGE_VERTICES, 0, "MESH_EDGE_VERTICES", InputMeshEdgeVertices, "Edge Vertices", "Retrieve topology information relating to each edge of a mesh") DefNode(GeometryNode, GEO_NODE_INPUT_MESH_FACE_AREA, 0, "MESH_FACE_AREA", InputMeshFaceArea, "Face Area", "Calculate the surface area of a mesh's faces") -DefNode(GeometryNode, GEO_NODE_INPUT_MESH_FACE_IS_PLANAR, 0, "MESH_FACE_IS_PLANAR",InputMeshFaceIsPlanar, "Face is Planar", "Retrieve whether all triangles in a face are on the same plane, i.e. whether have the same normal") +DefNode(GeometryNode, GEO_NODE_INPUT_MESH_FACE_IS_PLANAR, 0, "MESH_FACE_IS_PLANAR",InputMeshFaceIsPlanar, "Is Face Planar", "Retrieve whether all triangles in a face are on the same plane, i.e. whether have the same normal") DefNode(GeometryNode, GEO_NODE_INPUT_MESH_FACE_NEIGHBORS, 0, "MESH_FACE_NEIGHBORS",InputMeshFaceNeighbors, "Face Neighbors", "Retrieve topology information relating to each face of a mesh") DefNode(GeometryNode, GEO_NODE_INPUT_MESH_ISLAND, 0, "MESH_ISLAND", InputMeshIsland, "Mesh Island", "Retrieve information about separate connected regions in a mesh") DefNode(GeometryNode, GEO_NODE_INPUT_MESH_VERTEX_NEIGHBORS, 0, "MESH_VERTEX_NEIGHBORS", InputMeshVertexNeighbors, "Vertex Neighbors", "Retrieve topology information relating to each vertex of a mesh") ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [db98007c3ab] blender-v3.3-release: UI: Fix Geometry Nodes "Mesh to Volume" name (typo)
Commit: db98007c3abd78f7beb2a4f63f9f51b7b135f9a8 Author: Dalai Felinto Date: Wed Aug 31 17:21:23 2022 +0200 Branches: blender-v3.3-release https://developer.blender.org/rBdb98007c3abd78f7beb2a4f63f9f51b7b135f9a8 UI: Fix Geometry Nodes "Mesh to Volume" name (typo) Old name: "Mesh To Volume" New name: "Mesh to Volume" This is consistent with what we do for the other nodes (Mesh to Curve, Mesh to Points). === M source/blender/nodes/NOD_static_types.h === diff --git a/source/blender/nodes/NOD_static_types.h b/source/blender/nodes/NOD_static_types.h index 586d3e36177..8a89dd46e30 100644 --- a/source/blender/nodes/NOD_static_types.h +++ b/source/blender/nodes/NOD_static_types.h @@ -361,7 +361,7 @@ DefNode(GeometryNode, GEO_NODE_MESH_PRIMITIVE_LINE, def_geo_mesh_line, "MESH_PRI DefNode(GeometryNode, GEO_NODE_MESH_PRIMITIVE_UV_SPHERE, 0, "MESH_PRIMITIVE_UV_SPHERE", MeshUVSphere, "UV Sphere", "Generate a spherical mesh with quads, except for triangles at the top and bottom") DefNode(GeometryNode, GEO_NODE_MESH_TO_CURVE, 0, "MESH_TO_CURVE", MeshToCurve, "Mesh to Curve", "Generate a curve from a mesh") DefNode(GeometryNode, GEO_NODE_MESH_TO_POINTS, def_geo_mesh_to_points, "MESH_TO_POINTS", MeshToPoints, "Mesh to Points", "Generate a point cloud from a mesh's vertices") -DefNode(GeometryNode, GEO_NODE_MESH_TO_VOLUME, def_geo_mesh_to_volume, "MESH_TO_VOLUME", MeshToVolume, "Mesh To Volume", "Create a fog volume with the shape of the input mesh's surface") +DefNode(GeometryNode, GEO_NODE_MESH_TO_VOLUME, def_geo_mesh_to_volume, "MESH_TO_VOLUME", MeshToVolume, "Mesh to Volume", "Create a fog volume with the shape of the input mesh's surface") DefNode(GeometryNode, GEO_NODE_OBJECT_INFO, def_geo_object_info, "OBJECT_INFO", ObjectInfo, "Object Info", "Retrieve information from an object") DefNode(GeometryNode, GEO_NODE_POINTS_TO_VERTICES, 0, "POINTS_TO_VERTICES", PointsToVertices, "Points to Vertices", "Generate a mesh vertex for each point cloud point") DefNode(GeometryNode, GEO_NODE_POINTS_TO_VOLUME, def_geo_points_to_volume, "POINTS_TO_VOLUME", PointsToVolume, "Points to Volume", "Generate a fog volume sphere around every point") ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [a6ba8e5f38d] blender-v3.3-release: Core: Remove color attribute limit from CustomData API
Commit: a6ba8e5f38dbf62392088c3020aab549b7c80554 Author: Joseph Eagar Date: Wed Aug 31 08:26:57 2022 -0700 Branches: blender-v3.3-release https://developer.blender.org/rBa6ba8e5f38dbf62392088c3020aab549b7c80554 Core: Remove color attribute limit from CustomData API Note: does not fix the limit in PBVH draw which is caused by VBO limits not MAX_MCOL. === M source/blender/blenkernel/intern/customdata.cc M source/blender/blenkernel/intern/mesh_validate.cc M source/blender/draw/intern/draw_cache_impl_particles.c M source/blender/draw/intern/draw_hair_private.h M source/blender/editors/mesh/mesh_data.cc M source/blender/io/alembic/intern/abc_customdata.cc M source/blender/makesdna/DNA_customdata_types.h M source/blender/modifiers/intern/MOD_ocean.c === diff --git a/source/blender/blenkernel/intern/customdata.cc b/source/blender/blenkernel/intern/customdata.cc index 82356e06d2c..1c7b78fd902 100644 --- a/source/blender/blenkernel/intern/customdata.cc +++ b/source/blender/blenkernel/intern/customdata.cc @@ -978,11 +978,6 @@ static void layerInterp_mloopcol(const void **sources, mc->a = round_fl_to_uchar_clamp(col.a); } -static int layerMaxNum_mloopcol() -{ - return MAX_MCOL; -} - /** \} */ /* */ @@ -1484,11 +1479,6 @@ static void layerInterp_propcol(const void **sources, copy_v4_v4(mc->color, col); } -static int layerMaxNum_propcol() -{ - return MAX_MCOL; -} - /** \} */ /* */ @@ -1662,7 +1652,7 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = { nullptr, nullptr, nullptr, - layerMaxNum_mloopcol}, + nullptr}, /* 7: CD_ORIGINDEX */ {sizeof(int), "", 0, nullptr, nullptr, nullptr, nullptr, nullptr, layerDefault_origindex}, /* 8: CD_NORMAL */ @@ -1771,7 +1761,7 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = { nullptr, nullptr, nullptr, - layerMaxNum_mloopcol}, + nullptr}, /* 18: CD_TANGENT */ {sizeof(float[4][4]), "", 0, N_("Tangent"), nullptr, nullptr, nullptr, nullptr, nullptr}, /* 19: CD_MDISPS */ @@ -1964,7 +1954,7 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = { nullptr, nullptr, nullptr, - layerMaxNum_propcol}, + nullptr}, /* 48: CD_PROP_FLOAT3 */ {sizeof(float[3]), "vec3f", diff --git a/source/blender/blenkernel/intern/mesh_validate.cc b/source/blender/blenkernel/intern/mesh_validate.cc index 9b2697ecc84..d17885e1214 100644 --- a/source/blender/blenkernel/intern/mesh_validate.cc +++ b/source/blender/blenkernel/intern/mesh_validate.cc @@ -1025,13 +1025,6 @@ bool BKE_mesh_validate_all_customdata(CustomData *vdata, MAX_MTFACE, tot_uvloop - MAX_MTFACE); } - if (tot_vcolloop > MAX_MCOL) { -PRINT_ERR( -"\tMore VCol layers than %d allowed, %d last ones won't be available for render, shaders, " -"etc.\n", -MAX_MCOL, -tot_vcolloop - MAX_MCOL); - } /* check indices of clone/stencil */ if (do_fixes && CustomData_get_clone_layer(ldata, CD_MLOOPUV) >= tot_uvloop) { diff --git a/source/blender/draw/intern/draw_cache_impl_particles.c b/source/blender/draw/intern/draw_cache_impl_particles.c index dee7a8cec37..02afbab6899 100644 --- a/source/blender/draw/intern/draw_cache_impl_particles.c +++ b/source/blender/draw/intern/draw_cache_impl_particles.c @@ -11,6 +11,7 @@ #include "MEM_guardedalloc.h" +#include "BLI_alloca.h" #include "BLI_ghash.h" #include "BLI_math_vector.h" #include "BLI_string.h" @@ -182,10 +183,11 @@ static void particle_batch_cache_clear_hair(ParticleHairCache *hair_cache) GPU_VERTBUF_DISCARD_SAFE(hair_cache->proc_uv_buf[i]); DRW_TEXTURE_FREE_SAFE(hair_cache->uv_tex[i]); } - for (int i = 0; i < MAX_MCOL; i++) { + for (int i = 0; i < hair_cache->num_col_layers; i++) { GPU_VERTBUF_DISCARD_SAFE(hair_cache->proc_col_buf[i]); DRW_TEXTURE_FREE_SAFE(hair_cache->col_tex[i]); } + for (int i = 0; i < MAX_HAIR_SUBDIV; i++) { GPU_VERTBUF_DISCARD_SAFE(hair_cache->final[i].proc_buf); DRW_TEXTURE_FREE_SAFE(hair_cache->final[i].proc_tex); @@ -218,9 +220,24 @@ static void particle_batch_cache_clear(ParticleSystem *psys) GPU_VERTBUF_DISCARD_SAFE(cache->edit_tip_pos); } +static void particle_batch_cache_free_hair(ParticleHairCache *hair) +{ + MEM_SAFE_FREE(hair->proc_col_buf); + MEM_SAFE_FREE(hair->col_tex); + MEM_SAFE_FREE(hair->col_layer_names); +} + void DRW_particle_batch_cache_free(ParticleSystem *psys) { particle_batch_cache_clear(psys); + + ParticleBatchCache *cache = psys->batch_cache; + + if (cache) { +particle_batch_cache_free_hair(&cache->hair); +particle_batch_cache_free_hair(&cach
[Bf-blender-cvs] [2a13ce1e61d] master: Fix T100700: Compositor crashes when disabled then enabled
Commit: 2a13ce1e61d8881d445293a132d087eb8c14bdc3 Author: Omar Emara Date: Wed Aug 31 16:59:54 2022 +0200 Branches: master https://developer.blender.org/rB2a13ce1e61d8881d445293a132d087eb8c14bdc3 Fix T100700: Compositor crashes when disabled then enabled The viewport compositor crashes when it is disabled then enabled after the compositor node tree is edited. This happens because the compositor engine uses the view_update callback of the draw engine type to detect changes in the node tree and reset its state for future evaluation. However, the draw manager only calls the view_update callback for enabled engines, so the compositor never receives the needed updates to properly reset its state and then crashes at draw time. This patch call the view_update callback for all registered engines regardless if they are enabled or not, that way, they always receive the potentially important updated needed to maintain a correct state. Aside from the compositor engine, this change affects the EEVEE and Workbench engines because they are the only engines that utilizes this callback. However, both of them only reset a flag that is checked at draw time. So the change should have no side effects. For the EEVEE engine, we just add a null check in case it was not instanced, while Workbench already have the appropriate null check. Differential Revision: https://developer.blender.org/D15821 Reviewed By: Clement Foucault === M source/blender/draw/engines/eevee/eevee_engine.c M source/blender/draw/intern/draw_manager.c M source/blender/draw/intern/draw_view_data.cc M source/blender/draw/intern/draw_view_data.h === diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c index f04405d7110..5ae4b730cfa 100644 --- a/source/blender/draw/engines/eevee/eevee_engine.c +++ b/source/blender/draw/engines/eevee/eevee_engine.c @@ -366,7 +366,7 @@ static void eevee_draw_scene(void *vedata) static void eevee_view_update(void *vedata) { EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl; - if (stl->g_data) { + if (stl && stl->g_data) { stl->g_data->view_updated = true; } } diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 3be2ddf5173..3d62c32308a 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -1344,11 +1344,7 @@ void DRW_notify_view_update(const DRWUpdateContext *update_ctx) drw_engines_enable(view_layer, engine_type, gpencil_engine_needed); drw_engines_data_validate(); -DRW_ENABLED_ENGINE_ITER (DST.view_data_active, draw_engine, data) { - if (draw_engine->view_update) { -draw_engine->view_update(data); - } -} +DRW_view_data_engines_view_update(DST.view_data_active); drw_engines_disable(); } @@ -1400,11 +1396,7 @@ static void drw_notify_view_update_offscreen(struct Depsgraph *depsgraph, drw_engines_enable(view_layer, engine_type, gpencil_engine_needed); drw_engines_data_validate(); - DRW_ENABLED_ENGINE_ITER (DST.view_data_active, draw_engine, data) { -if (draw_engine->view_update) { - draw_engine->view_update(data); -} - } + DRW_view_data_engines_view_update(DST.view_data_active); drw_engines_disable(); } diff --git a/source/blender/draw/intern/draw_view_data.cc b/source/blender/draw/intern/draw_view_data.cc index 3dc28dc9a9a..55f1ab83b3a 100644 --- a/source/blender/draw/intern/draw_view_data.cc +++ b/source/blender/draw/intern/draw_view_data.cc @@ -197,6 +197,16 @@ void DRW_view_data_free_unused(DRWViewData *view_data) } } +void DRW_view_data_engines_view_update(DRWViewData *view_data) +{ + for (ViewportEngineData &engine_data : view_data->engines) { +DrawEngineType *draw_engine = engine_data.engine_type->draw_engine; +if (draw_engine->view_update) { + draw_engine->view_update(&engine_data); +} + } +} + double *DRW_view_data_cache_time_get(DRWViewData *view_data) { return &view_data->cache_time; diff --git a/source/blender/draw/intern/draw_view_data.h b/source/blender/draw/intern/draw_view_data.h index 918b9e81f87..f2c34c15f08 100644 --- a/source/blender/draw/intern/draw_view_data.h +++ b/source/blender/draw/intern/draw_view_data.h @@ -107,6 +107,7 @@ ViewportEngineData *DRW_view_data_engine_data_get_ensure(DRWViewData *view_data, void DRW_view_data_use_engine(DRWViewData *view_data, struct DrawEngineType *engine_type); void DRW_view_data_reset(DRWViewData *view_data); void DRW_view_data_free_unused(DRWViewData *view_data); +void DRW_view_data_engines_view_update(DRWViewData *view_data); double *DRW_view_data_cache_time_get(DRWViewData *view_data); DefaultFramebufferList *DRW_view_data_default_framebuffer_list_get(DRWViewData *view_d
[Bf-blender-cvs] [370b17a8c6b] master: Merge remote-tracking branch 'origin/blender-v3.3-release'
Commit: 370b17a8c6b61c81ed98be979ad098c46aedf073 Author: Dalai Felinto Date: Wed Aug 31 16:30:57 2022 +0200 Branches: master https://developer.blender.org/rB370b17a8c6b61c81ed98be979ad098c46aedf073 Merge remote-tracking branch 'origin/blender-v3.3-release' === === ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [0864ab52480] blender-v3.3-release: UI: Fix order of Geometry Nodes in the Add Nodes Mesh menu
Commit: 0864ab52480c585a7b38e510303d7cd718ba1e38 Author: Dalai Felinto Date: Wed Aug 31 16:29:13 2022 +0200 Branches: blender-v3.3-release https://developer.blender.org/rB0864ab52480c585a7b38e510303d7cd718ba1e38 UI: Fix order of Geometry Nodes in the Add Nodes Mesh menu === M release/scripts/startup/nodeitems_builtins.py === diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py index 2342ba33a3b..2d4ef593b3c 100644 --- a/release/scripts/startup/nodeitems_builtins.py +++ b/release/scripts/startup/nodeitems_builtins.py @@ -117,11 +117,11 @@ def mesh_node_items(context): yield NodeItem("GeometryNodeMeshToCurve") yield NodeItem("GeometryNodeMeshToPoints") yield NodeItem("GeometryNodeMeshToVolume") +yield NodeItem("GeometryNodeScaleElements") yield NodeItem("GeometryNodeSplitEdges") yield NodeItem("GeometryNodeSubdivideMesh") yield NodeItem("GeometryNodeSubdivisionSurface") yield NodeItem("GeometryNodeTriangulate") -yield NodeItem("GeometryNodeScaleElements") yield NodeItemCustom(draw=lambda self, layout, context: layout.separator()) yield NodeItem("GeometryNodeInputMeshEdgeAngle") yield NodeItem("GeometryNodeInputMeshEdgeNeighbors") @@ -129,8 +129,8 @@ def mesh_node_items(context): yield NodeItem("GeometryNodeInputMeshFaceArea") yield NodeItem("GeometryNodeInputMeshFaceNeighbors") yield NodeItem("GeometryNodeInputMeshFaceIsPlanar") -yield NodeItem("GeometryNodeInputMeshIsland") yield NodeItem("GeometryNodeInputShadeSmooth") +yield NodeItem("GeometryNodeInputMeshIsland") yield NodeItem("GeometryNodeInputShortestEdgePaths") yield NodeItem("GeometryNodeInputMeshVertexNeighbors") yield NodeItemCustom(draw=lambda self, layout, context: layout.separator()) ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [ae79bc490a7] master: GPencil: Apply Brush Size to Outline thickness while drawing
Commit: ae79bc490a761cf351f09514356994d6efd586db Author: Antonio Vazquez Date: Wed Aug 31 15:10:13 2022 +0200 Branches: master https://developer.blender.org/rBae79bc490a761cf351f09514356994d6efd586db GPencil: Apply Brush Size to Outline thickness while drawing The new factor allows to apply the current brush size to the external stroke perimeter conversion done in draw mode. === M release/scripts/startup/bl_ui/space_view3d_toolbar.py M source/blender/editors/gpencil/gpencil_paint.c M source/blender/makesdna/DNA_brush_types.h M source/blender/makesrna/intern/rna_brush.c === diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py index aa0e834cfa7..d15be4a9d3f 100644 --- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py +++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py @@ -1742,12 +1742,18 @@ class VIEW3D_PT_tools_grease_pencil_brush_post_processing(View3DPanel, Panel): col1 = col.column(align=True) col1.prop(gp_settings, "use_trim") +col.separator() + row = col.row(heading="Outline", align=True) row.prop(gp_settings, "use_settings_outline", text="") row2 = row.row(align=True) row2.enabled = gp_settings.use_settings_outline row2.prop(gp_settings, "material_alt", text="") +row2 = col.row(align=True) +row2.enabled = gp_settings.use_settings_outline +row2.prop(gp_settings, "outline_thickness_factor") + class VIEW3D_PT_tools_grease_pencil_brush_random(View3DPanel, Panel): bl_context = ".greasepencil_paint" diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index b196fcae51c..cbc88b57c65 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -943,8 +943,9 @@ static bGPDstroke *gpencil_stroke_to_outline(tGPsdata *p, bGPDstroke *gps) /* Stroke. */ float diff_mat[4][4]; unit_m4(diff_mat); + const float outline_thickness = (float)brush->size * gpencil_settings->outline_fac * 0.5f; bGPDstroke *gps_perimeter = BKE_gpencil_stroke_perimeter_from_view( - rv3d, p->gpd, gpl, gps_duplicate, 3, diff_mat, 0.0f); + rv3d, p->gpd, gpl, gps_duplicate, 3, diff_mat, outline_thickness); /* Assign material. */ if (gpencil_settings->material_alt == NULL) { gps_perimeter->mat_nr = gps->mat_nr; @@ -961,6 +962,8 @@ static bGPDstroke *gpencil_stroke_to_outline(tGPsdata *p, bGPDstroke *gps) } /* Set pressure constant. */ + gps_perimeter->thickness = max_ii((int)outline_thickness, 1); + bGPDspoint *pt; for (int i = 0; i < gps_perimeter->totpoints; i++) { pt = &gps_perimeter->points[i]; diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h index 174ec614238..33f5d8eea12 100644 --- a/source/blender/makesdna/DNA_brush_types.h +++ b/source/blender/makesdna/DNA_brush_types.h @@ -132,6 +132,10 @@ typedef struct BrushGpencilSettings { struct CurveMapping *curve_rand_saturation; struct CurveMapping *curve_rand_value; + /** Factor for external line thickness conversion to outline. */ + float outline_fac; + char _pad1[4]; + /* optional link of material to replace default in context */ /** Material. */ struct Material *material; diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index 989b0654104..2aa0a1bba01 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -1654,6 +1654,15 @@ static void rna_def_gpencil_options(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL); + /* Factor to determine outline external perimeter thickness. */ + prop = RNA_def_property(srna, "outline_thickness_factor", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "outline_fac"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_float_default(prop, 0.0f); + RNA_def_property_ui_text( + prop, "Thickness", "Thickness of the outline stroke relative to current brush thickness"); + RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); + /* Flags */ prop = RNA_def_property(srna, "use_pressure", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BRUSH_USE_PRESSURE); ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [097ed6565ed] master: Merge branch 'blender-v3.3-release'
Commit: 097ed6565edd27c8178a764fe6dbacb1ba75ef52 Author: Thomas Dinges Date: Wed Aug 31 16:10:59 2022 +0200 Branches: master https://developer.blender.org/rB097ed6565edd27c8178a764fe6dbacb1ba75ef52 Merge branch 'blender-v3.3-release' === === ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [f1c0249f34c] master: Mesh: Move material indices to a generic attribute
Commit: f1c0249f34c4171ec311b5b9882e36fed5889259 Author: Hans Goudey Date: Wed Aug 31 09:09:01 2022 -0500 Branches: master https://developer.blender.org/rBf1c0249f34c4171ec311b5b9882e36fed5889259 Mesh: Move material indices to a generic attribute This patch moves material indices from the mesh `MPoly` struct to a generic integer attribute. The builtin material index was already exposed in geometry nodes, but this makes it a "proper" attribute accessible with Python and visible in the "Attributes" panel. The goals of the refactor are code simplification and memory and performance improvements, mainly because the attribute doesn't have to be stored and processed if there are no materials. However, until 4.0, material indices will still be read and written in the old format, meaning there may be a temporary increase in memory usage. Further notes: * Completely removing the `MPoly.mat_nr` after 4.0 may require changes to DNA or introducing a new `MPoly` type. * Geometry nodes regression tests didn't look at material indices, so the change reveals a bug in the realize instances node that I fixed. * Access to material indices from the RNA `MeshPolygon` type is slower with this patch. The `material_index` attribute can be used instead. * Cycles is changed to read from the attribute instead. * BMesh isn't changed in this patch. Theoretically it could be though, to save 2 bytes per face when less than two materials are used. * Eventually we could use a 16 bit integer attribute type instead. Ref T95967 Differential Revision: https://developer.blender.org/D15675 === M intern/cycles/blender/mesh.cpp M release/scripts/startup/bl_ui/properties_data_mesh.py M source/blender/blenkernel/BKE_mesh.h M source/blender/blenkernel/BKE_mesh_legacy_convert.h M source/blender/blenkernel/intern/customdata.cc M source/blender/blenkernel/intern/fluid.c M source/blender/blenkernel/intern/geometry_component_mesh.cc M source/blender/blenkernel/intern/gpencil_geom.cc M source/blender/blenkernel/intern/mesh.cc M source/blender/blenkernel/intern/mesh_boolean_convert.cc M source/blender/blenkernel/intern/mesh_convert.cc M source/blender/blenkernel/intern/mesh_legacy_convert.cc M source/blender/blenkernel/intern/mesh_validate.cc M source/blender/blenkernel/intern/pbvh.c M source/blender/blenkernel/intern/pbvh_intern.h M source/blender/blenkernel/intern/subdiv_ccg_material.c M source/blender/blenkernel/intern/subsurf_ccg.c M source/blender/blenlib/BLI_vector_set.hh M source/blender/bmesh/intern/bmesh_mesh_convert.cc M source/blender/draw/intern/draw_cache_extract_mesh_render_data.cc M source/blender/draw/intern/draw_cache_impl_subdivision.cc M source/blender/draw/intern/mesh_extractors/extract_mesh.hh M source/blender/editors/mesh/meshtools.cc M source/blender/editors/object/object_bake.c M source/blender/editors/sculpt_paint/paint_image_proj.c M source/blender/editors/sculpt_paint/paint_utils.c M source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp M source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp M source/blender/geometry/intern/realize_instances.cc M source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c M source/blender/gpu/intern/gpu_buffers.c M source/blender/io/alembic/exporter/abc_writer_mesh.cc M source/blender/io/alembic/intern/abc_reader_mesh.cc M source/blender/io/alembic/intern/abc_reader_mesh.h M source/blender/io/collada/GeometryExporter.cpp M source/blender/io/collada/MeshImporter.cpp M source/blender/io/collada/MeshImporter.h M source/blender/io/usd/intern/usd_reader_mesh.cc M source/blender/io/usd/intern/usd_reader_mesh.h M source/blender/io/usd/intern/usd_writer_mesh.cc M source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc M source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc M source/blender/io/wavefront_obj/exporter/obj_export_mesh.hh M source/blender/io/wavefront_obj/importer/obj_import_mesh.cc M source/blender/makesdna/DNA_mesh_types.h M source/blender/makesdna/DNA_meshdata_types.h M source/blender/makesrna/intern/rna_mesh.c M source/blender/modifiers/intern/MOD_screw.c M source/blender/modifiers/intern/MOD_solidify_extrude.c M source/blender/modifiers/intern/MOD_solidify_nonmanifold.c M source/blender/nodes/geometry/nodes/node_geo_material_selection.cc M source/blender/nodes/geometry/nodes/node_geo_set_material.cc M source/blender/render/intern/bake.c M source/blender/render/intern/multires_bake.c === diff --git a/intern/cycles/blender/mesh.cpp b/intern/cycles/blender/mesh.cpp ind
[Bf-blender-cvs] [d4d14df38ce] blender-v3.3-release: Release schedule: Blender 3.3 RC
Commit: d4d14df38cef5ebbe6d2c40c66e6857bd67da03d Author: Thomas Dinges Date: Wed Aug 31 16:08:26 2022 +0200 Branches: blender-v3.3-release https://developer.blender.org/rBd4d14df38cef5ebbe6d2c40c66e6857bd67da03d Release schedule: Blender 3.3 RC The branch is now in Bcon4, critical bug fixes only. === M source/blender/blenkernel/BKE_blender_version.h === diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h index 2067730faca..9cfbc5355d7 100644 --- a/source/blender/blenkernel/BKE_blender_version.h +++ b/source/blender/blenkernel/BKE_blender_version.h @@ -21,7 +21,7 @@ extern "C" { /* Blender patch version for bugfix releases. */ #define BLENDER_VERSION_PATCH 0 /** Blender release cycle stage: alpha/beta/rc/release. */ -#define BLENDER_VERSION_CYCLE beta +#define BLENDER_VERSION_CYCLE rc /* Blender file format version. */ #define BLENDER_FILE_VERSION BLENDER_VERSION ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [7d3f3c6fd76] temp-geometry-nodes-evaluator-refactor: fixes
Commit: 7d3f3c6fd762ee14b6ac526b657cfff0d3ed0cff Author: Jacques Lucke Date: Wed Aug 31 13:02:54 2022 +0200 Branches: temp-geometry-nodes-evaluator-refactor https://developer.blender.org/rB7d3f3c6fd762ee14b6ac526b657cfff0d3ed0cff fixes === M source/blender/modifiers/intern/MOD_nodes.cc M source/blender/nodes/NOD_geometry_exec.hh M source/blender/nodes/NOD_geometry_nodes_to_lazy_function_graph.hh M source/blender/nodes/NOD_multi_function.hh M source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc M source/blender/nodes/intern/node_geometry_exec.cc M source/blender/nodes/intern/node_multi_function.cc === diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc index ef5808c2477..909b2c7b0f8 100644 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@ -767,7 +767,7 @@ static void initialize_group_input(NodesModifierData &nmd, const bNodeSocket &socket, void *r_value) { - const bNodeSocketType &socket_type = *socket.typeinfo(); + const bNodeSocketType &socket_type = *socket.typeinfo; const eNodeSocketDatatype socket_data_type = static_cast(socket.type); if (nmd.settings.properties == nullptr) { socket_type.get_geometry_nodes_cpp_value(socket, r_value); @@ -776,11 +776,11 @@ static void initialize_group_input(NodesModifierData &nmd, const IDProperty *property = IDP_GetPropertyFromGroup(nmd.settings.properties, socket.identifier); if (property == nullptr) { -socket_type.get_geometry_nodes_cpp_value(bsocket, r_value); +socket_type.get_geometry_nodes_cpp_value(socket, r_value); return; } - if (!id_property_type_matches_socket(bsocket, *property)) { -socket_type.get_geometry_nodes_cpp_value(bsocket, r_value); + if (!id_property_type_matches_socket(socket, *property)) { +socket_type.get_geometry_nodes_cpp_value(socket, r_value); return; } @@ -1144,7 +1144,7 @@ static GeometrySet compute_geometry(const bNodeTree &tree_ref, const CPPType *type = interface_socket->typeinfo->geometry_nodes_cpp_type; BLI_assert(type != nullptr); /* Todo */ void *value = allocator.allocate(type->size(), type->alignment()); -initialize_group_input(*nmd, *interface_socket, input_index, value); +initialize_group_input(*nmd, *interface_socket, value); param_inputs[input_index] = {type, value}; inputs_to_destruct.append({type, value}); } @@ -1288,7 +1288,7 @@ static void modifyGeometry(ModifierData *md, use_orig_index_polys = CustomData_has_layer(&mesh.pdata, CD_ORIGINDEX); } - geometry_set = compute_geometry(tree_ref, output_node, std::move(geometry_set), nmd, ctx); + geometry_set = compute_geometry(tree, output_node, std::move(geometry_set), nmd, ctx); if (geometry_set.has_mesh()) { /* Add #CD_ORIGINDEX layers if they don't exist already. This is required because the diff --git a/source/blender/nodes/NOD_geometry_exec.hh b/source/blender/nodes/NOD_geometry_exec.hh index 382a8c74cde..7f8b0a276ae 100644 --- a/source/blender/nodes/NOD_geometry_exec.hh +++ b/source/blender/nodes/NOD_geometry_exec.hh @@ -45,10 +45,13 @@ using geo_eval_log::NodeWarningType; class GeoNodeExecParams { private: - GeoNodeExecParamsProvider *provider_; + const bNode &node_; + lf::Params ¶ms_; + const lf::Context &lf_context_; public: - GeoNodeExecParams(GeoNodeExecParamsProvider &provider) : provider_(&provider) + GeoNodeExecParams(const bNode &node, lf::Params ¶ms, const lf::Context &lf_context) + : node_(node), params_(params), lf_context_(lf_context) { } @@ -138,10 +141,10 @@ class GeoNodeExecParams { this->check_output_geometry_set(value); } const int index = this->get_output_index(identifier); - const bNodeSocket *socket = node_.output_by_identifier(identifier).bsocket(); + const bNodeSocket &socket = node_.output_by_identifier(identifier); geo_eval_log::GeoTreeLogger &logger = this->get_local_tree_logger(); - logger.log_value(*node_.bnode(), *socket, {&value}); + logger.log_value(node_, socket, {&value}); params_.set_output(index, std::forward(value)); } } @@ -254,11 +257,11 @@ class GeoNodeExecParams { int get_input_index(const StringRef identifier) const { int counter = 0; -for (const InputSocketRef *socket : node_.inputs()) { +for (const bNodeSocket *socket : node_.input_sockets()) { if (!socket->is_available()) { continue; } - if (socket->identifier() == identifier) { + if (socket->identifier == identifier) { return counter; } counter++; @@ -270,11 +273,11 @@
[Bf-blender-cvs] [280c0399082] temp-geometry-nodes-evaluator-refactor: Merge branch 'master' into temp-geometry-nodes-evaluator-refactor
Commit: 280c0399082b1ee7411c0ea2826fc360e82e0a7f Author: Jacques Lucke Date: Wed Aug 31 12:34:03 2022 +0200 Branches: temp-geometry-nodes-evaluator-refactor https://developer.blender.org/rB280c0399082b1ee7411c0ea2826fc360e82e0a7f Merge branch 'master' into temp-geometry-nodes-evaluator-refactor === === diff --cc source/blender/modifiers/intern/MOD_nodes.cc index c06ec7b9717,2908fbf5597..ef5808c2477 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@@ -763,14 -756,14 +764,13 @@@ void MOD_nodes_update_interface(Object } static void initialize_group_input(NodesModifierData &nmd, -const bNodeSocket &bsocket, -const int input_index, +const bNodeSocket &socket, void *r_value) { - const bNodeSocketType &socket_type = *bsocket.typeinfo; - const eNodeSocketDatatype &socket_data_type = static_cast(bsocket.type); - const bNodeSocketType &socket_type = *socket.typeinfo; - const bNodeSocket &bsocket = socket; - const eNodeSocketDatatype socket_data_type = static_cast(bsocket.type); ++ const bNodeSocketType &socket_type = *socket.typeinfo(); ++ const eNodeSocketDatatype socket_data_type = static_cast(socket.type); if (nmd.settings.properties == nullptr) { --socket_type.get_geometry_nodes_cpp_value(bsocket, r_value); ++socket_type.get_geometry_nodes_cpp_value(socket, r_value); return; } const IDProperty *property = IDP_GetPropertyFromGroup(nmd.settings.properties, @@@ -784,7 -777,7 +784,7 @@@ return; } - if (!input_has_attribute_toggle(*nmd.node_group, input_index)) { - if (!input_has_attribute_toggle(*nmd.node_group, socket.runtime->index_in_node)) { ++ if (!input_has_attribute_toggle(*nmd.node_group, socket.index())) { init_socket_cpp_value_from_property(*property, socket_data_type, r_value); return; } @@@ -1086,107 -1079,92 +1086,106 @@@ static void store_output_attributes(Geo /** * Evaluate a node group to compute the output geometry. */ - static GeometrySet compute_geometry(const NodeTreeRef &tree_ref, - const NodeRef &output_node, -static GeometrySet compute_geometry(const DerivedNodeTree &tree, -Span group_input_nodes, ++static GeometrySet compute_geometry(const bNodeTree &tree_ref, + const bNode &output_node, GeometrySet input_geometry_set, NodesModifierData *nmd, const ModifierEvalContext *ctx) { - blender::ResourceScope scope; - blender::LinearAllocator<> &allocator = scope.linear_allocator(); - blender::nodes::NodeMultiFunctions mf_by_node{tree}; + UNUSED_VARS(find_sockets_to_preview, logging_enabled); - Map group_inputs; + lf::LazyFunctionGraph graph; + blender::nodes::GeometryNodeLazyFunctionMapping mapping; + blender::nodes::GeometryNodesLazyFunctionResources graph_resources; + blender::nodes::geometry_nodes_to_lazy_function_graph(tree_ref, graph, graph_resources, mapping); + graph.update_node_indices(); + // std::cout << graph.to_dot() << "\n"; - const DTreeContext *root_context = &tree.root_context(); - for (const bNode *group_input_node : group_input_nodes) { -Span group_input_sockets = group_input_node->output_sockets().drop_back( -1); -if (group_input_sockets.is_empty()) { - continue; -} + Vector graph_inputs; + Vector graph_outputs; + for (const lf::OutputSocket *socket : mapping.group_input_sockets) { +graph_inputs.append(socket); + } - for (const InputSocketRef *socket_ref : output_node.inputs().drop_back(1)) { ++ for (const bNodeSocket *socket_ref : output_node.input_sockets().drop_back(1)) { +const lf::InputSocket &socket = mapping.dummy_socket_map.lookup(socket_ref)->as_input(); +graph_outputs.append(&socket); + } -Span remaining_input_sockets = group_input_sockets; + Array param_inputs(graph_inputs.size()); + Array param_outputs(graph_outputs.size()); + Array> param_input_usages(graph_inputs.size()); + Array param_output_usages(graph_outputs.size(), lf::ValueUsage::Used); + Array param_set_outputs(graph_outputs.size(), false); -/* If the group expects a geometry as first input, use the geometry that has been passed to - * modifier. */ -const bNodeSocket *first_input_socket = group_input_sockets[0]; -if (first_input_socket->type == SOCK_GEOMETRY) { - GeometrySet *geometry_set_in = - allocator.construct(input_geometry_set).release(); - group_inputs.add_new({root_context, first_input_socket}, geome
[Bf-blender-cvs] [a2a8b9e82fc] temp-geometry-nodes-evaluator-refactor: fixes
Commit: a2a8b9e82fc7135abaf49a678cde4235769af80b Author: Jacques Lucke Date: Wed Aug 31 15:58:20 2022 +0200 Branches: temp-geometry-nodes-evaluator-refactor https://developer.blender.org/rBa2a8b9e82fc7135abaf49a678cde4235769af80b fixes === M source/blender/modifiers/intern/MOD_nodes.cc === diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc index 909b2c7b0f8..0c79672c30e 100644 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@ -764,35 +764,37 @@ void MOD_nodes_update_interface(Object *object, NodesModifierData *nmd) } static void initialize_group_input(NodesModifierData &nmd, - const bNodeSocket &socket, + const bNodeSocket &interface_socket, + const int input_index, void *r_value) { - const bNodeSocketType &socket_type = *socket.typeinfo; - const eNodeSocketDatatype socket_data_type = static_cast(socket.type); + const bNodeSocketType &socket_type = *interface_socket.typeinfo; + const eNodeSocketDatatype socket_data_type = static_cast( + interface_socket.type); if (nmd.settings.properties == nullptr) { -socket_type.get_geometry_nodes_cpp_value(socket, r_value); +socket_type.get_geometry_nodes_cpp_value(interface_socket, r_value); return; } const IDProperty *property = IDP_GetPropertyFromGroup(nmd.settings.properties, -socket.identifier); + interface_socket.identifier); if (property == nullptr) { -socket_type.get_geometry_nodes_cpp_value(socket, r_value); +socket_type.get_geometry_nodes_cpp_value(interface_socket, r_value); return; } - if (!id_property_type_matches_socket(socket, *property)) { -socket_type.get_geometry_nodes_cpp_value(socket, r_value); + if (!id_property_type_matches_socket(interface_socket, *property)) { +socket_type.get_geometry_nodes_cpp_value(interface_socket, r_value); return; } - if (!input_has_attribute_toggle(*nmd.node_group, socket.index())) { + if (!input_has_attribute_toggle(*nmd.node_group, input_index)) { init_socket_cpp_value_from_property(*property, socket_data_type, r_value); return; } const IDProperty *property_use_attribute = IDP_GetPropertyFromGroup( - nmd.settings.properties, (socket.identifier + use_attribute_suffix).c_str()); + nmd.settings.properties, (interface_socket.identifier + use_attribute_suffix).c_str()); const IDProperty *property_attribute_name = IDP_GetPropertyFromGroup( - nmd.settings.properties, (socket.identifier + attribute_name_suffix).c_str()); + nmd.settings.properties, (interface_socket.identifier + attribute_name_suffix).c_str()); if (property_use_attribute == nullptr || property_attribute_name == nullptr) { init_socket_cpp_value_from_property(*property, socket_data_type, r_value); return; @@ -1144,7 +1146,7 @@ static GeometrySet compute_geometry(const bNodeTree &tree_ref, const CPPType *type = interface_socket->typeinfo->geometry_nodes_cpp_type; BLI_assert(type != nullptr); /* Todo */ void *value = allocator.allocate(type->size(), type->alignment()); -initialize_group_input(*nmd, *interface_socket, value); +initialize_group_input(*nmd, *interface_socket, input_index, value); param_inputs[input_index] = {type, value}; inputs_to_destruct.append({type, value}); } @@ -1247,6 +1249,7 @@ static void modifyGeometry(ModifierData *md, } const bNodeTree &tree = *nmd->node_group; + tree.ensure_topology_cache(); check_property_socket_sync(ctx->object, md); /* Todo: Check for link cycles recursively. */ ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [4f1de2be9d6] temp-geometry-nodes-evaluator-refactor: cleanup
Commit: 4f1de2be9d611781744ae9575b6868ea270922c9 Author: Jacques Lucke Date: Wed Aug 24 13:33:52 2022 +0200 Branches: temp-geometry-nodes-evaluator-refactor https://developer.blender.org/rB4f1de2be9d611781744ae9575b6868ea270922c9 cleanup === M source/blender/nodes/NOD_geometry_exec.hh M source/blender/nodes/NOD_geometry_nodes_log.hh M source/blender/nodes/intern/geometry_nodes_log.cc M source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc === diff --git a/source/blender/nodes/NOD_geometry_exec.hh b/source/blender/nodes/NOD_geometry_exec.hh index d608731d561..62181cc74a6 100644 --- a/source/blender/nodes/NOD_geometry_exec.hh +++ b/source/blender/nodes/NOD_geometry_exec.hh @@ -145,15 +145,8 @@ class GeoNodeExecParams { const int index = this->get_output_index(identifier); const bNodeSocket *socket = node_.output_by_identifier(identifier).bsocket(); - geo_eval_log::GeoTreeLogger &tree_log = this->get_local_tree_logger(); - StoredT *logged_value = static_cast( - tree_log.allocator.allocate(sizeof(StoredT), alignof(StoredT))); - new (logged_value) StoredT(value); - destruct_ptr value_log = - tree_log.allocator.construct(logged_value); - tree_log.output_socket_values.append({node_.name(), socket->identifier, value_log.get()}); - tree_log.socket_values_owner.append(std::move(value_log)); - + geo_eval_log::GeoTreeLogger &logger = this->get_local_tree_logger(); + logger.log_value(*node_.bnode(), *socket, {&value}); params_.set_output(index, std::forward(value)); } } diff --git a/source/blender/nodes/NOD_geometry_nodes_log.hh b/source/blender/nodes/NOD_geometry_nodes_log.hh index 93314262e0f..1b78c7856f2 100644 --- a/source/blender/nodes/NOD_geometry_nodes_log.hh +++ b/source/blender/nodes/NOD_geometry_nodes_log.hh @@ -81,6 +81,8 @@ class GeoTreeLogger { Vector> input_socket_values; Vector> output_socket_values; Vector> node_execution_times; + + void log_value(const bNode &node, const bNodeSocket &socket, GPointer value); }; class GeoNodeLog { diff --git a/source/blender/nodes/intern/geometry_nodes_log.cc b/source/blender/nodes/intern/geometry_nodes_log.cc index 3ff1ddc9203..18496b2254d 100644 --- a/source/blender/nodes/intern/geometry_nodes_log.cc +++ b/source/blender/nodes/intern/geometry_nodes_log.cc @@ -5,6 +5,19 @@ namespace blender::nodes::geo_eval_log { +void GeoTreeLogger::log_value(const bNode &node, const bNodeSocket &socket, GPointer value) +{ + const CPPType &type = *value.type(); + void *buffer = this->allocator.allocate(type.size(), type.alignment()); + type.copy_construct(value.get(), buffer); + destruct_ptr value_log = this->allocator.construct( + GMutablePointer{type, buffer}); + auto &socket_values = socket.in_out == SOCK_IN ? this->input_socket_values : + this->output_socket_values; + socket_values.append({node.name, socket.identifier, value_log.get()}); + this->socket_values_owner.append(std::move(value_log)); +} + void GeoTreeLog::ensure_node_warnings() { if (reduced_node_warnings_) { diff --git a/source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc b/source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc index aedc88adb49..aaeaa7eb2bd 100644 --- a/source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc +++ b/source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc @@ -373,6 +373,7 @@ class LazyFunctionForMultiFunctionNode : public LazyFunction { const NodeMultiFunctions::Item fn_item_; Vector input_types_; Vector output_types_; + Vector output_sockets_; public: LazyFunctionForMultiFunctionNode(const NodeRef &node, @@ -390,6 +391,7 @@ class LazyFunctionForMultiFunctionNode : public LazyFunction { for (const lf::Output &fn_output : outputs_) { output_types_.append(dynamic_cast(fn_output.type)); } +output_sockets_ = r_used_outputs; } void execute_impl(lf::Params ¶ms, const lf::Context &context) const override @@ -401,32 +403,19 @@ class LazyFunctionForMultiFunctionNode : public LazyFunction { geo_eval_log::GeoTreeLogger &logger = user_data->modifier_data->eval_log->get_local_tree_logger(*context_stack); -Vector inputs_values(inputs_.size()); -Vector outputs_values(outputs_.size()); +Vector input_values(inputs_.size()); +Vector output_values(outputs_.size()); for (const int i : inputs_.index_range()) { - inputs_values[i] = params.try_get_input_data_ptr(i); + input_values[i] = params.try_get_input_data_ptr(i); } for (const int i : outputs_.index_range()) { - outputs_values[i] = params.get_output_data_ptr(i); -} -execute_multi_function_on_value_or_field(*fn_item_.fn, -
[Bf-blender-cvs] [231cafa9113] temp-geometry-nodes-evaluator-refactor: socket value logging progress
Commit: 231cafa9113e1e29d9e5650aaee1128d01ce7c8e Author: Jacques Lucke Date: Tue Aug 23 13:39:23 2022 +0200 Branches: temp-geometry-nodes-evaluator-refactor https://developer.blender.org/rB231cafa9113e1e29d9e5650aaee1128d01ce7c8e socket value logging progress === M source/blender/editors/space_node/node_draw.cc M source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc === diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc index aed35fc74c4..23786826c63 100644 --- a/source/blender/editors/space_node/node_draw.cc +++ b/source/blender/editors/space_node/node_draw.cc @@ -321,6 +321,53 @@ float2 node_from_view(const bNode &node, const float2 &co) return result; } +static GeoTreeLog *get_geo_tree_log(SpaceNode &snode) +{ + using namespace blender; + using namespace blender::nodes; + using namespace blender::nodes::geo_eval_log; + + LinearAllocator<> allocator; + Vector> contexts; + + if (snode.id == nullptr) { +return nullptr; + } + if (GS(snode.id->name) != ID_OB) { +return nullptr; + } + Object *object = reinterpret_cast(snode.id); + NodesModifierData *nmd = nullptr; + LISTBASE_FOREACH (ModifierData *, md_iter, &object->modifiers) { +if (md_iter->type == eModifierType_Nodes) { + NodesModifierData *nmd_iter = reinterpret_cast(md_iter); + if (nmd_iter->node_group == snode.nodetree) { +nmd = nmd_iter; +break; + } +} + } + if (nmd == nullptr) { +return nullptr; + } + if (nmd->runtime_eval_log == nullptr) { +return nullptr; + } + GeoModifierLog &modifier_log = *static_cast(nmd->runtime_eval_log); + contexts.append(allocator.construct(nullptr, nmd->modifier.name)); + Vector tree_path_vec{snode.treepath}; + if (tree_path_vec.is_empty()) { +return nullptr; + } + for (const bNodeTreePath *path : tree_path_vec.as_span().drop_front(1)) { +contexts.append(allocator.construct( +&*contexts.last(), path->node_name, path->nodetree->id.name + 2)); + } + + const ContextStack &final_context = *contexts.last(); + return &modifier_log.get_tree_log(final_context.hash()); +} + struct SocketTooltipData { bNodeTree *ntree; bNode *node; @@ -341,8 +388,27 @@ static bool node_socket_has_tooltip(bNodeTree *ntree, bNodeSocket *socket) return false; } -static std::optional create_socket_inspection_string() +static std::optional create_socket_inspection_string(TreeDrawContext &tree_draw_ctx, + bNode &node, + bNodeSocket &socket) { + using namespace blender::nodes::geo_eval_log; + tree_draw_ctx.geo_tree_log->ensure_socket_values(); + GeoNodeLog *node_log = tree_draw_ctx.geo_tree_log->nodes.lookup_ptr(node.name); + if (node_log == nullptr) { +return std::nullopt; + } + ValueLog *value_log = socket.in_out == SOCK_IN ? + node_log->input_values_.lookup_default(socket.identifier, nullptr) : + node_log->output_values_.lookup_default(socket.identifier, nullptr); + if (value_log == nullptr) { +return std::nullopt; + } + if (GenericValueLog *generic_value_log = dynamic_cast(value_log)) { +const GPointer value = generic_value_log->value(); +return value.type()->to_string(value.get()); + } + return std::nullopt; } @@ -351,7 +417,14 @@ static char *node_socket_get_tooltip(bContext *C, bNode *node, bNodeSocket *socket) { - UNUSED_VARS(C, node); + SpaceNode *snode = CTX_wm_space_node(C); + TreeDrawContext tree_draw_ctx; + if (snode != nullptr) { +if (ntree->type == NTREE_GEOMETRY) { + tree_draw_ctx.geo_tree_log = get_geo_tree_log(*snode); +} + } + std::stringstream output; if (socket->runtime->declaration != nullptr) { const blender::nodes::SocketDeclaration &socket_decl = *socket->runtime->declaration; @@ -361,12 +434,13 @@ static char *node_socket_get_tooltip(bContext *C, } } - if (ntree->type == NTREE_GEOMETRY) { + if (ntree->type == NTREE_GEOMETRY && tree_draw_ctx.geo_tree_log != nullptr) { if (!output.str().empty()) { output << ".\n\n"; } -std::optional socket_inspection_str = create_socket_inspection_string(); +std::optional socket_inspection_str = create_socket_inspection_string( +tree_draw_ctx, *node, *socket); if (socket_inspection_str.has_value()) { output << *socket_inspection_str; } @@ -382,7 +456,7 @@ static char *node_socket_get_tooltip(bContext *C, return BLI_strdup(output.str().c_str()); } -static void node_socket_add_tooltip(TreeDrawContext *tree_draw_ctx, +static void node_socket_add_tooltip(TreeDrawContext *UNUSED
[Bf-blender-cvs] [ad551747157] temp-geometry-nodes-evaluator-refactor: Merge branch 'master' into temp-geometry-nodes-evaluator-refactor
Commit: ad551747157c38586ef487d944a99cfe541f302f Author: Jacques Lucke Date: Wed Aug 31 15:45:58 2022 +0200 Branches: temp-geometry-nodes-evaluator-refactor https://developer.blender.org/rBad551747157c38586ef487d944a99cfe541f302f Merge branch 'master' into temp-geometry-nodes-evaluator-refactor === === ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [9f4db143f3c] temp-geometry-nodes-evaluator-refactor: Merge branch 'master' into temp-geometry-nodes-evaluator-refactor
Commit: 9f4db143f3ca0ef392f13156d25f80de1d7cfdab Author: Jacques Lucke Date: Wed Aug 24 13:17:38 2022 +0200 Branches: temp-geometry-nodes-evaluator-refactor https://developer.blender.org/rB9f4db143f3ca0ef392f13156d25f80de1d7cfdab Merge branch 'master' into temp-geometry-nodes-evaluator-refactor === === ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [8ecd241502f] temp-geometry-nodes-evaluator-refactor: improve text
Commit: 8ecd241502fc43bc9602bf1d4b2c9dfe1c10bd1b Author: Jacques Lucke Date: Wed Aug 24 13:48:43 2022 +0200 Branches: temp-geometry-nodes-evaluator-refactor https://developer.blender.org/rB8ecd241502fc43bc9602bf1d4b2c9dfe1c10bd1b improve text === M source/blender/editors/space_node/node_draw.cc === diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc index 23786826c63..ad08ccda881 100644 --- a/source/blender/editors/space_node/node_draw.cc +++ b/source/blender/editors/space_node/node_draw.cc @@ -445,7 +445,7 @@ static char *node_socket_get_tooltip(bContext *C, output << *socket_inspection_str; } else { - output << TIP_("The socket value has not been computed yet"); + output << TIP_("Unknown socket value"); } } ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [4d94c1a4e7d] temp-geometry-nodes-evaluator-refactor: progress
Commit: 4d94c1a4e7d2c83b0f2b398051bda4de28172942 Author: Jacques Lucke Date: Tue Aug 23 12:55:11 2022 +0200 Branches: temp-geometry-nodes-evaluator-refactor https://developer.blender.org/rB4d94c1a4e7d2c83b0f2b398051bda4de28172942 progress === M source/blender/nodes/NOD_geometry_nodes_log.hh M source/blender/nodes/intern/geometry_nodes_log.cc === diff --git a/source/blender/nodes/NOD_geometry_nodes_log.hh b/source/blender/nodes/NOD_geometry_nodes_log.hh index 4e3bd293231..93314262e0f 100644 --- a/source/blender/nodes/NOD_geometry_nodes_log.hh +++ b/source/blender/nodes/NOD_geometry_nodes_log.hh @@ -87,6 +87,8 @@ class GeoNodeLog { public: Vector warnings; std::chrono::nanoseconds run_time{0}; + Map input_values_; + Map output_values_; }; class GeoModifierLog; @@ -97,6 +99,7 @@ class GeoTreeLog { Vector tree_loggers_; bool reduced_node_warnings_ = false; bool reduced_node_run_times_ = false; + bool reduced_socket_values_ = false; public: Map nodes; @@ -110,6 +113,7 @@ class GeoTreeLog { void ensure_node_warnings(); void ensure_node_run_time(); + void ensure_socket_values(); }; class GeoModifierLog { diff --git a/source/blender/nodes/intern/geometry_nodes_log.cc b/source/blender/nodes/intern/geometry_nodes_log.cc index b9206cf93e8..3ff1ddc9203 100644 --- a/source/blender/nodes/intern/geometry_nodes_log.cc +++ b/source/blender/nodes/intern/geometry_nodes_log.cc @@ -58,6 +58,26 @@ void GeoTreeLog::ensure_node_run_time() reduced_node_run_times_ = true; } +void GeoTreeLog::ensure_socket_values() +{ + if (reduced_socket_values_) { +return; + } + for (GeoTreeLogger *tree_logger : tree_loggers_) { +for (const std::tuple &value_log_data : + tree_logger->input_socket_values) { + this->nodes.lookup_or_add_as(std::get<0>(value_log_data)) + .input_values_.add(std::get<1>(value_log_data), std::get<2>(value_log_data)); +} +for (const std::tuple &value_log_data : + tree_logger->output_socket_values) { + this->nodes.lookup_or_add_as(std::get<0>(value_log_data)) + .output_values_.add(std::get<1>(value_log_data), std::get<2>(value_log_data)); +} + } + reduced_socket_values_ = true; +} + GeoTreeLogger &GeoModifierLog::get_local_tree_logger(const ContextStack &context_stack) { Map> &local_tree_loggers = ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [5523d90d9cf] temp-geometry-nodes-evaluator-refactor: progress
Commit: 5523d90d9cf0d31fe46890fab51e1d28639f5064 Author: Jacques Lucke Date: Tue Aug 23 13:06:18 2022 +0200 Branches: temp-geometry-nodes-evaluator-refactor https://developer.blender.org/rB5523d90d9cf0d31fe46890fab51e1d28639f5064 progress === M source/blender/editors/space_node/node_draw.cc === diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc index 138c43d34f7..aed35fc74c4 100644 --- a/source/blender/editors/space_node/node_draw.cc +++ b/source/blender/editors/space_node/node_draw.cc @@ -321,10 +321,106 @@ float2 node_from_view(const bNode &node, const float2 &co) return result; } +struct SocketTooltipData { + bNodeTree *ntree; + bNode *node; + bNodeSocket *socket; +}; + +static bool node_socket_has_tooltip(bNodeTree *ntree, bNodeSocket *socket) +{ + if (ntree->type == NTREE_GEOMETRY) { +return true; + } + + if (socket->runtime->declaration != nullptr) { +const blender::nodes::SocketDeclaration &socket_decl = *socket->runtime->declaration; +return !socket_decl.description().is_empty(); + } + + return false; +} + +static std::optional create_socket_inspection_string() +{ + return std::nullopt; +} + +static char *node_socket_get_tooltip(bContext *C, + bNodeTree *ntree, + bNode *node, + bNodeSocket *socket) +{ + UNUSED_VARS(C, node); + std::stringstream output; + if (socket->runtime->declaration != nullptr) { +const blender::nodes::SocketDeclaration &socket_decl = *socket->runtime->declaration; +blender::StringRef description = socket_decl.description(); +if (!description.is_empty()) { + output << TIP_(description.data()); +} + } + + if (ntree->type == NTREE_GEOMETRY) { +if (!output.str().empty()) { + output << ".\n\n"; +} + +std::optional socket_inspection_str = create_socket_inspection_string(); +if (socket_inspection_str.has_value()) { + output << *socket_inspection_str; +} +else { + output << TIP_("The socket value has not been computed yet"); +} + } + + if (output.str().empty()) { +output << nodeSocketLabel(socket); + } + + return BLI_strdup(output.str().c_str()); +} + +static void node_socket_add_tooltip(TreeDrawContext *tree_draw_ctx, +bNodeTree *ntree, +bNode *node, +bNodeSocket *sock, +uiLayout *layout) +{ + if (!node_socket_has_tooltip(ntree, sock)) { +return; + } + + SocketTooltipData *data = MEM_cnew(__func__); + data->ntree = ntree; + data->node = node; + data->socket = sock; + + uiLayoutSetTooltipFunc( + layout, + [](bContext *C, void *argN, const char *UNUSED(tip)) { +SocketTooltipData *data = static_cast(argN); +return node_socket_get_tooltip(C, data->ntree, data->node, data->socket); + }, + data, + MEM_dupallocN, + MEM_freeN); +} + +void node_socket_add_tooltip(bNodeTree *ntree, bNode *node, bNodeSocket *sock, uiLayout *layout) +{ + node_socket_add_tooltip(nullptr, ntree, node, sock, layout); +} + /** * Based on settings and sockets in node, set drawing rect info. */ -static void node_update_basis(const bContext &C, bNodeTree &ntree, bNode &node, uiBlock &block) +static void node_update_basis(const bContext &C, + TreeDrawContext &tree_draw_ctx, + bNodeTree &ntree, + bNode &node, + uiBlock &block) { PointerRNA nodeptr; RNA_pointer_create(&ntree.id, &RNA_Node, &node, &nodeptr); @@ -385,7 +481,7 @@ static void node_update_basis(const bContext &C, bNodeTree &ntree, bNode &node, const char *socket_label = nodeSocketLabel(nsock); nsock->typeinfo->draw((bContext *)&C, row, &sockptr, &nodeptr, IFACE_(socket_label)); -node_socket_add_tooltip(&ntree, &node, nsock, row); +node_socket_add_tooltip(&tree_draw_ctx, &ntree, &node, nsock, row); UI_block_align_end(&block); UI_block_layout_resolve(&block, nullptr, &buty); @@ -517,7 +613,7 @@ static void node_update_basis(const bContext &C, bNodeTree &ntree, bNode &node, const char *socket_label = nodeSocketLabel(nsock); nsock->typeinfo->draw((bContext *)&C, row, &sockptr, &nodeptr, IFACE_(socket_label)); -node_socket_add_tooltip(&ntree, &node, nsock, row); +node_socket_add_tooltip(&tree_draw_ctx, &ntree, &node, nsock, row); UI_block_align_end(&block); UI_block_layout_resolve(&block, nullptr, &buty); @@ -787,84 +883,6 @@ void node_socket_color_get(const bContext &C, sock.typeinfo->draw_color((bContext *)&C, &ptr, &node_ptr, r_color); } -struct SocketToo
[Bf-blender-cvs] [3e73afb5360] master: Merge branch 'blender-v3.3-release'
Commit: 3e73afb5360592fe2bf43419e216035ea3c281f9 Author: Xavier Hallade Date: Wed Aug 31 15:34:44 2022 +0200 Branches: master https://developer.blender.org/rB3e73afb5360592fe2bf43419e216035ea3c281f9 Merge branch 'blender-v3.3-release' === === ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [b1231e616a1] blender-v3.3-release: Cycles: Enforce Windows driver version requirements for sycl
Commit: b1231e616a1ce9c52291ffd9a09ed77631e4d837 Author: Xavier Hallade Date: Wed Aug 31 15:24:14 2022 +0200 Branches: blender-v3.3-release https://developer.blender.org/rBb1231e616a1ce9c52291ffd9a09ed77631e4d837 Cycles: Enforce Windows driver version requirements for sycl sycl/L0 runtime reports compute-runtime version since Intel graphics driver 101.3268 on Windows, when querying driver version from sycl. Prior to this driver, it was 0. Now we can bump minimum requirement to this one and filter-out devices returning 0. Maniphest Tasks: T100648 === M intern/cycles/blender/addon/properties.py M intern/cycles/kernel/device/oneapi/kernel.cpp === diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py index 592e875ad0f..f9d05cb0d5b 100644 --- a/intern/cycles/blender/addon/properties.py +++ b/intern/cycles/blender/addon/properties.py @@ -1558,7 +1558,7 @@ class CyclesPreferences(bpy.types.AddonPreferences): import sys col.label(text="Requires Intel GPU with Xe-HPG architecture", icon='BLANK1') if sys.platform.startswith("win"): -col.label(text="and Windows driver version 101.3259 or newer", icon='BLANK1') +col.label(text="and Windows driver version 101.3268 or newer", icon='BLANK1') elif sys.platform.startswith("linux"): col.label(text="and Linux driver version xx.xx.23570 or newer", icon='BLANK1') elif device_type == 'METAL': diff --git a/intern/cycles/kernel/device/oneapi/kernel.cpp b/intern/cycles/kernel/device/oneapi/kernel.cpp index 332ad430f20..097d21b963f 100644 --- a/intern/cycles/kernel/device/oneapi/kernel.cpp +++ b/intern/cycles/kernel/device/oneapi/kernel.cpp @@ -665,7 +665,11 @@ bool oneapi_enqueue_kernel(KernelContext *kernel_context, return success; } -static const int lowest_supported_driver_version_win = 1013259; +/* Compute-runtime (ie. NEO) version is what gets returned by sycl/L0 on Windows + * since Windows driver 101.3268. */ +/* The same min compute-runtime version is currently required across Windows and Linux. + * For Windows driver 101.3268, compute-runtime version is 23570. */ +static const int lowest_supported_driver_version_win = 1013268; static const int lowest_supported_driver_version_neo = 23570; static int parse_driver_build_version(const sycl::device &device) @@ -769,8 +773,7 @@ static std::vector oneapi_available_devices() int driver_build_version = parse_driver_build_version(device); if ((driver_build_version > 10 && driver_build_version < lowest_supported_driver_version_win) || -(driver_build_version > 0 && - driver_build_version < lowest_supported_driver_version_neo)) { +driver_build_version < lowest_supported_driver_version_neo) { filter_out = true; } } ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [310a43bcac9] master: Cleanup: Resolve unused-lambda-capture warning
Commit: 310a43bcac9cb7e2e60b02f555f18698a98b7d2c Author: Sergey Sharybin Date: Wed Aug 31 15:20:45 2022 +0200 Branches: master https://developer.blender.org/rB310a43bcac9cb7e2e60b02f555f18698a98b7d2c Cleanup: Resolve unused-lambda-capture warning === M source/blender/nodes/shader/nodes/node_shader_mix.cc === diff --git a/source/blender/nodes/shader/nodes/node_shader_mix.cc b/source/blender/nodes/shader/nodes/node_shader_mix.cc index 918d9b747d5..f785e32832e 100644 --- a/source/blender/nodes/shader/nodes/node_shader_mix.cc +++ b/source/blender/nodes/shader/nodes/node_shader_mix.cc @@ -139,7 +139,7 @@ static void node_mix_gather_link_searches(GatherLinkSearchOpParams ¶ms) } else { if (ELEM(sock_type, SOCK_VECTOR, SOCK_RGBA)) { -params.add_item(IFACE_("Factor (Non-Uniform)"), [type](LinkSearchOpParams ¶ms) { +params.add_item(IFACE_("Factor (Non-Uniform)"), [](LinkSearchOpParams ¶ms) { bNode &node = params.add_node("ShaderNodeMix"); node_storage(node).data_type = SOCK_VECTOR; node_storage(node).factor_mode = NODE_MIX_MODE_NON_UNIFORM; ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [3ecb2134624] refactor-mesh-material-index-generic: Merge branch 'master' into refactor-mesh-material-index-generic
Commit: 3ecb21346248014aff621ec3b97ccbc1e7774653 Author: Hans Goudey Date: Wed Aug 31 08:07:51 2022 -0500 Branches: refactor-mesh-material-index-generic https://developer.blender.org/rB3ecb21346248014aff621ec3b97ccbc1e7774653 Merge branch 'master' into refactor-mesh-material-index-generic === === diff --cc source/blender/blenkernel/BKE_mesh.h index 70f549a6d23,8cf973b785c..ec6799ee995 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@@ -1022,30 -1019,6 +1022,30 @@@ char *BKE_mesh_debug_info(const struct void BKE_mesh_debug_print(const struct Mesh *me) ATTR_NONNULL(1); #endif +/** + * \return The material index for each polygon. May be null. + * \note In C++ code, prefer using the attribute API (#MutableAttributeAccessor)/ + */ +BLI_INLINE const int *BKE_mesh_material_indices(const Mesh *mesh) +{ + return (const int *)CustomData_get_layer_named(&mesh->pdata, CD_PROP_INT32, "material_index"); +} + +/** + * \return The material index for each polygon. Create the layer if it doesn't exist. + * \note In C++ code, prefer using the attribute API (#MutableAttributeAccessor)/ + */ +BLI_INLINE int *BKE_mesh_material_indices_for_write(Mesh *mesh) +{ + int *indices = (int *)CustomData_duplicate_referenced_layer_named( + &mesh->pdata, CD_PROP_INT32, "material_index", mesh->totpoly); + if (indices) { +return indices; + } + return (int *)CustomData_add_layer_named( - &mesh->pdata, CD_PROP_INT32, CD_CALLOC, NULL, mesh->totpoly, "material_index"); ++ &mesh->pdata, CD_PROP_INT32, CD_SET_DEFAULT, NULL, mesh->totpoly, "material_index"); +} + #ifdef __cplusplus } #endif diff --cc source/blender/blenkernel/intern/mesh_convert.cc index 0f05a3635c4,cb72e09af16..393d54bb03e --- a/source/blender/blenkernel/intern/mesh_convert.cc +++ b/source/blender/blenkernel/intern/mesh_convert.cc @@@ -195,11 -194,8 +195,11 @@@ static Mesh *mesh_nurbs_displist_to_mes MEdge *medge = edges.data(); MPoly *mpoly = polys.data(); MLoop *mloop = loops.data(); + MutableAttributeAccessor attributes = mesh_attributes_for_write(*mesh); + SpanAttributeWriter material_indices = attributes.lookup_or_add_for_write_only_span( + "material_index", ATTR_DOMAIN_FACE); MLoopUV *mloopuv = static_cast(CustomData_add_layer_named( - &mesh->ldata, CD_MLOOPUV, CD_CALLOC, nullptr, mesh->totloop, "UVMap")); + &mesh->ldata, CD_MLOOPUV, CD_SET_DEFAULT, nullptr, mesh->totloop, "UVMap")); /* verts and faces */ vertcount = 0; diff --cc source/blender/editors/mesh/meshtools.cc index 7db777c2134,e9a34cf95cb..330560be026 --- a/source/blender/editors/mesh/meshtools.cc +++ b/source/blender/editors/mesh/meshtools.cc @@@ -247,22 -244,12 +247,22 @@@ static void join_mesh_single(Depsgraph } } - CustomData_merge(&me->pdata, pdata, CD_MASK_MESH.pmask, CD_DEFAULT, totpoly); + CustomData_merge(&me->pdata, pdata, CD_MASK_MESH.pmask, CD_SET_DEFAULT, totpoly); CustomData_copy_data_named(&me->pdata, pdata, 0, *polyofs, me->totpoly); +blender::bke::AttributeWriter material_indices = + blender::bke::mesh_attributes_for_write(*me).lookup_for_write("material_index"); +if (material_indices) { + blender::MutableVArraySpan material_indices_span(material_indices.varray); + for (const int i : material_indices_span.index_range()) { +material_indices_span[i] = matmap ? matmap[material_indices_span[i]] : 0; + } + material_indices_span.save(); + material_indices.finish(); +} + for (a = 0; a < me->totpoly; a++, mpoly++) { mpoly->loopstart += *loopofs; - mpoly->mat_nr = matmap ? matmap[mpoly->mat_nr] : 0; } /* Face maps. */ diff --cc source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp index 7c46937bed2,3df0d723aec..6365dfe26a7 --- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp +++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp @@@ -577,15 -577,14 +577,15 @@@ void BlenderStrokeRenderer::GenerateStr mesh->totcol = group->materials.size(); mesh->mvert = (MVert *)CustomData_add_layer( - &mesh->vdata, CD_MVERT, CD_CALLOC, nullptr, mesh->totvert); + &mesh->vdata, CD_MVERT, CD_SET_DEFAULT, nullptr, mesh->totvert); mesh->medge = (MEdge *)CustomData_add_layer( - &mesh->edata, CD_MEDGE, CD_CALLOC, nullptr, mesh->totedge); + &mesh->edata, CD_MEDGE, CD_SET_DEFAULT, nullptr, mesh->totedge); mesh->mpoly = (MPoly *)CustomData_add_layer( - &mesh->pdata, CD_MPOLY, CD_CALLOC, nullptr, mesh->totpoly); + &mesh->pdata, CD_MPOLY, CD_SET_DEFAULT, nullptr, mesh->totpoly); mesh->mloop = (MLoop *)CustomData_add_layer( - &mesh->ldata, CD_MLOOP, CD_CALLOC, nullptr,
[Bf-blender-cvs] [5a1b733a67e] master: Fix unnecessary modifier visibility re-evaluation
Commit: 5a1b733a67e35c4a6d043197b3a88fa178225869 Author: Sergey Sharybin Date: Tue Aug 30 16:25:27 2022 +0200 Branches: master https://developer.blender.org/rB5a1b733a67e35c4a6d043197b3a88fa178225869 Fix unnecessary modifier visibility re-evaluation While it is hard to measure the performance impact accurately, there is no need to perform per-modifier string lookup on every frame update. Implemented as an exceptional case in the code which flushes updates to the entire component. Sounds a bit suboptimal, but there are already other exception cases handled in the function. Differential Revision: https://developer.blender.org/D15812 === M source/blender/depsgraph/intern/eval/deg_eval_flush.cc === diff --git a/source/blender/depsgraph/intern/eval/deg_eval_flush.cc b/source/blender/depsgraph/intern/eval/deg_eval_flush.cc index 1c313d42d8e..09981eb32c5 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval_flush.cc +++ b/source/blender/depsgraph/intern/eval/deg_eval_flush.cc @@ -129,7 +129,18 @@ inline void flush_handle_component_node(IDNode *id_node, * * TODO(sergey): Make this a more generic solution. */ if (!ELEM(comp_node->type, NodeType::PARTICLE_SETTINGS, NodeType::PARTICLE_SYSTEM)) { +const bool is_geometry_component = comp_node->type == NodeType::GEOMETRY; for (OperationNode *op : comp_node->operations) { + /* Special case for the visibility operation in the geometry component. + * + * This operation is a part of the geometry component so that manual tag for geometry recalc + * ensures that the visibility is re-evaluated. This operation is not to be re-evaluated when + * an update is flushed to the geometry component via a time dependency or a driver targeting + * a modifier. Skipping update in this case avoids CPU time unnecessarily spent looping over + * modifiers and looking up operations by name in the visibility evaluation function. */ + if (is_geometry_component && op->opcode == OperationCode::VISIBILITY) { +continue; + } op->flag |= DEPSOP_FLAG_NEEDS_UPDATE; } } ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [ac20970bc20] master: Depsgraph: optimize out evaluation of hidden objects
Commit: ac20970bc208aef6257b16e129f08dcbe892869d Author: Sergey Sharybin Date: Tue Aug 30 16:54:17 2022 +0200 Branches: master https://developer.blender.org/rBac20970bc208aef6257b16e129f08dcbe892869d Depsgraph: optimize out evaluation of hidden objects This change makes it so that objects which are temporary hidden from the viewport (the icon toggle in outliner) do not affect on the performance of the viewport. The attached file demonstrates the issue. Before this change hiding the object does not change FPS, after this change FPS goes high when the object is hidden. F13435936 Changing the object temporary visibility is already expected to tag scene for bases updates, which flushes down the stream to the object visibility update. So the only remaining topic was to ensure the graph does a special round of visibility update on such changes. Differential Revision: https://developer.blender.org/D15813 === M source/blender/depsgraph/intern/eval/deg_eval_flush.cc M source/blender/depsgraph/intern/eval/deg_eval_visibility.cc === diff --git a/source/blender/depsgraph/intern/eval/deg_eval_flush.cc b/source/blender/depsgraph/intern/eval/deg_eval_flush.cc index 09981eb32c5..30ee626f0f8 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval_flush.cc +++ b/source/blender/depsgraph/intern/eval/deg_eval_flush.cc @@ -371,6 +371,10 @@ void deg_graph_flush_updates(Depsgraph *graph) while (op_node != nullptr) { /* Tag operation as required for update. */ op_node->flag |= DEPSOP_FLAG_NEEDS_UPDATE; + /* Tag depsgraph visibility update when visibility operation is tagged for an update. */ + if (op_node->opcode == OperationCode::VISIBILITY) { +graph->need_update_nodes_visibility = true; + } /* Inform corresponding ID and component nodes about the change. */ ComponentNode *comp_node = op_node->owner; IDNode *id_node = comp_node->owner; diff --git a/source/blender/depsgraph/intern/eval/deg_eval_visibility.cc b/source/blender/depsgraph/intern/eval/deg_eval_visibility.cc index a056ba1dfa7..e35e992fc8b 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval_visibility.cc +++ b/source/blender/depsgraph/intern/eval/deg_eval_visibility.cc @@ -34,10 +34,14 @@ void deg_evaluate_object_node_visibility(::Depsgraph *depsgraph, IDNode *id_node DEG_debug_print_eval(depsgraph, __func__, object->id.name, &object->id); - const int required_flags = (graph->mode == DAG_EVAL_VIEWPORT) ? BASE_ENABLED_VIEWPORT : - BASE_ENABLED_RENDER; - - const bool is_enabled = object->base_flag & required_flags; + bool is_enabled; + if (graph->mode == DAG_EVAL_VIEWPORT) { +is_enabled = (object->base_flag & BASE_ENABLED_VIEWPORT) && + ((object->base_flag & BASE_HIDDEN) == 0); + } + else { +is_enabled = (object->base_flag & BASE_ENABLED_RENDER); + }; if (id_node->is_enabled_on_eval != is_enabled) { id_node->is_enabled_on_eval = is_enabled; ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [c1e342136df] master: UI: Add shift-click hint to library overrides button tooltip
Commit: c1e342136dfb0b56e3dc1d948f97816ead5cd597 Author: Julian Eisel Date: Wed Aug 31 15:03:35 2022 +0200 Branches: master https://developer.blender.org/rBc1e342136dfb0b56e3dc1d948f97816ead5cd597 UI: Add shift-click hint to library overrides button tooltip This information was missing and made the feature hard to discover. === M source/blender/editors/interface/interface_templates.c === diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index be4aa4b1d94..651c28c1a59 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -1365,20 +1365,22 @@ static void template_ID(const bContext *C, } } else if (ID_IS_OVERRIDE_LIBRARY(id)) { - but = uiDefIconBut(block, - UI_BTYPE_BUT, - 0, - ICON_LIBRARY_DATA_OVERRIDE, - 0, - 0, - UI_UNIT_X, - UI_UNIT_Y, - NULL, - 0, - 0, - 0, - 0, - TIP_("Library override of linked data-block, click to make fully local")); + but = uiDefIconBut( + block, + UI_BTYPE_BUT, + 0, + ICON_LIBRARY_DATA_OVERRIDE, + 0, + 0, + UI_UNIT_X, + UI_UNIT_Y, + NULL, + 0, + 0, + 0, + 0, + TIP_("Library override of linked data-block, click to make fully local, " + "Shift + Click to clear the library override and toggle if it can be edited")); UI_but_funcN_set( but, template_id_cb, MEM_dupallocN(template_ui), POINTER_FROM_INT(UI_ID_OVERRIDE)); } ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [773241add9d] master: Merge branch 'blender-v3.3-release'
Commit: 773241add9d876aa0b4ba011745208f61b53a4e2 Author: Bastien Montagne Date: Wed Aug 31 14:47:52 2022 +0200 Branches: master https://developer.blender.org/rB773241add9d876aa0b4ba011745208f61b53a4e2 Merge branch 'blender-v3.3-release' === === ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [24fe659224b] blender-v3.3-release: LibOverride: Replace linked objects by their overrides when created from 3DView.
Commit: 24fe659224b281ceca64f71f372f12f5905f6a77 Author: Bastien Montagne Date: Wed Aug 31 14:44:55 2022 +0200 Branches: blender-v3.3-release https://developer.blender.org/rB24fe659224b281ceca64f71f372f12f5905f6a77 LibOverride: Replace linked objects by their overrides when created from 3DView. From the 3DView code has basically no knowledge of collection hierarchy, so we can either not remap any local usage of linked objects that are being overridden, or remap them in all their local collections. The second behavior makes most sense in the vast majority of cases. Note that this was only an issue when directly linking and overriding objects, not when doing so through collections. === M source/blender/editors/object/object_relations.c === diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index 22f777c0846..a33cc60cddc 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -2356,6 +2356,25 @@ static int make_override_library_exec(bContext *C, wmOperator *op) BKE_main_id_tag_all(bmain, LIB_TAG_DOIT, false); + /* For the time being, replace selected linked objects by their overrides in all collections. + * While this may not be the absolute best behavior in all cases, in most common one this should + * match the expected result. */ + if (user_overrides_objects_uids != NULL) { +LISTBASE_FOREACH (Collection *, coll_iter, &bmain->collections) { + if (ID_IS_LINKED(coll_iter)) { +continue; + } + LISTBASE_FOREACH (CollectionObject *, coll_ob_iter, &coll_iter->gobject) { +if (BLI_gset_haskey(user_overrides_objects_uids, + POINTER_FROM_UINT(coll_ob_iter->ob->id.session_uuid))) { + /* Tag for remapping when creating overrides. */ + coll_iter->id.tag |= LIB_TAG_DOIT; + break; +} + } +} + } + ID *id_root_override; const bool success = BKE_lib_override_library_create(bmain, scene, ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [4b9d7b71e00] master: Fix: incorrect detection of used sockets
Commit: 4b9d7b71e0075e0b590c5e8d8f9bb67cb6a1e2de Author: Jacques Lucke Date: Wed Aug 31 14:41:57 2022 +0200 Branches: master https://developer.blender.org/rB4b9d7b71e0075e0b590c5e8d8f9bb67cb6a1e2de Fix: incorrect detection of used sockets === M source/blender/blenkernel/intern/node_tree_update.cc === diff --git a/source/blender/blenkernel/intern/node_tree_update.cc b/source/blender/blenkernel/intern/node_tree_update.cc index 716b8ce31d3..a9097bcb94a 100644 --- a/source/blender/blenkernel/intern/node_tree_update.cc +++ b/source/blender/blenkernel/intern/node_tree_update.cc @@ -1037,7 +1037,7 @@ class NodeTreeMainUpdater { for (bNodeSocket *socket : tree.all_sockets()) { socket->flag &= ~SOCK_IN_USE; for (const bNodeLink *link : socket->directly_linked_links()) { -if ((link->flag & NODE_LINK_MUTED) != 0) { +if (!link->is_muted()) { socket->flag |= SOCK_IN_USE; break; } ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [627e8ad6826] master: Fix: missing vector clear
Commit: 627e8ad6826ac355148a5b2d2b3bf130b96cc2fb Author: Jacques Lucke Date: Wed Aug 31 13:56:56 2022 +0200 Branches: master https://developer.blender.org/rB627e8ad6826ac355148a5b2d2b3bf130b96cc2fb Fix: missing vector clear Otherwise, these vectors are never cleared, leading to crashes down the line. === M source/blender/blenkernel/intern/node_runtime.cc === diff --git a/source/blender/blenkernel/intern/node_runtime.cc b/source/blender/blenkernel/intern/node_runtime.cc index 20ee3c41534..0c78c0f09d1 100644 --- a/source/blender/blenkernel/intern/node_runtime.cc +++ b/source/blender/blenkernel/intern/node_runtime.cc @@ -195,6 +195,8 @@ static void update_logical_origins(const bNodeTree &ntree) bNode &node = *tree_runtime.nodes[i]; for (bNodeSocket *socket : node.runtime->inputs) { Vector sockets_in_current_chain; +socket->runtime->logically_linked_sockets.clear(); +socket->runtime->logically_linked_skipped_sockets.clear(); find_logical_origins_for_socket_recursive( *socket, false, ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [d3f07998ede] master: Cleanup: simplify debugging
Commit: d3f07998eded607049666d6157f7d32120b51e46 Author: Jacques Lucke Date: Wed Aug 31 13:55:21 2022 +0200 Branches: master https://developer.blender.org/rBd3f07998eded607049666d6157f7d32120b51e46 Cleanup: simplify debugging This makes it easy to set breakpoints where false is returned. === M source/blender/blenkernel/BKE_node_runtime.hh === diff --git a/source/blender/blenkernel/BKE_node_runtime.hh b/source/blender/blenkernel/BKE_node_runtime.hh index 64325959ce5..4c13f73848c 100644 --- a/source/blender/blenkernel/BKE_node_runtime.hh +++ b/source/blender/blenkernel/BKE_node_runtime.hh @@ -172,7 +172,10 @@ inline bool topology_cache_is_available(const bNodeTree &tree) if (tree.runtime->allow_use_dirty_topology_cache.load() > 0) { return true; } - return !tree.runtime->topology_cache_is_dirty; + if (tree.runtime->topology_cache_is_dirty) { +return false; + } + return true; } inline bool topology_cache_is_available(const bNode &node) ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [81d82427b56] master: Merge branch 'blender-v3.3-release'
Commit: 81d82427b5684021bc5e7d2a5e6bf5db57c6f177 Author: Bastien Montagne Date: Wed Aug 31 12:38:13 2022 +0200 Branches: master https://developer.blender.org/rB81d82427b5684021bc5e7d2a5e6bf5db57c6f177 Merge branch 'blender-v3.3-release' === === diff --cc source/blender/editors/space_outliner/outliner_tools.cc index 69c88f3b874,847b9e0963b..a5fa8fb59e9 --- a/source/blender/editors/space_outliner/outliner_tools.cc +++ b/source/blender/editors/space_outliner/outliner_tools.cc @@@ -1273,10 -1271,10 +1273,10 @@@ static void id_override_library_reset_f { BLI_assert(TSE_IS_REAL_ID(tselem)); ID *id_root = tselem->id; - OutlinerLibOverrideData *data = reinterpret_cast(user_data); + OutlinerLibOverrideData *data = static_cast(user_data); const bool do_hierarchy = data->do_hierarchy; - if (!ID_IS_OVERRIDE_LIBRARY_REAL(id_root)) { + if (!ID_IS_OVERRIDE_LIBRARY_REAL(id_root) || ID_IS_LINKED(id_root)) { CLOG_WARN(&LOG, "Could not reset library override of data block '%s'", id_root->name); return; } @@@ -1350,10 -1348,11 +1350,11 @@@ static void id_override_library_resync_ { BLI_assert(TSE_IS_REAL_ID(tselem)); ID *id_root = tselem->id; - OutlinerLibOverrideData *data = reinterpret_cast(user_data); + OutlinerLibOverrideData *data = static_cast(user_data); - if (!ID_IS_OVERRIDE_LIBRARY_REAL(id_root)) { + if (!ID_IS_OVERRIDE_LIBRARY_REAL(id_root) || ID_IS_LINKED(id_root)) { CLOG_WARN(&LOG, "Could not resync library override of data block '%s'", id_root->name); + return; } if (id_root->override_library->hierarchy_root != nullptr) { ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [d210ab90d4b] blender-v3.3-release: Fix crash in liboverride operations from the Outliner.
Commit: d210ab90d4b7b0d2ce472493a697b1e868e36e78 Author: Bastien Montagne Date: Wed Aug 31 12:36:54 2022 +0200 Branches: blender-v3.3-release https://developer.blender.org/rBd210ab90d4b7b0d2ce472493a697b1e868e36e78 Fix crash in liboverride operations from the Outliner. Checks for 'invalid' selected IDs that need to be skipped were incomplete, and one was missing the actual return statement. === M source/blender/editors/space_outliner/outliner_tools.cc === diff --git a/source/blender/editors/space_outliner/outliner_tools.cc b/source/blender/editors/space_outliner/outliner_tools.cc index d6305c836ff..847b9e0963b 100644 --- a/source/blender/editors/space_outliner/outliner_tools.cc +++ b/source/blender/editors/space_outliner/outliner_tools.cc @@ -1274,7 +1274,7 @@ static void id_override_library_reset_fn(bContext *C, OutlinerLibOverrideData *data = reinterpret_cast(user_data); const bool do_hierarchy = data->do_hierarchy; - if (!ID_IS_OVERRIDE_LIBRARY_REAL(id_root)) { + if (!ID_IS_OVERRIDE_LIBRARY_REAL(id_root) || ID_IS_LINKED(id_root)) { CLOG_WARN(&LOG, "Could not reset library override of data block '%s'", id_root->name); return; } @@ -1302,7 +1302,7 @@ static void id_override_library_clear_single_fn(bContext *C, ViewLayer *view_layer = CTX_data_view_layer(C); ID *id = tselem->id; - if (!ID_IS_OVERRIDE_LIBRARY_REAL(id)) { + if (!ID_IS_OVERRIDE_LIBRARY_REAL(id) || ID_IS_LINKED(id)) { BKE_reportf(reports, RPT_WARNING, "Cannot clear embedded library override id '%s', only overrides of real " @@ -1350,8 +1350,9 @@ static void id_override_library_resync_fn(bContext *UNUSED(C), ID *id_root = tselem->id; OutlinerLibOverrideData *data = reinterpret_cast(user_data); - if (!ID_IS_OVERRIDE_LIBRARY_REAL(id_root)) { + if (!ID_IS_OVERRIDE_LIBRARY_REAL(id_root) || ID_IS_LINKED(id_root)) { CLOG_WARN(&LOG, "Could not resync library override of data block '%s'", id_root->name); +return; } if (id_root->override_library->hierarchy_root != nullptr) { @@ -1399,7 +1400,7 @@ static void id_override_library_delete_hierarchy_fn(bContext *UNUSED(C), BLI_assert(TSE_IS_REAL_ID(tselem)); ID *id_root = tselem->id; - if (!ID_IS_OVERRIDE_LIBRARY_REAL(id_root)) { + if (!ID_IS_OVERRIDE_LIBRARY_REAL(id_root) || ID_IS_LINKED(id_root)) { CLOG_WARN(&LOG, "Could not delete library override of data block '%s'", id_root->name); return; } ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [25e307d725d] master: Nodes: move NodeTreeRef functionality into node runtime data
Commit: 25e307d725d0b924fb0e87e4ffde84f915b74310 Author: Jacques Lucke Date: Wed Aug 31 12:15:57 2022 +0200 Branches: master https://developer.blender.org/rB25e307d725d0b924fb0e87e4ffde84f915b74310 Nodes: move NodeTreeRef functionality into node runtime data The purpose of `NodeTreeRef` was to speed up various queries on a read-only `bNodeTree`. Not that we have runtime data in nodes and sockets, we can also store the result of some queries there. This has some benefits: * No need for a read-only separate node tree data structure which increased complexity. * Makes it easier to reuse cached queries in more parts of Blender that can benefit from it. A downside is that we loose some type safety that we got by having different types for input and output sockets, as well as internal and non-internal links. This patch also refactors `DerivedNodeTree` so that it does not use `NodeTreeRef` anymore, but uses `bNodeTree` directly instead. To provide a convenient API (that is also close to what `NodeTreeRef` has), a new approach is implemented: `bNodeTree`, `bNode`, `bNodeSocket` and `bNodeLink` now have C++ methods declared in `DNA_node_types.h` which are implemented in `BKE_node_runtime.hh`. To make this work, `makesdna` now skips c++ sections when parsing dna header files. No user visible changes are expected. Differential Revision: https://developer.blender.org/D15491 === M source/blender/blenkernel/BKE_node_runtime.hh M source/blender/blenkernel/CMakeLists.txt M source/blender/blenkernel/intern/node.cc A source/blender/blenkernel/intern/node_runtime.cc M source/blender/blenkernel/intern/node_tree_update.cc M source/blender/blenlib/BLI_multi_value_map.hh M source/blender/compositor/realtime_compositor/COM_evaluator.hh M source/blender/compositor/realtime_compositor/COM_utilities.hh M source/blender/compositor/realtime_compositor/intern/compile_state.cc M source/blender/compositor/realtime_compositor/intern/evaluator.cc M source/blender/compositor/realtime_compositor/intern/input_single_value_operation.cc M source/blender/compositor/realtime_compositor/intern/node_operation.cc M source/blender/compositor/realtime_compositor/intern/scheduler.cc M source/blender/compositor/realtime_compositor/intern/shader_node.cc M source/blender/compositor/realtime_compositor/intern/shader_operation.cc M source/blender/compositor/realtime_compositor/intern/utilities.cc M source/blender/editors/space_node/node_relationships.cc M source/blender/io/wavefront_obj/exporter/obj_export_mtl.cc M source/blender/makesdna/DNA_node_types.h M source/blender/makesdna/intern/makesdna.c M source/blender/modifiers/intern/MOD_nodes.cc M source/blender/modifiers/intern/MOD_nodes_evaluator.cc M source/blender/nodes/CMakeLists.txt M source/blender/nodes/NOD_derived_node_tree.hh M source/blender/nodes/NOD_geometry_exec.hh M source/blender/nodes/NOD_multi_function.hh D source/blender/nodes/NOD_node_tree_ref.hh M source/blender/nodes/composite/nodes/node_composite_image.cc M source/blender/nodes/composite/nodes/node_composite_normal.cc M source/blender/nodes/function/node_function_util.hh M source/blender/nodes/function/nodes/node_fn_align_euler_to_vector.cc M source/blender/nodes/function/nodes/node_fn_boolean_math.cc M source/blender/nodes/function/nodes/node_fn_combine_color.cc M source/blender/nodes/function/nodes/node_fn_compare.cc M source/blender/nodes/function/nodes/node_fn_float_to_int.cc M source/blender/nodes/function/nodes/node_fn_input_bool.cc M source/blender/nodes/function/nodes/node_fn_input_color.cc M source/blender/nodes/function/nodes/node_fn_input_int.cc M source/blender/nodes/function/nodes/node_fn_input_string.cc M source/blender/nodes/function/nodes/node_fn_input_vector.cc M source/blender/nodes/function/nodes/node_fn_rotate_euler.cc M source/blender/nodes/geometry/node_geometry_util.hh M source/blender/nodes/intern/derived_node_tree.cc M source/blender/nodes/intern/geometry_nodes_eval_log.cc M source/blender/nodes/intern/node_geometry_exec.cc M source/blender/nodes/intern/node_multi_function.cc D source/blender/nodes/intern/node_tree_ref.cc M source/blender/nodes/shader/node_shader_util.hh M source/blender/nodes/shader/nodes/node_shader_color_ramp.cc M source/blender/nodes/shader/nodes/node_shader_curves.cc M source/blender/nodes/shader/nodes/node_shader_math.cc M source/blender/nodes/shader/nodes/node_shader_mix.cc M source/blender/nodes/shader/nodes/node_shader_mix_rgb.cc M source/blender/nodes/shader/nodes/node_shader_tex_brick.cc M source/blender/nodes/shader/nodes/node_shader_tex_gradient.cc M source/blender/nodes/sh
[Bf-blender-cvs] [41f439a7371] master: Merge branch 'blender-v3.3-release'
Commit: 41f439a7371df53fc79497fac2e771db599b8531 Author: Jacques Lucke Date: Wed Aug 31 10:29:35 2022 +0200 Branches: master https://developer.blender.org/rB41f439a7371df53fc79497fac2e771db599b8531 Merge branch 'blender-v3.3-release' === === ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [6177d9f0c89] blender-v3.3-release: Fix: reverse uv lookup fails due to floating point accuracy issues
Commit: 6177d9f0c8981837491f5153e3aab4ec0d04db44 Author: Jacques Lucke Date: Wed Aug 31 10:28:35 2022 +0200 Branches: blender-v3.3-release https://developer.blender.org/rB6177d9f0c8981837491f5153e3aab4ec0d04db44 Fix: reverse uv lookup fails due to floating point accuracy issues The case when the query uv is almost on an edge but outside of any triangle was handled before. Now the case where the query uv is almost on an edge but inside more than one triangle is handled as well. === M source/blender/geometry/intern/reverse_uv_sampler.cc === diff --git a/source/blender/geometry/intern/reverse_uv_sampler.cc b/source/blender/geometry/intern/reverse_uv_sampler.cc index 39fec40333c..f66e4a3ac2e 100644 --- a/source/blender/geometry/intern/reverse_uv_sampler.cc +++ b/source/blender/geometry/intern/reverse_uv_sampler.cc @@ -50,6 +50,11 @@ ReverseUVSampler::Result ReverseUVSampler::sample(const float2 &query_uv) const float3 best_bary_weights; const MLoopTri *best_looptri; + /* The distance to an edge that is allowed to be inside or outside the triangle. Without this, + * the lookup can fail for floating point accuracy reasons when the uv is almost exact on an + * edge. */ + const float edge_epsilon = 0.1f; + for (const int looptri_index : looptri_indices) { const MLoopTri &looptri = looptris_[looptri_index]; const float2 &uv_0 = uv_map_[looptri.tri[0]]; @@ -68,8 +73,12 @@ ReverseUVSampler::Result ReverseUVSampler::sample(const float2 &query_uv) const const float dist = MAX3(x_dist, y_dist, z_dist); if (dist <= 0.0f && best_dist <= 0.0f) { - /* The uv sample is in multiple triangles. */ - return Result{ResultType::Multiple}; + const float worse_dist = std::max(dist, best_dist); + /* Allow ignoring multiple triangle intersections if the uv is almost exactly on an edge. */ + if (worse_dist < -edge_epsilon) { +/* The uv sample is in multiple triangles. */ +return Result{ResultType::Multiple}; + } } if (dist < best_dist) { @@ -79,8 +88,9 @@ ReverseUVSampler::Result ReverseUVSampler::sample(const float2 &query_uv) const } } - /* Allow for a small epsilon in case the uv is on th edge. */ - if (best_dist < 0.1f) { + /* Allow using the closest (but not intersecting) triangle if the uv is almost exactly on an + * edge. */ + if (best_dist < edge_epsilon) { return Result{ResultType::Ok, best_looptri, math::clamp(best_bary_weights, 0.0f, 1.0f)}; } ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [68f234b8ab2] master: Cleanup: obj: simplify import/export syntax handling code
Commit: 68f234b8ab2ef4f69498650ece54015d174bea07 Author: Aras Pranckevicius Date: Mon Aug 29 21:10:16 2022 +0300 Branches: master https://developer.blender.org/rB68f234b8ab2ef4f69498650ece54015d174bea07 Cleanup: obj: simplify import/export syntax handling code I want to add support for PBR materials extension to OBJ, but the way current I/O code syntax handling was done made it quite cumbersome to extend the number of MTL textures/parameters. Simplify all that by removing FormatHandler template on "syntax" that gets routed through keyword enums, and instead just have simple `write_obj_*` and `write_mtl_*` functions. Simplify MTLMaterial to not contain a map of textures (that is always fully filled with all possible textures), instead now there's a simple array. Rename `tex_map_XX` to `MTLTexMap`. All this does not affect behavior or performance, but it does result in 170 fewer lines of code, and saves a couple kilobytes of executable size. === M source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc M source/blender/io/wavefront_obj/exporter/obj_export_file_writer.hh M source/blender/io/wavefront_obj/exporter/obj_export_io.hh M source/blender/io/wavefront_obj/exporter/obj_export_mtl.cc M source/blender/io/wavefront_obj/exporter/obj_export_mtl.hh M source/blender/io/wavefront_obj/exporter/obj_exporter.cc M source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc M source/blender/io/wavefront_obj/importer/obj_import_mtl.cc M source/blender/io/wavefront_obj/importer/obj_import_mtl.hh M source/blender/io/wavefront_obj/tests/obj_exporter_tests.cc M source/blender/io/wavefront_obj/tests/obj_mtl_parser_tests.cc === diff --git a/source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc b/source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc index 66dd71d4246..9bcc061caf7 100644 --- a/source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc +++ b/source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc @@ -44,7 +44,7 @@ static const char *DEFORM_GROUP_DISABLED = "off"; * So an empty material name is written. */ static const char *MATERIAL_GROUP_DISABLED = ""; -void OBJWriter::write_vert_uv_normal_indices(FormatHandler &fh, +void OBJWriter::write_vert_uv_normal_indices(FormatHandler &fh, const IndexOffsets &offsets, Span vert_indices, Span uv_indices, @@ -57,12 +57,12 @@ void OBJWriter::write_vert_uv_normal_indices(FormatHandler &fh, const int uv_offset = offsets.uv_vertex_offset + 1; const int normal_offset = offsets.normal_offset + 1; const int n = vert_indices.size(); - fh.write(); + fh.write_obj_poly_begin(); if (!flip) { for (int j = 0; j < n; ++j) { - fh.write(vert_indices[j] + vertex_offset, -uv_indices[j] + uv_offset, -normal_indices[j] + normal_offset); + fh.write_obj_poly_v_uv_normal(vert_indices[j] + vertex_offset, +uv_indices[j] + uv_offset, +normal_indices[j] + normal_offset); } } else { @@ -71,15 +71,15 @@ void OBJWriter::write_vert_uv_normal_indices(FormatHandler &fh, * then go backwards. Same logic in other write_*_indices functions below. */ for (int k = 0; k < n; ++k) { int j = k == 0 ? 0 : n - k; - fh.write(vert_indices[j] + vertex_offset, -uv_indices[j] + uv_offset, -normal_indices[j] + normal_offset); + fh.write_obj_poly_v_uv_normal(vert_indices[j] + vertex_offset, +uv_indices[j] + uv_offset, +normal_indices[j] + normal_offset); } } - fh.write(); + fh.write_obj_poly_end(); } -void OBJWriter::write_vert_normal_indices(FormatHandler &fh, +void OBJWriter::write_vert_normal_indices(FormatHandler &fh, const IndexOffsets &offsets, Span vert_indices, Span /*uv_indices*/, @@ -90,24 +90,24 @@ void OBJWriter::write_vert_normal_indices(FormatHandler &fh, const int vertex_offset = offsets.vertex_offset + 1; const int normal_offset = offsets.normal_offset + 1; const int n = vert_indices.size(); - fh.write(); + fh.write_obj_poly_begin(); if (!flip) { for (int j = 0; j < n; ++j) { - fh.write(vert_indices[j] + vertex_offset, - normal_
[Bf-blender-cvs] [caa352bc459] master: Merge branch 'blender-v3.3-release'
Commit: caa352bc459113e449298ce2ff1505118230e061 Author: Thomas Dinges Date: Wed Aug 31 09:44:15 2022 +0200 Branches: master https://developer.blender.org/rBcaa352bc459113e449298ce2ff1505118230e061 Merge branch 'blender-v3.3-release' === === ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [e2deee73abf] blender-v3.3-release: Update freedesktop file.
Commit: e2deee73abf3fe5885aefa131c337f3b0d6762d6 Author: Thomas Dinges Date: Wed Aug 31 09:42:17 2022 +0200 Branches: blender-v3.3-release https://developer.blender.org/rBe2deee73abf3fe5885aefa131c337f3b0d6762d6 Update freedesktop file. Add new features for upcoming Blender 3.3 and also missing 3.2 notes, which were not merged to master. === M release/freedesktop/org.blender.Blender.appdata.xml === diff --git a/release/freedesktop/org.blender.Blender.appdata.xml b/release/freedesktop/org.blender.Blender.appdata.xml index 12291860050..0f1aa5099b6 100644 --- a/release/freedesktop/org.blender.Blender.appdata.xml +++ b/release/freedesktop/org.blender.Blender.appdata.xml @@ -40,6 +40,47 @@ + + +New features: + +New hair system +Cycles Rendering on Intel Arc GPUs +Grease Pencil Light and Shadow calculations +Motion Tracker Image Plane Marker + +Enhancements: + +Faster Line Art loading time +Library Overrides improvements +Massive performance gains importing large amounts of objects in USD, Alembic, and OBJ +UV improvements +Improved sculpting performance in EEVEE +Cycles GPU rendering improvements for AMD GPUs and Apple Silicon + + + + + +New features: + +Cycles Light Groups +Cycles Shadow Caustics using Manifold Next Event Estimation +New Tools and usability improvements for Polygon Painting +More Geometry Nodes, including Duplicate Elements +Asset Browser: Support for Asset Collections + +Enhancements: + +Enhanced channels in the video sequencer +Support for WebP format +New experimental OBJ importer +Motion Paths improvements +Grease Pencil Envelope Modifier +New Curve Pen Tool + + + New features: ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs