I found the problem : in the types specifications for pyrex, the developper uses this code:
ctypedef struct DisplayList: int option int id int material_id #Material* material int* faces_id Chunk* chunk # Only used for initialization of the DisplayList It looks like he's trying to represent a pointer with an int. That does work on 32 bits architectures, but not on 64 bits, where a pointer is in 64 bits -- then long. The attached patch does the trick -- you need to rebuild the _soya.c file with pyrex. However, I am not 100% sure that this will not break it on other architectures. Any ideas ? By the way, why are _soya.c, _ode.c, opengl.c included in the source ? They're pretty much useless as they can be rebuilt from the .pyx files. Thanks, Vincent Fourmond (who can now play slune on his computer...)
--- soya-0.11.2.orig/definitions/model/shape.pxd +++ soya-0.11.2/definitions/model/shape.pxd @@ -14,7 +14,7 @@ ctypedef struct DisplayList: int option int id - int material_id #Material* material + long material_id #Material* material int* faces_id Chunk* chunk # Only used for initialization of the DisplayList --- soya-0.11.2.orig/definitions/base.pxd +++ soya-0.11.2/definitions/base.pxd @@ -225,7 +225,7 @@ cdef struct _Pack: # See material.pyx for doc and comments int option - int material_id + long material_id # it is a pointer - should be long not to fail on AMD64 _Pack* alpha _Pack* secondpass Chunk* batched_faces