Контекст
Я выполняю симуляцию роя, используя программирование на GPU (как OpenCL, так и CUDA, но не одновременно), для научных целей.Я использую OpenGL для отображения.
Цель
Я хотел бы нарисовать один и тот же объект - а именно, роящуюся частицу, может быть простым треугольником в 2D - N раз в разных позициях и с разными ориентацияминаиболее эффективным способом, зная, что:
объект всегда точно такой же
положения и ориентации рассчитываются на GPU и, таким образом,хранится в памяти графического процессора
количество частиц N может быть большим
Текущее решение
Пока, чтобы избежатьотправляя данные обратно в ЦП, я сохраняю массивы положения и ориентации в VBO и использую:
glBindBuffer(GL_ARRAY_BUFFER, position_vbo);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, velocity_vbo);
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_FLOAT, 0, 0);
glDrawArrays(GL_POINTS, 0, N);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
, чтобы нарисовать набор точек с цветовой кодировкой скорости без копирования массивов обратно в ЦП.
Я хотел бы сделать что-то вроде рисования полного объекта вместо простой точки, используя аналогичный способ , т.е. без копирования VBO в ЦП.
В основном я хотел бысохранить на графическом процессоре модель объекта (список отображения?a Vertex Array?) и использовать положения и ориентации на графическом процессоре для рисования объекта N раз без отправки данных обратно в CPU .
Возможно ли это и как?Иначе, как мне это сделать?
PS: мне нравится держать код в чистоте, поэтому я бы лучше отделил проблемы с отображением от роящегося ядра.