如何在 Python 中使用 OpenGL 的 glMapBuffer?

How to use OpenGL's glMapBuffer in Python?

我想尝试使用 glMapBuffer 在 PyOpenGL 中更新 VBO,其中 returns 一个指向映射内存的 ctypes 指针。现在,这个函数的几乎所有示例都在 C 中并使用 memcpy,这显然在 Python 中不存在。

那么,如何使用这个指针更新数据?

使用 ctypes to get a ctypes type instance using the memory returned by glMapBuffer 中的 from_address

以下示例将缓冲区映射到 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.memmove(dst, src, count).

将数据从一个 ctypes 数组复制到另一个数组