将ctypes.c_void_p作为glTexImage2D的输入?
我正在使用一个第三方的DLL来加载一些原始图像数据,我想把这些原始图像数据当作纹理在OpenGL中使用。不过,这个C语言的函数返回的是一个void*类型的数据,我需要把它转换成可以用作glTexImage2D函数中的“像素”参数的格式。目前我的代码大致是这样的:
data = c_void_p(vdll.vlImageGetData())
glTexImage2D(GL_TEXTURE_2D, 1, GL_RGB8, 1024, 1024, 0, GL_RGB, GL_UNSIGNED_BYTE, data )
但是,我遇到了一个类型错误,提示说数据“无法转换为指针”。有没有人知道怎么解决这个问题?
编辑:我搞定了。基本上我这样做:
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
这可能对你有帮助,也可能没什么用。这里提到一个类似的问题,就是用c_void_p作为返回类型。我这边的做法是返回c_longlong,并且还得用一些小技巧:
如果我要返回一个指向c_types对象的指针,我需要把它的引用转换成一个指向c_longlong的指针,才能得到要返回的整数值。(注意,CFUNCTYPE不接受POINTER(x)类型作为返回类型):
retvalp = cast( byref(retval), POINTER(c_longlong)) # retval是我想返回的内容
return retvalp.contents.value