2 * scientific visualization api for direct framebuffer
4 * author: hackbard@hackdaworld.dyndns.org
12 /* two dimensional lattice */
14 int d2_lattice_init(int *argc,char **argv,d2_lattice *d2_l,int x,int y)
16 DFBSurfaceDescription surface_dsc;
17 DFBFontDescription font_dsc;
22 DirectFBInit(argc,&argv);
23 DirectFBCreate(&(d2_l->dfb));
24 d2_l->dfb->SetCooperativeLevel(d2_l->dfb,DFSCL_FULLSCREEN);
26 surface_dsc.flags=DSDESC_CAPS;
27 surface_dsc.caps=DSCAPS_PRIMARY|DSCAPS_FLIPPING;
28 d2_l->dfb->CreateSurface(d2_l->dfb,&surface_dsc,&(d2_l->p_surface));
29 d2_l->p_surface->GetSize(d2_l->p_surface,&(d2_l->s_width),&(d2_l->s_height));
31 font_dsc.flags=DFDESC_HEIGHT;
32 font_dsc.height=d2_l->s_height/40; /* 40 ? */
33 d2_l->font_h=font_dsc.height;
34 d2_l->dfb->CreateFont(d2_l->dfb,FONT,&font_dsc,&(d2_l->font));
35 d2_l->p_surface->SetFont(d2_l->p_surface,d2_l->font);
37 d2_l->fakt_y=(d2_l->s_height-(2*Y_GAP))/(d2_l->max_y);
38 d2_l->fakt_x=(d2_l->s_height-X_GAP)/(d2_l->max_x); /* bullshit, i can't imagine atm */
39 d2_l->info_x=d2_l->fakt_x*d2_l->max_x+2*X_GAP;
41 d2_l->info_w=d2_l->s_width-d2_l->info_x-2*X_GAP;
42 d2_l->info_h=d2_l->max_y*d2_l->fakt_y;
44 if((d2_l->s_height<(d2_l->max_y+2*Y_GAP)) || (d2_l->s_height<(d2_l->max_x+X_GAP)))
46 puts("resolution too low!");
51 int d3_lattice_init(int *argc,char **argv,d3_lattice *d3_l,int x,int y,int z)
53 DFBSurfaceDescription surface_dsc;
54 DFBFontDescription font_dsc;
60 DirectFBInit(argc,&argv);
61 DirectFBCreate(&(d3_l->dfb));
62 d3_l->dfb->SetCooperativeLevel(d3_l->dfb,DFSCL_FULLSCREEN);
64 surface_dsc.flags=DSDESC_CAPS;
65 surface_dsc.caps=DSCAPS_PRIMARY|DSCAPS_FLIPPING;
66 d3_l->dfb->CreateSurface(d3_l->dfb,&surface_dsc,&(d3_l->p_surface));
67 d3_l->p_surface->GetSize(d3_l->p_surface,&(d3_l->s_width),&(d3_l->s_height));
69 font_dsc.flags=DFDESC_HEIGHT;
70 font_dsc.height=d3_l->s_height/40; /* 40 ? */
71 d3_l->font_h=font_dsc.height;
72 d3_l->dfb->CreateFont(d3_l->dfb,FONT,&font_dsc,&(d3_l->font));
73 d3_l->p_surface->SetFont(d3_l->p_surface,d3_l->font);
75 d3_l->fakt_y=(d3_l->s_height-(3*Y_GAP))/(d3_l->max_z+d3_l->max_y);
76 d3_l->fakt_x=(d3_l->s_width-(3*X_GAP))/(d3_l->max_x+d3_l->max_y);
77 d3_l->info_x=d3_l->fakt_x*d3_l->max_x+(2*X_GAP);
78 d3_l->info_y=d3_l->fakt_y*d3_l->max_z+(2*Y_GAP);
79 d3_l->info_w=d3_l->fakt_x*d3_l->max_y;
80 d3_l->info_h=d3_l->fakt_y*d3_l->max_y;
85 int d2_lattice_release(d2_lattice *d2_l)
87 d2_l->font->Release(d2_l->font);
88 d2_l->p_surface->Release(d2_l->p_surface);
89 d2_l->dfb->Release(d2_l->dfb);
94 int d3_lattice_release(d3_lattice *d3_l)
96 d3_l->font->Release(d3_l->font);
97 d3_l->p_surface->Release(d3_l->p_surface);
98 d3_l->dfb->Release(d3_l->dfb);
103 int dx_lattice_get_color(unsigned char *status,unsigned char *r,unsigned char *g,unsigned char *b)
120 int d2_lattice_draw(d2_lattice *d2_l,int x,int y,int arg_c,char **arg_v)
124 unsigned char r,g,b,a;
126 a=0xff; /* no alpha blending */
128 for(x_c=0;x_c<d2_l->max_x;x_c++)
130 for(y_c=0;y_c<d2_l->max_y;y_c++)
132 dx_lattice_get_color((*d2_l).status+x_c+y_c*d2_l->max_x,&r,&g,&b);
139 d2_l->p_surface->SetColor(d2_l->p_surface,r,g,b,a);
140 d2_l->p_surface->DrawRectangle(d2_l->p_surface,
141 x_c*d2_l->fakt_x+X_GAP,
142 y_c*d2_l->fakt_y+Y_GAP,
143 d2_l->fakt_x,d2_l->fakt_y);
150 d2_l->p_surface->SetColor(d2_l->p_surface,0,0,0,0);
151 d2_l->p_surface->FillRectangle(d2_l->p_surface,
152 d2_l->info_x,d2_l->info_y,
153 d2_l->info_w,d2_l->info_h);
154 d2_l->p_surface->SetColor(d2_l->p_surface,r,g,b,a);
155 d2_l->p_surface->DrawRectangle(d2_l->p_surface,
156 d2_l->info_x,d2_l->info_y,
157 d2_l->info_w,d2_l->info_h);
158 d2_l->p_surface->SetColor(d2_l->p_surface,0x80,0x80,0xff,0xff);
159 for(i=1;i<=arg_c;i++)
161 d2_l->p_surface->DrawString(d2_l->p_surface,arg_v[i],-1,
162 d2_l->info_x+d2_l->fakt_x,
163 d2_l->info_y+d2_l->fakt_y+d2_l->font_h+(i-1)*2*d2_l->font_h,
166 /* now we flip all to surface */
167 d2_l->p_surface->Flip(d2_l->p_surface,NULL,0);
172 int d3_lattice_draw(d3_lattice *d3_l,int x,int y,int z,int arg_c,char **arg_v)
176 unsigned char r,g,b,a;
178 a=0xff; /* no alpha blending */
181 for(x_c=0;x_c<d3_l->max_x;x_c++)
183 for(z_c=0;z_c<d3_l->max_z;z_c++)
185 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);
192 d3_l->p_surface->SetColor(d3_l->p_surface,r,g,b,a);
193 d3_l->p_surface->DrawRectangle(d3_l->p_surface,
194 x_c*d3_l->fakt_x+X_GAP,
195 z_c*d3_l->fakt_y+Y_GAP,
196 d3_l->fakt_x,d3_l->fakt_y);
201 for(y_c=0;y_c<d3_l->max_y;y_c++)
203 for(z_c=0;z_c<d3_l->max_z;z_c++)
205 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);
212 d3_l->p_surface->SetColor(d3_l->p_surface,r,g,b,a);
213 d3_l->p_surface->DrawRectangle(d3_l->p_surface,
214 y_c*d3_l->fakt_x+d3_l->info_x,
215 z_c*d3_l->fakt_y+Y_GAP,
216 d3_l->fakt_x,d3_l->fakt_y);
221 for(x_c=0;x_c<d3_l->max_x;x_c++)
223 for(y_c=0;y_c<d3_l->max_y;y_c++)
225 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);
232 d3_l->p_surface->SetColor(d3_l->p_surface,r,g,b,a);
233 d3_l->p_surface->DrawRectangle(d3_l->p_surface,
234 x_c*d3_l->fakt_x+X_GAP,
235 y_c*d3_l->fakt_x+d3_l->info_x,
236 d3_l->fakt_x,d3_l->fakt_y);
244 d3_l->p_surface->SetColor(d3_l->p_surface,0,0,0,0);
245 d3_l->p_surface->FillRectangle(d3_l->p_surface,
246 d3_l->info_x,d3_l->info_y,
247 d3_l->info_w,d3_l->info_h);
248 d3_l->p_surface->SetColor(d3_l->p_surface,r,g,b,a);
249 d3_l->p_surface->DrawRectangle(d3_l->p_surface,
250 d3_l->info_x,d3_l->info_y,
251 d3_l->info_w,d3_l->info_h);
252 d3_l->p_surface->DrawLine(d3_l->p_surface,
253 d3_l->info_x+d3_l->info_w/2,
255 d3_l->info_x+d3_l->info_w/2,
256 d3_l->info_y+d3_l->info_h);
257 d3_l->p_surface->SetColor(d3_l->p_surface,0x80,0x80,0xff,0xff);
258 for(i=1;i<=arg_c;i++)
262 d3_l->p_surface->DrawString(d3_l->p_surface,arg_v[i],-1,
263 d3_l->info_x+d3_l->fakt_x,
264 d3_l->info_y+d3_l->fakt_y+d3_l->font_h+(i-1)*2*d3_l->font_h,
268 d3_l->p_surface->DrawString(d3_l->p_surface,arg_v[i],-1,
269 d3_l->info_x+d3_l->info_w/2+d3_l->fakt_x,
270 d3_l->info_y+d3_l->fakt_y+d3_l->font_h+(i%8-1)*2*d3_l->font_h,
278 int 2d_event_init(2d_lattice *2d_l)
280 2d_l->dfb->GetInputDevice(2d_l->dfb,DIDID_KEYBOARD,&(2d_l->keyboard));
281 2d_l->keyboard->CreateEventBuffer(2d_l->keyboard,&(2d_l->k_buffer));
286 int d3_event_init(d3_lattice *d3_l)
288 d3_l->dfb->GetInputDevice(d3_l->dfb,DIDID_KEYBOARD,&(3d_l->keyboard));
289 d3_l->keyboard->CreateEventBuffer(d3_l->keyboard,&(d3_l->k_buffer));
294 int scan_event(d3_lattice *d3_l,int *x,int *y,int *z,int *q,int *esc)
298 d3_l->k_buffer->GetEvent(d3_l->k_buffer,DFB_EVENT(&ke));
299 if(ke.type==DIET_KEYPRESS)
301 if(ke.key_id==DIKI_LEFT && *x!=0) *x-=1;
302 if(ke.key_id==DIKI_RIGHT && *x!=d3_l->max_x-1) *x+=1;
303 if(ke.key_id==DIET_DOWN && *y!=0) *y-=1;
304 if(ke.key_id==DIET_UP && *y!=d3_l->max_y-1) *y+=1;
305 if(ke.key_id==DIET_PAGE_DOWN && *z!=0) *z-=1;
306 if(ke.key_id==DIET_PAGE_UP && *z!=d3_l->mac_z-1) *z+=1;
307 if(ke.key_id==DIKI_Q) *quit=1;
308 if(ke.key_id==DIKI_ESCAPE) *esc=1;