diff options
author | Kévin Dietrich <kevin.dietrich@mailoo.org> | 2021-08-18 00:47:05 +0300 |
---|---|---|
committer | Kévin Dietrich <kevin.dietrich@mailoo.org> | 2021-08-18 00:47:05 +0300 |
commit | af0e775c525c638a5a40e7767ee74cf5a305c044 (patch) | |
tree | 0b9860c1840d03da1c45e4ba3b99eef0f9e66600 | |
parent | 96f5f20d53e4234b89d471a64f52002c838d85fa (diff) | |
parent | 23132fcdc136d1238d9980c2a9bf6d058e846cc7 (diff) |
Merge branch 'master' into cycles_procedural_api
-rwxr-xr-x | build_files/build_environment/install_deps.sh | 2 | ||||
-rw-r--r-- | intern/cycles/blender/blender_particles.cpp | 2 | ||||
-rw-r--r-- | intern/cycles/render/graph.cpp | 4 | ||||
-rw-r--r-- | intern/cycles/render/nodes.cpp | 20 | ||||
-rw-r--r-- | intern/cycles/render/shader.h | 8 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_gpencil_geom.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/gpencil_geom.cc | 210 | ||||
-rw-r--r-- | source/blender/editors/gpencil/gpencil_mesh.c | 3 | ||||
-rw-r--r-- | source/blender/editors/object/object_add.c | 3 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_convert_graph.c | 11 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_convert_nla.c | 4 | ||||
-rw-r--r-- | source/blender/editors/util/CMakeLists.txt | 1 | ||||
-rw-r--r-- | source/blender/makesrna/RNA_enum_items.h | 240 | ||||
-rw-r--r-- | source/blender/makesrna/RNA_enum_types.h | 214 | ||||
-rw-r--r-- | source/blender/makesrna/intern/CMakeLists.txt | 1 | ||||
-rw-r--r-- | source/blender/makesrna/intern/makesrna.c | 93 |
16 files changed, 468 insertions, 351 deletions
diff --git a/build_files/build_environment/install_deps.sh b/build_files/build_environment/install_deps.sh index ff4aad79bb6..ecaff307885 100755 --- a/build_files/build_environment/install_deps.sh +++ b/build_files/build_environment/install_deps.sh @@ -1019,7 +1019,7 @@ PRINT "" PYTHON_SOURCE=( "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tgz" ) _boost_version_nodots=`echo "$BOOST_VERSION" | sed -r 's/\./_/g'` -BOOST_SOURCE=( "https://dl.bintray.com/boostorg/release/$BOOST_VERSION/source/boost_$_boost_version_nodots.tar.bz2" ) +BOOST_SOURCE=( "https://boostorg.jfrog.io/artifactory/main/release/$BOOST_VERSION/source/boost_$_boost_version_nodots.tar.bz2" ) BOOST_BUILD_MODULES="--with-system --with-filesystem --with-thread --with-regex --with-locale --with-date_time --with-wave --with-iostreams --with-python --with-program_options --with-serialization --with-atomic" TBB_SOURCE=( "https://github.com/oneapi-src/oneTBB/archive/$TBB_VERSION$TBB_VERSION_UPDATE.tar.gz" ) diff --git a/intern/cycles/blender/blender_particles.cpp b/intern/cycles/blender/blender_particles.cpp index ae43dae4dc1..206ee24a093 100644 --- a/intern/cycles/blender/blender_particles.cpp +++ b/intern/cycles/blender/blender_particles.cpp @@ -71,7 +71,7 @@ bool BlenderSync::sync_dupli_particle(BL::Object &b_ob, Particle pa; pa.index = persistent_id[0]; - pa.age = b_scene.frame_current() - b_pa.birth_time(); + pa.age = b_scene.frame_current_final() - b_pa.birth_time(); pa.lifetime = b_pa.lifetime(); pa.location = get_float3(b_pa.location()); pa.rotation = get_float4(b_pa.rotation()); diff --git a/intern/cycles/render/graph.cpp b/intern/cycles/render/graph.cpp index cdaa878e830..e9da48b624d 100644 --- a/intern/cycles/render/graph.cpp +++ b/intern/cycles/render/graph.cpp @@ -158,13 +158,13 @@ void ShaderNode::attributes(Shader *shader, AttributeRequestSet *attributes) foreach (ShaderInput *input, inputs) { if (!input->link) { if (input->flags() & SocketType::LINK_TEXTURE_GENERATED) { - if (shader->has_surface) + if (shader->has_surface_link()) attributes->add(ATTR_STD_GENERATED); if (shader->has_volume) attributes->add(ATTR_STD_GENERATED_TRANSFORM); } else if (input->flags() & SocketType::LINK_TEXTURE_UV) { - if (shader->has_surface) + if (shader->has_surface_link()) attributes->add(ATTR_STD_UV); } } diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index 42cba342bf8..795166bcf4c 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -350,7 +350,7 @@ void ImageTextureNode::attributes(Shader *shader, AttributeRequestSet *attribute #ifdef WITH_PTEX /* todo: avoid loading other texture coordinates when using ptex, * and hide texture coordinate socket in the UI */ - if (shader->has_surface && string_endswith(filename, ".ptx")) { + if (shader->has_surface_link() && string_endswith(filename, ".ptx")) { /* ptex */ attributes->add(ATTR_STD_PTEX_FACE_ID); attributes->add(ATTR_STD_PTEX_UV); @@ -552,7 +552,7 @@ ImageParams EnvironmentTextureNode::image_params() const void EnvironmentTextureNode::attributes(Shader *shader, AttributeRequestSet *attributes) { #ifdef WITH_PTEX - if (shader->has_surface && string_endswith(filename, ".ptx")) { + if (shader->has_surface_link() && string_endswith(filename, ".ptx")) { /* ptex */ attributes->add(ATTR_STD_PTEX_FACE_ID); attributes->add(ATTR_STD_PTEX_UV); @@ -2319,7 +2319,7 @@ AnisotropicBsdfNode::AnisotropicBsdfNode() : BsdfNode(get_node_type()) void AnisotropicBsdfNode::attributes(Shader *shader, AttributeRequestSet *attributes) { - if (shader->has_surface) { + if (shader->has_surface_link()) { ShaderInput *tangent_in = input("Tangent"); if (!tangent_in->link) @@ -2843,7 +2843,7 @@ bool PrincipledBsdfNode::has_surface_bssrdf() void PrincipledBsdfNode::attributes(Shader *shader, AttributeRequestSet *attributes) { - if (shader->has_surface) { + if (shader->has_surface_link()) { ShaderInput *tangent_in = input("Tangent"); if (!tangent_in->link) @@ -3684,7 +3684,7 @@ GeometryNode::GeometryNode() : ShaderNode(get_node_type()) void GeometryNode::attributes(Shader *shader, AttributeRequestSet *attributes) { - if (shader->has_surface) { + if (shader->has_surface_link()) { if (!output("Tangent")->links.empty()) { attributes->add(ATTR_STD_GENERATED); } @@ -3830,7 +3830,7 @@ TextureCoordinateNode::TextureCoordinateNode() : ShaderNode(get_node_type()) void TextureCoordinateNode::attributes(Shader *shader, AttributeRequestSet *attributes) { - if (shader->has_surface) { + if (shader->has_surface_link()) { if (!from_dupli) { if (!output("Generated")->links.empty()) attributes->add(ATTR_STD_GENERATED); @@ -4388,7 +4388,7 @@ HairInfoNode::HairInfoNode() : ShaderNode(get_node_type()) void HairInfoNode::attributes(Shader *shader, AttributeRequestSet *attributes) { - if (shader->has_surface) { + if (shader->has_surface_link()) { ShaderOutput *intercept_out = output("Intercept"); if (!intercept_out->links.empty()) @@ -6744,7 +6744,7 @@ NormalMapNode::NormalMapNode() : ShaderNode(get_node_type()) void NormalMapNode::attributes(Shader *shader, AttributeRequestSet *attributes) { - if (shader->has_surface && space == NODE_NORMAL_MAP_TANGENT) { + if (shader->has_surface_link() && space == NODE_NORMAL_MAP_TANGENT) { if (attribute.empty()) { attributes->add(ATTR_STD_UV_TANGENT); attributes->add(ATTR_STD_UV_TANGENT_SIGN); @@ -6838,7 +6838,7 @@ TangentNode::TangentNode() : ShaderNode(get_node_type()) void TangentNode::attributes(Shader *shader, AttributeRequestSet *attributes) { - if (shader->has_surface) { + if (shader->has_surface_link()) { if (direction_type == NODE_TANGENT_UVMAP) { if (attribute.empty()) attributes->add(ATTR_STD_UV_TANGENT); @@ -7021,7 +7021,7 @@ void VectorDisplacementNode::constant_fold(const ConstantFolder &folder) void VectorDisplacementNode::attributes(Shader *shader, AttributeRequestSet *attributes) { - if (shader->has_surface && space == NODE_NORMAL_MAP_TANGENT) { + if (shader->has_surface_link() && space == NODE_NORMAL_MAP_TANGENT) { if (attribute.empty()) { attributes->add(ATTR_STD_UV_TANGENT); attributes->add(ATTR_STD_UV_TANGENT_SIGN); diff --git a/intern/cycles/render/shader.h b/intern/cycles/render/shader.h index 50c8bed4669..c65cac351a4 100644 --- a/intern/cycles/render/shader.h +++ b/intern/cycles/render/shader.h @@ -154,6 +154,14 @@ class Shader : public Node { void tag_update(Scene *scene); void tag_used(Scene *scene); + /* Return true when either of the surface or displacement socket of the output node is linked. + * This should be used to ensure that surface attributes are also requested even when only the + * displacement socket is linked. */ + bool has_surface_link() const + { + return has_surface || has_displacement; + } + bool need_update_geometry() const; }; diff --git a/source/blender/blenkernel/BKE_gpencil_geom.h b/source/blender/blenkernel/BKE_gpencil_geom.h index c1ccae7a437..29e3a74b1b2 100644 --- a/source/blender/blenkernel/BKE_gpencil_geom.h +++ b/source/blender/blenkernel/BKE_gpencil_geom.h @@ -169,7 +169,8 @@ bool BKE_gpencil_convert_mesh(struct Main *bmain, const float matrix[4][4], const int frame_offset, const bool use_seams, - const bool use_faces); + const bool use_faces, + const bool use_vgroups); void BKE_gpencil_stroke_uniform_subdivide(struct bGPdata *gpd, struct bGPDstroke *gps, diff --git a/source/blender/blenkernel/intern/gpencil_geom.cc b/source/blender/blenkernel/intern/gpencil_geom.cc index f8a07939096..f2042d3098c 100644 --- a/source/blender/blenkernel/intern/gpencil_geom.cc +++ b/source/blender/blenkernel/intern/gpencil_geom.cc @@ -2269,7 +2269,8 @@ static void gpencil_generate_edgeloops(Object *ob, const int thickness, const float offset, const float matrix[4][4], - const bool use_seams) + const bool use_seams, + const bool use_vgroups) { Mesh *me = (Mesh *)ob->data; if (me->totedge == 0) { @@ -2278,9 +2279,9 @@ static void gpencil_generate_edgeloops(Object *ob, /* Arrays for all edge vertices (forward and backward) that form a edge loop. * This is reused for each edge-loop to create gpencil stroke. */ - uint *stroke = (uint *)MEM_callocN(sizeof(uint) * me->totedge * 2, __func__); - uint *stroke_fw = (uint *)MEM_callocN(sizeof(uint) * me->totedge, __func__); - uint *stroke_bw = (uint *)MEM_callocN(sizeof(uint) * me->totedge, __func__); + uint *stroke = (uint *)MEM_mallocN(sizeof(uint) * me->totedge * 2, __func__); + uint *stroke_fw = (uint *)MEM_mallocN(sizeof(uint) * me->totedge, __func__); + uint *stroke_bw = (uint *)MEM_mallocN(sizeof(uint) * me->totedge, __func__); /* Create array with all edges. */ GpEdge *gp_edges = (GpEdge *)MEM_callocN(sizeof(GpEdge) * me->totedge, __func__); @@ -2311,11 +2312,6 @@ static void gpencil_generate_edgeloops(Object *ob, bool pending = true; int e = 0; while (pending) { - /* Clear arrays of stroke. */ - memset(stroke_fw, 0, sizeof(uint) * me->totedge); - memset(stroke_bw, 0, sizeof(uint) * me->totedge); - memset(stroke, 0, sizeof(uint) * me->totedge * 2); - gped = &gp_edges[e]; /* Look first unused edge. */ if (gped->flag != 0) { @@ -2330,7 +2326,7 @@ static void gpencil_generate_edgeloops(Object *ob, stroke_bw[0] = e; gped->flag = 1; - /* Hash used to avoid loop over same vertice. */ + /* Hash used to avoid loop over same vertices. */ GHash *v_table = BLI_ghash_int_new(__func__); /* Look forward edges. */ int totedges = gpencil_walk_edge(v_table, gp_edges, me->totedge, stroke_fw, e, angle, false); @@ -2354,38 +2350,41 @@ static void gpencil_generate_edgeloops(Object *ob, bGPDstroke *gps_stroke = BKE_gpencil_stroke_add( gpf_stroke, MAX2(stroke_mat_index, 0), array_len + 1, thickness * thickness, false); + /* Create dvert data. */ + MDeformVert *me_dvert = me->dvert; + if (use_vgroups && me_dvert) { + gps_stroke->dvert = (MDeformVert *)MEM_callocN(sizeof(MDeformVert) * (array_len + 1), + "gp_stroke_dverts"); + } + /* Create first segment. */ float fpt[3]; - uint v = stroke[0]; - gped = &gp_edges[v]; - bGPDspoint *pt = &gps_stroke->points[0]; - mul_v3_v3fl(fpt, gped->n1, offset); - add_v3_v3v3(&pt->x, gped->v1_co, fpt); - mul_m4_v3(matrix, &pt->x); - - pt->pressure = 1.0f; - pt->strength = 1.0f; - - pt = &gps_stroke->points[1]; - mul_v3_v3fl(fpt, gped->n2, offset); - add_v3_v3v3(&pt->x, gped->v2_co, fpt); - mul_m4_v3(matrix, &pt->x); - - pt->pressure = 1.0f; - pt->strength = 1.0f; - - /* Add next segments. */ - for (int i = 1; i < array_len; i++) { - v = stroke[i]; - gped = &gp_edges[v]; - - pt = &gps_stroke->points[i + 1]; - mul_v3_v3fl(fpt, gped->n2, offset); - add_v3_v3v3(&pt->x, gped->v2_co, fpt); + for (int i = 0; i < array_len + 1; i++) { + int vertex_index = i == 0 ? gp_edges[stroke[0]].v1 : gp_edges[stroke[i - 1]].v2; + MVert *mv = &me->mvert[vertex_index]; + + /* Add segment. */ + bGPDspoint *pt = &gps_stroke->points[i]; + normal_short_to_float_v3(fpt, mv->no); + mul_v3_v3fl(fpt, fpt, offset); + add_v3_v3v3(&pt->x, mv->co, fpt); mul_m4_v3(matrix, &pt->x); pt->pressure = 1.0f; pt->strength = 1.0f; + + /* Copy vertex groups from mesh. Assuming they already exist in the same order. */ + if (use_vgroups && me_dvert) { + MDeformVert *dv = &gps_stroke->dvert[i]; + MDeformVert *src_dv = &me_dvert[vertex_index]; + dv->totweight = src_dv->totweight; + dv->dw = (MDeformWeight *)MEM_callocN(sizeof(MDeformWeight) * dv->totweight, + "gp_stroke_dverts_dw"); + for (int j = 0; j < dv->totweight; j++) { + dv->dw[j].weight = src_dv->dw[j].weight; + dv->dw[j].def_nr = src_dv->dw[j].def_nr; + } + } } BKE_gpencil_stroke_geometry_update(gpd, gps_stroke); @@ -2488,7 +2487,8 @@ bool BKE_gpencil_convert_mesh(Main *bmain, const float matrix[4][4], const int frame_offset, const bool use_seams, - const bool use_faces) + const bool use_faces, + const bool use_vgroups) { if (ELEM(nullptr, ob_gp, ob_mesh) || (ob_gp->type != OB_GPENCIL) || (ob_gp->data == nullptr)) { return false; @@ -2505,83 +2505,105 @@ bool BKE_gpencil_convert_mesh(Main *bmain, char element_name[200]; /* Need at least an edge. */ - if (me_eval->totvert < 2) { + if (me_eval->totedge < 1) { return false; } + /* Create matching vertex groups. */ + BKE_defgroup_copy_list(&gpd->vertex_group_names, &me_eval->vertex_group_names); + gpd->vertex_group_active_index = me_eval->vertex_group_active_index; + const float default_colors[2][4] = {{0.0f, 0.0f, 0.0f, 1.0f}, {0.7f, 0.7f, 0.7f, 1.0f}}; - /* Create stroke material. */ + /* Lookup existing stroke material on gp object. */ make_element_name(ob_mesh->id.name + 2, "Stroke", 64, element_name); int stroke_mat_index = gpencil_material_find_index_by_name(ob_gp, element_name); if (stroke_mat_index == -1) { + /* Create new default stroke material as there is no existing material. */ gpencil_add_material( bmain, ob_gp, element_name, default_colors[0], true, false, &stroke_mat_index); } /* Export faces as filled strokes. */ - if (use_faces) { - + if (use_faces && mpoly_len > 0) { /* Read all polygons and create fill for each. */ - if (mpoly_len > 0) { - make_element_name(ob_mesh->id.name + 2, "Fills", 128, element_name); - /* Create Layer and Frame. */ - bGPDlayer *gpl_fill = BKE_gpencil_layer_named_get(gpd, element_name); - if (gpl_fill == nullptr) { - gpl_fill = BKE_gpencil_layer_addnew(gpd, element_name, true, false); - } - bGPDframe *gpf_fill = BKE_gpencil_layer_frame_get( - gpl_fill, CFRA + frame_offset, GP_GETFRAME_ADD_NEW); - int i; - for (i = 0; i < mpoly_len; i++) { - const MPoly *mp = &mpoly[i]; - - /* Find material. */ - int mat_idx = 0; - Material *ma = BKE_object_material_get(ob_mesh, mp->mat_nr + 1); - make_element_name( - ob_mesh->id.name + 2, (ma != nullptr) ? ma->id.name + 2 : "Fill", 64, element_name); - mat_idx = BKE_gpencil_material_find_index_by_name_prefix(ob_gp, element_name); - if (mat_idx == -1) { - float color[4]; - if (ma != nullptr) { - copy_v3_v3(color, &ma->r); - color[3] = 1.0f; - } - else { - copy_v4_v4(color, default_colors[1]); - } - gpencil_add_material(bmain, ob_gp, element_name, color, false, true, &mat_idx); + make_element_name(ob_mesh->id.name + 2, "Fills", 128, element_name); + /* Create Layer and Frame. */ + bGPDlayer *gpl_fill = BKE_gpencil_layer_named_get(gpd, element_name); + if (gpl_fill == nullptr) { + gpl_fill = BKE_gpencil_layer_addnew(gpd, element_name, true, false); + } + bGPDframe *gpf_fill = BKE_gpencil_layer_frame_get( + gpl_fill, CFRA + frame_offset, GP_GETFRAME_ADD_NEW); + int i; + for (i = 0; i < mpoly_len; i++) { + const MPoly *mp = &mpoly[i]; + + /* Find material. */ + int mat_idx = 0; + Material *ma = BKE_object_material_get(ob_mesh, mp->mat_nr + 1); + make_element_name( + ob_mesh->id.name + 2, (ma != nullptr) ? ma->id.name + 2 : "Fill", 64, element_name); + mat_idx = BKE_gpencil_material_find_index_by_name_prefix(ob_gp, element_name); + if (mat_idx == -1) { + float color[4]; + if (ma != nullptr) { + copy_v3_v3(color, &ma->r); + color[3] = 1.0f; } + else { + copy_v4_v4(color, default_colors[1]); + } + gpencil_add_material(bmain, ob_gp, element_name, color, false, true, &mat_idx); + } - bGPDstroke *gps_fill = BKE_gpencil_stroke_add(gpf_fill, mat_idx, mp->totloop, 10, false); - gps_fill->flag |= GP_STROKE_CYCLIC; + bGPDstroke *gps_fill = BKE_gpencil_stroke_add(gpf_fill, mat_idx, mp->totloop, 10, false); + gps_fill->flag |= GP_STROKE_CYCLIC; - /* Add points to strokes. */ - for (int j = 0; j < mp->totloop; j++) { - const MLoop *ml = &mloop[mp->loopstart + j]; - const MVert *mv = &me_eval->mvert[ml->v]; + /* Create dvert data. */ + MDeformVert *me_dvert = me_eval->dvert; + if (use_vgroups && me_dvert) { + gps_fill->dvert = (MDeformVert *)MEM_callocN(sizeof(MDeformVert) * mp->totloop, + "gp_fill_dverts"); + } - bGPDspoint *pt = &gps_fill->points[j]; - copy_v3_v3(&pt->x, mv->co); - mul_m4_v3(matrix, &pt->x); - pt->pressure = 1.0f; - pt->strength = 1.0f; - } - /* If has only 3 points subdivide. */ - if (mp->totloop == 3) { - BKE_gpencil_stroke_subdivide(gpd, gps_fill, 1, GP_SUBDIV_SIMPLE); + /* Add points to strokes. */ + for (int j = 0; j < mp->totloop; j++) { + const MLoop *ml = &mloop[mp->loopstart + j]; + const MVert *mv = &me_eval->mvert[ml->v]; + + bGPDspoint *pt = &gps_fill->points[j]; + copy_v3_v3(&pt->x, mv->co); + mul_m4_v3(matrix, &pt->x); + pt->pressure = 1.0f; + pt->strength = 1.0f; + + /* Copy vertex groups from mesh. Assuming they already exist in the same order. */ + if (use_vgroups && me_dvert) { + MDeformVert *dv = &gps_fill->dvert[j]; + MDeformVert *src_dv = &me_dvert[ml->v]; + dv->totweight = src_dv->totweight; + dv->dw = (MDeformWeight *)MEM_callocN(sizeof(MDeformWeight) * dv->totweight, + "gp_fill_dverts_dw"); + for (int k = 0; k < dv->totweight; k++) { + dv->dw[k].weight = src_dv->dw[k].weight; + dv->dw[k].def_nr = src_dv->dw[k].def_nr; + } } - - BKE_gpencil_stroke_geometry_update(gpd, gps_fill); } + /* If has only 3 points subdivide. */ + if (mp->totloop == 3) { + BKE_gpencil_stroke_subdivide(gpd, gps_fill, 1, GP_SUBDIV_SIMPLE); + } + + BKE_gpencil_stroke_geometry_update(gpd, gps_fill); } } /* Create stroke from edges. */ - make_element_name(ob_mesh->id.name + 2, "Lines", 128, element_name); /* Create Layer and Frame. */ + make_element_name(ob_mesh->id.name + 2, "Lines", 128, element_name); bGPDlayer *gpl_stroke = BKE_gpencil_layer_named_get(gpd, element_name); if (gpl_stroke == nullptr) { gpl_stroke = BKE_gpencil_layer_addnew(gpd, element_name, true, false); @@ -2589,8 +2611,16 @@ bool BKE_gpencil_convert_mesh(Main *bmain, bGPDframe *gpf_stroke = BKE_gpencil_layer_frame_get( gpl_stroke, CFRA + frame_offset, GP_GETFRAME_ADD_NEW); - gpencil_generate_edgeloops( - ob_eval, gpd, gpf_stroke, stroke_mat_index, angle, thickness, offset, matrix, use_seams); + gpencil_generate_edgeloops(ob_eval, + gpd, + gpf_stroke, + stroke_mat_index, + angle, + thickness, + offset, + matrix, + use_seams, + use_vgroups); /* Tag for recalculation */ DEG_id_tag_update(&gpd->id, ID_RECALC_GEOMETRY | ID_RECALC_COPY_ON_WRITE); diff --git a/source/blender/editors/gpencil/gpencil_mesh.c b/source/blender/editors/gpencil/gpencil_mesh.c index 1882285a230..0939d53736b 100644 --- a/source/blender/editors/gpencil/gpencil_mesh.c +++ b/source/blender/editors/gpencil/gpencil_mesh.c @@ -316,7 +316,8 @@ static int gpencil_bake_mesh_animation_exec(bContext *C, wmOperator *op) ob_eval->obmat, frame_offset, use_seams, - use_faces); + use_faces, + true); /* Reproject all un-tagged created strokes. */ if (project_type != GP_REPROJECT_KEEP) { diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index f98f3242163..12b52907057 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -2844,7 +2844,8 @@ static int object_convert_exec(bContext *C, wmOperator *op) matrix, 0, use_seams, - use_faces); + use_faces, + true); /* Remove unused materials. */ int actcol = ob_gpencil->actcol; diff --git a/source/blender/editors/transform/transform_convert_graph.c b/source/blender/editors/transform/transform_convert_graph.c index 111f81ff87b..a6cbbb299ac 100644 --- a/source/blender/editors/transform/transform_convert_graph.c +++ b/source/blender/editors/transform/transform_convert_graph.c @@ -41,6 +41,7 @@ #include "transform.h" #include "transform_convert.h" +#include "transform_mode.h" typedef struct TransDataGraph { float unit_scale; @@ -656,7 +657,6 @@ static bool fcu_test_selected(FCurve *fcu) */ static void flushTransGraphData(TransInfo *t) { - SpaceGraph *sipo = (SpaceGraph *)t->area->spacedata.first; TransData *td; TransData2D *td2d; TransDataGraph *tdg; @@ -680,7 +680,8 @@ static void flushTransGraphData(TransInfo *t) * - Don't do this when canceling, or else these changes won't go away. */ if ((t->state != TRANS_CANCEL) && (td->flag & TD_NOTIMESNAP) == 0) { - switch (sipo->autosnap) { + const short autosnap = getAnimEdit_SnapMode(t); + switch (autosnap) { case SACTSNAP_FRAME: /* snap to nearest frame */ td2d->loc[0] = floor((double)td2d->loc[0] + 0.5); break; @@ -714,9 +715,9 @@ static void flushTransGraphData(TransInfo *t) * * \note We don't do this when canceling transforms, or else these changes don't go away. */ - if ((t->state != TRANS_CANCEL) && (td->flag & TD_NOTIMESNAP) == 0 && - ELEM(sipo->autosnap, SACTSNAP_STEP, SACTSNAP_TSTEP)) { - switch (sipo->autosnap) { + if ((t->state != TRANS_CANCEL) && (td->flag & TD_NOTIMESNAP) == 0) { + const short autosnap = getAnimEdit_SnapMode(t); + switch (autosnap) { case SACTSNAP_STEP: /* frame step */ td2d->loc2d[0] = floor((double)td2d->loc[0] + 0.5); td->loc[0] = floor((double)td->loc[0] + 0.5); diff --git a/source/blender/editors/transform/transform_convert_nla.c b/source/blender/editors/transform/transform_convert_nla.c index b55005673d9..f96f2e93bbc 100644 --- a/source/blender/editors/transform/transform_convert_nla.c +++ b/source/blender/editors/transform/transform_convert_nla.c @@ -42,6 +42,7 @@ #include "transform.h" #include "transform_convert.h" +#include "transform_mode.h" /** Used for NLA transform (stored in #TransData.extra pointer). */ typedef struct TransDataNla { @@ -411,7 +412,8 @@ void recalcData_nla(TransInfo *t) * NOTE: only do this when transform is still running, or we can't restore */ if (t->state != TRANS_CANCEL) { - switch (snla->autosnap) { + const short autosnap = getAnimEdit_SnapMode(t); + switch (autosnap) { case SACTSNAP_FRAME: /* snap to nearest frame */ case SACTSNAP_STEP: /* frame step - this is basically the same, * since we don't have any remapping going on */ diff --git a/source/blender/editors/util/CMakeLists.txt b/source/blender/editors/util/CMakeLists.txt index 54ec6b22e70..b396e348845 100644 --- a/source/blender/editors/util/CMakeLists.txt +++ b/source/blender/editors/util/CMakeLists.txt @@ -64,6 +64,7 @@ set(SRC ../include/ED_info.h ../include/ED_keyframes_draw.h ../include/ED_keyframes_edit.h + ../include/ED_keyframes_keylist.h ../include/ED_keyframing.h ../include/ED_lattice.h ../include/ED_markers.h diff --git a/source/blender/makesrna/RNA_enum_items.h b/source/blender/makesrna/RNA_enum_items.h new file mode 100644 index 00000000000..c8f44262020 --- /dev/null +++ b/source/blender/makesrna/RNA_enum_items.h @@ -0,0 +1,240 @@ +/* + * This program is free software you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** \file + * \ingroup RNA + */ + +/* NOTE: this is included multiple times with different #defines for DEF_ENUM. */ + +/* use in cases where only dynamic types are used */ +DEF_ENUM(DummyRNA_NULL_items) +DEF_ENUM(DummyRNA_DEFAULT_items) + +/* all others should follow 'rna_enum_*_items' naming */ +DEF_ENUM(rna_enum_id_type_items) + +DEF_ENUM(rna_enum_object_mode_items) +DEF_ENUM(rna_enum_workspace_object_mode_items) +DEF_ENUM(rna_enum_object_empty_drawtype_items) +DEF_ENUM(rna_enum_object_gpencil_type_items) +DEF_ENUM(rna_enum_metaelem_type_items) + +DEF_ENUM(rna_enum_proportional_falloff_items) +DEF_ENUM(rna_enum_proportional_falloff_curve_only_items) +DEF_ENUM(rna_enum_snap_target_items) +DEF_ENUM(rna_enum_snap_element_items) +DEF_ENUM(rna_enum_snap_node_element_items) +DEF_ENUM(rna_enum_curve_fit_method_items) +DEF_ENUM(rna_enum_mesh_select_mode_items) +DEF_ENUM(rna_enum_mesh_select_mode_uv_items) +DEF_ENUM(rna_enum_mesh_delimit_mode_items) +DEF_ENUM(rna_enum_space_graph_mode_items) +DEF_ENUM(rna_enum_space_file_browse_mode_items) +DEF_ENUM(rna_enum_space_sequencer_view_type_items) +DEF_ENUM(rna_enum_space_type_items) +DEF_ENUM(rna_enum_space_image_mode_items) +DEF_ENUM(rna_enum_space_image_mode_all_items) +DEF_ENUM(rna_enum_space_action_mode_items) +DEF_ENUM(rna_enum_fileselect_params_sort_items) +DEF_ENUM(rna_enum_region_type_items) +DEF_ENUM(rna_enum_object_modifier_type_items) +DEF_ENUM(rna_enum_constraint_type_items) +DEF_ENUM(rna_enum_boidrule_type_items) +DEF_ENUM(rna_enum_sequence_modifier_type_items) +DEF_ENUM(rna_enum_object_greasepencil_modifier_type_items) +DEF_ENUM(rna_enum_object_shaderfx_type_items) + +DEF_ENUM(rna_enum_modifier_triangulate_quad_method_items) +DEF_ENUM(rna_enum_modifier_triangulate_ngon_method_items) +DEF_ENUM(rna_enum_modifier_shrinkwrap_mode_items) + +DEF_ENUM(rna_enum_image_type_items) +DEF_ENUM(rna_enum_image_color_mode_items) +DEF_ENUM(rna_enum_image_color_depth_items) +DEF_ENUM(rna_enum_image_generated_type_items) + +DEF_ENUM(rna_enum_normal_space_items) +DEF_ENUM(rna_enum_normal_swizzle_items) +DEF_ENUM(rna_enum_bake_save_mode_items) +DEF_ENUM(rna_enum_bake_target_items) + +DEF_ENUM(rna_enum_views_format_items) +DEF_ENUM(rna_enum_views_format_multilayer_items) +DEF_ENUM(rna_enum_views_format_multiview_items) +DEF_ENUM(rna_enum_stereo3d_display_items) +DEF_ENUM(rna_enum_stereo3d_anaglyph_type_items) +DEF_ENUM(rna_enum_stereo3d_interlace_type_items) + +#ifdef WITH_OPENEXR +DEF_ENUM(rna_enum_exr_codec_items) +#endif +DEF_ENUM(rna_enum_color_sets_items) + +DEF_ENUM(rna_enum_beztriple_keyframe_type_items) +DEF_ENUM(rna_enum_beztriple_interpolation_mode_items) +DEF_ENUM(rna_enum_beztriple_interpolation_easing_items) +DEF_ENUM(rna_enum_fcurve_auto_smoothing_items) +DEF_ENUM(rna_enum_keyframe_handle_type_items) +DEF_ENUM(rna_enum_driver_target_rotation_mode_items) + +DEF_ENUM(rna_enum_keyingset_path_grouping_items) +DEF_ENUM(rna_enum_keying_flag_items) +DEF_ENUM(rna_enum_keying_flag_items_api) + +DEF_ENUM(rna_enum_fmodifier_type_items) + +DEF_ENUM(rna_enum_motionpath_bake_location_items) + +DEF_ENUM(rna_enum_event_value_all_items) +DEF_ENUM(rna_enum_event_value_keymouse_items) +DEF_ENUM(rna_enum_event_value_tweak_items) + +DEF_ENUM(rna_enum_event_type_items) +DEF_ENUM(rna_enum_event_type_mask_items) + +DEF_ENUM(rna_enum_operator_type_flag_items) +DEF_ENUM(rna_enum_operator_return_items) +DEF_ENUM(rna_enum_operator_property_tags) + +DEF_ENUM(rna_enum_brush_sculpt_tool_items) +DEF_ENUM(rna_enum_brush_uv_sculpt_tool_items) +DEF_ENUM(rna_enum_brush_vertex_tool_items) +DEF_ENUM(rna_enum_brush_weight_tool_items) +DEF_ENUM(rna_enum_brush_gpencil_types_items) +DEF_ENUM(rna_enum_brush_gpencil_vertex_types_items) +DEF_ENUM(rna_enum_brush_gpencil_sculpt_types_items) +DEF_ENUM(rna_enum_brush_gpencil_weight_types_items) +DEF_ENUM(rna_enum_brush_image_tool_items) + +DEF_ENUM(rna_enum_axis_xy_items) +DEF_ENUM(rna_enum_axis_xyz_items) + +DEF_ENUM(rna_enum_axis_flag_xyz_items) + +DEF_ENUM(rna_enum_symmetrize_direction_items) + +DEF_ENUM(rna_enum_texture_type_items) + +DEF_ENUM(rna_enum_light_type_items) + +DEF_ENUM(rna_enum_lightprobes_type_items) + +DEF_ENUM(rna_enum_unpack_method_items) + +DEF_ENUM(rna_enum_object_type_items) +DEF_ENUM(rna_enum_object_rotation_mode_items) + +DEF_ENUM(rna_enum_object_type_curve_items) + +DEF_ENUM(rna_enum_rigidbody_object_type_items) +DEF_ENUM(rna_enum_rigidbody_object_shape_items) +DEF_ENUM(rna_enum_rigidbody_constraint_type_items) + +DEF_ENUM(rna_enum_object_axis_items) + +DEF_ENUM(rna_enum_render_pass_type_items) + +DEF_ENUM(rna_enum_bake_pass_type_items) +DEF_ENUM(rna_enum_bake_pass_filter_type_items) + +DEF_ENUM(rna_enum_keymap_propvalue_items) + +DEF_ENUM(rna_enum_operator_context_items) + +DEF_ENUM(rna_enum_wm_report_items) + +DEF_ENUM(rna_enum_property_type_items) +DEF_ENUM(rna_enum_property_subtype_items) +DEF_ENUM(rna_enum_property_unit_items) + +DEF_ENUM(rna_enum_shading_type_items) + +DEF_ENUM(rna_enum_navigation_mode_items) + +DEF_ENUM(rna_enum_node_socket_in_out_items) + +DEF_ENUM(rna_enum_node_math_items) +DEF_ENUM(rna_enum_mapping_type_items) +DEF_ENUM(rna_enum_node_vec_math_items) +DEF_ENUM(rna_enum_node_boolean_math_items) +DEF_ENUM(rna_enum_node_float_compare_items) +DEF_ENUM(rna_enum_node_filter_items) +DEF_ENUM(rna_enum_node_float_to_int_items) +DEF_ENUM(rna_enum_node_map_range_items) +DEF_ENUM(rna_enum_node_clamp_items) + +DEF_ENUM(rna_enum_ramp_blend_items) + +DEF_ENUM(rna_enum_prop_dynamicpaint_type_items) + +DEF_ENUM(rna_enum_clip_editor_mode_items) + +DEF_ENUM(rna_enum_icon_items) +DEF_ENUM(rna_enum_uilist_layout_type_items) + +DEF_ENUM(rna_enum_linestyle_color_modifier_type_items) +DEF_ENUM(rna_enum_linestyle_alpha_modifier_type_items) +DEF_ENUM(rna_enum_linestyle_thickness_modifier_type_items) +DEF_ENUM(rna_enum_linestyle_geometry_modifier_type_items) + +DEF_ENUM(rna_enum_window_cursor_items) + +DEF_ENUM(rna_enum_dt_method_vertex_items) +DEF_ENUM(rna_enum_dt_method_edge_items) +DEF_ENUM(rna_enum_dt_method_loop_items) +DEF_ENUM(rna_enum_dt_method_poly_items) +DEF_ENUM(rna_enum_dt_mix_mode_items) +DEF_ENUM(rna_enum_dt_layers_select_src_items) +DEF_ENUM(rna_enum_dt_layers_select_dst_items) + +DEF_ENUM(rna_enum_context_mode_items) + +DEF_ENUM(rna_enum_preference_section_items) + +DEF_ENUM(rna_enum_attribute_type_items) +DEF_ENUM(rna_enum_attribute_type_with_auto_items) +DEF_ENUM(rna_enum_attribute_domain_items) +DEF_ENUM(rna_enum_attribute_domain_with_auto_items) + +DEF_ENUM(rna_enum_collection_color_items) + +DEF_ENUM(rna_enum_subdivision_uv_smooth_items) +DEF_ENUM(rna_enum_subdivision_boundary_smooth_items) + +DEF_ENUM(rna_enum_transform_orientation_items) + +/* Not available to RNA pre-processing (`makrsrna`). + * Defined in editors for example. */ +#ifndef RNA_MAKESRNA + +DEF_ENUM(rna_enum_particle_edit_hair_brush_items) +DEF_ENUM(rna_enum_particle_edit_disconnected_hair_brush_items) + +DEF_ENUM(rna_enum_keyframe_paste_offset_items) +DEF_ENUM(rna_enum_keyframe_paste_merge_items) + +DEF_ENUM(rna_enum_transform_pivot_items_full) +DEF_ENUM(rna_enum_transform_mode_types) + +/* In the runtime part of RNA, could be removed from this section. */ +DEF_ENUM(rna_enum_nla_mode_extend_items) +DEF_ENUM(rna_enum_nla_mode_blend_items) +DEF_ENUM(rna_enum_keyblock_type_items) + +#endif + +#undef DEF_ENUM diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h index 7e3f279b251..d7520834287 100644 --- a/source/blender/makesrna/RNA_enum_types.h +++ b/source/blender/makesrna/RNA_enum_types.h @@ -32,221 +32,11 @@ struct bNodeTreeType; struct bNodeType; /* Types */ +#define DEF_ENUM(id) extern const EnumPropertyItem id[]; +#include "RNA_enum_items.h" -/* use in cases where only dynamic types are used */ -extern const EnumPropertyItem DummyRNA_NULL_items[]; -extern const EnumPropertyItem DummyRNA_DEFAULT_items[]; - -/* all others should follow 'rna_enum_*_items' naming */ -extern const EnumPropertyItem rna_enum_id_type_items[]; - -extern const EnumPropertyItem rna_enum_object_mode_items[]; -extern const EnumPropertyItem rna_enum_workspace_object_mode_items[]; -extern const EnumPropertyItem rna_enum_object_empty_drawtype_items[]; -extern const EnumPropertyItem rna_enum_object_gpencil_type_items[]; -extern const EnumPropertyItem rna_enum_metaelem_type_items[]; - -extern const EnumPropertyItem rna_enum_proportional_falloff_items[]; -extern const EnumPropertyItem rna_enum_proportional_falloff_curve_only_items[]; -extern const EnumPropertyItem rna_enum_snap_target_items[]; -extern const EnumPropertyItem rna_enum_snap_element_items[]; -extern const EnumPropertyItem rna_enum_snap_node_element_items[]; -extern const EnumPropertyItem rna_enum_curve_fit_method_items[]; -extern const EnumPropertyItem rna_enum_mesh_select_mode_items[]; -extern const EnumPropertyItem rna_enum_mesh_select_mode_uv_items[]; -extern const EnumPropertyItem rna_enum_mesh_delimit_mode_items[]; -extern const EnumPropertyItem rna_enum_space_graph_mode_items[]; -extern const EnumPropertyItem rna_enum_space_file_browse_mode_items[]; -extern const EnumPropertyItem rna_enum_space_sequencer_view_type_items[]; -extern const EnumPropertyItem rna_enum_space_type_items[]; -extern const EnumPropertyItem rna_enum_space_image_mode_items[]; -extern const EnumPropertyItem rna_enum_space_image_mode_all_items[]; -extern const EnumPropertyItem rna_enum_space_action_mode_items[]; -extern const EnumPropertyItem rna_enum_fileselect_params_sort_items[]; -extern const EnumPropertyItem rna_enum_region_type_items[]; -extern const EnumPropertyItem rna_enum_object_modifier_type_items[]; -extern const EnumPropertyItem rna_enum_constraint_type_items[]; -extern const EnumPropertyItem rna_enum_boidrule_type_items[]; -extern const EnumPropertyItem rna_enum_sequence_modifier_type_items[]; -extern const EnumPropertyItem rna_enum_object_greasepencil_modifier_type_items[]; -extern const EnumPropertyItem rna_enum_object_shaderfx_type_items[]; - -extern const EnumPropertyItem rna_enum_modifier_triangulate_quad_method_items[]; -extern const EnumPropertyItem rna_enum_modifier_triangulate_ngon_method_items[]; -extern const EnumPropertyItem rna_enum_modifier_shrinkwrap_mode_items[]; - -extern const EnumPropertyItem rna_enum_image_type_items[]; -extern const EnumPropertyItem rna_enum_image_color_mode_items[]; -extern const EnumPropertyItem rna_enum_image_color_depth_items[]; -extern const EnumPropertyItem rna_enum_image_generated_type_items[]; - -extern const EnumPropertyItem rna_enum_normal_space_items[]; -extern const EnumPropertyItem rna_enum_normal_swizzle_items[]; -extern const EnumPropertyItem rna_enum_bake_save_mode_items[]; -extern const EnumPropertyItem rna_enum_bake_target_items[]; - -extern const EnumPropertyItem rna_enum_views_format_items[]; -extern const EnumPropertyItem rna_enum_views_format_multilayer_items[]; -extern const EnumPropertyItem rna_enum_views_format_multiview_items[]; -extern const EnumPropertyItem rna_enum_stereo3d_display_items[]; -extern const EnumPropertyItem rna_enum_stereo3d_anaglyph_type_items[]; -extern const EnumPropertyItem rna_enum_stereo3d_interlace_type_items[]; - -extern const EnumPropertyItem rna_enum_exr_codec_items[]; -extern const EnumPropertyItem rna_enum_color_sets_items[]; - -extern const EnumPropertyItem rna_enum_beztriple_keyframe_type_items[]; -extern const EnumPropertyItem rna_enum_beztriple_interpolation_mode_items[]; -extern const EnumPropertyItem rna_enum_beztriple_interpolation_easing_items[]; -extern const EnumPropertyItem rna_enum_fcurve_auto_smoothing_items[]; -extern const EnumPropertyItem rna_enum_keyframe_handle_type_items[]; -extern const EnumPropertyItem rna_enum_driver_target_rotation_mode_items[]; - -extern const EnumPropertyItem rna_enum_keyblock_type_items[]; - -extern const EnumPropertyItem rna_enum_keyingset_path_grouping_items[]; -extern const EnumPropertyItem rna_enum_keying_flag_items[]; -extern const EnumPropertyItem rna_enum_keying_flag_items_api[]; - -extern const EnumPropertyItem rna_enum_keyframe_paste_offset_items[]; -extern const EnumPropertyItem rna_enum_keyframe_paste_merge_items[]; - -extern const EnumPropertyItem rna_enum_fmodifier_type_items[]; - -extern const EnumPropertyItem rna_enum_nla_mode_extend_items[]; -extern const EnumPropertyItem rna_enum_nla_mode_blend_items[]; - -extern const EnumPropertyItem rna_enum_motionpath_bake_location_items[]; - -extern const EnumPropertyItem rna_enum_event_value_all_items[]; -extern const EnumPropertyItem rna_enum_event_value_keymouse_items[]; -extern const EnumPropertyItem rna_enum_event_value_tweak_items[]; - -extern const EnumPropertyItem rna_enum_event_type_items[]; -extern const EnumPropertyItem rna_enum_event_type_mask_items[]; - -extern const EnumPropertyItem rna_enum_operator_type_flag_items[]; -extern const EnumPropertyItem rna_enum_operator_return_items[]; -extern const EnumPropertyItem rna_enum_operator_property_tags[]; - -extern const EnumPropertyItem rna_enum_brush_sculpt_tool_items[]; -extern const EnumPropertyItem rna_enum_brush_uv_sculpt_tool_items[]; -extern const EnumPropertyItem rna_enum_brush_vertex_tool_items[]; -extern const EnumPropertyItem rna_enum_brush_weight_tool_items[]; -extern const EnumPropertyItem rna_enum_brush_gpencil_types_items[]; -extern const EnumPropertyItem rna_enum_brush_gpencil_vertex_types_items[]; -extern const EnumPropertyItem rna_enum_brush_gpencil_sculpt_types_items[]; -extern const EnumPropertyItem rna_enum_brush_gpencil_weight_types_items[]; -extern const EnumPropertyItem rna_enum_brush_image_tool_items[]; - -extern const EnumPropertyItem rna_enum_particle_edit_hair_brush_items[]; -extern const EnumPropertyItem rna_enum_particle_edit_disconnected_hair_brush_items[]; - -extern const EnumPropertyItem rna_enum_uv_sculpt_tool_items[]; - -extern const EnumPropertyItem rna_enum_axis_xy_items[]; -extern const EnumPropertyItem rna_enum_axis_xyz_items[]; - -extern const EnumPropertyItem rna_enum_axis_flag_xyz_items[]; - -extern const EnumPropertyItem rna_enum_symmetrize_direction_items[]; - -extern const EnumPropertyItem rna_enum_texture_type_items[]; - -extern const EnumPropertyItem rna_enum_light_type_items[]; - -extern const EnumPropertyItem rna_enum_lightprobes_type_items[]; - -extern const EnumPropertyItem rna_enum_unpack_method_items[]; - -extern const EnumPropertyItem rna_enum_object_type_items[]; -extern const EnumPropertyItem rna_enum_object_rotation_mode_items[]; - -extern const EnumPropertyItem rna_enum_object_type_curve_items[]; - -extern const EnumPropertyItem rna_enum_rigidbody_object_type_items[]; -extern const EnumPropertyItem rna_enum_rigidbody_object_shape_items[]; -extern const EnumPropertyItem rna_enum_rigidbody_constraint_type_items[]; - -extern const EnumPropertyItem rna_enum_object_axis_items[]; - -extern const EnumPropertyItem rna_enum_controller_type_items[]; - -extern const EnumPropertyItem rna_enum_render_pass_type_items[]; -extern const EnumPropertyItem rna_enum_render_pass_debug_type_items[]; - -extern const EnumPropertyItem rna_enum_bake_pass_type_items[]; -extern const EnumPropertyItem rna_enum_bake_pass_filter_type_items[]; - -extern const EnumPropertyItem rna_enum_keymap_propvalue_items[]; - -extern const EnumPropertyItem rna_enum_operator_context_items[]; - -extern const EnumPropertyItem rna_enum_wm_report_items[]; - -extern const EnumPropertyItem rna_enum_transform_pivot_items_full[]; -extern const EnumPropertyItem rna_enum_transform_orientation_items[]; -extern const EnumPropertyItem rna_enum_transform_mode_types[]; - -extern const EnumPropertyItem rna_enum_property_type_items[]; -extern const EnumPropertyItem rna_enum_property_subtype_items[]; -extern const EnumPropertyItem rna_enum_property_unit_items[]; - -extern const EnumPropertyItem rna_enum_shading_type_items[]; - -extern const EnumPropertyItem rna_enum_navigation_mode_items[]; - -extern const EnumPropertyItem rna_enum_node_socket_in_out_items[]; - -extern const EnumPropertyItem rna_enum_node_math_items[]; -extern const EnumPropertyItem rna_enum_mapping_type_items[]; -extern const EnumPropertyItem rna_enum_node_vec_math_items[]; -extern const EnumPropertyItem rna_enum_node_boolean_math_items[]; -extern const EnumPropertyItem rna_enum_node_float_compare_items[]; -extern const EnumPropertyItem rna_enum_node_filter_items[]; -extern const EnumPropertyItem rna_enum_node_float_to_int_items[]; -extern const EnumPropertyItem rna_enum_node_map_range_items[]; -extern const EnumPropertyItem rna_enum_node_clamp_items[]; - -extern const EnumPropertyItem rna_enum_ramp_blend_items[]; - -extern const EnumPropertyItem rna_enum_prop_dynamicpaint_type_items[]; - -extern const EnumPropertyItem rna_enum_clip_editor_mode_items[]; - -extern const EnumPropertyItem rna_enum_icon_items[]; -extern const EnumPropertyItem rna_enum_uilist_layout_type_items[]; - -extern const EnumPropertyItem rna_enum_linestyle_color_modifier_type_items[]; -extern const EnumPropertyItem rna_enum_linestyle_alpha_modifier_type_items[]; -extern const EnumPropertyItem rna_enum_linestyle_thickness_modifier_type_items[]; -extern const EnumPropertyItem rna_enum_linestyle_geometry_modifier_type_items[]; - -extern const EnumPropertyItem rna_enum_window_cursor_items[]; - -extern const EnumPropertyItem rna_enum_dt_method_vertex_items[]; -extern const EnumPropertyItem rna_enum_dt_method_edge_items[]; -extern const EnumPropertyItem rna_enum_dt_method_loop_items[]; -extern const EnumPropertyItem rna_enum_dt_method_poly_items[]; -extern const EnumPropertyItem rna_enum_dt_mix_mode_items[]; -extern const EnumPropertyItem rna_enum_dt_layers_select_src_items[]; -extern const EnumPropertyItem rna_enum_dt_layers_select_dst_items[]; - -extern const EnumPropertyItem rna_enum_context_mode_items[]; - -extern const EnumPropertyItem rna_enum_curveprofile_preset_items[]; -extern const EnumPropertyItem rna_enum_preference_section_items[]; - -extern const EnumPropertyItem rna_enum_attribute_type_items[]; -extern const EnumPropertyItem rna_enum_attribute_type_with_auto_items[]; -extern const EnumPropertyItem rna_enum_attribute_domain_items[]; -extern const EnumPropertyItem rna_enum_attribute_domain_with_auto_items[]; extern const EnumPropertyItem *rna_enum_attribute_domain_itemf(struct ID *id, bool *r_free); -extern const EnumPropertyItem rna_enum_collection_color_items[]; - -extern const EnumPropertyItem rna_enum_subdivision_uv_smooth_items[]; -extern const EnumPropertyItem rna_enum_subdivision_boundary_smooth_items[]; /** * For ID filters (#FILTER_ID_AC, #FILTER_ID_AR, ...) an int isn't enough. This version allows 64 * bit integers. So can't use the regular #EnumPropertyItem. Would be nice if RNA supported this diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index 95b7b7e5406..7e6d0aea2ee 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -175,6 +175,7 @@ set(SRC_RNA_INC ../RNA_access.h ../RNA_define.h ../RNA_documentation.h + ../RNA_enum_items.h ../RNA_enum_types.h ../RNA_types.h ) diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 719b0f73a9d..36f19907080 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -582,6 +582,23 @@ static int rna_color_quantize(PropertyRNA *prop, PropertyDefRNA *dp) (IS_DNATYPE_FLOAT_COMPAT(dp->dnatype) == 0)); } +/** + * Return the identifier for an enum which is defined in "RNA_enum_items.h". + * + * Prevents expanding duplicate enums bloating the binary size. + */ +static const char *rna_enum_id_from_pointer(const EnumPropertyItem *item) +{ +#define RNA_MAKESRNA +#define DEF_ENUM(id) \ + if (item == id) { \ + return STRINGIFY(id); \ + } +#include "RNA_enum_items.h" +#undef RNA_MAKESRNA + return NULL; +} + static const char *rna_function_string(const void *func) { return (func) ? (const char *)func : "NULL"; @@ -3675,37 +3692,55 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr int i, defaultfound = 0, totflag = 0; if (eprop->item) { - fprintf(f, - "static const EnumPropertyItem rna_%s%s_%s_items[%d] = {\n\t", - srna->identifier, - strnest, - prop->identifier, - eprop->totitem + 1); - - for (i = 0; i < eprop->totitem; i++) { - fprintf(f, "{%d, ", eprop->item[i].value); - rna_print_c_string(f, eprop->item[i].identifier); - fprintf(f, ", "); - fprintf(f, "%d, ", eprop->item[i].icon); - rna_print_c_string(f, eprop->item[i].name); - fprintf(f, ", "); - rna_print_c_string(f, eprop->item[i].description); - fprintf(f, "},\n\t"); - - if (eprop->item[i].identifier[0]) { - if (prop->flag & PROP_ENUM_FLAG) { - totflag |= eprop->item[i].value; + /* Inline the enum if this is not a defined in "RNA_enum_items.h". */ + const char *item_global_id = rna_enum_id_from_pointer(eprop->item); + if (item_global_id == NULL) { + fprintf(f, + "static const EnumPropertyItem rna_%s%s_%s_items[%d] = {\n\t", + srna->identifier, + strnest, + prop->identifier, + eprop->totitem + 1); + + for (i = 0; i < eprop->totitem; i++) { + fprintf(f, "{%d, ", eprop->item[i].value); + rna_print_c_string(f, eprop->item[i].identifier); + fprintf(f, ", "); + fprintf(f, "%d, ", eprop->item[i].icon); + rna_print_c_string(f, eprop->item[i].name); + fprintf(f, ", "); + rna_print_c_string(f, eprop->item[i].description); + fprintf(f, "},\n\t"); + + if (eprop->item[i].identifier[0]) { + if (prop->flag & PROP_ENUM_FLAG) { + totflag |= eprop->item[i].value; + } + else { + if (eprop->defaultvalue == eprop->item[i].value) { + defaultfound = 1; + } + } } - else { - if (eprop->defaultvalue == eprop->item[i].value) { - defaultfound = 1; + } + + fprintf(f, "{0, NULL, 0, NULL, NULL}\n};\n\n"); + } + else { + for (i = 0; i < eprop->totitem; i++) { + if (eprop->item[i].identifier[0]) { + if (prop->flag & PROP_ENUM_FLAG) { + totflag |= eprop->item[i].value; + } + else { + if (eprop->defaultvalue == eprop->item[i].value) { + defaultfound = 1; + } } } } } - fprintf(f, "{0, NULL, 0, NULL, NULL}\n};\n\n"); - if (prop->flag & PROP_ENUM_FLAG) { if (eprop->defaultvalue & ~totflag) { CLOG_ERROR(&LOG, @@ -4047,7 +4082,13 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr rna_function_string(eprop->get_ex), rna_function_string(eprop->set_ex)); if (eprop->item) { - fprintf(f, "rna_%s%s_%s_items, ", srna->identifier, strnest, prop->identifier); + const char *item_global_id = rna_enum_id_from_pointer(eprop->item); + if (item_global_id != NULL) { + fprintf(f, "%s, ", item_global_id); + } + else { + fprintf(f, "rna_%s%s_%s_items, ", srna->identifier, strnest, prop->identifier); + } } else { fprintf(f, "NULL, "); |