[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19108] trunk/blender/source: Minor speedups for the BGE

Campbell Barton ideasman42 at gmail.com
Wed Feb 25 07:43:06 CET 2009


Revision: 19108
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19108
Author:   campbellbarton
Date:     2009-02-25 07:43:03 +0100 (Wed, 25 Feb 2009)

Log Message:
-----------
Minor speedups for the BGE
* Where possible use vec.setValue(x,y,z) to assign values to a vector instead of vec= MT_Vector3(x,y,z), for MT_Point and MT_Matrix types too.
* Comparing TexVerts was creating 10 MT_Vector types - instead compare as floats.
* Added SG_Spatial::SetWorldFromLocalTransform() since the local transform is use for world transform in some cases.
* removed some unneeded vars from UpdateChildCoordinates functions 
* Py API - Mouse, Ray, Radar sensors - use PyObjectFrom(vec) rather then filling the lists in each function. Use METH_NOARGS for get*() functions.

Modified Paths:
--------------
    trunk/blender/source/blender/python/api2_2x/Mathutils.c
    trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
    trunk/blender/source/gameengine/Converter/BL_MeshDeformer.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
    trunk/blender/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_MouseFocusSensor.h
    trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.h
    trunk/blender/source/gameengine/Ketsji/KX_RaySensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_RaySensor.h
    trunk/blender/source/gameengine/Ketsji/KX_SG_BoneParentNodeRelationship.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SG_NodeRelationships.cpp
    trunk/blender/source/gameengine/Ketsji/KX_TrackToActuator.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_TexVert.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_TexVert.h
    trunk/blender/source/gameengine/SceneGraph/SG_BBox.cpp
    trunk/blender/source/gameengine/SceneGraph/SG_Spatial.cpp
    trunk/blender/source/gameengine/SceneGraph/SG_Spatial.h

Modified: trunk/blender/source/blender/python/api2_2x/Mathutils.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Mathutils.c	2009-02-25 03:26:02 UTC (rev 19107)
+++ trunk/blender/source/blender/python/api2_2x/Mathutils.c	2009-02-25 06:43:03 UTC (rev 19108)
@@ -350,7 +350,7 @@
 PyObject *M_Mathutils_Rand(PyObject * self, PyObject * args)
 {
 	float high, low, range;
-	double rand;
+	double drand;
 	//initializers
 	high = 1.0;
 	low = 0.0;
@@ -364,14 +364,14 @@
 			"Mathutils.Rand(): high value should be larger than low value\n"));
 
 	//get the random number 0 - 1
-	rand = BLI_drand();
+	drand = BLI_drand();
 
 	//set it to range
 	range = high - low;
-	rand = rand * range;
-	rand = rand + low;
+	drand = drand * range;
+	drand = drand + low;
 
-	return PyFloat_FromDouble(rand);
+	return PyFloat_FromDouble(drand);
 }
 //----------------------------------VECTOR FUNCTIONS---------------------
 //----------------------------------Mathutils.Vector() ------------------

Modified: trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2009-02-25 03:26:02 UTC (rev 19107)
+++ trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2009-02-25 06:43:03 UTC (rev 19108)
@@ -593,7 +593,7 @@
 	MT_Point2 uv2[4];
 	const char *uvName = "", *uv2Name = "";
 
-	uv[0]= uv[1]= uv[2]= uv[3]= MT_Point2(0.0f, 0.0f);
+	
 	uv2[0]= uv2[1]= uv2[2]= uv2[3]= MT_Point2(0.0f, 0.0f);
 
 	if( validface ) {
@@ -607,12 +607,12 @@
 		material->tile	= tface->tile;
 		material->mode	= tface->mode;
 			
-		uv[0]	= MT_Point2(tface->uv[0]);
-		uv[1]	= MT_Point2(tface->uv[1]);
-		uv[2]	= MT_Point2(tface->uv[2]);
+		uv[0].setValue(tface->uv[0]);
+		uv[1].setValue(tface->uv[1]);
+		uv[2].setValue(tface->uv[2]);
 
 		if (mface->v4) 
-			uv[3]	= MT_Point2(tface->uv[3]);
+			uv[3].setValue(tface->uv[3]);
 
 		uvName = tfaceName;
 	} 
@@ -622,6 +622,8 @@
 		material->mode		= default_face_mode;	
 		material->transp	= TF_SOLID;
 		material->tile		= 0;
+		
+		uv[0]= uv[1]= uv[2]= uv[3]= MT_Point2(0.0f, 0.0f);
 	}
 
 	// with ztransp enabled, enforce alpha blending mode
@@ -665,14 +667,14 @@
 					{
 						MT_Point2 uvSet[4];
 
-						uvSet[0]	= MT_Point2(layer.face->uv[0]);
-						uvSet[1]	= MT_Point2(layer.face->uv[1]);
-						uvSet[2]	= MT_Point2(layer.face->uv[2]);
+						uvSet[0].setValue(layer.face->uv[0]);
+						uvSet[1].setValue(layer.face->uv[1]);
+						uvSet[2].setValue(layer.face->uv[2]);
 
 						if (mface->v4) 
-							uvSet[3]	= MT_Point2(layer.face->uv[3]);
+							uvSet[3].setValue(layer.face->uv[3]);
 						else
-							uvSet[3]	= MT_Point2(0.0f, 0.0f);
+							uvSet[3].setValue(0.0f, 0.0f);
 
 						if (isFirstSet)
 						{
@@ -790,10 +792,10 @@
 		MT_Vector4 tan0(0,0,0,0), tan1(0,0,0,0), tan2(0,0,0,0), tan3(0,0,0,0);
 
 		/* get coordinates, normals and tangents */
-		pt0 = MT_Point3(mvert[mface->v1].co);
-		pt1 = MT_Point3(mvert[mface->v2].co);
-		pt2 = MT_Point3(mvert[mface->v3].co);
-		pt3 = (mface->v4)? MT_Point3(mvert[mface->v4].co): MT_Point3(0.0, 0.0, 0.0);
+		pt0.setValue(mvert[mface->v1].co);
+		pt1.setValue(mvert[mface->v2].co);
+		pt2.setValue(mvert[mface->v3].co);
+		if (mface->v4) pt3.setValue(mvert[mface->v4].co);
 
 		if(mface->flag & ME_SMOOTH) {
 			float n0[3], n1[3], n2[3], n3[3];
@@ -894,12 +896,12 @@
 					
 					visible = !((mface->flag & ME_HIDE)||(tface->mode & TF_INVISIBLE));
 					
-					uv0 = MT_Point2(tface->uv[0]);
-					uv1 = MT_Point2(tface->uv[1]);
-					uv2 = MT_Point2(tface->uv[2]);
+					uv0.setValue(tface->uv[0]);
+					uv1.setValue(tface->uv[1]);
+					uv2.setValue(tface->uv[2]);
 	
 					if (mface->v4)
-						uv3 = MT_Point2(tface->uv[3]);
+						uv3.setValue(tface->uv[3]);
 				} 
 				else {
 					/* no texfaces, set COLLSION true and everything else FALSE */
@@ -960,7 +962,7 @@
 					polymat->m_diffuse = MT_Vector3(ma->r, ma->g, ma->b)*(ma->emit + ma->ref);
 				}
 				else {
-					polymat->m_specular = MT_Vector3(0.0f,0.0f,0.0f);
+					polymat->m_specular.setValue(0.0f,0.0f,0.0f);
 					polymat->m_shininess = 35.0;
 				}
 			}
@@ -1911,21 +1913,14 @@
 			MT_Matrix3x3 angor;			
 			if (converter->addInitFromFrame) blenderscene->r.cfra=blenderscene->r.sfra;
 			
-			MT_Point3 pos = MT_Point3(
+			MT_Point3 pos;
+			pos.setValue(
 				blenderobject->loc[0]+blenderobject->dloc[0],
 				blenderobject->loc[1]+blenderobject->dloc[1],
 				blenderobject->loc[2]+blenderobject->dloc[2]
 			);
-			MT_Vector3 eulxyz = MT_Vector3(
-				blenderobject->rot[0],
-				blenderobject->rot[1],
-				blenderobject->rot[2]
-			);
-			MT_Vector3 scale = MT_Vector3(
-				blenderobject->size[0],
-				blenderobject->size[1],
-				blenderobject->size[2]
-			);
+			MT_Vector3 eulxyz(blenderobject->rot);
+			MT_Vector3 scale(blenderobject->size);
 			if (converter->addInitFromFrame){//rcruiz
 				float eulxyzPrev[3];
 				blenderscene->r.cfra=blenderscene->r.sfra-1;
@@ -2113,21 +2108,13 @@
 							if (converter->addInitFromFrame) 
 								blenderscene->r.cfra=blenderscene->r.sfra;
 							
-							MT_Point3 pos = MT_Point3(
+							MT_Point3 pos(
 								blenderobject->loc[0]+blenderobject->dloc[0],
 								blenderobject->loc[1]+blenderobject->dloc[1],
 								blenderobject->loc[2]+blenderobject->dloc[2]
 							);
-							MT_Vector3 eulxyz = MT_Vector3(
-								blenderobject->rot[0],
-								blenderobject->rot[1],
-								blenderobject->rot[2]
-							);
-							MT_Vector3 scale = MT_Vector3(
-								blenderobject->size[0],
-								blenderobject->size[1],
-								blenderobject->size[2]
-							);
+							MT_Vector3 eulxyz(blenderobject->rot);
+							MT_Vector3 scale(blenderobject->size);
 							if (converter->addInitFromFrame){//rcruiz
 								float eulxyzPrev[3];
 								blenderscene->r.cfra=blenderscene->r.sfra-1;

Modified: trunk/blender/source/gameengine/Converter/BL_MeshDeformer.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_MeshDeformer.cpp	2009-02-25 03:26:02 UTC (rev 19107)
+++ trunk/blender/source/gameengine/Converter/BL_MeshDeformer.cpp	2009-02-25 06:43:03 UTC (rev 19108)
@@ -51,7 +51,6 @@
 bool BL_MeshDeformer::Apply(RAS_IPolyMaterial*)
 {
 	size_t i;
-	float *co;
 
 	// only apply once per frame if the mesh is actually modified
 	if(m_pMeshObject->MeshModified() &&
@@ -70,8 +69,7 @@
 				//	For each vertex
 				for(i=it.startvertex; i<it.endvertex; i++) {
 					RAS_TexVert& v = it.vertex[i];
-					co = m_bmesh->mvert[v.getOrigIndex()].co;
-					v.SetXYZ(MT_Point3(co));
+					v.SetXYZ(m_bmesh->mvert[v.getOrigIndex()].co);
 				}
 			}
 		}

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp	2009-02-25 03:26:02 UTC (rev 19107)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp	2009-02-25 06:43:03 UTC (rev 19108)
@@ -690,9 +690,9 @@
 	switch (axis)
 	{	
 		case 0: //x axis
-			ori = MT_Vector3(orimat[0][2], orimat[1][2], orimat[2][2]); //pivot axis
+			ori.setValue(orimat[0][2], orimat[1][2], orimat[2][2]); //pivot axis
 			if (MT_abs(vect.dot(ori)) > 1.0-3.0*MT_EPSILON) //is the vector paralell to the pivot?
-				ori = MT_Vector3(orimat[0][1], orimat[1][1], orimat[2][1]); //change the pivot!
+				ori.setValue(orimat[0][1], orimat[1][1], orimat[2][1]); //change the pivot!
 			if (fac == 1.0) {
 				x = vect;
 			} else {
@@ -705,9 +705,9 @@
 			z = x.cross(y);
 			break;
 		case 1: //y axis
-			ori = MT_Vector3(orimat[0][0], orimat[1][0], orimat[2][0]);
+			ori.setValue(orimat[0][0], orimat[1][0], orimat[2][0]);
 			if (MT_abs(vect.dot(ori)) > 1.0-3.0*MT_EPSILON)
-				ori = MT_Vector3(orimat[0][2], orimat[1][2], orimat[2][2]);
+				ori.setValue(orimat[0][2], orimat[1][2], orimat[2][2]);
 			if (fac == 1.0) {
 				y = vect;
 			} else {
@@ -720,9 +720,9 @@
 			x = y.cross(z);
 			break;
 		case 2: //z axis
-			ori = MT_Vector3(orimat[0][1], orimat[1][1], orimat[2][1]);
+			ori.setValue(orimat[0][1], orimat[1][1], orimat[2][1]);
 			if (MT_abs(vect.dot(ori)) > 1.0-3.0*MT_EPSILON)
-				ori = MT_Vector3(orimat[0][0], orimat[1][0], orimat[2][0]);
+				ori.setValue(orimat[0][0], orimat[1][0], orimat[2][0]);
 			if (fac == 1.0) {
 				z = vect;
 			} else {
@@ -741,9 +741,9 @@
 	x.normalize(); //normalize the vectors
 	y.normalize();
 	z.normalize();
-	orimat = MT_Matrix3x3(	x[0],y[0],z[0],
-							x[1],y[1],z[1],
-							x[2],y[2],z[2]);
+	orimat.setValue(	x[0],y[0],z[0],
+						x[1],y[1],z[1],
+						x[2],y[2],z[2]);
 	if (GetSGNode()->GetSGParent() != NULL)
 	{
 		// the object is a child, adapt its local orientation so that 
@@ -945,13 +945,11 @@
 
 const MT_Point3& KX_GameObject::NodeGetWorldPosition() const
 {
-	static MT_Point3 defaultPosition = MT_Point3(0.0, 0.0, 0.0);
-
 	// check on valid node in case a python controller holds a reference to a deleted object
-	if (!GetSGNode())
-		return defaultPosition;
-
-	return GetSGNode()->GetWorldPosition();
+	if (GetSGNode())
+		return GetSGNode()->GetWorldPosition();
+	else
+		return MT_Point3(0.0, 0.0, 0.0);
 }
 
 /* Suspend/ resume: for the dynamic behaviour, there is a simple

Modified: trunk/blender/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp	2009-02-25 03:26:02 UTC (rev 19107)
+++ trunk/blender/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp	2009-02-25 06:43:03 UTC (rev 19108)
@@ -42,6 +42,7 @@
 #include "KX_Scene.h"
 #include "KX_Camera.h"
 #include "KX_MouseFocusSensor.h"
+#include "KX_PyMath.h"
 
 #include "KX_RayCast.h"
 #include "KX_IPhysicsController.h"
@@ -320,12 +321,12 @@
 };
 
 PyMethodDef KX_MouseFocusSensor::Methods[] = {
-	{"getRayTarget", (PyCFunction) KX_MouseFocusSensor::sPyGetRayTarget, METH_VARARGS, (PY_METHODCHAR)GetRayTarget_doc},
-	{"getRaySource", (PyCFunction) KX_MouseFocusSensor::sPyGetRaySource, METH_VARARGS, (PY_METHODCHAR)GetRaySource_doc},
-	{"getHitObject",(PyCFunction) KX_MouseFocusSensor::sPyGetHitObject,METH_VARARGS, (PY_METHODCHAR)GetHitObject_doc},
-	{"getHitPosition",(PyCFunction) KX_MouseFocusSensor::sPyGetHitPosition,METH_VARARGS, (PY_METHODCHAR)GetHitPosition_doc},

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list