Как использовать glMapBuffer OpenGL в Python?

Я хочу попробовать обновить VBO в PyOpenGL, используя glMapBuffer, который возвращает указатель ctypes на отображаемую память. Теперь почти все примеры для этой функции написаны на C и используют memcpy, которого, по-видимому, не существует в Python как таковом.

Итак, как я могу обновить данные с помощью этого указателя?


person Parashoo    schedule 26.08.2020    source источник
comment
Отвечает ли это на ваш вопрос? Указатели и массивы в ctypes Python   -  person vallentin    schedule 26.08.2020
comment
@vallentin Не совсем, так как у меня практически нет опыта работы с ctypes , и я не понимаю ни вопроса, ни ответа.   -  person Parashoo    schedule 26.08.2020


Ответы (1)


Используйте from_address из ctypes, чтобы получить экземпляр типа ctypes, используя память, возвращенную glMapBuffer.

В следующем примере буфер сопоставляется с массивом 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).

person Rabbid76    schedule 26.08.2020