1

我正在使用第 3 方 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 )

但是,我收到一个 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 )
4

2 回答 2

1

建议使用类似问题答案ctypes.cast()

于 2009-05-12T08:00:35.533 回答
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

于 2012-11-29T05:04:26.233 回答