2 * display.c - visualization api
11 int display_init(int x,int y,int z,display *display,void *cell,int *argc,char **argv)
14 DFBSurfaceDescription surface_dsc;
17 /* store dimensions */
21 /* store pointer to cells */
26 DirectFBInit(argc,&argv);
27 DirectFBCreate(&(display->dfb));
28 display->dfb->SetCooperativeLevel(display->dfb,DFSCL_FULLSCREEN);
29 surface_dsc.flags=DSDESC_CAPS;
30 surface_dsc.caps=DSCAPS_PRIMARY|DSCAPS_FLIPPING;
31 display->dfb->CreateSurface(display->dfb,&surface_dsc,&(display->primary_surface));
32 display->primary_surface->GetSize(display->primary_surface,&(display->screen_width),&(display->screen_height));
38 int display_release(display *display)
41 display->primary_surface->Release(display->primary_surface);
42 display->dfb->Release(display->dfb);
49 int dfb_choose_color(u32 *cell_p,unsigned char *r,unsigned char *g,unsigned char *b)
51 if((*cell_p&AMORPH)==AMORPH)
66 int display_draw(display *display,int x,int y,int z)
69 int menu_x,menu_y,menu_w,menu_h; /* for the yellow box */
71 unsigned char r,g,b,a;
72 int display_faktor_x,display_faktor_y;
73 a=0xff; /* no alpha blending */
74 if(((display->max_x+display->max_y+DISPLAY_X_FREE)>=display->screen_width)|
75 ((display->max_y+display->max_z+DISPLAY_Y_FREE)>=display->screen_height))
77 puts("resolution too low!");
80 display_faktor_x=display->screen_width/(display->max_x+display->max_y+DISPLAY_X_FREE);
81 display_faktor_y=display->screen_height/(display->max_z+display->max_y+DISPLAY_Y_FREE);
82 // if(display_faktor_x<display_faktor_y) display_faktor_y=display_faktor_x;
83 // if(display_faktor_y<display_faktor_x) display_faktor_x=display_faktor_y;
85 /* draw x-z surface */
87 for(x_c=0;x_c<display->max_x;x_c++)
89 for(z_c=0;z_c<display->max_z;z_c++)
91 dfb_choose_color((u32 *)(display->cell_p+x_c+y_c*(display->max_x-1)+z_c*(display->max_x-1)*(display->max_y-1)),&r,&g,&b);
93 display->primary_surface->SetColor(display->primary_surface,0xff,0xff,0,0);
95 display->primary_surface->SetColor(display->primary_surface,r,g,b,a);
96 display->primary_surface->DrawRectangle(display->primary_surface,x_c*display_faktor_x+DISPLAY_X_FREE/3,z_c*display_faktor_y+DISPLAY_Y_FREE/3,display_faktor_x,display_faktor_y);
99 /* draw y-z surface */
101 for(y_c=0;y_c<display->max_y;y_c++)
103 for(z_c=0;z_c<display->max_z;z_c++)
105 dfb_choose_color((u32 *)(display->cell_p+x_c+y_c*(display->max_x-1)+z_c*(display->max_x-1)*(display->max_y-1)),&r,&g,&b);
107 display->primary_surface->SetColor(display->primary_surface,0xff,0xff,0,0);
109 display->primary_surface->SetColor(display->primary_surface,r,g,b,a);
110 display->primary_surface->DrawRectangle(display->primary_surface,(y_c+display->max_x)*display_faktor_x+2*DISPLAY_X_FREE/3,z_c*display_faktor_y+DISPLAY_Y_FREE/3,display_faktor_x,display_faktor_y);
113 /* draw x-y surface */
115 for(x_c=0;x_c<display->max_x;x_c++)
117 for(y_c=0;y_c<display->max_y;y_c++)
119 dfb_choose_color((u32 *)(display->cell_p+x_c+y_c*(display->max_x-1)+z_c*(display->max_x-1)*(display->max_y-1)),&r,&g,&b);
121 display->primary_surface->SetColor(display->primary_surface,0xff,0xff,0,0);
123 display->primary_surface->SetColor(display->primary_surface,r,g,b,a);
124 display->primary_surface->DrawRectangle(display->primary_surface,x_c*display_faktor_x+DISPLAY_X_FREE/3,(y_c+display->max_z)*display_faktor_y+2*DISPLAY_Y_FREE/3,display_faktor_x,display_faktor_y);
127 /* display info window */
132 menu_x=2*DISPLAY_X_FREE/3+display->max_x*display_faktor_x;
133 menu_y=2*DISPLAY_Y_FREE/3+display->max_z*display_faktor_y;
134 menu_w=display->max_y*display_faktor_x;
135 menu_h=display->max_y*display_faktor_y;
136 display->primary_surface->SetColor(display->primary_surface,0,0,0,0);
137 display->primary_surface->FillRectangle(display->primary_surface,menu_x,menu_y,menu_w,menu_h);
138 display->primary_surface->SetColor(display->primary_surface,r,g,b,a);
139 display->primary_surface->DrawRectangle(display->primary_surface,menu_x,menu_y,menu_w,menu_h);
140 /* flip all to surface */
141 display->primary_surface->Flip(display->primary_surface,NULL,0);