Есть ли более эффективный способ рисования пикселя, чем GL_POINTS?
В программе я собираюсь писать во множество пикселей по отдельности. Я предполагаю, что с помощью VBO, шейдеров и GL_POINTS
не очень эффективно. У меня была мысль нарисовать два треугольника по всему экрану, а затем записать каждый пиксель в фрагментном шейдере, хотя я не уверен, насколько это будет эффективно?
Я использую openGL 3, поэтому ни одна из устаревших функций не используется.
2 ответа
В новом OpenGL вы можете связать FBO без вложений и использовать вывод изображения в шейдере фрагмента для достижения аналогичной функциональности. Однако можно ожидать низкой производительности из-за (возможно) крайне нерегулярных шаблонов доступа к памяти, которые могут быть фатальными для графического процессора. Но, возможно, вы сможете добиться чуть лучшей производительности, чем при растеризации очков.
Вы рассматривали рендеринг экземпляров? Рисование даже 2 треугольников размером с пиксель может быть быстрее, чем рисование точек.
Посмотри на glDrawArraysInstanced
а также glVertexAttribDivisor
(для нанесения разных цветов и т. д.).
Если у ваших частиц есть ускорение или какой-либо детерминированный алгоритм изменения положения, вы даже можете применить это изменение в вершинном шейдере, чтобы ограничить пространство, занимаемое связанным VBO (не нужно сохранять позиции) и время ЦП (только несколько вызовов GL требуется нарисовать и оживить всю систему частиц).