[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51114] branches/soc-2008-mxcurioni/source /blender/freestyle/intern/blender_interface: An attempt to improve the performance of temporary scene generation for stroke rendering .

Tamito Kajiyama rd6t-kjym at asahi-net.or.jp
Sat Oct 6 16:06:40 CEST 2012


Revision: 51114
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51114
Author:   kjym3
Date:     2012-10-06 14:06:40 +0000 (Sat, 06 Oct 2012)
Log Message:
-----------
An attempt to improve the performance of temporary scene generation for stroke rendering.
Many thanks to Joshua Leung (aligorith) for the performance analysis of BKE_object_add function:
http://lists.blender.org/pipermail/bf-committers/2012-October/037759.html

Modified Paths:
--------------
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp	2012-10-06 12:36:21 UTC (rev 51113)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp	2012-10-06 14:06:40 UTC (rev 51114)
@@ -224,7 +224,11 @@
 			continue;
 
 		// me = Mesh.New()
+#if 0
 		Object* object_mesh = BKE_object_add(freestyle_scene, OB_MESH);
+#else
+		Object* object_mesh = NewMesh();
+#endif
 		Mesh* mesh = (Mesh *) object_mesh->data;
 		// MEM_freeN(mesh->bb);
 		// mesh->bb= NULL;
@@ -408,6 +412,29 @@
 
 }
 
+// A replacement of BKE_object_add() for better performance.
+Object* BlenderStrokeRenderer::NewMesh() const {
+	Object *ob;
+	Base *base;
+	char name[MAX_ID_NAME];
+	static unsigned int mesh_id = 0xffffffff;
+
+	BLI_snprintf(name, MAX_ID_NAME, "0%08xOB", mesh_id);
+	ob = BKE_object_add_only_object(OB_MESH, name);
+	BLI_snprintf(name, MAX_ID_NAME, "0%08xME", mesh_id);
+	ob->data = BKE_mesh_add(name);
+	ob->lay = 1;
+
+	base = BKE_scene_base_add(freestyle_scene, ob);
+	//BKE_scene_base_deselect_all(scene);
+	//BKE_scene_base_select(scene, base);
+	ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+
+	--mesh_id;
+
+	return ob;
+}
+
 Render* BlenderStrokeRenderer::RenderScene( Render *re ) {
     Camera *camera = (Camera *)freestyle_scene->camera->data;
     if (camera->clipend < _z)

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h	2012-10-06 12:36:21 UTC (rev 51113)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h	2012-10-06 14:06:40 UTC (rev 51114)
@@ -29,6 +29,8 @@
   virtual void RenderStrokeRep(StrokeRep *iStrokeRep) const;
   virtual void RenderStrokeRepBasic(StrokeRep *iStrokeRep) const;
 
+  Object* NewMesh() const;
+
 	Render* RenderScene(Render *re);
 
 protected:




More information about the Bf-blender-cvs mailing list