2015-01-12 2 views
-1

Есть ли все-таки ускорить это? Я пришел, чтобы узнать, что доступ к буфере кадров может сделать это быстро. но я не знаю, как ... есть ли способ сделать это в opengl?Алгоритм Брешенема с использованием opengl GL_POINTS довольно медленный

+3

Способ ускорить это, конечно, использовать собственный чертеж OpenGL. – timday

ответ

3

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

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

0

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

Аналогичным образом, если вы просто хотите нарисовать линию, GL_LINES будет в значительной степени всегда быстрее и удобнее.