如何在Python中使用OpenGL的glMapBuffer?

问题描述

我想尝试使用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)数组复制到另一个数组。