Сглаживание в аллегро 5 - PullRequest
1 голос
/ 18 июня 2011

Как заставить allegro 5 использовать сглаживание при рисовании? Мне нужно, чтобы диагональные линии выглядели гладкими. В настоящее время это только линии затененных пикселей, и края выглядят жесткими.

Ответы [ 2 ]

4 голосов
/ 18 июня 2011

Чтобы включить сглаживание для примитивов:

// 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);

Обратите внимание, что сглаживание будет работать только для примитивов, отрисованных непосредственно в задний буфер. Это не будет работать где-либо еще.

В OpenGL ваша карта должна поддерживать расширение ARB_multisample .

Чтобы проверить, была ли она включена (при использовании 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 голосов
/ 18 июня 2011

У вас есть два варианта: сглаживание линий или мультисэмплинг.

Вы можете активировать сглаживание линий, используя glEnable (GL_LINE_SMOOTH). Обратите внимание, что Allegro 5 может сбросить эту настройку, когда вы рисуете линии через Allegro.

Другой альтернативой является создание мультисэмплированного дисплея. Это необходимо сделать перед вызовом al_create_display. Способ сделать это выглядит примерно так:

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

# Приведенное выше число должно быть количеством используемых образцов. Как много? Это зависит от реализации, и Allegro не помогает. Вот почему я использовал ALLEGRO_SUGGEST, а не REQUIRE для количества образцов. Чем больше образцов вы используете, тем лучше качество. 8 образцов могут быть хорошим значением, которое поддерживается на большинстве аппаратных средств.

...