Алгоритм Брезенхэма, использующий opengl GL_POINTS, довольно медленный
Есть ли в любом случае ускорить это? Я пришел, чтобы узнать, доступ к самому Frame Buffer может сделать это быстро. но я не знаю как... есть ли способ сделать это в OpenGL?
2 ответа
Если вы внедряете Bresenham ради изучения Bresenham, я предлагаю вам поместить "пиксели", которые вы собираетесь нарисовать, в массив (std::vector
в C++). Затем, когда вы закончите "растеризацию" Брезенхэма, передайте этот массив как массив вершин в OpenGL и нарисуйте его одним glDrawArrays
вызов.
В противном случае, если ваша цель - нарисовать линию, просто используйте линию OpenGL.
Чтобы дополнить ответ @datenwolf, вы, вероятно, используете много колл-коллов. Это может и будет создавать значительные недостатки производительности. Вам даже не нужно напрямую обращаться к кадровому буферу, просто убедитесь, что вы не выполняете ненужных операций между каждой точкой. Есть несколько способов достижения этого, и действительно, отображение буфера является одним из них. Вы также можете придерживаться своей собственной памяти и просто "перетекать" результат в OGL.
И точно так же, если вы просто хотите нарисовать линию, GL_LINES
всегда будет быстрее и удобнее.