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