On Tue, Jun 30, 2009 at 7:07 PM, Ondrej Certik<[email protected]> wrote:
> On Tue, Jun 30, 2009 at 6:42 PM, Lisandro Dalcin<[email protected]> wrote:
>> On Tue, Jun 30, 2009 at 9:26 PM, Ondrej Certik<[email protected]> wrote:
>>>
>>> However, this assumes some particular form of PyObject_HEAD. Once it
>>> changes, my code will segfault.
>>>
>>
>> Indeed. That changes when you use a debug build of Python (./configure
>> --with-pydebug).
>>
>>> So I guess the right way to do this is
>>> to write my own C header file with the above struct (e.g. using the
>>> PyObject_HEAD macro) and then just reference it using:
>>>
>>> cdef extern from "Python.h":
>>>    ctypedef void PyTypeObject
>>>
>>> cdef extern from "my_header.h":
>>>    ctypedef struct CDataObject:
>>>        char *b_ptr
>>>
>>> which should always work.
>>>
>>> What do you think?
>>>
>>
>> Provided that ctypes.h is not a public header, I would do exactly the
>> same as you...
>>
>> PS: Can you believe that ctypes, being intended to be a tool for easy
>> interoperation with C code, does not provide a public C API in order
>> to let third-party codes to take advantage?
>
> Indeed, it doesn't provide it on my Ubuntu. It sucks.
>
> One more question. I am using ctypes because using it I can take a
> list of floats and create a C array of it:
>
> (c_float * len(ptr))(*ptr)
>
> from historical reasons (I am adapting some opengl example from
> pyglet, that used that approach --- since pyglet uses ctypes to wrap
> opengl). I use cython, so I think a better way is to use numpy?
>
> opengl supports strides, but it's just one number, e.g. it has to be
> the same for all rows (as opposed to numpy). Is it safe to just copy

Ah, I think I am wrong. Numpy's strides is exactly what I need, right?

http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.strides.html

so I just take *any*  numpy array, as long as it has the right dtype,
and then just pass the pointer to .data and strides to the opengl
function.

Very nice.

Ondrej
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to