[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