Алгоритм Брезенхэма, использующий opengl GL_POINTS, довольно медленный

Есть ли в любом случае ускорить это? Я пришел, чтобы узнать, доступ к самому Frame Buffer может сделать это быстро. но я не знаю как... есть ли способ сделать это в OpenGL?

2 ответа

Решение

Если вы внедряете Bresenham ради изучения Bresenham, я предлагаю вам поместить "пиксели", которые вы собираетесь нарисовать, в массив (std::vector в C++). Затем, когда вы закончите "растеризацию" Брезенхэма, передайте этот массив как массив вершин в OpenGL и нарисуйте его одним glDrawArrays вызов.

В противном случае, если ваша цель - нарисовать линию, просто используйте линию OpenGL.

Чтобы дополнить ответ @datenwolf, вы, вероятно, используете много колл-коллов. Это может и будет создавать значительные недостатки производительности. Вам даже не нужно напрямую обращаться к кадровому буферу, просто убедитесь, что вы не выполняете ненужных операций между каждой точкой. Есть несколько способов достижения этого, и действительно, отображение буфера является одним из них. Вы также можете придерживаться своей собственной памяти и просто "перетекать" результат в OGL.

И точно так же, если вы просто хотите нарисовать линию, GL_LINES всегда будет быстрее и удобнее.

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