Author: ArcRiley Date: 2008-05-15 18:19:30 -0400 (Thu, 15 May 2008) New Revision: 1257
Modified: trunk/pysoy/include/soy.bodies.pxd trunk/pysoy/include/soy.models.pxd trunk/pysoy/setup.py trunk/pysoy/src/bodies/Body.pym trunk/pysoy/src/bodies/Camera.pym trunk/pysoy/src/bodies/Light.pym trunk/pysoy/src/bodies/__init__.pym trunk/pysoy/src/fields/Buoyancy.pym trunk/pysoy/src/models/Liquid.pym trunk/pysoy/src/models/Mesh.pym trunk/pysoy/src/models/Model.pym trunk/pysoy/src/models/Shape.pym Log: Ticket #901 : * upgrade to Pyrex 0.9.8 * implement cyclic cimport fix in bodies * update API respectively, removing redundant typecasts * nogil: in use for bodies Modified: trunk/pysoy/include/soy.bodies.pxd =================================================================== --- trunk/pysoy/include/soy.bodies.pxd 2008-05-15 17:35:45 UTC (rev 1256) +++ trunk/pysoy/include/soy.bodies.pxd 2008-05-15 22:19:30 UTC (rev 1257) @@ -19,12 +19,20 @@ cimport ode cimport soy._datatypes +cimport soy._internals +cimport soy.models +cimport soy.scenes +cimport soy.shapes +cdef class soy.models.Model +cdef class soy.scenes.Scene (soy._internals.Loopable) +cdef class soy.shapes.Shape + cdef class Body : cdef ode.dBodyID _bodyID - cdef void* _scene - cdef void* _model - cdef void* _shape + cdef soy.scenes.Scene _scene + cdef soy.models.Model _model + cdef soy.shapes.Shape _shape cdef soy._datatypes.HashTable _tags cdef ode.dMass _mass cdef ode.dReal* _position @@ -42,10 +50,10 @@ cdef void _copyFrom ( self, ode.dReal* ) cdef void _addForce ( self, ode.dVector3 ) # WindowLoop functions - cdef void _render ( self ) - cdef void _coreCreateVertFogCoords ( self ) - cdef void _getModelview ( self, float* ) - cdef void _getModelviewInv ( self, float* ) + cdef void _render ( self ) nogil + cdef void _calcFogCoords ( self ) nogil + cdef void _getModelview ( self, float* ) nogil + cdef void _getModelviewInv ( self, float* ) nogil cdef class Camera (Body) : @@ -54,7 +62,7 @@ cdef int _rpt cdef double _rtimes[16] # WindowLoop functions - cdef void _project ( self ) + cdef void _project ( self ) nogil cdef class Light (Body) : @@ -63,5 +71,5 @@ cdef object _diffuse cdef object _specular # WindowLoop functions - cdef void _on ( self, int ) - cdef void _off ( self, int ) + cdef void _on ( self, int ) nogil + cdef void _off ( self, int ) nogil Modified: trunk/pysoy/include/soy.models.pxd =================================================================== --- trunk/pysoy/include/soy.models.pxd 2008-05-15 17:35:45 UTC (rev 1256) +++ trunk/pysoy/include/soy.models.pxd 2008-05-15 22:19:30 UTC (rev 1257) @@ -31,6 +31,7 @@ # # WindowLoop functions cdef void _render ( self, void* ) + cdef void _calcFogCoords ( self, float ) cdef class Mesh (Model) : @@ -71,5 +72,5 @@ cdef soy.colors.Color _color # # WindowLoop functions - cdef void _renderSurf ( self ) - cdef void _renderBottom ( self ) + cdef void _renderSurf ( self ) + cdef void _renderBottom ( self ) Modified: trunk/pysoy/setup.py =================================================================== --- trunk/pysoy/setup.py 2008-05-15 17:35:45 UTC (rev 1256) +++ trunk/pysoy/setup.py 2008-05-15 22:19:30 UTC (rev 1257) @@ -26,10 +26,8 @@ from distutils.extension import Extension from Pyrex.Compiler import Main -if (Main.Version.version < '0.9.6.4' or - Main.Version.version == '0.9.7' or - Main.Version.version == '0.9.7.1' ) : - raise SystemError('Pyrex version 0.9.6.4 or >=0.9.7.2 is required.') +if Main.Version.version < '0.9.8' : + raise SystemError('Pyrex version 0.9.8 is required.') version = 'Trunk' modules = { Modified: trunk/pysoy/src/bodies/Body.pym =================================================================== --- trunk/pysoy/src/bodies/Body.pym 2008-05-15 17:35:45 UTC (rev 1256) +++ trunk/pysoy/src/bodies/Body.pym 2008-05-15 22:19:30 UTC (rev 1257) @@ -35,23 +35,22 @@ *args, **keywords) : # # Preset to avoid threading bugs - self._model = NULL - self._shape = NULL + self._model = None + self._shape = None self._tags = soy._datatypes.HashTable() # if scene == None : self._copySet(<ode.dReal*> py.PyMem_Malloc(sizeof(float) * 25)) self._bodyID = NULL - self._scene = NULL + self._scene = None elif isinstance(scene, soy.scenes.Scene) : - (<soy.scenes.Scene> scene)._stepLock() - py.Py_INCREF(scene) - self._scene = <void*> scene + self._scene = scene + self._scene._stepLock() self._create() - (<soy.scenes.Scene> scene)._bodies._append(<void*> self) - (<soy.scenes.Scene> scene)._stepUnLock() + self._scene._bodies._append(<void*> self) + self._scene._stepUnLock() else : - self._scene = NULL + self._scene = None self._position = NULL raise TypeError('scene must be instance of soy.scenes.Scene or None') # @@ -67,19 +66,14 @@ def __dealloc__(self) : - if self._bodyID != NULL : - (<soy.scenes.Scene> self._scene)._stepLock() + if self._scene is not None : + self._scene._stepLock() self._remove() self._destroy() - (<soy.scenes.Scene> self._scene)._stepUnLock() - py.Py_DECREF(<soy.scenes.Scene> self._scene) + self._scene._stepUnLock() elif self._position != NULL : # If not in a scene and local storage alloc'ed, free it py.PyMem_Free(self._position) - # - # cleanup _model - if self._model != NULL : - py.Py_DECREF(<soy.models.Model> self._model) def distance(self, Body myBody) : @@ -91,7 +85,7 @@ cdef ode.dGeomID _ray cdef ode.dContactGeom cg[10] cdef ode.dSpaceID _spaceID - _spaceID = (<soy.scenes.Scene> self._scene)._spaceID + _spaceID = self._scene._spaceID _ray = ode.dCreateRay(_spaceID,1000) ode.dGeomRaySet(_ray, self._position[0], self._position[1], self._position[2], @@ -120,52 +114,51 @@ orientation, velocity, and rotation are all reset to (0,0,0). ''' def __get__(self) : - return <soy.scenes.Scene> self._scene + return self._scene # def __set__(self, soy.scenes.Scene _newscene) : cdef ode.dReal _store[25] cdef ode.dGeomID _geomID # # Preset _geomID for speed - if self._shape == NULL : + if self._shape is None : _geomID = NULL else : - _geomID = (<soy.shapes.Shape> self._shape)._geomID - if self._bodyID != NULL : - (<soy.scenes.Scene> self._scene)._stepLock() + _geomID = self._shape._geomID + if self._scene is not None : + self._scene._stepLock() self._copyTo(_store) self._remove() self._destroy() - if _geomID != NULL : - 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) + if self._shape is not None : + ode.dGeomSetBody(self._shape._geomID, NULL) + ode.dSpaceRemove(self._scene._spaceID, self._shape._geomID) + self._scene._stepUnLock() else : self._copyTo(_store) py.PyMem_Free(self._position) - py.Py_INCREF(_newscene) - self._scene = <void*> _newscene - (<soy.scenes.Scene> self._scene)._stepLock() - self._create() - if _geomID != NULL : - ode.dGeomSetBody(_geomID, self._bodyID) - ode.dSpaceAdd((<soy.scenes.Scene> self._scene)._spaceID, _geomID) - self._copyFrom(_store) - self._append() - (<soy.scenes.Scene> self._scene)._stepUnLock() + self._scene = _newscene + if self._scene is not None : + self._scene._stepLock() + self._create() + if self._shape is not None : + ode.dGeomSetBody(self._shape._geomID, self._bodyID) + ode.dSpaceAdd(self._scene._spaceID, self._shape._geomID) + self._copyFrom(_store) + self._append() + self._scene._stepUnLock() # def __del__(self) : cdef ode.dReal* _store - if self._scene == NULL : + if self._scene is None : return _store = <ode.dReal*> py.PyMem_Malloc(sizeof(float) * 25) - (<soy.scenes.Scene> self._scene)._stepLock() + self._scene._stepLock() self._copyTo(_store) self._remove() self._destroy() self._copySet(_store) - (<soy.scenes.Scene> self._scene)._stepUnLock() + self._scene._stepUnLock() property tags : @@ -216,10 +209,10 @@ raise TypeError('Must provide a tuple, list, or soy._datatype.BodyPosition') if len(value)!=3 : raise TypeError('Must provide (x,y,z)') - if self._bodyID != NULL : - (<soy.scenes.Scene> self._scene)._stepLock() + if self._scene is not None : + self._scene._stepLock() ode.dBodySetPosition(self._bodyID, value[0], value[1], value[2]) - (<soy.scenes.Scene> self._scene)._stepUnLock() + self._scene._stepUnLock() else : self._position[0] = value[0] self._position[1] = value[1] @@ -239,10 +232,10 @@ raise TypeError('Must provide a tuple or list') if len(value)!=3 : raise TypeError('Must provide (x,y,z)') - if self._bodyID != NULL : - (<soy.scenes.Scene> self._scene)._stepLock() + if self._scene is not None : + self._scene._stepLock() ode.dBodySetAngularVel(self._bodyID, value[0], value[1], value[2]) - (<soy.scenes.Scene> self._scene)._stepUnLock() + self._scene._stepUnLock() else : self._angularVel[0] = value[0] self._angularVel[1] = value[1] @@ -262,10 +255,10 @@ raise TypeError('Must provide a tuple or list') if len(value)!=3 : raise TypeError('Must provide (x,y,z)') - if self._bodyID != NULL : - (<soy.scenes.Scene> self._scene)._stepLock() + if self._scene is not None : + self._scene._stepLock() ode.dBodySetLinearVel(self._bodyID, value[0], value[1], value[2]) - (<soy.scenes.Scene> self._scene)._stepUnLock() + self._scene._stepUnLock() else : self._linearVel[0] = value[0] self._linearVel[1] = value[1] @@ -279,31 +272,16 @@ Defaults to None. ''' def __get__(self) : - if self._model == NULL : - return None - return <soy.models.Model> self._model + return self._model def __set__(self, _model) : - if _model == None : - del(self.model) - elif isinstance(_model, soy.models.Model) : - del(self.model) - # renderlock - self._model = <void*> _model - py.Py_INCREF(<soy.models.Model> self._model) - # renderunlock - else : + if not (_model is None or isinstance(_model, soy.models.Model)) : raise TypeError('must be an instance of soy.models.Model') - - def __del__(self) : - if self._model == NULL : - return # renderlock - py.Py_DECREF(<soy.models.Model> self._model) - self._model = NULL + self._model = _model # renderunlock - + property shape : '''Body's shape, if it has one. @@ -311,87 +289,94 @@ Defaults to None. ''' def __get__(self) : - if self._shape == NULL : - return None - return <soy.shapes.Shape> self._shape + return self._shape def __set__(self, value) : - cdef ode.dBodyID _bodyID - cdef ode.dGeomID _geomID - cdef soy.scenes.Scene _scene - if not isinstance(value, soy.shapes.Shape) and value != None : - raise TypeError('Requires a Shape') + cdef ode.dBodyID _bodyID # - # If this body already has a shape, delete it now - del(self.shape) + #################################### # - # If we're setting the value to None, we're done now. - if value == None : - return + # Standard Typecheck # - # Preset these values for speed - _geomID = (<soy.shapes.Shape> value)._geomID - _bodyID = <ode.dBodyID> ode.dGeomGetBody(_geomID) + if not isinstance(value, soy.shapes.Shape) and value is not None : + raise TypeError('Requires a Shape or None') # - # If this shape is already attached, detach it first - if _bodyID != NULL : - del((<Body> ode.dBodyGetData(_bodyID)).shape) + #################################### # - # Only bother with the rest of this if we're in a scene - if self._bodyID != NULL : - _scene = <soy.scenes.Scene> self._scene - _scene._stepLock() - ode.dSpaceAdd(_scene._spaceID, _geomID) - ode.dGeomSetBody(_geomID, self._bodyID) + # if in a scene, lock it and remove any current shape + # + if self._scene is not None : + self._scene._stepLock() + if self._shape is not None : + ode.dSpaceRemove(self._scene._spaceID, self._shape._geomID) + ode.dGeomSetBody(self._shape._geomID, NULL) # - # Because self._shape is void* we handle INCREF/DECREF ourselves - self._shape = <void*> value - py.Py_INCREF(<soy.shapes.Shape> self._shape) + #################################### # - # If we're in a scene, unlock before we return - if self._bodyID != NULL : - _scene._stepUnLock() - - def __del__(self) : - cdef ode.dGeomID _geomID - cdef soy.scenes.Scene _scene + # Assign shape and, if it's an actual shape, detach/attach it # - # We cannot delete a non-existant shape - if self._shape == NULL : - return + self._shape = value + if self._shape is not None : + # + ################################## + # + # if the new shape is already attached, detach it + # + _bodyID = <ode.dBodyID> ode.dGeomGetBody(self._shape._geomID) + if _bodyID != NULL : + (<Body> ode.dBodyGetData(_bodyID)).shape = None + # + ################################## + # + # if we're in a scene, add geom to it's space + # + if self._scene is not None : + ode.dSpaceAdd(self._scene._spaceID, self._shape._geomID) + ode.dGeomSetBody(self._shape._geomID, self._bodyID) + # + ################################## + # + #################################### # - # Here's to cleaner code - _geomID = (<soy.shapes.Shape> self._shape)._geomID + # if we're in a scene, unlock before we return # - # Only bother with the rest of this if we're in a scene - if self._bodyID != NULL : - _scene = <soy.scenes.Scene> self._scene - _scene._stepLock() - ode.dSpaceRemove(_scene._spaceID, _geomID) - ode.dGeomSetBody(_geomID, NULL) + if self._scene is not None : + self._scene._stepUnLock() # - # Because self._shape is void* we handle INCREF/DECREF ourselves - py.Py_DECREF(<soy.shapes.Shape> self._shape) - self._shape = NULL - # - # If we're in a scene, unlock before we return - if self._bodyID != NULL : - _scene._stepUnLock() + #################################### + ########################################################################## # # C Functions # cdef void _create(self) : - self._bodyID = ode.dBodyCreate((<soy.scenes.Scene> self._scene)._worldID) + # + # This function allows custom _create functions to be used by the classes + # which inherit Body. + # + ###################################### + # + # Create a new ODE body and put a pointer to self in it's data storage + # The data pointer to self allows Scene stepping functions (ie, collision) + # to quickly access the Python object associated with a given Body. + # + self._bodyID = ode.dBodyCreate(self._scene._worldID) ode.dBodySetData(self._bodyID, <void*> self) + # + ###################################### + # + # get local pointers to ODE body states so we can access them directly + # ode.dBodyGetMass(self._bodyID, &self._mass) self._position = <ode.dReal*> ode.dBodyGetPosition (self._bodyID) self._rotation = <ode.dReal*> ode.dBodyGetRotation (self._bodyID) self._quaternion = <ode.dReal*> ode.dBodyGetQuaternion(self._bodyID) self._linearVel = <ode.dReal*> ode.dBodyGetLinearVel (self._bodyID) self._angularVel = <ode.dReal*> ode.dBodyGetAngularVel(self._bodyID) + # + ###################################### cdef void _destroy(self) : @@ -400,11 +385,23 @@ cdef void _append(self) : - (<soy.scenes.Scene> self._scene)._bodies._append(<void*> self) + # + # This function allows classes which inherit Body to use a different + # _append sequence, ie, Light also appends itself to self._scene._lights + # + self._scene._bodies._append(<void*> self) + # + ###################################### cdef void _remove(self) : - (<soy.scenes.Scene> self._scene)._bodies._remove(<void*> self) + # + # This function allows classes which inherit Body to use a different + # _remove sequence, ie, Light also remove itself to self._scene._lights + # + self._scene._bodies._remove(<void*> self) + # + ###################################### cdef void _copyTo(self, ode.dReal* _store) : @@ -441,12 +438,13 @@ ode.dBodySetLinearVel (self._bodyID, _store[19], _store[20], _store[21]) ode.dBodySetAngularVel(self._bodyID, _store[22], _store[23], _store[24]) + cdef void _addForce(self, ode.dVector3 _vector) : - if self._bodyID == NULL : + if self._scene is None : raise UnboundLocalError('Body is not in a scene') - (<soy.scenes.Scene> scene)._stepLock() + self._scene._stepLock() ode.dBodyAddForce(self._bodyID, _vector[0], _vector[1], _vector[2]) - (<soy.scenes.Scene> scene)._stepUnLock() + self._scene._stepUnLock() ########################################################################## @@ -454,25 +452,23 @@ # WindowLoop Functions # - cdef void _render(self) : + cdef void _render(self) nogil : cdef gl.GLfloat _mtx[16] - if self._model == NULL : + if self._model is None : return self._getModelview(_mtx) gl.glPushMatrix() gl.glMultMatrixf(_mtx) - (<soy.models.Model> self._model)._render(<void*> self) + self._model._render(<void*> self) gl.glPopMatrix() - cdef void _coreCreateVertFogCoords(self): - cdef soy._datatypes.VertexList _verts - if self._model == NULL : - return - _verts = (<soy.models.Model> self._model)._verts - _verts._uploadFogCoord( <float> self._position[1] ) - - cdef void _getModelview(self, float* _mtx): + cdef void _calcFogCoords(self) nogil : + if self._model is not None : + self._model._calcFogCoords(<float> self._position[1]) + + + cdef void _getModelview(self, float* _mtx) nogil : _mtx[0] = self._rotation[0] _mtx[1] = self._rotation[4] _mtx[2] = self._rotation[8] @@ -490,7 +486,8 @@ _mtx[14] = self._position[2] _mtx[15] = 1.0 - cdef void _getModelviewInv(self, float* _mtx): + + cdef void _getModelviewInv(self, float* _mtx) nogil : _mtx[0] = self._rotation[0] _mtx[4] = self._rotation[4] _mtx[8] = self._rotation[8] Modified: trunk/pysoy/src/bodies/Camera.pym =================================================================== --- trunk/pysoy/src/bodies/Camera.pym 2008-05-15 17:35:45 UTC (rev 1256) +++ trunk/pysoy/src/bodies/Camera.pym 2008-05-15 22:19:30 UTC (rev 1257) @@ -25,6 +25,10 @@ other rendering class to be activated. ''' + ########################################################################## + # + # Python Functions + # def __cinit__(self, scene=None, position=None, rotation=None, velocity=None, @@ -107,11 +111,11 @@ # WindowLoop Functions # - cdef void _project(self) : + cdef void _project(self) nogil : cdef gl.GLfloat _mtx[16] # # Bail now if in the abyss - if self._bodyID == NULL : + if self._scene is None : return # # Check if wireframe mode is turned on @@ -149,7 +153,7 @@ _mtx[15] = 1.0 gl.glLoadMatrixf(_mtx) gl.glTranslatef(-self._position[0], -self._position[1], -self._position[2]) - (<soy.scenes.Scene> self._scene)._render() + self._scene._render() # # Framerate calc self._rpt = (self._rpt + 1) % 16 Modified: trunk/pysoy/src/bodies/Light.pym =================================================================== --- trunk/pysoy/src/bodies/Light.pym 2008-05-15 17:35:45 UTC (rev 1256) +++ trunk/pysoy/src/bodies/Light.pym 2008-05-15 22:19:30 UTC (rev 1257) @@ -35,7 +35,8 @@ self.ambient = ambient self.diffuse = diffuse self.specular = specular - (<soy.scenes.Scene> self._scene)._lights._append(<void*> self) + if self._scene is not None : + self._scene._lights._append(<void*> self) ############################################################################ @@ -103,13 +104,23 @@ # cdef void _append(self) : - (<soy.scenes.Scene> self._scene)._bodies._append(<void*> self) - (<soy.scenes.Scene> self._scene)._lights._append(<void*> self) + # + # this overrides Body._append to also append self to self._scene._lights + # + self._scene._bodies._append(<void*> self) + self._scene._lights._append(<void*> self) + # + ###################################### cdef void _remove(self) : - (<soy.scenes.Scene> self._scene)._bodies._remove(<void*> self) - (<soy.scenes.Scene> self._scene)._lights._remove(<void*> self) + # + # this overrides Body._remove to also remove self from self._scene._lights + # + self._scene._bodies._remove(<void*> self) + self._scene._lights._remove(<void*> self) + # + ###################################### ############################################################################ @@ -117,7 +128,7 @@ # WindowLoop Functions # - cdef void _on(self, int _id) : + cdef void _on(self, int _id) nogil : cdef gl.GLfloat _position[4] # # we do this only because glLightfv takes four parameters @@ -144,5 +155,5 @@ # gl.glLightfv(_id, gl.GL_SPOT_DIRECTION, [[direction, as per Body]]) - cdef void _off(self, int _id) : + cdef void _off(self, int _id) nogil : gl.glDisable(_id) Modified: trunk/pysoy/src/bodies/__init__.pym =================================================================== --- trunk/pysoy/src/bodies/__init__.pym 2008-05-15 17:35:45 UTC (rev 1256) +++ trunk/pysoy/src/bodies/__init__.pym 2008-05-15 22:19:30 UTC (rev 1257) @@ -35,8 +35,4 @@ cimport gl cimport py cimport stdio -cimport soy._internals cimport soy.colors -cimport soy.models -cimport soy.scenes -cimport soy.shapes Modified: trunk/pysoy/src/fields/Buoyancy.pym =================================================================== --- trunk/pysoy/src/fields/Buoyancy.pym 2008-05-15 17:35:45 UTC (rev 1256) +++ trunk/pysoy/src/fields/Buoyancy.pym 2008-05-15 22:19:30 UTC (rev 1257) @@ -40,7 +40,7 @@ cdef void _give(self, int _ccycle) : cdef int _i cdef soy.bodies.Body _otherBody - if (self._shape != NULL) ^ (_ccycle == 0) : + if (self._shape is not None) ^ (_ccycle == 0) : self._affected._iterStart() for _i from 0 <= _i < self._affected._current : _otherBody = <soy.bodies.Body> self._affected._list[_i] @@ -50,28 +50,26 @@ cdef int _exert(self, soy.bodies.Body _otherBody) : cdef float _radius, _submersion - cdef soy.shapes.Shape _otherShape ode.dBodyGetMass(_otherBody._bodyID, &_otherBody._mass) # # Volume-less bodies are not affected - if _otherBody._shape == NULL : + if _otherBody._shape is None : return 0 - _otherShape = <soy.shapes.Shape> _otherBody._shape - if _otherShape._volume() == 0 : + if _otherBody._shape._volume() == 0 : return 0 if self._shape : # Shaped fields partially submerge shapes - _radius = _otherShape._radius() - _submersion = ((<soy.shapes.Shape> self._shape)._pointDepth( - _otherShape._position[0], - _otherShape._position[1], - _otherShape._position[2]) + _radius = _otherBody._shape._radius() + _submersion = (self._shape._pointDepth( + _otherBody._shape._position[0], + _otherBody._shape._position[1], + _otherBody._shape._position[2]) + radius) / (radius * 2) else : # Universal fields fully submerge all shapes _submersion = 1 _otherBody._tags._insert("bmass", _otherBody._mass.mass - submersion - * _otherShape._volume() + * _otherBody._shape._volume() * self._density) self._affected._append(<void*> other) return 1 Modified: trunk/pysoy/src/models/Liquid.pym =================================================================== --- trunk/pysoy/src/models/Liquid.pym 2008-05-15 17:35:45 UTC (rev 1256) +++ trunk/pysoy/src/models/Liquid.pym 2008-05-15 22:19:30 UTC (rev 1257) @@ -22,11 +22,11 @@ This models class renders a liquid with volumetric fog ''' - - ############################################################################ - # - # Python functions - # + + ############################################################################ + # + # Python functions + # def __cinit__(self, size=(1,1,1), color=None, material=None) : self._size[0] = size[0] @@ -117,10 +117,8 @@ _scene = <soy.scenes.Scene> (<soy.bodies.Body> _body)._scene for _i from 0 <= _i < _scene._bodies._current : if _body != (<void*> _scene._bodies._list[_i]) : - (<soy.bodies.Body> - _scene._bodies._list[_i])._coreCreateVertFogCoords() - (<soy.bodies.Body> - _scene._bodies._list[_i])._render() + (<soy.bodies.Body> _scene._bodies._list[_i])._calcFogCoords() + (<soy.bodies.Body> _scene._bodies._list[_i])._render() gl.glPopMatrix() gl.glDisableClientState(gl.GL_FOG_COORDINATE_ARRAY_EXT) gl.glDisable(gl.GL_FOG) Modified: trunk/pysoy/src/models/Mesh.pym =================================================================== --- trunk/pysoy/src/models/Mesh.pym 2008-05-15 17:35:45 UTC (rev 1256) +++ trunk/pysoy/src/models/Mesh.pym 2008-05-15 22:19:30 UTC (rev 1257) @@ -160,3 +160,6 @@ # then rendered. # ############################################################################ + + cdef void _calcFogCoords(self, float _depth) : + self._verts._uploadFogCoord(_depth) Modified: trunk/pysoy/src/models/Model.pym =================================================================== --- trunk/pysoy/src/models/Model.pym 2008-05-15 17:35:45 UTC (rev 1256) +++ trunk/pysoy/src/models/Model.pym 2008-05-15 22:19:30 UTC (rev 1257) @@ -51,3 +51,7 @@ cdef void _render(self, void* _body) : return + + cdef void _calcFogCoords(self, float _depth) : + return + Modified: trunk/pysoy/src/models/Shape.pym =================================================================== --- trunk/pysoy/src/models/Shape.pym 2008-05-15 17:35:45 UTC (rev 1256) +++ trunk/pysoy/src/models/Shape.pym 2008-05-15 22:19:30 UTC (rev 1257) @@ -61,11 +61,11 @@ cdef int _shapeclass # # Don't attempt to render a non-existant shape - if (<soy.bodies.Body> _body)._shape == NULL : + if (<soy.bodies.Body> _body)._shape is None : return # # Grab the body's shape - _shape = <soy.shapes.Shape> (<soy.bodies.Body> _body)._shape + _shape = (<soy.bodies.Body> _body)._shape _shapeclass = ode.dGeomGetClass(_shape._geomID) # # Bind the material _______________________________________________ PySoy-SVN mailing list PySoy-SVN@pysoy.org http://www.pysoy.org/mailman/listinfo/pysoy-svn