我正在使用第三方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 )
答案 0 :(得分:1)
answer到similar 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