使用 opengl GL_POINTS 的 Bresenham 算法非常慢
Bresenham Algorithm using opengl GL_POINTS is pretty slow
有没有办法加快速度?
我是来学习的,访问Frame Buffer本身就可以很快搞定。但我不知道如何...有没有办法在 opengl 中做到这一点?
如果您是为了学习 Bresenham 而实施 Bresenham,那么我建议您将要绘制的 "pixels" 放入数组(C++ 中的 std::vector
)。然后,当您完成 Bresenham "rasterization" 后,将该数组作为顶点数组传递给 OpenGL,并通过单个 glDrawArrays
调用绘制它。
否则,如果您的目标是画一条线,只需使用 OpenGL 线即可。
为了补充@datenwolf 的回答,您可能发出了很多绘制调用。这可能而且将会造成严重的性能缺陷。您甚至不必直接访问帧缓冲区,只需确保您不会在每个点之间进行不必要的操作即可。有多种方法可以实现这一点,实际上映射缓冲区就是其中之一。您也可以坚持自己的记忆,只需 "blit" 将结果提交给 OGL。
同样,如果您只想画一条线,GL_LINES
几乎总是更快更方便。
有没有办法加快速度? 我是来学习的,访问Frame Buffer本身就可以很快搞定。但我不知道如何...有没有办法在 opengl 中做到这一点?
如果您是为了学习 Bresenham 而实施 Bresenham,那么我建议您将要绘制的 "pixels" 放入数组(C++ 中的 std::vector
)。然后,当您完成 Bresenham "rasterization" 后,将该数组作为顶点数组传递给 OpenGL,并通过单个 glDrawArrays
调用绘制它。
否则,如果您的目标是画一条线,只需使用 OpenGL 线即可。
为了补充@datenwolf 的回答,您可能发出了很多绘制调用。这可能而且将会造成严重的性能缺陷。您甚至不必直接访问帧缓冲区,只需确保您不会在每个点之间进行不必要的操作即可。有多种方法可以实现这一点,实际上映射缓冲区就是其中之一。您也可以坚持自己的记忆,只需 "blit" 将结果提交给 OGL。
同样,如果您只想画一条线,GL_LINES
几乎总是更快更方便。