Anti-aliasing in allegro 5

淺唱寂寞╮ 提交于 2019-12-11 07:15:51

问题


How do I make allegro 5 use anti-aliasing when drawing? I need diagonal lines to appear smooth. Currently, they are only lines of shaded pixels, and the edges look hard.


回答1:


To enable anti aliasing for the primitives:

// before creating the display:
al_set_new_display_option(ALLEGRO_SAMPLE_BUFFERS, 1, ALLEGRO_SUGGEST);
al_set_new_display_option(ALLEGRO_SAMPLES, 8, ALLEGRO_SUGGEST);

display = al_create_display(640, 480);

Note that anti-aliasing will only work for primitives drawn directly to the back buffer. It will not work anywhere else.

On OpenGL, your card must support the ARB_multisample extension.

To check if it was enabled (when using ALLEGRO_SUGGEST):

if (al_get_display_option(display, ALLEGRO_SAMPLE_BUFFERS)) {
   printf("With multisampling, level %i\n",
     al_get_display_option(display, ALLEGRO_SAMPLES));
}
else {
   printf("Without multisampling.\n");
}



回答2:


You have two options: line smoothing or multisampling.

You can activate line smoothing by using glEnable(GL_LINE_SMOOTH). Note that Allegro 5 may reset this when you draw lines through Allegro.

The other alternative is to create a multisampled display. This must be done before calling al_create_display. The way to do it goes something like this:

al_set_new_display_option(ALLEGRO_SAMPLE_BUFFERS, 1, ALLEGRO_REQUIRE);
al_set_new_display_option(ALLEGRO_SAMPLES, #, ALLEGRO_SUGGEST);

The # above should be the number of samples to use. How many? That's implementation-dependent, and Allegro doesn't help. That's why I used ALLEGRO_SUGGEST rather than REQUIRE for the number of samples. The more samples you use, the better quality you get. 8 samples might be a good value that's supported on most hardware.



来源:https://stackoverflow.com/questions/6391423/anti-aliasing-in-allegro-5

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!