|   |  | 
| Drawing primitives with antialiasing and multisampling | 
| Sarfaraz Sheikh Member #12,739 April 2011  | hi everybody, I want to make a game using primitives only. for that, I want to enable multisampling and antialiase diagonal lines and circles. I've searched on the forum for this and found this thread thread/603894 . below is the code in which I've tried to enable multisampling but I cannot see any effect of it. please guide me what should I do to get multisampling enabled .   1#include <stdio.h>
  2#include <allegro5/allegro.h>
  3#include <allegro5/allegro_primitives.h>
  4#include <allegro5/allegro_color.h>
  5 
  6int main(int argc, char **argv)
  7{
  8   ALLEGRO_DISPLAY *display = NULL;
  9 
 10   //allegro initialization
 11   if(!al_init()) {
 12      fprintf(stderr, "failed to initialize allegro!\n");
 13      return -1;
 14   }
 15   //allegro primitive addon initialization
 16   al_init_primitives_addon();
 17
 18   //creating display
 19   display = al_create_display(640, 480);
 20
 21   //checking if display has been created
 22   if(!display) {
 23      fprintf(stderr, "failed to create display!\n");
 24      return -1;
 25   }
 26 
 27   
 28  
 29
 30   //creating color variables of ALLEGRO_COLOR data type 
 31   ALLEGRO_COLOR yellow = al_map_rgb(200,200,0);
 32   ALLEGRO_COLOR black = al_map_rgb(0,0,0);
 33
 34   //clear the display buffer with given color
 35   al_clear_to_color(black);
 36
 37   //draw circle on buffer with given center,radius,color,line-width
 38   al_draw_circle(210.0,210.0,110.0,yellow,6);
 39
 40    //turning multisampling on
 41   al_set_new_display_option(ALLEGRO_SAMPLE_BUFFERS, 1, ALLEGRO_SUGGEST);
 42   al_set_new_display_option(ALLEGRO_SAMPLES, 8, ALLEGRO_REQUIRE);
 43
 44   //display the current buffer on screen and other buffer will be editable 
 45   al_flip_display();
 46
 47 
 48   al_rest(5.0);
 49
 50   //using variable yellow and black of ALLEGRO_COLOR data type
 51   al_clear_to_color(yellow);
 52   al_draw_circle(210.0,210.0,50.0,black,9);
 53
 54   al_flip_display();
 55
 56   al_rest(5.0);
 57
 58   //using ALLEGRO_COLOR al_color_name(char const *name) 
 59   al_clear_to_color(al_color_name("blue"));
 60   al_draw_circle(210.0,210.0,50.0,al_color_name("gold"),9);
 61
 62   al_flip_display();
 63
 64   al_rest(5.0);
 65 
 66   al_shutdown_primitives_addon();
 67   al_destroy_display(display);
 68 
 69   return 0;
 70}
 
 | 
| Matthew Leverton Supreme Loser January 1999  | Call al_set_new_display_option before creating the display. | 
| Sarfaraz Sheikh Member #12,739 April 2011  | Is it possible to create transparent or translucent primitives using allegro 5. I want to create Translucent rectangles so that if one rectangle go behind another, both can be visible . | 
| Edgar Reynaldo Major Reynaldo May 2007  | Yes, it is possible. Pass a premultiplied alpha color as the color to the drawing routines : float r = 1.0f; float g = 0.75f; float b = 0.5f; float a = 0.5f; al_draw_line(x,y,x2,y2,al_map_rgba_f(r*a , g*a , b*a , a),25.0); al_flip_display(); 
 My Website! | EAGLE GUI Library Demos | My Deviant Art Gallery | Spiraloid Preview | A4 FontMaker | Skyline! (Missile Defense) Eagle and Allegro 5 binaries | Older Allegro 4 and 5 binaries | Allegro 5 compile guide | 
| Sarfaraz Sheikh Member #12,739 April 2011  | @Matthew Leverton : as shown below now I am calling al_set_new_display_option before creating display but still I can't see any difference. I am also checking if the option is set or not with al_get_display_option and it is returning 0. please help me out !!    1   ALLEGRO_DISPLAY *display = NULL;
  2 
  3      //turning multisampling on
  4   al_set_new_display_option(ALLEGRO_SAMPLE_BUFFERS, 1, ALLEGRO_REQUIRE);
  5   al_set_new_display_option(ALLEGRO_SAMPLES, 8, ALLEGRO_REQUIRE);
  6  
  7   //creating display
  8   display = al_create_display(640, 480);
  9  
 10   printf("%d",al_get_display_option(display,ALLEGRO_SAMPLE_BUFFERS));
 
 | 
| Elias Member #358 May 2000 | Use ALLEGRO_SUGGEST instead of ALLEGRO_REQUIRE, in case the exact value of 8 samples is not supported by your hardware (it might only support 4 or 10 or 16 or something). With suggest it will use the closest available one. -- | 
| Sarfaraz Sheikh Member #12,739 April 2011  | 
the problem is solved many thanks to you all ..  First i had to set the options before creating the display.Second, I had to set the importance to ALLEGRO_SUGGEST so that if requested sampling value is not available allegro will set the closest available. here is how the final code looks like 
   1 //enabling multisampling 
  2   //                          option              on/off     importance
  3   al_set_new_display_option(ALLEGRO_SAMPLE_BUFFERS, 1, ALLEGRO_SUGGEST);
  4   //                          option        value  importance
  5   al_set_new_display_option(ALLEGRO_SAMPLES, 4, ALLEGRO_SUGGEST);
  6  
  7   //creating display
  8   display = al_create_display(640, 480);
  9  
 10   //checking if display options are set with new display.
 11   printf("%d",al_get_display_option(display,ALLEGRO_SAMPLE_BUFFERS));
 
 | 
|  |