Author: ArcRiley Date: 2008-02-17 15:02:17 -0500 (Sun, 17 Feb 2008) New Revision: 929
Modified: trunk/pysoy/src/_core/_coreLoop.pxi trunk/pysoy/src/bodies._bodies/Body.pxi trunk/pysoy/src/scenes/Scene.pxi trunk/pysoy/src/scenes/soy.scenes.pxd trunk/pysoy/src/scenes/soy.scenes.pyx Log: #901 : trying new Scene._stepLock() mutex system Modified: trunk/pysoy/src/_core/_coreLoop.pxi =================================================================== --- trunk/pysoy/src/_core/_coreLoop.pxi 2008-02-17 18:42:43 UTC (rev 928) +++ trunk/pysoy/src/_core/_coreLoop.pxi 2008-02-17 20:02:17 UTC (rev 929) @@ -67,6 +67,7 @@ _step = _scene._steps() if _step > _maxstep : _maxstep = _step + _scene._stepLock() for j from 0 <= j < _step : _scene._updateTime() _givefields._foreach(_prerunField, NULL) @@ -76,6 +77,7 @@ ode.dJointGroupEmpty(_contactgroup) if j != 0 : _callfields._foreach(_runField, NULL) + _scene._stepUnLock() _scene._bodies.unlock() _scenes.unlock() if _maxstep == 0 : Modified: trunk/pysoy/src/bodies._bodies/Body.pxi =================================================================== --- trunk/pysoy/src/bodies._bodies/Body.pxi 2008-02-17 18:42:43 UTC (rev 928) +++ trunk/pysoy/src/bodies._bodies/Body.pxi 2008-02-17 20:02:17 UTC (rev 929) @@ -168,7 +168,9 @@ def __get__(self) : cdef ode.dVector3 xyz if self._bodyID : + self._scene._stepLock() ode.dBodyCopyPosition(self._bodyID, xyz) + self._scene._stepUnLock() return (xyz[0], xyz[1], xyz[2]) else : return (self._position[0], self._position[1], self._position[2]) @@ -178,7 +180,9 @@ if len(value)!=3 : raise TypeError('Must provide (x,y,z)') if self._bodyID : + self._scene._stepLock() ode.dBodySetPosition(self._bodyID, value[0], value[1], value[2]) + self._scene._stepUnLock() else : self._position[0] = value[0] self._position[1] = value[1] @@ -194,7 +198,9 @@ def __get__(self) : cdef ode.dReal *real if self._bodyID : + self._scene._stepLock() real = <ode.dReal *> ode.dBodyGetAngularVel(self._bodyID) + self._scene._stepUnLock() return (real[0], real[1], real[2]) else : return (self._angularVel[0], self._angularVel[1], self._angularVel[2]) @@ -204,7 +210,9 @@ if len(value)!=3 : raise TypeError('Must provide (x,y,z)') if self._bodyID : + self._scene._stepLock() ode.dBodySetAngularVel(self._bodyID, value[0], value[1], value[2]) + self._scene._stepUnLock() else : self._angularVel[0] = value[0] self._angularVel[1] = value[1] @@ -220,7 +228,9 @@ def __get__(self) : cdef ode.dReal *real if self._bodyID : + self._scene._stepLock() real = <ode.dReal *> ode.dBodyGetLinearVel(self._bodyID) + self._scene._stepUnLock() return (real[0], real[1], real[2]) else : return (self._linearVel[0], self._linearVel[1], self._linearVel[2]) @@ -230,9 +240,9 @@ if len(value)!=3 : raise TypeError('Must provide (x,y,z)') if self._bodyID : - self._scene._bodies.lock() + self._scene._stepLock() ode.dBodySetLinearVel(self._bodyID, value[0], value[1], value[2]) - self._scene._bodies.unlock() + self._scene._stepUnLock() else : self._linearVel[0] = value[0] self._linearVel[1] = value[1] Modified: trunk/pysoy/src/scenes/Scene.pxi =================================================================== --- trunk/pysoy/src/scenes/Scene.pxi 2008-02-17 18:42:43 UTC (rev 928) +++ trunk/pysoy/src/scenes/Scene.pxi 2008-02-17 20:02:17 UTC (rev 929) @@ -28,15 +28,16 @@ ''' def __cinit__(self, *args, **kw) : - global _scenes - self._bodies = soy._internals.Children() - self._joints = soy._internals.Children() - self._lights = soy._internals.Children() - self._worldID = ode.dWorldCreate() - self._spaceID = ode.dSimpleSpaceCreate(NULL) - self._stepSize = 0.01 - self._prevTime = _time() - self._ambient = soy.colors.gray + from soy.colors import gray + self._worldID = ode.dWorldCreate() + self._spaceID = ode.dSimpleSpaceCreate(NULL) + self._bodies = soy._internals.Children() + self._joints = soy._internals.Children() + self._lights = soy._internals.Children() + self._ambient = gray + self._stepSize = 0.01 + self._prevTime = _time() + self._stepMutex = py.PyThread_allocate_lock() _scenes.lock() _scenes.append(<void *>self) _scenes.unlock() @@ -109,7 +110,16 @@ self._prevTime = self._prevTime + (_step * self._stepSize) return _step + cdef void _stepLock(self) : + py.PyThread_acquire_lock(self._stepMutex,1) + cdef int _stepTryLock(self) : + return py.PyThread_acquire_lock(self._stepMutex,0) + + cdef void _stepUnLock(self) : + py.PyThread_release_lock(self._stepMutex) + + property gravity : '''Scene gravity Modified: trunk/pysoy/src/scenes/soy.scenes.pxd =================================================================== --- trunk/pysoy/src/scenes/soy.scenes.pxd 2008-02-17 18:42:43 UTC (rev 928) +++ trunk/pysoy/src/scenes/soy.scenes.pxd 2008-02-17 20:02:17 UTC (rev 929) @@ -23,7 +23,6 @@ cimport py cimport stdio cimport soy._internals -cimport soy.colors cdef void* _getScenes ( ) @@ -33,11 +32,15 @@ cdef soy._internals.Children _bodies cdef soy._internals.Children _joints cdef soy._internals.Children _lights - cdef soy.colors.Color _ambient + cdef object _ambient + cdef void* _stepMutex + cdef void _stepLock ( self ) + cdef int _stepTryLock ( self ) + cdef void _stepUnLock ( self ) cdef ode.dReal _stepSize cdef double _prevTime cdef double _time # _coreloop methods - cdef void _coreRender(self) - cdef int _steps(self) - cdef void _updateTime(self) + cdef void _coreRender ( self ) + cdef int _steps ( self ) + cdef void _updateTime ( self ) Modified: trunk/pysoy/src/scenes/soy.scenes.pyx =================================================================== --- trunk/pysoy/src/scenes/soy.scenes.pyx 2008-02-17 18:42:43 UTC (rev 928) +++ trunk/pysoy/src/scenes/soy.scenes.pyx 2008-02-17 20:02:17 UTC (rev 929) @@ -32,8 +32,7 @@ cimport soy.joints cimport soy.bodies.fields cimport soy.bodies._bodies -import soy.colors +cimport soy.colors include "_getScenes.pxi" - include "Scene.pxi" _______________________________________________ PySoy-SVN mailing list PySoy-SVN@pysoy.org http://www.pysoy.org/mailman/listinfo/pysoy-svn