Commit: 893633527dd39488aa2104db6123bbd68e005cdd
Author: Sebastian Parborg
Date:   Thu Jun 28 12:03:36 2018 +0200
Branches: soc-2018-npr
https://developer.blender.org/rB893633527dd39488aa2104db6123bbd68e005cdd

Initial port to 2.8

===================================================================

M       intern/opensubdiv/opensubdiv_capi.h
M       intern/opensubdiv/opensubdiv_evaluator_capi.cc
M       release/scripts/startup/bl_ui/properties_data_modifier.py
M       source/blender/bmesh/intern/bmesh_polygon.c
M       source/blender/editors/space_outliner/outliner_draw.c
M       source/blender/makesdna/DNA_modifier_types.h
M       source/blender/makesrna/RNA_access.h
M       source/blender/makesrna/intern/rna_modifier.c
M       source/blender/modifiers/CMakeLists.txt
M       source/blender/modifiers/MOD_modifiertypes.h
A       source/blender/modifiers/intern/MOD_mybmesh.c
M       source/blender/modifiers/intern/MOD_util.c

===================================================================

diff --git a/intern/opensubdiv/opensubdiv_capi.h 
b/intern/opensubdiv/opensubdiv_capi.h
index 2c3fcee7dbb..b135b4be706 100644
--- a/intern/opensubdiv/opensubdiv_capi.h
+++ b/intern/opensubdiv/opensubdiv_capi.h
@@ -119,6 +119,16 @@ void openSubdiv_evaluateLimit(OpenSubdiv_EvaluatorDescr 
*evaluator_descr,
                               float dPdu[3],
                               float dPdv[3]);
 
+void openSubdiv_evaluateLimit2(OpenSubdiv_EvaluatorDescr *evaluator_descr,
+                              int osd_face_index,
+                              float face_u, float face_v,
+                              float P[3],
+                              float dPdu[3],
+                              float dPdv[3],
+                              float dPduu[3],
+                              float dPduv[3],
+                              float dPdvv[3]);
+
 void openSubdiv_evaluateVarying(OpenSubdiv_EvaluatorDescr *evaluator_descr,
                                int osd_face_index,
                                float face_u, float face_v,
diff --git a/intern/opensubdiv/opensubdiv_evaluator_capi.cc 
b/intern/opensubdiv/opensubdiv_evaluator_capi.cc
index c4a128213dd..8baba0061ce 100644
--- a/intern/opensubdiv/opensubdiv_evaluator_capi.cc
+++ b/intern/opensubdiv/opensubdiv_evaluator_capi.cc
@@ -287,6 +287,69 @@ public:
                }
        }
 
+       void EvalPatchesWithDerivatives2(PatchCoord& patch_coord,
+                                       float P[3],
+                                       float dPdu[3],
+                                       float dPdv[3],
+                                       float dPduu[3],
+                                       float dPduv[3],
+                                       float dPdvv[3])
+       {
+               StackAllocatedBuffer<6, 1> vertex_data;
+               StackAllocatedBuffer<6, 1> derivatives;
+               StackAllocatedBuffer<6, 1> derivatives1;
+               StackAllocatedBuffer<6, 1> derivatives2;
+               BufferDescriptor vertex_desc(0, 3, 6),
+                                du_desc(0, 3, 6),
+                                dv_desc(3, 3, 6),
+                                duu_desc(0, 3, 6),
+                                duv_desc(3, 3, 6),
+                                dvv_desc(0, 3, 6);
+               SinglePatchCoordBuffer patch_coord_buffer(patch_coord);
+               const EVALUATOR *eval_instance =
+                       
OpenSubdiv::Osd::GetEvaluator<EVALUATOR>(evaluator_cache_,
+                                                                src_desc_,
+                                                                vertex_desc,
+                                                                du_desc,
+                                                                dv_desc,
+                                                                duu_desc,
+                                                                duv_desc,
+                                                                dvv_desc,
+                                                                
device_context_);
+               EVALUATOR::EvalPatches(src_data_, src_desc_,
+                                      &vertex_data, vertex_desc,
+                                      &derivatives, du_desc,
+                                      &derivatives, dv_desc,
+                                      &derivatives1, duu_desc,
+                                      &derivatives1, duv_desc,
+                                      &derivatives2, dvv_desc,
+                                      patch_coord_buffer.GetNumVertices(),
+                                      &patch_coord_buffer,
+                                      patch_table_, eval_instance, 
device_context_);
+               float *refined_verts = vertex_data.BindCpuBuffer();
+               memcpy(P, refined_verts, sizeof(float) * 3);
+               if (dPdu != NULL || dPdv != NULL || dPduu != NULL || dPduv != 
NULL || dPdvv != NULL) {
+                       float *refined_drivatives = derivatives.BindCpuBuffer();
+                       float *refined_drivatives1 = 
derivatives1.BindCpuBuffer();
+                       float *refined_drivatives2 = 
derivatives2.BindCpuBuffer();
+                       if (dPdu) {
+                               memcpy(dPdu, refined_drivatives, sizeof(float) 
* 3);
+                       }
+                       if (dPdv) {
+                               memcpy(dPdv, refined_drivatives + 3, 
sizeof(float) * 3);
+                       }
+                       if (dPduu) {
+                               memcpy(dPduu, refined_drivatives1, 
sizeof(float) * 3);
+                       }
+                       if (dPduv) {
+                               memcpy(dPduv, refined_drivatives1 + 3, 
sizeof(float) * 3);
+                       }
+                       if (dPdvv) {
+                               memcpy(dPdvv, refined_drivatives2, 
sizeof(float) * 3);
+                       }
+               }
+       }
+
        void EvalPatchVarying(PatchCoord& patch_coord,
                              float varying[3]) {
                StackAllocatedBuffer<3, 1> varying_data;
@@ -354,8 +417,8 @@ OpenSubdiv_EvaluatorDescr *openSubdiv_createEvaluatorDescr(
        /* Apply uniform refinement to the mesh so that we can use the
         * limit evaluation API features.
         */
-       TopologyRefiner::UniformOptions options(subsurf_level);
-       refiner->RefineUniform(options);
+       TopologyRefiner::AdaptiveOptions options(subsurf_level);
+       refiner->RefineAdaptive(options);
 
        /* Generate stencil table to update the bi-cubic patches control
         * vertices after they have been re-posed (both for vertex & varying
@@ -482,6 +545,34 @@ void openSubdiv_evaluateLimit(OpenSubdiv_EvaluatorDescr 
*evaluator_descr,
        }
 }
 
+void openSubdiv_evaluateLimit2(OpenSubdiv_EvaluatorDescr *evaluator_descr,
+                              int osd_face_index,
+                              float face_u, float face_v,
+                              float P[3],
+                              float dPdu[3],
+                              float dPdv[3],
+                              float dPduu[3],
+                              float dPduv[3],
+                              float dPdvv[3])
+{
+       assert((face_u >= 0.0f) && (face_u <= 1.0f) && (face_v >= 0.0f) && 
(face_v <= 1.0f));
+       const PatchTable::PatchHandle *handle =
+               evaluator_descr->patch_map->FindPatch(osd_face_index, face_u, 
face_v);
+       PatchCoord patch_coord(*handle, face_u, face_v);
+       if (dPdu != NULL || dPdv != NULL || dPduu != NULL || dPduv != NULL || 
dPdvv != NULL ) {
+               
evaluator_descr->eval_output->EvalPatchesWithDerivatives2(patch_coord,
+                                                                        P,
+                                                                        dPdu,
+                                                                        dPdv,
+                                                                        dPduu,
+                                                                        dPduv,
+                                                                        dPdvv);
+       }
+       else {
+               evaluator_descr->eval_output->EvalPatchCoord(patch_coord, P);
+       }
+}
+
 void openSubdiv_evaluateVarying(OpenSubdiv_EvaluatorDescr *evaluator_descr,
                                int osd_face_index,
                                float face_u, float face_v,
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py 
b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 03ebea69d2b..c331f9ecd3e 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -624,6 +624,31 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
             row.operator("object.multires_external_save", text="Save 
External...")
             row.label()
 
+    def MY_BMESH(self, layout, ob, md):
+        split = layout.split(percentage=0.25)
+
+        col = split.column()
+        col.label(text="§6.1:")
+        col.prop(md, "do_tri")
+        col.prop(md, "do_ff_bb_split")
+
+        col = split.column()
+        col.label(text="§6.2:")
+        col.prop(md, "do_cusp_dect")
+        col.prop(md, "do_insert")
+        col.prop(md, "do_cusp_insert")
+
+        col = split.column()
+        col.label(text="§6.3:")
+        col.prop(md, "do_rad_insert")
+        col.prop(md, "do_rad_flip")
+        col.prop(md, "do_opti")
+
+
+        col = layout.column()
+        col.label(text="Camera Object:")
+        col.prop(md, "camera_object", text="")
+
     def OCEAN(self, layout, ob, md):
         if not bpy.app.build_options.mod_oceansim:
             layout.label("Built without OceanSim modifier")
diff --git a/source/blender/bmesh/intern/bmesh_polygon.c 
b/source/blender/bmesh/intern/bmesh_polygon.c
index 7cbc6461667..60197f2e6df 100644
--- a/source/blender/bmesh/intern/bmesh_polygon.c
+++ b/source/blender/bmesh/intern/bmesh_polygon.c
@@ -946,7 +946,7 @@ void BM_face_triangulate(
        int nf_i = 0;
        int ne_i = 0;
 
-       BLI_assert(BM_face_is_normal_valid(f));
+       //BLI_assert(BM_face_is_normal_valid(f));
 
        /* ensure both are valid or NULL */
        BLI_assert((r_faces_new == NULL) == (r_faces_new_tot == NULL));
diff --git a/source/blender/editors/space_outliner/outliner_draw.c 
b/source/blender/editors/space_outliner/outliner_draw.c
index 8a8f4715ea3..603efb43569 100644
--- a/source/blender/editors/space_outliner/outliner_draw.c
+++ b/source/blender/editors/space_outliner/outliner_draw.c
@@ -1104,6 +1104,9 @@ static void tselem_draw_icon(
                                        case eModifierType_Wireframe:
                                                ICON_DRAW(ICON_MOD_WIREFRAME);
                                                break;
+                                       case eModifierType_MyBMesh:
+                                               ICON_DRAW(ICON_MOD_MESHDEFORM); 
/* XXX, needs own icon */
+                                                break;
                                        case eModifierType_LaplacianDeform:
                                                ICON_DRAW(ICON_MOD_MESHDEFORM); 
/* XXX, needs own icon */
                                                break;
diff --git a/source/blender/makesdna/DNA_modifier_types.h 
b/source/blender/makesdna/DNA_modifier_types.h
index ecece648ce1..fad666d5189 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -90,6 +90,7 @@ typedef enum ModifierType {
        eModifierType_CorrectiveSmooth  = 51,
        eModifierType_MeshSequenceCache = 52,
        eModifierType_SurfaceDeform     = 53,
+       eModifierType_MyBMesh           = 54,
        NUM_MODIFIER_TYPES
 } ModifierType;
 
@@ -1494,6 +1495,13 @@ enum {
        MOD_WIREFRAME_CREASE        = (1 << 5),
 };
 
+/* Modifier data stored in the blend file */
+typedef struct MyBMeshModifierData {
+       ModifierData modifier;
+       struct Object *camera_ob;
+       int flag;  /* options stored here */
+       short pad[2];
+} MyBMeshModifierData;
 
 typedef struct DataTransferModifierData {
        ModifierData modifier;
@@ -1638,4 +1646,15 @@ enum {
 #define MOD_MESHSEQ_READ_ALL \
        (MOD_MESHSEQ_READ_VERT | MOD_MESHSEQ_READ_POLY | MOD_MESHSEQ_READ_UV | 
MOD_MESHSEQ_READ_COLOR)
 
+enum {
+       MOD_MYBMESH_TRIANG = (1 << 0),
+       MOD_MYBMESH_FF_SPLIT = (1 << 1),
+       MOD_MYBMESH_CUSP_D = (1 << 2),
+       MOD_MYBMESH_CUSP_I = (1 << 3),
+       MOD_MYBMESH_FB_SPLIT = (1 << 4),
+       MOD_MYBMESH_RAD_I = (1 << 5),
+       MOD_MYBMESH_RAD_FLIP = (1 << 6),
+       MOD_MYBMESH_OPTI = (1

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to