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

Reply via email to