我正在尝试对一些pi3d模块进行cythonize(已经正常工作了好几年了)。Shape类包含一个统一变量数组,该数组传递给一个OpenGL ES 2.0函数,其规范为:
void glUniform3fv(GLint location, GLsizei count, const GLfloat *value)
在纯python版本中,变量在Shape.__init__()
中定义
self.unif = (ctypes.c_float * 60) (x, y, z, rx, ry, rz...
#... then later passed as an argument to a function as unif and used like
opengles.glUniform3fv(shader.unif_unif, 20, ctypes.byref(unif))
我希望保持py文件不变,并在pxd文件中添加cython规范
cdef class Shape(Loadable):
cdef:
public float[60] unif
public object shader
public list textures, buf, children
...
它可以编译,但是unif已经变成了list
而不是c_float_Array_60
对象,在纯python和ctypes.byref类型(unif)失败。你知道吗
如果我把unif变成一个numpy数组,那么它将编译,并且我可以使用可怕的
opengles.glUniform3fv(shader.unif_unif, 20, ctypes.byref(
unif.ctypes.data_as(ctypes.POINTER(ctypes.c_float)))
)
所以我的问题是:我应该如何指定unif属性是pxd文件中的c_float_Array_60
对象这一事实。或者这是不可能的?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐