使用ctypes.c_void_p作为glTexImage2D的输入?

时间:2009-05-12 07:35:46

标签: python opengl ctypes pyopengl

我正在使用第三方DLL加载一些原始图像数据,我想在openGL中将此原始图像数据用作纹理。但是,c函数返回一个void *,我需要以某种方式转换它,因此它将作为glTexImage2D的“pixels”参数。现在我的代码看起来像这样:

data = c_void_p(vdll.vlImageGetData()) 
glTexImage2D(GL_TEXTURE_2D, 1, GL_RGB8, 1024, 1024, 0, GL_RGB, GL_UNSIGNED_BYTE, data )

但是,我得到一个TypeError抱怨数据'无法转换为指针'。有谁知道如何让这个工作?

编辑:想出来。基本上我所做的就是:

data = create_string_buffer( BUFFER_SIZE )
data = dll.vlImageGetData()
glTexImage2D(GL_TEXTURE_2D, 1, GL_RGB8, 1024, 1024, 0, GL_RGB, GL_UNSIGNED_BYTE, data )

2 个答案:

答案 0 :(得分:1)

answersimilar question建议使用ctypes.cast()

答案 1 :(得分:0)

这可能有所帮助,也可能没有帮助。使用c_void_p作为返回类型存在类似的问题。我不得不返回c_longlong并做一些技巧:

如果我返回一个指针c_types obejct,我必须将其对POINTER的引用转换为c_longlong以获取要返回的整数值。 (注意,CFUNCTYPE不接受POINTER(x)类型作为返回类型):

retvalp = cast(byref(retval),POINTER(c_longlong))#retval是我想要返回的 return retvalp.contents.value