[Pyrex] Function Pointer
Marco Bubke
marco at bubke.de
Thu Mar 4 17:37:06 CET 2004
Hi
I want cast a function pointer to <void (*fn)()> but its not working. Its
compiling but when there nothing is happen. Its the GLU lib. There is AFAIK
no other way. Can someone help me.
thank you and regards
Marco
Here the code
cdef extern from "GL/glu.h":
ctypedef void GLUtesselator
ctypedef void GLUtesselatorObj
ctypedef void GLUtriangulatorObj
cdef struct function_pointer:
void (*fp)()
ctypedef function_pointer fpt
cdef enum:
GLU_TESS_COMBINE_DATA
GLU_TESS_BEGIN_DATA
GLU_TESS_ERROR
GLU_TESS_VERTEX_DATA
GLUtesselator* gluNewTess()
void gluDeleteTess(GLUtesselator*)
void gluTessCallback(GLUtesselator*, GLenum which, void(*fn)()) <<<<<<<<<
def void tesselator_begin(GLenum mode, object tesselator):
print "mode: ", mode
cdef void tesselator_vertex(object vertex, object tesselator):
print "vertex: ", vertex._indice
cdef void tesselator_error(GLenum error):
print "there is a error in the tesselator"
cdef void tesselator_combine(GLdouble coords[3], void* vertex_data[4], GLfloat
weights[4], void **out_data, object tesselator):
new_vertex = vertex()
cdef void *p
vertex._x = coords[0]
vertex._x = coords[1]
vertex._x = coords[2]
vertex._indice = len(tesselator._vertex_list)
p = <void*>new_vertex
out_data = &p
cdef class tesselator:
cdef GLUtesselator *_tesselator
cdef object _vertex_list
def __init__(self, vertex_list):
self._tesselator = gluNewTess()
gluTessCallback(self._tesselator, GLU_TESS_BEGIN_DATA,
<void(*)()>&tesselator_begin) <<<<<<<<<<<<<<<<<<<
gluTessCallback(self._tesselator, GLU_TESS_VERTEX_DATA,
<void(*)()>&tesselator_vertex) <<<<<<<<<<<<<<<<<<<<
gluTessCallback(self._tesselator, GLU_TESS_ERROR,
<void(*)()>&tesselator_error) <<<<<<<<<<<<<<<<<<<<
gluTessCallback(self._tesselator, GLU_TESS_COMBINE_DATA,
<void(*)()>&tesselator_combine) <<<<<<<<<<<<<<<<<<<<
self._vertex_list = vertex_list
More information about the Pyrex
mailing list