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