[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [61106] trunk/blender/source/blender/ freestyle/intern/python: Additional code improvements: avoid unnecessary Python object allocations in Freestyle.

Tamito Kajiyama rd6t-kjym at asahi-net.or.jp
Tue Nov 5 01:51:59 CET 2013


Revision: 61106
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=61106
Author:   kjym3
Date:     2013-11-05 00:51:59 +0000 (Tue, 05 Nov 2013)
Log Message:
-----------
Additional code improvements: avoid unnecessary Python object allocations in Freestyle.

Modified Paths:
--------------
    trunk/blender/source/blender/freestyle/intern/python/BPy_Convert.cpp
    trunk/blender/source/blender/freestyle/intern/python/BPy_Convert.h
    trunk/blender/source/blender/freestyle/intern/python/BPy_FrsNoise.cpp
    trunk/blender/source/blender/freestyle/intern/python/BPy_StrokeAttribute.cpp
    trunk/blender/source/blender/freestyle/intern/python/Director.cpp
    trunk/blender/source/blender/freestyle/intern/python/Interface0D/BPy_SVertex.cpp

Modified: trunk/blender/source/blender/freestyle/intern/python/BPy_Convert.cpp
===================================================================
--- trunk/blender/source/blender/freestyle/intern/python/BPy_Convert.cpp	2013-11-05 00:19:21 UTC (rev 61105)
+++ trunk/blender/source/blender/freestyle/intern/python/BPy_Convert.cpp	2013-11-05 00:51:59 UTC (rev 61106)
@@ -512,103 +512,100 @@
 	return static_cast<Nature::EdgeNature>(PyLong_AsLong(obj));
 }
 
-Vec2f *Vec2f_ptr_from_PyObject(PyObject *obj)
+bool Vec2f_ptr_from_PyObject(PyObject *obj, Vec2f *vec)
 {
-	Vec2f *v;
-	if ((v = Vec2f_ptr_from_Vector(obj)))
-		return v;
-	if ((v = Vec2f_ptr_from_PyList(obj)))
-		return v;
-	if ((v = Vec2f_ptr_from_PyTuple(obj)))
-		return v;
-	return NULL;
+	if (Vec2f_ptr_from_Vector(obj, vec))
+		return true;
+	if (Vec2f_ptr_from_PyList(obj, vec))
+		return true;
+	if (Vec2f_ptr_from_PyTuple(obj, vec))
+		return true;
+	return false;
 }
 
-Vec3f *Vec3f_ptr_from_PyObject(PyObject *obj)
+bool Vec3f_ptr_from_PyObject(PyObject *obj, Vec3f *vec)
 {
-	Vec3f *v;
-	if ((v = Vec3f_ptr_from_Vector(obj)))
-		return v;
-	if ((v = Vec3f_ptr_from_Color(obj)))
-		return v;
-	if ((v = Vec3f_ptr_from_PyList(obj)))
-		return v;
-	if ((v = Vec3f_ptr_from_PyTuple(obj)))
-		return v;
-	return NULL;
+	if (Vec3f_ptr_from_Vector(obj, vec))
+		return true;
+	if (Vec3f_ptr_from_Color(obj, vec))
+		return true;
+	if (Vec3f_ptr_from_PyList(obj, vec))
+		return true;
+	if (Vec3f_ptr_from_PyTuple(obj, vec))
+		return true;
+	return false;
 }
 
-Vec3r *Vec3r_ptr_from_PyObject(PyObject *obj)
+bool Vec3r_ptr_from_PyObject(PyObject *obj, Vec3r *vec)
 {
-	Vec3r *v;
-	if ((v = Vec3r_ptr_from_Vector(obj)))
-		return v;
-	if ((v = Vec3r_ptr_from_Color(obj)))
-		return v;
-	if ((v = Vec3r_ptr_from_PyList(obj)))
-		return v;
-	if ((v = Vec3r_ptr_from_PyTuple(obj)))
-		return v;
-	return NULL;
+	if (Vec3r_ptr_from_Vector(obj, vec))
+		return true;
+	if (Vec3r_ptr_from_Color(obj, vec))
+		return true;
+	if (Vec3r_ptr_from_PyList(obj, vec))
+		return true;
+	if (Vec3r_ptr_from_PyTuple(obj, vec))
+		return true;
+	return false;
 }
 
-Vec2f *Vec2f_ptr_from_Vector(PyObject *obj)
+bool Vec2f_ptr_from_Vector(PyObject *obj, Vec2f *vec)
 {
 	if (!VectorObject_Check(obj) || ((VectorObject *)obj)->size != 2)
-		return NULL;
+		return false;
 	if (BaseMath_ReadCallback((BaseMathObject *)obj) == -1)
-		return NULL;
-	float x = ((VectorObject *)obj)->vec[0];
-	float y = ((VectorObject *)obj)->vec[1];
-	return new Vec2f(x, y);
+		return false;
+	vec[0] = ((VectorObject *)obj)->vec[0];
+	vec[1] = ((VectorObject *)obj)->vec[1];
+	return true;
 }
 
-Vec3f *Vec3f_ptr_from_Vector(PyObject *obj)
+bool Vec3f_ptr_from_Vector(PyObject *obj, Vec3f *vec)
 {
 	if (!VectorObject_Check(obj) || ((VectorObject *)obj)->size != 3)
-		return NULL;
+		return false;
 	if (BaseMath_ReadCallback((BaseMathObject *)obj) == -1)
-		return NULL;
-	float x = ((VectorObject *)obj)->vec[0];
-	float y = ((VectorObject *)obj)->vec[1];
-	float z = ((VectorObject *)obj)->vec[2];
-	return new Vec3f(x, y, z);
+		return false;
+	vec[0] = ((VectorObject *)obj)->vec[0];
+	vec[1] = ((VectorObject *)obj)->vec[1];
+	vec[2] = ((VectorObject *)obj)->vec[2];
+	return true;
 }
 
-Vec3r *Vec3r_ptr_from_Vector(PyObject *obj)
+bool Vec3r_ptr_from_Vector(PyObject *obj, Vec3r *vec)
 {
 	if (!VectorObject_Check(obj) || ((VectorObject *)obj)->size != 3)
-		return NULL;
+		return false;
 	if (BaseMath_ReadCallback((BaseMathObject *)obj) == -1)
-		return NULL;
-	real x = ((VectorObject *)obj)->vec[0];
-	real y = ((VectorObject *)obj)->vec[1];
-	real z = ((VectorObject *)obj)->vec[2];
-	return new Vec3r(x, y, z);
+		return false;
+	vec[0] = ((VectorObject *)obj)->vec[0];
+	vec[1] = ((VectorObject *)obj)->vec[1];
+	vec[2] = ((VectorObject *)obj)->vec[2];
+	return true;
 }
 
-Vec3f *Vec3f_ptr_from_Color(PyObject *obj)
+bool Vec3f_ptr_from_Color(PyObject *obj, Vec3f *vec)
 {
 	if (!ColorObject_Check(obj))
-		return NULL;
+		return false;
 	if (BaseMath_ReadCallback((BaseMathObject *)obj) == -1)
-		return NULL;
-	float r = ((ColorObject *)obj)->col[0];
-	float g = ((ColorObject *)obj)->col[1];
-	float b = ((ColorObject *)obj)->col[2];
-	return new Vec3f(r, g, b);
+		return false;
+	vec[0] = ((ColorObject *)obj)->col[0];
+	vec[1] = ((ColorObject *)obj)->col[1];
+	vec[2] = ((ColorObject *)obj)->col[2];
+	return true;
 }
 
-Vec3r *Vec3r_ptr_from_Color(PyObject *obj)
+bool Vec3r_ptr_from_Color(PyObject *obj, Vec3r *vec)
 {
 	if (!ColorObject_Check(obj))
-		return NULL;
+		return false;
 	if (BaseMath_ReadCallback((BaseMathObject *)obj) == -1)
-		return NULL;
-	real r = ((ColorObject *)obj)->col[0];
-	real g = ((ColorObject *)obj)->col[1];
-	real b = ((ColorObject *)obj)->col[2];
-	return new Vec3r(r, g, b);
+		return false;
+	vec[0] = ((ColorObject *)obj)->col[0];
+	vec[1] = ((ColorObject *)obj)->col[1];
+	vec[2] = ((ColorObject *)obj)->col[2];
+	return true;
 }
 
 static int float_array_from_PyList(PyObject *obj, float *v, int n)
@@ -623,37 +620,45 @@
 	return 1;
 }
 
-Vec2f *Vec2f_ptr_from_PyList(PyObject *obj)
+bool Vec2f_ptr_from_PyList(PyObject *obj, Vec2f *vec)
 {
 	float v[2];
 
 	if (!PyList_Check(obj) || PyList_Size(obj) != 2)
-		return NULL;
+		return false;
 	if (!float_array_from_PyList(obj, v, 2))
-		return NULL;
-	return new Vec2f(v[0], v[1]);
+		return false;
+	vec[0] = v[0];
+	vec[1] = v[1];
+	return true;
 }
 
-Vec3f *Vec3f_ptr_from_PyList(PyObject *obj)
+bool Vec3f_ptr_from_PyList(PyObject *obj, Vec3f *vec)
 {
 	float v[3];
 
 	if (!PyList_Check(obj) || PyList_Size(obj) != 3)
-		return NULL;
+		return false;
 	if (!float_array_from_PyList(obj, v, 3))
-		return NULL;
-	return new Vec3f(v[0], v[1], v[2]);
+		return false;
+	vec[0] = v[0];
+	vec[1] = v[1];
+	vec[2] = v[2];
+	return true;
 }
 
-Vec3r *Vec3r_ptr_from_PyList(PyObject *obj)
+bool Vec3r_ptr_from_PyList(PyObject *obj, Vec3r *vec)
 {
 	float v[3];
 
 	if (!PyList_Check(obj) || PyList_Size(obj) != 3)
-		return NULL;
+		return false;
 	if (!float_array_from_PyList(obj, v, 3))
-		return NULL;
-	return new Vec3r(v[0], v[1], v[2]);
+		return false;
+	vec[0] = v[0];
+	vec[1] = v[1];
+	vec[2] = v[2];
+	return true;
 }
 
 static int float_array_from_PyTuple(PyObject *obj, float *v, int n)
@@ -668,37 +673,45 @@
 	return 1;
 }
 
-Vec2f *Vec2f_ptr_from_PyTuple(PyObject *obj)
+bool Vec2f_ptr_from_PyTuple(PyObject *obj, Vec2f *vec)
 {
 	float v[2];
 
 	if (!PyTuple_Check(obj) || PyTuple_Size(obj) != 2)
-		return NULL;
+		return false;
 	if (!float_array_from_PyTuple(obj, v, 2))
-		return NULL;
-	return new Vec2f(v[0], v[1]);
+		return false;
+	vec[0] = v[0];
+	vec[1] = v[1];
+	return true;
 }
 
-Vec3f *Vec3f_ptr_from_PyTuple(PyObject *obj)
+bool Vec3f_ptr_from_PyTuple(PyObject *obj, Vec3f *vec)
 {
 	float v[3];
 
 	if (!PyTuple_Check(obj) || PyTuple_Size(obj) != 3)
-		return NULL;
+		return false;
 	if (!float_array_from_PyTuple(obj, v, 3))
-		return NULL;
-	return new Vec3f(v[0], v[1], v[2]);
+		return false;
+	vec[0] = v[0];
+	vec[1] = v[1];
+	vec[2] = v[2];
+	return true;
 }
 
-Vec3r *Vec3r_ptr_from_PyTuple(PyObject *obj)
+bool Vec3r_ptr_from_PyTuple(PyObject *obj, Vec3r *vec)
 {
 	float v[3];
 
 	if (!PyTuple_Check(obj) || PyTuple_Size(obj) != 3)
-		return NULL;
+		return false;
 	if (!float_array_from_PyTuple(obj, v, 3))
-		return NULL;
-	return new Vec3r(v[0], v[1], v[2]);
+		return false;
+	vec[0] = v[0];
+	vec[1] = v[1];
+	vec[2] = v[2];
+	return true;
 }
 
 // helper for argument parsing

Modified: trunk/blender/source/blender/freestyle/intern/python/BPy_Convert.h
===================================================================
--- trunk/blender/source/blender/freestyle/intern/python/BPy_Convert.h	2013-11-05 00:19:21 UTC (rev 61105)
+++ trunk/blender/source/blender/freestyle/intern/python/BPy_Convert.h	2013-11-05 00:51:59 UTC (rev 61106)
@@ -150,20 +150,20 @@
 IntegrationType IntegrationType_from_BPy_IntegrationType(PyObject *obj);
 Stroke::MediumType MediumType_from_BPy_MediumType(PyObject *obj);
 Nature::EdgeNature EdgeNature_from_BPy_Nature(PyObject *obj);
-Vec2f * Vec2f_ptr_from_PyObject(PyObject *obj);
-Vec3f * Vec3f_ptr_from_PyObject(PyObject *obj);
-Vec3r * Vec3r_ptr_from_PyObject(PyObject *obj);
-Vec2f * Vec2f_ptr_from_Vector(PyObject *obj);
-Vec3f * Vec3f_ptr_from_Vector(PyObject *obj);
-Vec3r * Vec3r_ptr_from_Vector(PyObject *obj);
-Vec3f * Vec3f_ptr_from_Color(PyObject *obj);
-Vec3r * Vec3r_ptr_from_Color(PyObject *obj);
-Vec2f * Vec2f_ptr_from_PyList(PyObject *obj);
-Vec3f * Vec3f_ptr_from_PyList(PyObject *obj);
-Vec3r * Vec3r_ptr_from_PyList(PyObject *obj);
-Vec2f * Vec2f_ptr_from_PyTuple(PyObject *obj);
-Vec3f * Vec3f_ptr_from_PyTuple(PyObject *obj);
-Vec3r * Vec3r_ptr_from_PyTuple(PyObject *obj);
+bool Vec2f_ptr_from_PyObject(PyObject *obj, Vec2f *vec);
+bool Vec3f_ptr_from_PyObject(PyObject *obj, Vec3f *vec);
+bool Vec3r_ptr_from_PyObject(PyObject *obj, Vec3r *vec);
+bool Vec2f_ptr_from_Vector(PyObject *obj, Vec2f *vec);
+bool Vec3f_ptr_from_Vector(PyObject *obj, Vec3f *vec);
+bool Vec3r_ptr_from_Vector(PyObject *obj, Vec3r *vec);
+bool Vec3f_ptr_from_Color(PyObject *obj, Vec3f *vec);
+bool Vec3r_ptr_from_Color(PyObject *obj, Vec3r *vec);
+bool Vec2f_ptr_from_PyList(PyObject *obj, Vec2f *vec);
+bool Vec3f_ptr_from_PyList(PyObject *obj, Vec3f *vec);
+bool Vec3r_ptr_from_PyList(PyObject *obj, Vec3r *vec);
+bool Vec2f_ptr_from_PyTuple(PyObject *obj, Vec2f *vec);
+bool Vec3f_ptr_from_PyTuple(PyObject *obj, Vec3f *vec);
+bool Vec3r_ptr_from_PyTuple(PyObject *obj, Vec3r *vec);
 
 int float_array_from_PyObject(PyObject *obj, float *v, int n);
 

Modified: trunk/blender/source/blender/freestyle/intern/python/BPy_FrsNoise.cpp
===================================================================
--- trunk/blender/source/blender/freestyle/intern/python/BPy_FrsNoise.cpp	2013-11-05 00:19:21 UTC (rev 61105)
+++ trunk/blender/source/blender/freestyle/intern/python/BPy_FrsNoise.cpp	2013-11-05 00:51:59 UTC (rev 61106)
@@ -132,16 +132,15 @@
 	PyObject *obj1;
 	float f2, f3;
 	unsigned int i = 4;
+	Vec2f vec;
 
 	if (!PyArg_ParseTupleAndKeywords(args, kwds, "Off|I", (char **)kwlist, &obj1, &f2, &f3, &i))
 		return NULL;
-	Vec2f *v = Vec2f_ptr_from_PyObject(obj1);
-	if (!v) {
+	if (!Vec2f_ptr_from_PyObject(obj1, &vec)) {
 		PyErr_SetString(PyExc_TypeError, "argument 1 must be a 2D vector (either a list of 2 elements or Vector)");
 		return NULL;
 	}
-	float t = self->n->turbulence2(*v, f2, f3, i);
-	delete v;
+	float t = self->n->turbulence2(vec, f2, f3, i);
 	return PyFloat_FromDouble(t);
 }
 
@@ -167,16 +166,15 @@
 	PyObject *obj1;
 	float f2, f3;

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list