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