Author: ArcRiley
Date: 2008-03-08 01:36:03 -0500 (Sat, 08 Mar 2008)
New Revision: 1098

Modified:
   trunk/pysoy/examples/collide_blocks.py
   trunk/pysoy/src/_datatypes/VertexList.pxi
   trunk/pysoy/src/bodies._bodies/Body.pxi
   trunk/pysoy/src/bodies._bodies/Camera.pxi
   trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pxd
   trunk/pysoy/src/models/Liquid.pxi
Log:
Ticket #901 :
  * this segfaults almost immediatly, but may be in the right direction


Modified: trunk/pysoy/examples/collide_blocks.py
===================================================================
--- trunk/pysoy/examples/collide_blocks.py      2008-03-08 06:02:26 UTC (rev 
1097)
+++ trunk/pysoy/examples/collide_blocks.py      2008-03-08 06:36:03 UTC (rev 
1098)
@@ -12,7 +12,9 @@
 #m = soy.bodies.fields.Monopole(sce)
 #m.shape=soy.shapes.Sphere(15)
 #m.multiplier=.01
+print 'test'
 bks = blocks.blocks(sce)
+print 'foo'
 fps = soy.textures.Print()
 
 scr = soy.Screen()

Modified: trunk/pysoy/src/_datatypes/VertexList.pxi
===================================================================
--- trunk/pysoy/src/_datatypes/VertexList.pxi   2008-03-08 06:02:26 UTC (rev 
1097)
+++ trunk/pysoy/src/_datatypes/VertexList.pxi   2008-03-08 06:36:03 UTC (rev 
1098)
@@ -216,7 +216,7 @@
     cdef int                     _i
 
     _body = <soy.bodies._bodies.Body> __body
-    _scene = _body._scene
+    _scene = <soy.scenes.Scene> _body._scene
 
     if _scene._lights._current > 0 :
       _light = <soy.bodies._bodies.Light> _scene._lights._list[0]

Modified: trunk/pysoy/src/bodies._bodies/Body.pxi
===================================================================
--- trunk/pysoy/src/bodies._bodies/Body.pxi     2008-03-08 06:02:26 UTC (rev 
1097)
+++ trunk/pysoy/src/bodies._bodies/Body.pxi     2008-03-08 06:36:03 UTC (rev 
1098)
@@ -37,15 +37,16 @@
     if scene == None :
       self._copySet(<ode.dReal*> py.PyMem_Malloc(sizeof(float) * 25))
       self._bodyID = NULL
-      self._scene  = None
+      self._scene  = NULL
     elif isinstance(scene, soy.scenes.Scene) :
       (<soy.scenes.Scene> scene)._stepLock()
-      self._scene = scene
+      py.Py_INCREF(scene)
+      self._scene = <void*> scene
       self._create()
       (<soy.scenes.Scene> scene)._bodies._append(<void*> self)
       (<soy.scenes.Scene> scene)._stepUnLock()      
     else :
-      self._scene    = None
+      self._scene    = NULL
       self._position = NULL
       raise TypeError('scene must be instance of soy.scenes.Scene or None')
     #
@@ -66,6 +67,7 @@
       self._remove()
       self._destroy()
       (<soy.scenes.Scene> self._scene)._stepUnLock()
+      py.Py_DECREF(<soy.scenes.Scene> self._scene)
     elif self._position != NULL :
       # If not in a scene and local storage alloc'ed, free it
       py.PyMem_Free(self._position)
@@ -111,7 +113,7 @@
     orientation, velocity, and rotation are all reset to (0,0,0).
     '''
     def __get__(self) :
-      return self._scene
+      return <soy.scenes.Scene> self._scene
     #
     def __set__(self, soy.scenes.Scene _newscene) :
       cdef ode.dReal   _store[25]
@@ -131,10 +133,12 @@
           ode.dGeomSetBody(_geomID, NULL)
           ode.dSpaceRemove((<soy.scenes.Scene> self._scene)._spaceID, _geomID)
         (<soy.scenes.Scene> self._scene)._stepUnLock()
+        py.Py_DECREF(<soy.scenes.Scene> self._scene)
       else :
         self._copyTo(_store)
         py.PyMem_Free(self._position)
-      self._scene = _newscene
+      py.Py_INCREF(_newscene)
+      self._scene = <void*> _newscene
       (<soy.scenes.Scene> self._scene)._stepLock()
       self._create()
       if _geomID != NULL :
@@ -146,7 +150,7 @@
     #
     def __del__(self) :
       cdef ode.dReal* _store
-      if not self._scene :
+      if self._scene == NULL :
         return
       _store = <ode.dReal*> py.PyMem_Malloc(sizeof(float) * 25)
       (<soy.scenes.Scene> self._scene)._stepLock()

Modified: trunk/pysoy/src/bodies._bodies/Camera.pxi
===================================================================
--- trunk/pysoy/src/bodies._bodies/Camera.pxi   2008-03-08 06:02:26 UTC (rev 
1097)
+++ trunk/pysoy/src/bodies._bodies/Camera.pxi   2008-03-08 06:36:03 UTC (rev 
1098)
@@ -149,7 +149,9 @@
     _mtx[15] = 1.0
     gl.glLoadMatrixf(_mtx)
     gl.glTranslatef(-self._position[0], -self._position[1], -self._position[2])
+    stdio.printf('Test1\n')
     (<soy.scenes.Scene> self._scene)._render()
+    stdio.printf('Test2\n')
     #
     # Framerate calc
     self._rpt = (self._rpt + 1) % 16

Modified: trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pxd
===================================================================
--- trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pxd       2008-03-08 
06:02:26 UTC (rev 1097)
+++ trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pxd       2008-03-08 
06:36:03 UTC (rev 1098)
@@ -22,7 +22,7 @@
 
 cdef class Body :
   cdef ode.dBodyID              _bodyID
-  cdef object                   _scene
+  cdef void*                    _scene
   cdef void*                    _model
   cdef void*                    _shape
   cdef soy._datatypes.HashTable _tags

Modified: trunk/pysoy/src/models/Liquid.pxi
===================================================================
--- trunk/pysoy/src/models/Liquid.pxi   2008-03-08 06:02:26 UTC (rev 1097)
+++ trunk/pysoy/src/models/Liquid.pxi   2008-03-08 06:36:03 UTC (rev 1098)
@@ -100,7 +100,6 @@
     gl.glEnable(gl.GL_DEPTH_TEST)
     #
     #RENDER BODIES
-    _scene = ( <soy.bodies._bodies.Body> _body)._scene
     gl.glEnable(gl.GL_FOG)
     gl.glEnableClientState(gl.GL_FOG_COORDINATE_ARRAY_EXT)
     gl.glFogi(gl.GL_FOG_MODE, gl.GL_LINEAR)
@@ -113,6 +112,7 @@
     gl.glTranslatef(-pos[0],-pos[1], -pos[2])
     #
     # We need not _iterStart here since _bodies is already iterating via Scene
+    _scene = <soy.scenes.Scene> (<soy.bodies._bodies.Body> _body)._scene
     for _i from 0 <= _i < _scene._bodies._current :
       if _body != (<void*> _scene._bodies._list[_i]) :
         (<soy.bodies._bodies.Body>

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

Reply via email to