问题描述
我想尝试使用glMapBuffer
更新PyOpenGL中的VBO,它返回一个ctypes
指向映射内存的指针。现在,该函数的几乎所有示例都在C语言中,并使用memcpy
,显然在Python中本身并不存在。
那么,如何使用此指针更新数据?
解决方法
使用ctypes
返回的内存,使用glMapBuffer
中的from_address
获取ctypes类型实例。
以下示例将缓冲区映射到numberOfFloats
个浮点数组:
map_data = glMapBuffer(GL_ARRAY_BUFFER,GL_WRITE_ONLY)
map_array = (GLfloat * numberOfFloats).from_address(map_data)
// copy new data
// [...]
glUnmapBuffer(GL_ARRAY_BUFFER)
map_array
的元素可以通过订阅进行访问:
map_array[i] = value
数据可以通过ctypes
从一个ctypes.memmove(dst,src,count)
数组复制到另一个数组。