2 * scientific visualization api for direct framebuffer
4 * author: hackbard@hackdaworld.dyndns.org
11 /* two dimensional lattice */
13 int d2_lattice_init(int *argc,char **argv,d2_lattice *d2_l,int x,int y)
15 DFBSurfaceDescription surface_dsc;
16 DFBFontDescription font_dsc;
21 DirectFBInit(argc,&argv);
22 DirectFBCreate(&(d2_l->dfb));
23 d2_l->dfb->SetCooperativeLevel(d2_l->dfb,DFSCL_FULLSCREEN);
25 surface_dsc.flags=DSDESC_CAPS;
26 surface_dsc.caps=DSCAPS_PRIMARY|DSCAPS_FLIPPING;
27 d2_l->dfb->CreateSurface(d2_l->dfb,&surface_dsc,&(d2_l->p_surface));
28 d2_l->p_surface->GetSize(d2_l->p_surface,&(d2_l->s_width),&(d2_l->s_height));
30 font_dsc.flags=DFDESC_HEIGHT;
31 font_dsc.height=d2_l->s_height/40; /* 40 ? */
32 d2_l->font_h=font_dsc.height;
33 d2_l->dfb->CreateFont(d2_l->dfb,FONT,&font_dsc,&(d2_l->font));
34 d2_l->p_surface->SetFont(d2_l->p_surface,d2_l->font);
36 d2_l->fakt_y=(d2_l->s_height-(2*Y_GAP))/(d2_l->max_y);
37 d2_l->fakt_x=(d2_l->s_height-X_GAP)/(d2_l->max_x); /* bullshit, i can't imagine atm */
38 d2_l->info_x=d2_l->fakt_x*d2_l->max_x+2*X_GAP;
40 d2_l->info_w=d2_l->s_width-d2_l->info_x-2*X_GAP;
41 d2_l->info_h=d2_l->max_y*d2_l->fakt_y;
43 if((d2_l->s_height<(d2_l->max_y+2*Y_GAP)) || (d2_l->s_height<(d2_l->max_x+X_GAP)))
45 puts("resolution too low!");
50 int d3_lattice_init(int *argc,char **argv,d3_lattice *d3_l,int x,int y,int z)
52 DFBSurfaceDescription surface_dsc;
53 DFBFontDescription font_dsc;
59 DirectFBInit(argc,&argv);
60 DirectFBCreate(&(d3_l->dfb));
61 d3_l->dfb->SetCooperativeLevel(d3_l->dfb,DFSCL_FULLSCREEN);
63 surface_dsc.flags=DSDESC_CAPS;
64 surface_dsc.caps=DSCAPS_PRIMARY|DSCAPS_FLIPPING;
65 d3_l->dfb->CreateSurface(d3_l->dfb,&surface_dsc,&(d3_l->p_surface));
66 d3_l->p_surface->GetSize(d3_l->p_surface,&(d3_l->s_width),&(d3_l->s_height));
68 font_dsc.flags=DFDESC_HEIGHT;
69 font_dsc.height=d3_l->s_height/40; /* 40 ? */
70 d3_l->font_h=font_dsc.height;
71 d3_l->dfb->CreateFont(d3_l->dfb,FONT,&font_dsc,&(d3_l->font));
72 d3_l->p_surface->SetFont(d3_l->p_surface,d3_l->font);
74 d3_l->fakt_y=(d3_l->s_height-(3*Y_GAP))/(d3_l->max_z+d3_l->max_y);
75 d3_l->fakt_x=(d3_l->s_width-(3*X_GAP))/(d3_l->max_x+d3_l->max_y);
76 d3_l->info_x=d3_l->fakt_x*d3_l->max_x+(2*X_GAP);
77 d3_l->info_y=d3_l->fakt_y*d3_l->max_z+(2*Y_GAP);
78 d3_l->info_w=d3_l->fakt_x*d3_l->max_y;
79 d3_l->info_h=d3_l->fakt_y*d3_l->max_y;
84 int d2_lattice_release(d2_lattice *d2_l)
86 d2_l->font->Release(d2_l->font);
87 d2_l->p_surface->Release(d2_l->p_surface);
88 d2_l->dfb->Release(d2_l->dfb);
93 int d3_lattice_release(d3_lattice *d3_l)
95 d3_l->font->Release(d3_l->font);
96 d3_l->p_surface->Release(d3_l->p_surface);
97 d3_l->dfb->Release(d3_l->dfb);
102 int dx_lattice_get_color(unsigned char *status,unsigned char *r,unsigned char *g,unsigned char *b)
119 int d2_lattice_draw(d2_lattice *d2_l,int x,int y,int arg_c,char **arg_v)
123 unsigned char r,g,b,a;
125 a=0xff; /* no alpha blending */
127 for(x_c=0;x_c<d2_l->max_x;x_c++)
129 for(y_c=0;y_c<d2_l->max_y;y_c++)
131 dx_lattice_get_color((*d2_l).status+x_c+y_c*d2_l->max_x,&r,&g,&b);
138 d2_l->p_surface->SetColor(d2_l->p_surface,r,g,b,a);
139 d2_l->p_surface->DrawRectangle(d2_l->p_surface,
140 x_c*d2_l->fakt_x+X_GAP,
141 y_c*d2_l->fakt_y+Y_GAP,
142 d2_l->fakt_x,d2_l->fakt_y);
149 d2_l->p_surface->SetColor(d2_l->p_surface,0,0,0,0);
150 d2_l->p_surface->FillRectangle(d2_l->p_surface,
151 d2_l->info_x,d2_l->info_y,
152 d2_l->info_w,d2_l->info_h);
153 d2_l->p_surface->SetColor(d2_l->p_surface,r,g,b,a);
154 d2_l->p_surface->DrawRectangle(d2_l->p_surface,
155 d2_l->info_x,d2_l->info_y,
156 d2_l->info_w,d2_l->info_h);
157 d2_l->p_surface->SetColor(d2_l->p_surface,0x80,0x80,0xff,0xff);
158 for(i=1;i<=arg_c;i++)
160 d2_l->p_surface->DrawString(d2_l->p_surface,arg_v[i],-1,
161 d2_l->info_x+d2_l->fakt_x,
162 d2_l->info_y+d2_l->fakt_y+d2_l->font_h+(i-1)*2*d2_l->font_h,
165 /* now we flip all to surface */
166 d2_l->p_surface->Flip(d2_l->p_surface,NULL,0);
171 int d3_lattice_draw(d3_lattice *d3_l,int x,int y,int z,int arg_c,char **arg_v)
175 unsigned char r,g,b,a;
177 a=0xff; /* no alpha blending */
180 for(x_c=0;x_c<d3_l->max_x;x_c++)
182 for(z_c=0;z_c<d3_l->max_z;z_c++)
184 dx_lattice_get_color((*d3_l).status+x_c+y_c*d3_l->max_x+z_c*d3_l->max_x*d3_l->max_y,&r,&g,&b);
191 d3_l->p_surface->SetColor(d3_l->p_surface,r,g,b,a);
192 d3_l->p_surface->DrawRectangle(d3_l->p_surface,
193 x_c*d3_l->fakt_x+X_GAP,
194 z_c*d3_l->fakt_y+Y_GAP,
195 d3_l->fakt_x,d3_l->fakt_y);
200 for(y_c=0;y_c<d3_l->max_y;y_c++)
202 for(z_c=0;z_c<d3_l->max_z;z_c++)
204 dx_lattice_get_color((*d3_l).status+x_c+y_c*d3_l->max_x+z_c*d3_l->max_x*d3_l->max_y,&r,&g,&b);
211 d3_l->p_surface->SetColor(d3_l->p_surface,r,g,b,a);
212 d3_l->p_surface->DrawRectangle(d3_l->p_surface,
213 y_c*d3_l->fakt_x+d3_l->info_x,
214 z_c*d3_l->fakt_y+Y_GAP,
215 d3_l->fakt_x,d3_l->fakt_y);
220 for(x_c=0;x_c<d3_l->max_x;x_c++)
222 for(y_c=0;y_c<d3_l->max_y;y_c++)
224 dx_lattice_get_color((*d3_l).status+x_c+y_c*d3_l->max_x+z_c*d3_l->max_x*d3_l->max_y,&r,&g,&b);
231 d3_l->p_surface->SetColor(d3_l->p_surface,r,g,b,a);
232 d3_l->p_surface->DrawRectangle(d3_l->p_surface,
233 x_c*d3_l->fakt_x+X_GAP,
234 y_c*d3_l->fakt_x+d3_l->info_x,
235 d3_l->fakt_x,d3_l->fakt_y);
243 d3_l->p_surface->SetColor(d3_l->p_surface,0,0,0,0);
244 d3_l->p_surface->FillRectangle(d3_l->p_surface,
245 d3_l->info_x,d3_l->info_y,
246 d3_l->info_w,d3_l->info_h);
247 d3_l->p_surface->SetColor(d3_l->p_surface,r,g,b,a);
248 d3_l->p_surface->DrawRectangle(d3_l->p_surface,
249 d3_l->info_x,d3_l->info_y,
250 d3_l->info_w,d3_l->info_h);
251 d3_l->p_surface->DrawLine(d3_l->p_surface,
252 d3_l->info_x+d3_l->info_w/2,
254 d3_l->info_x+d3_l->info_w/2,
255 d3_l->info_y+d3_l->info_h);
256 d3_l->p_surface->SetColor(d3_l->p_surface,0x80,0x80,0xff,0xff);
257 for(i=1;i<=arg_c;i++)
261 d3_l->p_surface->DrawString(d3_l->p_surface,arg_v[i],-1,
262 d3_l->info_x+d3_l->fakt_x,
263 d3_l->info_y+d3_l->fakt_y+d3_l->font_h+(i-1)*2*d3_l->font_h,
267 d3_l->p_surface->DrawString(d3_l->p_surface,arg_v[i],-1,
268 d3_l->info_x+d3_l->info_w/2+d3_l->fakt_x,
269 d3_l->info_y+d3_l->fakt_y+d3_l->font_h+(i%8-1)*2*d3_l->font_h,
277 int 2d_event_init(2d_lattice *2d_l)
279 2d_l->dfb->GetInputDevice(2d_l->dfb,DIDID_KEYBOARD,&(2d_l->keyboard));
280 2d_l->keyboard->CreateEventBuffer(2d_l->keyboard,&(2d_l->k_buffer));
285 int 3d_event_init(3d_lattice *3d_l)
287 3d_l->dfb->GetInputDevice(3d_l->dfb,DIDID_KEYBOARD,&(3d_l->keyboard));
288 3d_l->keyboard->CreateEventBuffer(3d_l->keyboard,&(3d_l->k_buffer));
293 int scan_event(d3_lattice *d3_l,int *x,int *y,int *z,int *q,int *esc)
297 d3_l->k_buffer->GetEvent(d3_l->k_buffer,DFB_EVENT(&ke));
298 if(ke.type==DIET_KEYPRESS)
300 if(ke.key_id==DIKI_LEFT && *x!=0) *x-=1;
301 if(ke.key_id==DIKI_RIGHT && *x!=d3_l->max_x-1) *x+=1;
302 if(ke.key_id==DIET_DOWN && *y!=0) *y-=1;
303 if(ke.key_id==DIET_UP && *y!=d3_l->max_y-1) *y+=1;