Есть ли более эффективный способ рисования пикселя, чем GL_POINTS?

В программе я собираюсь писать во множество пикселей по отдельности. Я предполагаю, что с помощью VBO, шейдеров и GL_POINTS не очень эффективно. У меня была мысль нарисовать два треугольника по всему экрану, а затем записать каждый пиксель в фрагментном шейдере, хотя я не уверен, насколько это будет эффективно?

Я использую openGL 3, поэтому ни одна из устаревших функций не используется.

2 ответа

В новом OpenGL вы можете связать FBO без вложений и использовать вывод изображения в шейдере фрагмента для достижения аналогичной функциональности. Однако можно ожидать низкой производительности из-за (возможно) крайне нерегулярных шаблонов доступа к памяти, которые могут быть фатальными для графического процессора. Но, возможно, вы сможете добиться чуть лучшей производительности, чем при растеризации очков.

Вы рассматривали рендеринг экземпляров? Рисование даже 2 треугольников размером с пиксель может быть быстрее, чем рисование точек.

Посмотри на glDrawArraysInstancedа также glVertexAttribDivisor (для нанесения разных цветов и т. д.).

Если у ваших частиц есть ускорение или какой-либо детерминированный алгоритм изменения положения, вы даже можете применить это изменение в вершинном шейдере, чтобы ограничить пространство, занимаемое связанным VBO (не нужно сохранять позиции) и время ЦП (только несколько вызовов GL требуется нарисовать и оживить всю систему частиц).

Другие вопросы по тегам