Enable OpenSubdiv modifier by default
authorSergey Sharybin <sergey.vfx@gmail.com>
Mon, 26 Nov 2018 14:39:08 +0000 (15:39 +0100)
committerSergey Sharybin <sergey.vfx@gmail.com>
Mon, 26 Nov 2018 14:41:37 +0000 (15:41 +0100)
This commit makes it so that subsurf/multires modifiers will respect
the WITH_OPENSUBDIV option. The WITH_OPENSUBDIV_MODIFIER option is
now gone.

For artists it mean that subsurf modifier will behave same as it is
planned for 2.80. Multires will now support sculpting, but it has some
known limitations. Those will be worked on before the final release.

If OpenSubdiv is disabled, no subsurf/multires functionality will
present.

For the details see:

  https://wiki.blender.org/wiki/Reference/Release_Notes/2.80/Modeling#Subsurf.2FMultires

CMakeLists.txt
release/scripts/startup/bl_ui/properties_data_modifier.py
source/blender/blenkernel/CMakeLists.txt
source/blender/makesrna/intern/CMakeLists.txt
source/blender/makesrna/intern/rna_modifier.c
source/blender/modifiers/CMakeLists.txt
source/blender/modifiers/intern/MOD_multires.c
source/blender/modifiers/intern/MOD_subsurf.c

index d38c7d14eb98c2e449edd376bcd08e8e24298642..b8d044a5866640f6a08423ad2b3ca152144d06aa 100644 (file)
@@ -239,9 +239,6 @@ option(WITH_COMPOSITOR         "Enable the tile based nodal compositor" ON)
 
 option(WITH_OPENSUBDIV    "Enable OpenSubdiv for surface subdivision" _init_OPENSUBDIV)
 
-option(WITH_OPENSUBDIV_MODIFIER    "Use OpenSubdiv for CPU side of Subsurf/Multires modifiers" OFF)
-mark_as_advanced(WITH_OPENSUBDIV_MODIFIER)
-
 option(WITH_OPENVDB       "Enable features relying on OpenVDB" OFF)
 option(WITH_OPENVDB_BLOSC "Enable blosc compression for OpenVDB, only enable if OpenVDB was built with blosc support" OFF)
 option(WITH_OPENVDB_3_ABI_COMPATIBLE "Assume OpenVDB library has been compiled with version 3 ABI compatibility" OFF)
index 82685e15913600ace4e4214d63fcf6ff2b1b0005..7641851b183a30fbb27062e53409dc0a94bc524b 100644 (file)
@@ -644,8 +644,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
         col.prop(md, "levels", text="Preview")
         col.prop(md, "sculpt_levels", text="Sculpt")
         col.prop(md, "render_levels", text="Render")
-        if hasattr(md, "quality"):
-            col.prop(md, "quality")
+        col.prop(md, "quality")
 
         col = split.column()
 
@@ -1023,8 +1022,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
             col.label(text="Subdivisions:")
             col.prop(md, "levels", text="View")
             col.prop(md, "render_levels", text="Render")
-            if hasattr(md, "quality"):
-                col.prop(md, "quality")
+            col.prop(md, "quality")
 
         col = split.column()
         col.label(text="Options:")
index 7d09374c99ea568ed7343d0efc7d96e4485f8cdd..be06bb586ef5550ecaca00c94447803533d71151 100644 (file)
@@ -548,9 +548,6 @@ if(WITH_OPENSUBDIV)
        list(APPEND INC_SYS
                ${OPENSUBDIV_INCLUDE_DIRS}
        )
-       if(WITH_OPENSUBDIV_MODIFIER)
-               add_definitions(-DWITH_OPENSUBDIV_MODIFIER)
-       endif()
 endif()
 
 if(WITH_OPENVDB)
index a795b4c6caeefeca3c22e236871055e14a7e82d7..28fe276cb98b6924c07d744e3da207ec9eab76c8 100644 (file)
@@ -305,10 +305,6 @@ if(WITH_OPENSUBDIV)
        add_definitions(-DWITH_OPENSUBDIV)
 endif()
 
-if(WITH_OPENSUBDIV_MODIFIER)
-       add_definitions(-DWITH_OPENSUBDIV_MODIFIER)
-endif()
-
 if(WITH_OPENVDB)
        add_definitions(-DWITH_OPENVDB)
 
index 2a7bb6c15338c0d13944ed2c9f5ecc2edce6c3e5..aa35f6e3278adff86cf3240d0761928e6845f40a 100644 (file)
@@ -1228,14 +1228,12 @@ static PropertyRNA *rna_def_property_subdivision_common(StructRNA *srna, const c
        RNA_def_property_ui_text(prop, "UV Smooth", "Controls how smoothing is applied to UVs");
        RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
-#ifdef WITH_OPENSUBDIV_MODIFIER
        prop = RNA_def_property(srna, "quality", PROP_INT, PROP_UNSIGNED);
        RNA_def_property_int_sdna(prop, NULL, "quality");
        RNA_def_property_range(prop, 1, 10);
        RNA_def_property_ui_range(prop, 1, 6, 1, -1);
        RNA_def_property_ui_text(prop, "Quality", "Accuracy of vertex positions, lower value is faster but less precise");
        RNA_def_property_update(prop, 0, "rna_Modifier_update");
-#endif
 
        prop = RNA_def_property(srna, "subdivision_type", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, type);
index 522e15be85675a561f0bc9fadd8c7e8dee1ae3cc..e914100249b9ad475aa303f027d8320da50c3feb 100644 (file)
@@ -144,10 +144,6 @@ if(WITH_INTERNATIONAL)
        add_definitions(-DWITH_INTERNATIONAL)
 endif()
 
-if(WITH_OPENSUBDIV_MODIFIER)
-       add_definitions(-DWITH_OPENSUBDIV_MODIFIER)
-endif()
-
 # So we can have special tricks in modifier system.
 add_definitions(${GL_DEFINITIONS})
 
index 73fa7aa0e0d0f5d9998e214a2692b8eb042cb689..fc8a376d2d7bce6cb41f68900655e87a57f97809 100644 (file)
@@ -67,91 +67,6 @@ static void initData(ModifierData *md)
        mmd->quality = 3;
 }
 
-#ifndef WITH_OPENSUBDIV_MODIFIER
-
-static DerivedMesh *applyModifier_DM(
-        ModifierData *md, const ModifierEvalContext *ctx,
-        DerivedMesh *dm)
-{
-       MultiresModifierData *mmd = (MultiresModifierData *)md;
-       struct Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph);
-       DerivedMesh *result;
-       Mesh *me = (Mesh *)ctx->object->data;
-       const bool useRenderParams = (ctx->flag & MOD_APPLY_RENDER) != 0;
-       const bool ignore_simplify = (ctx->flag & MOD_APPLY_IGNORE_SIMPLIFY) != 0;
-       MultiresFlags flags = 0;
-       const bool has_mask = CustomData_has_layer(&me->ldata, CD_GRID_PAINT_MASK);
-
-       if (mmd->totlvl) {
-               if (!CustomData_get_layer(&me->ldata, CD_MDISPS)) {
-                       /* multires always needs a displacement layer */
-                       CustomData_add_layer(&me->ldata, CD_MDISPS, CD_CALLOC, NULL, me->totloop);
-               }
-       }
-
-       if (has_mask)
-               flags |= MULTIRES_ALLOC_PAINT_MASK;
-
-       if (useRenderParams)
-               flags |= MULTIRES_USE_RENDER_PARAMS;
-
-       if (ignore_simplify)
-               flags |= MULTIRES_IGNORE_SIMPLIFY;
-
-       result = multires_make_derived_from_derived(dm, mmd, scene, ctx->object, flags);
-
-       if (result == dm)
-               return dm;
-
-       if (useRenderParams || !(ctx->flag & MOD_APPLY_USECACHE)) {
-               DerivedMesh *cddm;
-
-               cddm = CDDM_copy(result);
-
-               /* copy hidden/masks to vertices */
-               if (!useRenderParams) {
-                       struct MDisps *mdisps;
-                       struct GridPaintMask *grid_paint_mask;
-
-                       mdisps = CustomData_get_layer(&me->ldata, CD_MDISPS);
-                       grid_paint_mask = CustomData_get_layer(&me->ldata, CD_GRID_PAINT_MASK);
-
-                       if (mdisps) {
-                               subsurf_copy_grid_hidden(result, me->mpoly,
-                                                        cddm->getVertArray(cddm),
-                                                        mdisps);
-
-                               BKE_mesh_flush_hidden_from_verts_ex(cddm->getVertArray(cddm),
-                                                                   cddm->getLoopArray(cddm),
-                                                                   cddm->getEdgeArray(cddm),
-                                                                   cddm->getNumEdges(cddm),
-                                                                   cddm->getPolyArray(cddm),
-                                                                   cddm->getNumPolys(cddm));
-                       }
-                       if (grid_paint_mask) {
-                               float *paint_mask = CustomData_add_layer(&cddm->vertData,
-                                                                        CD_PAINT_MASK,
-                                                                        CD_CALLOC, NULL,
-                                                                        cddm->getNumVerts(cddm));
-
-                               subsurf_copy_grid_paint_mask(result, me->mpoly,
-                                                            paint_mask, grid_paint_mask);
-                       }
-               }
-
-               result->release(result);
-               result = cddm;
-       }
-
-       return result;
-}
-
-applyModifier_DM_wrapper(applyModifier, applyModifier_DM)
-
-#endif
-
-#ifdef WITH_OPENSUBDIV_MODIFIER
-
 /* Subdivide into fully qualified mesh. */
 
 static Mesh *multires_as_mesh(MultiresModifierData *mmd,
@@ -211,9 +126,9 @@ static Mesh *multires_as_ccg(MultiresModifierData *mmd,
        return result;
 }
 
-static Mesh *applyModifier_subdiv(ModifierData *md,
-                                  const ModifierEvalContext *ctx,
-                                  Mesh *mesh)
+static Mesh *applyModifier(ModifierData *md,
+                           const ModifierEvalContext *ctx,
+                           Mesh *mesh)
 {
        Mesh *result = mesh;
        MultiresModifierData *mmd = (MultiresModifierData *)md;
@@ -247,7 +162,6 @@ static Mesh *applyModifier_subdiv(ModifierData *md,
        }
        return result;
 }
-#endif
 
 ModifierTypeInfo modifierType_Multires = {
        /* name */              "Multires",
@@ -270,11 +184,7 @@ ModifierTypeInfo modifierType_Multires = {
        /* deformMatrices */    NULL,
        /* deformVertsEM */     NULL,
        /* deformMatricesEM */  NULL,
-#ifdef WITH_OPENSUBDIV_MODIFIER
-       /* applyModifier */     applyModifier_subdiv,
-#else
        /* applyModifier */     applyModifier,
-#endif
 
        /* initData */          initData,
        /* requiredDataMask */  NULL,
index dee9089d7d3cad5bfb624978d4e0606ff1a7e20f..9c6bff6b2919efd09aa09eefa966dda41b1fde4d 100644 (file)
@@ -99,47 +99,6 @@ static bool isDisabled(const Scene *scene, ModifierData *md, bool useRenderParam
        return get_render_subsurf_level(&scene->r, levels, useRenderParams != 0) == 0;
 }
 
-#ifndef WITH_OPENSUBDIV_MODIFIER
-
-static DerivedMesh *applyModifier_DM(
-        ModifierData *md, const ModifierEvalContext *ctx,
-        DerivedMesh *derivedData)
-{
-       SubsurfModifierData *smd = (SubsurfModifierData *) md;
-       struct Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph);
-       SubsurfFlags subsurf_flags = 0;
-       DerivedMesh *result;
-       const bool useRenderParams = (ctx->flag & MOD_APPLY_RENDER) != 0;
-       const bool isFinalCalc = (ctx->flag & MOD_APPLY_USECACHE) != 0;
-
-       bool do_cddm_convert = useRenderParams || !isFinalCalc;
-
-       if (useRenderParams)
-               subsurf_flags |= SUBSURF_USE_RENDER_PARAMS;
-       if (isFinalCalc)
-               subsurf_flags |= SUBSURF_IS_FINAL_CALC;
-       if (ctx->object->mode & OB_MODE_EDIT)
-               subsurf_flags |= SUBSURF_IN_EDIT_MODE;
-
-       result = subsurf_make_derived_from_derived(derivedData, smd, scene, NULL, subsurf_flags);
-       result->cd_flag = derivedData->cd_flag;
-
-       {
-               DerivedMesh *cddm = CDDM_copy(result);
-               result->release(result);
-               result = cddm;
-       }
-
-       (void) do_cddm_convert;
-
-       return result;
-}
-
-applyModifier_DM_wrapper(applyModifier, applyModifier_DM)
-
-#endif
-
-#ifdef WITH_OPENSUBDIV_MODIFIER
 static int subdiv_levels_for_modifier_get(const SubsurfModifierData *smd,
                                           const ModifierEvalContext *ctx)
 {
@@ -217,9 +176,9 @@ static Mesh *subdiv_as_ccg(SubsurfModifierData *smd,
 
 /* Modifier itself. */
 
-static Mesh *applyModifier_subdiv(ModifierData *md,
-                                  const ModifierEvalContext *ctx,
-                                  Mesh *mesh)
+static Mesh *applyModifier(ModifierData *md,
+                           const ModifierEvalContext *ctx,
+                           Mesh *mesh)
 {
        Mesh *result = mesh;
        SubsurfModifierData *smd = (SubsurfModifierData *) md;
@@ -248,7 +207,6 @@ static Mesh *applyModifier_subdiv(ModifierData *md,
        BKE_subdiv_free(subdiv);
        return result;
 }
-#endif
 
 ModifierTypeInfo modifierType_Subsurf = {
        /* name */              "Subdivision",
@@ -273,11 +231,7 @@ ModifierTypeInfo modifierType_Subsurf = {
        /* deformMatrices */    NULL,
        /* deformVertsEM */     NULL,
        /* deformMatricesEM */  NULL,
-#ifdef WITH_OPENSUBDIV_MODIFIER
-       /* applyModifier */     applyModifier_subdiv,
-#else
        /* applyModifier */     applyModifier,
-#endif
 
        /* initData */          initData,
        /* requiredDataMask */  NULL,