Author: ArcRiley
Date: 2008-05-18 14:16:40 -0400 (Sun, 18 May 2008)
New Revision: 1266

Modified:
   trunk/pysoy/include/soy.scenes.pxd
   trunk/pysoy/src/scenes/Scene.pym
Log:
'''Pyrex 0.9.8.2 work''':
  * added Scene._fields children to eliminate isinstance calls
  * cast more methods nogil


Modified: trunk/pysoy/include/soy.scenes.pxd
===================================================================
--- trunk/pysoy/include/soy.scenes.pxd  2008-05-18 17:14:51 UTC (rev 1265)
+++ trunk/pysoy/include/soy.scenes.pxd  2008-05-18 18:16:40 UTC (rev 1266)
@@ -53,24 +53,27 @@
   cdef ode.dSpaceID               _spaceID
   cdef ode.dJointGroupID          _contactGroup
   cdef soy._internals.Children    _bodies
+  cdef soy._internals.Children    _fields
   cdef soy._internals.Children    _joints
   cdef soy._internals.Children    _lights
   cdef soy._internals.PointerSet  _giveFields
   cdef soy._internals.PointerSet  _callFields
   cdef object                     _ambient
   cdef void*                      _stepMutex
-  cdef void                       _stepLock       ( self )
-  cdef int                        _stepTryLock    ( self )
-  cdef void                       _stepUnLock     ( self )
+  cdef void                       _stepLock       ( self )                nogil
+  cdef int                        _stepTryLock    ( self )                nogil
+  cdef void                       _stepUnLock     ( self )                nogil
   cdef ode.dReal                  _stepSize
   cdef ode.dReal                  _friction
   cdef double                     _prevTime
   cdef double                     _time
   # _coreloop methods
   cdef void                       _render         ( self )
-  cdef int                        _steps          ( self )
-  cdef void                       _updateTime     ( self )
-  cdef void                       _callback       ( self, ode.dGeomID, 
ode.dGeomID )
+  cdef int                        _steps          ( self )                nogil
+  cdef void                       _updateTime     ( self )                nogil
+  cdef void                       _callback       ( self, 
+                                                    ode.dGeomID,
+                                                    ode.dGeomID )         nogil
 
 cdef class Landscape (Scene) :
   cdef ode.dHeightfieldDataID     _heightmapID

Modified: trunk/pysoy/src/scenes/Scene.pym
===================================================================
--- trunk/pysoy/src/scenes/Scene.pym    2008-05-18 17:14:51 UTC (rev 1265)
+++ trunk/pysoy/src/scenes/Scene.pym    2008-05-18 18:16:40 UTC (rev 1266)
@@ -40,6 +40,7 @@
     self._spaceID      = ode.dSimpleSpaceCreate(NULL)
     self._contactGroup = ode.dJointGroupCreate(0)
     self._bodies       = soy._internals.Children()
+    self._fields       = soy._internals.Children()
     self._joints       = soy._internals.Children()
     self._lights       = soy._internals.Children()
     self._ambient      = gray
@@ -88,28 +89,22 @@
     self._callFields._empty()
     self._giveFields._empty()
     #
-    self._bodies._iterStart()
-    for _i from 0 <= _i < self._bodies._current :
-      #
-      # isinstance here == BAD, SLOW!
-      if isinstance(<soy.bodies.Body> self._bodies._list[_i], 
-                    soy.fields.Field) :
-        # Make sure every field is in givefields & _give each one
-        if not self._giveFields._has_key(<void*> self._bodies._list[_i]) :
-          (<soy.fields.Field> self._bodies._list[_i])._give(0)
-          self._giveFields._insert(<void*> self._bodies._list[_i])
+    self._fields._iterStart()
+    for _i from 0 <= _i < self._fields._current :
+      # Make sure every field is in givefields & _give each one
+      if not self._giveFields._has_key(<void*> self._fields._list[_i]) :
+        (<soy.fields.Field> self._fields._list[_i])._give(0)
+        self._giveFields._insert(<void*> self._fields._list[_i])
     #
-    for _i from 0 <= _i < self._bodies._current :
-      if isinstance(<soy.bodies.Body> self._bodies._list[_i], 
-                    soy.fields.Field) :
-        # Apply fields; add incompletly applied fields to the list
-        if not (<soy.fields.Field> self._bodies._list[_i])._apply() :
-          pass
-          #self._callFields._insert(self._bodies.list[_i])
+    for _i from 0 <= _i < self._fields._current :
+      # Apply fields; add incompletly applied fields to the list
+      if not (<soy.fields.Field> self._fields._list[_i])._apply() :
+        pass
+        #self._callFields._insert(self._bodies.list[_i])
     #
     # Apply any outstanding fields
     self._callFields._foreach(_runField, NULL)
-    self._bodies._iterDone()
+    self._fields._iterDone()
     #
     self._stepLock()
     _steps = self._steps()
@@ -158,11 +153,11 @@
     gl.glDisable(gl.GL_DEPTH_TEST)
 
 
-  cdef void _updateTime(self) :
+  cdef void _updateTime(self) nogil :
     self._time = _time()
 
 
-  cdef int _steps(self) :
+  cdef int _steps(self) nogil :
     cdef int     _step
     cdef double  _lapsTime
     _lapsTime = _time() - self._prevTime
@@ -174,17 +169,17 @@
     self._prevTime = self._prevTime + (_step * self._stepSize)
     return _step
     
-  cdef void _stepLock(self) :
+  cdef void _stepLock(self) nogil :
     py.PyThread_acquire_lock(self._stepMutex,1)
 
-  cdef int _stepTryLock(self) :
+  cdef int _stepTryLock(self) nogil :
     return py.PyThread_acquire_lock(self._stepMutex,0)
 
-  cdef void _stepUnLock(self) :
+  cdef void _stepUnLock(self) nogil :
     py.PyThread_release_lock(self._stepMutex)
 
 
-  cdef void _callback(self, ode.dGeomID _geomA, ode.dGeomID _geomB) :
+  cdef void _callback(self, ode.dGeomID _geomA, ode.dGeomID _geomB) nogil :
     cdef int                _contactGeoms, _f, _i
     cdef ode.dJointID       _joint
     cdef ode.dContact       _contact

_______________________________________________
PySoy-SVN mailing list
PySoy-SVN@pysoy.org
http://www.pysoy.org/mailman/listinfo/pysoy-svn

Reply via email to