在 Allegro 5 中绘制许多图元的最快方法
Fastest way to draw many primitives in Allegro 5
我想绘制非常大量的三角形(最多 600000 个)。
我首先做的是:
al_init();
display = al_create_display();
然后遍历我的三角形和
al_draw_triangle(); each one.
我终于做到了
al_flip_display();
虽然这不是很快。我读到它有助于先绘制到暂停的位图,然后将该位图绘制到显示器上。
我尝试按照以下方式(草图)执行此操作:
al_init();
display = al_create_display();
bitmap = al_create_bitmap();
al_set_target_bitmap(bitmap);
al_hold_bitmap_drawing(1);
for every triangle:
al_draw_triangle();
al_hold_bitmap_drawing(0);
al_set_target_bitmap(al_get_backbuffer(display));
al_draw_bitmap(bitmap, 0, 0, 0);
al_flip_display();
虽然这与以前的方法一样快。
我怎样才能正确地缓冲我的三角形以减少平局的数量?
在 Allegro 5 中绘制许多基元的最有效方法是什么?
感谢大家的回答
al_hold_bitmap_drawing
对基元没有任何作用。 This thread has some discussion on the topic, including a suggestion 缓冲所有基元并调用 al_draw_prim
:
The difference is that I only call al_draw_prim once, after buffering possibly hundreds of primitives. The primitive drawing functions will kick off a batch every time.
我想绘制非常大量的三角形(最多 600000 个)。 我首先做的是:
al_init();
display = al_create_display();
然后遍历我的三角形和
al_draw_triangle(); each one.
我终于做到了
al_flip_display();
虽然这不是很快。我读到它有助于先绘制到暂停的位图,然后将该位图绘制到显示器上。 我尝试按照以下方式(草图)执行此操作:
al_init();
display = al_create_display();
bitmap = al_create_bitmap();
al_set_target_bitmap(bitmap);
al_hold_bitmap_drawing(1);
for every triangle:
al_draw_triangle();
al_hold_bitmap_drawing(0);
al_set_target_bitmap(al_get_backbuffer(display));
al_draw_bitmap(bitmap, 0, 0, 0);
al_flip_display();
虽然这与以前的方法一样快。 我怎样才能正确地缓冲我的三角形以减少平局的数量? 在 Allegro 5 中绘制许多基元的最有效方法是什么?
感谢大家的回答
al_hold_bitmap_drawing
对基元没有任何作用。 This thread has some discussion on the topic, including a suggestion 缓冲所有基元并调用 al_draw_prim
:
The difference is that I only call al_draw_prim once, after buffering possibly hundreds of primitives. The primitive drawing functions will kick off a batch every time.