[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25318] trunk/blender: 2. 5 Sculpt Branch Merge

Brecht Van Lommel brecht at blender.org
Fri Dec 11 16:30:39 CET 2009


Revision: 25318
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25318
Author:   blendix
Date:     2009-12-11 16:30:38 +0100 (Fri, 11 Dec 2009)

Log Message:
-----------
2.5 Sculpt Branch Merge

http://www.blender.org/development/release-logs/blender-250/sculpt-and-multiresolution/

Release logs are work in progress, also check missing items on that
page, there's still a few things that need work.

Quick summary of the changes:

* Use BVH for optimizing sculpt mode, doing only editing and updates
  on nearby nodes.
* Memory reduction by use of CCG grids for subsurf, own undo stack,
  no vertex-face map, no origindex, .. .
* Multithreading for sculpting, multires, and subsurf.
* Optional external file storage for multires displacements.
* Various tweaks to brush behavior.

Modified Paths:
--------------
    trunk/blender/release/scripts/op/object.py
    trunk/blender/release/scripts/ui/properties_data_modifier.py
    trunk/blender/release/scripts/ui/space_view3d_toolbar.py
    trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h
    trunk/blender/source/blender/blenkernel/BKE_blender.h
    trunk/blender/source/blender/blenkernel/BKE_customdata.h
    trunk/blender/source/blender/blenkernel/BKE_modifier.h
    trunk/blender/source/blender/blenkernel/BKE_multires.h
    trunk/blender/source/blender/blenkernel/BKE_paint.h
    trunk/blender/source/blender/blenkernel/BKE_subsurf.h
    trunk/blender/source/blender/blenkernel/BKE_utildefines.h
    trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c
    trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.h
    trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
    trunk/blender/source/blender/blenkernel/intern/brush.c
    trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    trunk/blender/source/blender/blenkernel/intern/constraint.c
    trunk/blender/source/blender/blenkernel/intern/customdata.c
    trunk/blender/source/blender/blenkernel/intern/displist.c
    trunk/blender/source/blender/blenkernel/intern/lattice.c
    trunk/blender/source/blender/blenkernel/intern/modifier.c
    trunk/blender/source/blender/blenkernel/intern/multires.c
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/blenkernel/intern/paint.c
    trunk/blender/source/blender/blenkernel/intern/particle.c
    trunk/blender/source/blender/blenkernel/intern/particle_system.c
    trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    trunk/blender/source/blender/blenlib/CMakeLists.txt
    trunk/blender/source/blender/blenlib/SConscript
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/editors/include/ED_sculpt.h
    trunk/blender/source/blender/editors/include/ED_view3d.h
    trunk/blender/source/blender/editors/mesh/editface.c
    trunk/blender/source/blender/editors/object/object_intern.h
    trunk/blender/source/blender/editors/object/object_modifier.c
    trunk/blender/source/blender/editors/object/object_ops.c
    trunk/blender/source/blender/editors/physics/particle_edit.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_intern.h
    trunk/blender/source/blender/editors/sculpt_paint/paint_ops.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_utils.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c
    trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
    trunk/blender/source/blender/editors/sculpt_paint/sculpt_intern.h
    trunk/blender/source/blender/editors/space_file/file_draw.c
    trunk/blender/source/blender/editors/space_file/filelist.c
    trunk/blender/source/blender/editors/space_file/filesel.c
    trunk/blender/source/blender/editors/space_view3d/drawobject.c
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
    trunk/blender/source/blender/editors/space_view3d/view3d_select.c
    trunk/blender/source/blender/editors/space_view3d/view3d_view.c
    trunk/blender/source/blender/editors/util/ed_util.c
    trunk/blender/source/blender/editors/util/undo.c
    trunk/blender/source/blender/gpu/gpu_buffers.h
    trunk/blender/source/blender/gpu/intern/gpu_buffers.c
    trunk/blender/source/blender/makesdna/DNA_brush_types.h
    trunk/blender/source/blender/makesdna/DNA_customdata_types.h
    trunk/blender/source/blender/makesdna/DNA_meshdata_types.h
    trunk/blender/source/blender/makesdna/DNA_modifier_types.h
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/makesdna/DNA_space_types.h
    trunk/blender/source/blender/makesdna/DNA_view3d_types.h
    trunk/blender/source/blender/makesrna/intern/rna_brush.c
    trunk/blender/source/blender/makesrna/intern/rna_modifier.c
    trunk/blender/source/blender/makesrna/intern/rna_sculpt_paint.c
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/blender/windowmanager/intern/wm_files.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Added Paths:
-----------
    trunk/blender/source/blender/blenkernel/BKE_customdata_file.h
    trunk/blender/source/blender/blenkernel/intern/customdata_file.c
    trunk/blender/source/blender/blenlib/BLI_pbvh.h
    trunk/blender/source/blender/blenlib/intern/pbvh.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_undo.c

Modified: trunk/blender/release/scripts/op/object.py
===================================================================
--- trunk/blender/release/scripts/op/object.py	2009-12-11 15:02:46 UTC (rev 25317)
+++ trunk/blender/release/scripts/op/object.py	2009-12-11 15:30:38 UTC (rev 25318)
@@ -75,16 +75,16 @@
         row.prop(props, "extend")
 
 
-class SubsurfSet(bpy.types.Operator):
+class SubdivisionSet(bpy.types.Operator):
     '''Sets a Subdivision Surface Level (1-5)'''
 
-    bl_idname = "object.subsurf_set"
-    bl_label = "Subsurf Set"
+    bl_idname = "object.subdivision_set"
+    bl_label = "Subdivision Set"
     bl_register = True
     bl_undo = True
 
     level = IntProperty(name="Level",
-            default=1, min=0, max=6)
+            default=1, min=0, max=100, soft_min=0, soft_max=6)
 
     def poll(self, context):
         ob = context.active_object
@@ -94,7 +94,11 @@
         level = self.properties.level
         ob = context.active_object
         for mod in ob.modifiers:
-            if mod.type == 'SUBSURF':
+            if mod.type == 'MULTIRES' and ob.mode == 'SCULPT':
+                if mod.sculpt_levels != level:
+                    mod.sculpt_levels = level
+                return ('FINISHED',)
+            elif mod.type == 'SUBSURF' or mod.type == 'MULTIRES':
                 if mod.levels != level:
                     mod.levels = level
                 return ('FINISHED',)
@@ -120,5 +124,6 @@
 
 
 bpy.ops.add(SelectPattern)
-bpy.ops.add(SubsurfSet)
+bpy.ops.add(SubdivisionSet)
 bpy.ops.add(Retopo)
+

Modified: trunk/blender/release/scripts/ui/properties_data_modifier.py
===================================================================
--- trunk/blender/release/scripts/ui/properties_data_modifier.py	2009-12-11 15:02:46 UTC (rev 25317)
+++ trunk/blender/release/scripts/ui/properties_data_modifier.py	2009-12-11 15:30:38 UTC (rev 25318)
@@ -432,17 +432,34 @@
             layout.row().prop(md, "subdivision_type", expand=True)
         else:
             layout.row().prop(md, "subdivision_type", text="")
-        layout.prop(md, "level")
 
         split = layout.split()
-
         col = split.column()
-        col.operator("object.multires_subdivide", text="Subdivide")
+        col.prop(md, "levels", text="Preview")
+        col.prop(md, "sculpt_levels", text="Sculpt")
+        col.prop(md, "render_levels", text="Render")
 
         if wide_ui:
             col = split.column()
+
+        col.enabled = ob.mode != 'EDIT'
+        col.operator("object.multires_subdivide", text="Subdivide")
         col.operator("object.multires_higher_levels_delete", text="Delete Higher")
+        col.prop(md, "optimal_display")
 
+        layout.separator()
+
+        col = layout.column()
+        row = col.row()
+        if md.external:
+            row.operator("object.multires_pack_external", text="Pack External")
+            row.label()
+            row = col.row()
+            row.prop(md, "filename", text="")
+        else:
+            row.operator("object.multires_save_external", text="Save External...")
+            row.label()
+
     def PARTICLE_INSTANCE(self, layout, ob, md, wide_ui):
         layout.prop(md, "object")
         layout.prop(md, "particle_system_number", text="Particle System")
@@ -598,8 +615,7 @@
         if wide_ui:
             col = split.column()
         col.label(text="Options:")
-        col.prop(md, "optimal_draw", text="Optimal Display")
-        col.prop(md, "subsurf_uv")
+        col.prop(md, "optimal_display")
 
     def SURFACE(self, layout, ob, md, wide_ui):
         layout.label(text="See Fields panel.")

Modified: trunk/blender/release/scripts/ui/space_view3d_toolbar.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d_toolbar.py	2009-12-11 15:02:46 UTC (rev 25317)
+++ trunk/blender/release/scripts/ui/space_view3d_toolbar.py	2009-12-11 15:30:38 UTC (rev 25318)
@@ -553,6 +553,9 @@
                 if brush.sculpt_tool in ('DRAW', 'PINCH', 'INFLATE', 'LAYER', 'CLAY'):
                     col.row().prop(brush, "direction", expand=True)
 
+                if brush.sculpt_tool in ('DRAW', 'INFLATE', 'LAYER'):
+                    col.prop(brush, "use_accumulate")
+
                 if brush.sculpt_tool == 'LAYER':
                     col.prop(brush, "use_persistent")
                     col.operator("sculpt.set_persistent_base")
@@ -695,8 +698,8 @@
         sculpt = context.tool_settings.sculpt
 
         col = layout.column()
-        col.prop(sculpt, "partial_redraw", text="Partial Refresh")
         col.prop(sculpt, "show_brush")
+        col.prop(sculpt, "fast_navigate")
 
         split = self.layout.split()
 

Modified: trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2009-12-11 15:02:46 UTC (rev 25317)
+++ trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2009-12-11 15:30:38 UTC (rev 25318)
@@ -60,12 +60,24 @@
 struct ColorBand;
 struct GPUVertexAttribs;
 struct GPUDrawObject;
+struct ListBase;
+struct PBVH;
 
 /* number of sub-elements each mesh element has (for interpolation) */
 #define SUB_ELEMS_VERT 0
 #define SUB_ELEMS_EDGE 2
 #define SUB_ELEMS_FACE 4
 
+typedef struct DMGridData {
+	float co[3];
+	float no[3];
+} DMGridData;
+
+typedef struct DMGridAdjacency {
+	int index[4];
+	int rotation[4];
+} DMGridAdjacency;
+
 typedef struct DerivedMesh DerivedMesh;
 struct DerivedMesh {
 	/* Private DerivedMesh data, only for internal DerivedMesh use */
@@ -133,6 +145,13 @@
 	void *(*getEdgeDataArray)(DerivedMesh *dm, int type);
 	void *(*getFaceDataArray)(DerivedMesh *dm, int type);
 
+	/* optional grid access for subsurf */
+	int (*getNumGrids)(DerivedMesh *dm);
+	int (*getGridSize)(DerivedMesh *dm);
+	DMGridData **(*getGridData)(DerivedMesh *dm);
+	DMGridAdjacency *(*getGridAdjacency)(DerivedMesh *dm);
+	int *(*getGridOffset)(DerivedMesh *dm);
+
 	/* Iterate over each mapped vertex in the derived mesh, calling the
 	 * given function with the original vert and the mapped vert's new
 	 * coordinate and normal. For historical reasons the normal can be
@@ -181,6 +200,14 @@
 	/* Get vertex normal, undefined if index is not valid */
 	void (*getVertNo)(DerivedMesh *dm, int index, float no_r[3]);
 
+	/* Get a map of vertices to faces
+	 */
+	struct ListBase *(*getFaceMap)(DerivedMesh *dm);
+
+	/* Get the BVH used for paint modes
+	 */
+	struct PBVH *(*getPBVH)(struct Object *ob, DerivedMesh *dm);
+
 	/* Drawing Operations */
 
 	/* Draw all vertices as bgl points (no options) */
@@ -205,8 +232,8 @@
 	 *
 	 * Also called for *final* editmode DerivedMeshes
 	 */
-	void (*drawFacesSolid)(DerivedMesh *dm,
-	                       int (*setMaterial)(int, void *attribs));
+	void (*drawFacesSolid)(DerivedMesh *dm, float (*partial_redraw_planes)[4],
+	                       int fast, int (*setMaterial)(int, void *attribs));
 
 	/* Draw all faces
 	 *  o If useTwoSided, draw front and back using col arrays

Modified: trunk/blender/source/blender/blenkernel/BKE_blender.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_blender.h	2009-12-11 15:02:46 UTC (rev 25317)
+++ trunk/blender/source/blender/blenkernel/BKE_blender.h	2009-12-11 15:30:38 UTC (rev 25318)
@@ -43,7 +43,7 @@
 struct ReportList;
 
 #define BLENDER_VERSION			250
-#define BLENDER_SUBVERSION		8
+#define BLENDER_SUBVERSION		9
 
 #define BLENDER_MINVERSION		250
 #define BLENDER_MINSUBVERSION	0

Modified: trunk/blender/source/blender/blenkernel/BKE_customdata.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_customdata.h	2009-12-11 15:02:46 UTC (rev 25317)
+++ trunk/blender/source/blender/blenkernel/BKE_customdata.h	2009-12-11 15:30:38 UTC (rev 25318)
@@ -32,6 +32,7 @@
 #ifndef BKE_CUSTOMDATA_H
 #define BKE_CUSTOMDATA_H
 
+struct ID;
 struct CustomData;
 struct CustomDataLayer;
 typedef unsigned int CustomDataMask;
@@ -278,4 +279,19 @@
 void CustomData_to_bmeshpoly(struct CustomData *fdata, struct CustomData *pdata, struct CustomData *ldata);
 void CustomData_from_bmeshpoly(struct CustomData *fdata, struct CustomData *pdata, struct CustomData *ldata, int total);
 void CustomData_bmesh_init_pool(struct CustomData *data, int allocsize);
+
+/* External file storage */
+
+void CustomData_external_add(struct CustomData *data,
+	struct ID *id, int type, int totelem, const char *filename);
+void CustomData_external_remove(struct CustomData *data,
+	struct ID *id, int type, int totelem);
+int CustomData_external_test(struct CustomData *data, int type);
+
+void CustomData_external_write(struct CustomData *data,
+	struct ID *id, CustomDataMask mask, int totelem, int free);
+void CustomData_external_read(struct CustomData *data,
+	struct ID *id, CustomDataMask mask, int totelem);
+
 #endif
+

Copied: trunk/blender/source/blender/blenkernel/BKE_customdata_file.h (from rev 25316, branches/sculpt25/source/blender/blenkernel/BKE_customdata_file.h)
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_customdata_file.h	                        (rev 0)
+++ trunk/blender/source/blender/blenkernel/BKE_customdata_file.h	2009-12-11 15:30:38 UTC (rev 25318)
@@ -0,0 +1,59 @@
+/*
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef BKE_CUSTOMDATA_FILE_H
+#define BKE_CUSTOMDATA_FILE_H
+
+#define CDF_TYPE_IMAGE	0
+#define CDF_TYPE_MESH	1
+
+#define CDF_LAYER_NAME_MAX	64
+
+typedef struct CDataFile CDataFile;
+typedef struct CDataFileLayer CDataFileLayer;
+

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list