【问题标题】:How to use OpenGL's glMapBuffer in Python?如何在 Python 中使用 OpenGL 的 glMapBuffer?
【发布时间】:2020-12-15 02:15:05
【问题描述】:

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

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

【问题讨论】:

  • 这能回答你的问题吗? Pointers and arrays in Python ctypes
  • @vallentin 不是真的,因为我几乎没有使用 ctypes 的经验,而且我既不了解问题也不了解答案。

标签: python opengl ctypes memcpy pyopengl


【解决方案1】:

使用ctypes 中的from_address 使用glMapBuffer 返回的内存获取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.memmove(dst, src, count) 可以将数据从一个 ctypes 数组复制到另一个数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-28
    • 2013-07-21
    • 2012-08-20
    • 2013-06-01
    • 2015-03-27
    • 2014-09-26
    相关资源
    最近更新 更多