BRL-CAD
dm.h
Go to the documentation of this file.
1/* D M . H
2 * BRL-CAD
3 *
4 * Copyright (c) 1993-2022 United States Government as represented by
5 * the U.S. Army Research Laboratory.
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public License
9 * version 2.1 as published by the Free Software Foundation.
10 *
11 * This library is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this file; see the file named COPYING for more
18 * information.
19 */
20/** @addtogroup libdm */
21/** @{ */
22/** @file dm.h
23 *
24 */
25
26#ifndef DM_H
27#define DM_H
28
29#include "common.h"
30
31#include "vmath.h"
32#include "bu/vls.h"
33#include "bn.h"
34#include "bv.h"
35#include "icv.h"
36
37#include "./dm/defines.h"
38#include "./dm/fbserv.h"
39#include "./dm/util.h"
40#include "./dm/view.h"
41
42__BEGIN_DECLS
43
44#define DM_NULL (struct dm *)NULL
45
46/* the font used depends on the size of the window opened */
47#define FONTBACK "-adobe-courier-medium-r-normal--10-100-75-75-m-60-iso8859-1"
48#define FONT5 "5x7"
49#define FONT6 "6x10"
50#define FONT7 "7x13"
51#define FONT8 "8x13"
52#define FONT9 "9x15"
53#define FONT10 "10x20"
54#define FONT12 "12x24"
55
56#if defined(_WIN32) && !defined(__CYGWIN__)
57# define DM_VALID_FONT_SIZE(_size) (14 <= (_size) && (_size) <= 29)
58#else
59# define DM_VALID_FONT_SIZE(_size) (5 <= (_size) && (_size) <= 12 && (_size) != 11)
60# define DM_FONT_SIZE_TO_NAME(_size) (((_size) == 5) ? FONT5 : (((_size) == 6) ? FONT6 : (((_size) == 7) ? FONT7 : (((_size) == 8) ? FONT8 : (((_size) == 9) ? FONT9 : (((_size) == 10) ? FONT10 : FONT12))))))
61#endif
62
63/* This is how a parent application can pass a generic
64 * hook function in when setting dm variables. The dm_hook_data
65 * container holds the bu_structparse hook function and data
66 * needed by it in the dm_hook and dm_hook_data slots. When
67 * bu_struct_parse or one of the other libbu structure parsing
68 * functions is called, the dm_hook_data container is passed
69 * in as the data slot in that call.
70 *
71 * TODO - need example
72 *
73 */
75 void(*dm_hook)(const struct bu_structparse *, const char *, void *, const char *, void *);
76 void *dmh_data;
77};
78
79DM_EXPORT extern struct dm dm_null;
80
81DM_EXPORT extern void *dm_interp(struct dm *dmp);
82DM_EXPORT extern void *dm_get_ctx(struct dm *dmp);
83DM_EXPORT extern void *dm_get_udata(struct dm *dmp);
84DM_EXPORT extern void dm_set_udata(struct dm *dmp, void *udata);
85DM_EXPORT extern int dm_share_dlist(struct dm *dmp1,
86 struct dm *dmp2);
87DM_EXPORT extern fastf_t dm_Xx2Normal(struct dm *dmp,
88 int x);
89DM_EXPORT extern int dm_Normal2Xx(struct dm *dmp,
90 fastf_t f);
91DM_EXPORT extern fastf_t dm_Xy2Normal(struct dm *dmp,
92 int y,
93 int use_aspect);
94DM_EXPORT extern int dm_Normal2Xy(struct dm *dmp,
95 fastf_t f,
96 int use_aspect);
97DM_EXPORT extern void dm_fogHint(struct dm *dmp,
98 int fastfog);
99DM_EXPORT extern int dm_processOptions(struct dm *dmp, struct bu_vls *init_proc_vls, int argc, const char **argv);
100DM_EXPORT extern int dm_limit(int i);
101DM_EXPORT extern int dm_unlimit(int i);
102DM_EXPORT extern fastf_t dm_wrap(fastf_t f);
103
104/* adc.c */
105DM_EXPORT extern void dm_draw_adc(struct dm *dmp,
106 struct bv_adc_state *adcp, mat_t view2model, mat_t model2view);
107
108/* axes.c */
109DM_EXPORT extern void dm_draw_data_axes(struct dm *dmp,
110 fastf_t viewSize,
111 struct bv_data_axes_state *bndasp);
112
113DM_EXPORT extern void dm_draw_scene_axes(struct dm *dmp, struct bv_scene_obj *s);
114
115
116DM_EXPORT extern void dm_draw_hud_axes(struct dm *dmp,
117 fastf_t viewSize,
118 const mat_t rmat,
119 struct bv_axes *bnasp);
120
121/* clip.c */
122DM_EXPORT extern int clip(fastf_t *,
123 fastf_t *,
124 fastf_t *,
125 fastf_t *);
126DM_EXPORT extern int vclip(point_t,
127 point_t,
128 fastf_t *,
129 fastf_t *);
130
131/* grid.c */
132DM_EXPORT extern void dm_draw_grid(struct dm *dmp,
133 struct bv_grid_state *ggsp,
135 mat_t model2view,
136 fastf_t base2local);
137
138/* labels.c */
139#ifdef DM_WITH_RT
140#include "raytrace.h"
141DM_EXPORT extern int dm_draw_prim_labels(struct dm *dmp,
142 struct rt_wdb *wdbp,
143 const char *name,
144 mat_t viewmat,
145 int *labelsColor,
146 int (*labelsHook)(struct dm *dmp_arg, struct rt_wdb *wdbp_arg,
147 const char *name_arg, mat_t viewmat_arg,
148 int *labelsColor_arg, void *labelsHookClientdata_arg),
149 void *labelsHookClientdata);
150#endif
151
152/* rect.c */
153DM_EXPORT extern void dm_draw_rect(struct dm *dmp,
154 struct bv_interactive_rect_state *grsp);
155
156/* scale.c */
157DM_EXPORT extern void dm_draw_scale(struct dm *dmp,
158 fastf_t viewSize,
159 const char *unit,
160 int *lineColor,
161 int *textColor);
162
163/* vers.c */
164DM_EXPORT extern const char *dm_version(void);
165
166
167/* Plugin related functions */
168DM_EXPORT extern int dm_valid_type(const char *name, const char *dpy_string);
169DM_EXPORT const char * dm_init_msgs();
170DM_EXPORT extern struct dm *dm_open(void *ctx,
171 void *interp,
172 const char *type,
173 int argc,
174 const char *argv[]);
175DM_EXPORT extern void dm_list_types(struct bu_vls *list, const char *separator);
176DM_EXPORT const char *dm_bestXType(const char *dpy_string);
177DM_EXPORT extern int dm_have_graphics();
178
179/* This reports the graphics system associated with the specified dm type (returned values
180 * right now would be NULL, Tk or Qt - another eventual possibility is GLFW...) */
181DM_EXPORT extern const char *dm_graphics_system(const char *dmtype);
182
183/* functions to make a dm struct hideable - will need to
184 * sort these out later */
185
186DM_EXPORT extern const char *dm_get_dm_name(const struct dm *dmp);
187DM_EXPORT extern const char *dm_get_dm_lname(struct dm *dmp);
188DM_EXPORT extern const char *dm_get_graphics_system(const struct dm *dmp);
189DM_EXPORT extern int dm_get_width(struct dm *dmp);
190DM_EXPORT extern int dm_get_height(struct dm *dmp);
191DM_EXPORT extern void dm_set_width(struct dm *dmp, int width);
192DM_EXPORT extern void dm_set_height(struct dm *dmp, int height);
193DM_EXPORT extern void dm_geometry_request(struct dm *dmp, int width, int height);
194DM_EXPORT extern void dm_internal_var(struct bu_vls *result, struct dm *dmp, const char *key); // ick
195DM_EXPORT extern fastf_t dm_get_aspect(struct dm *dmp);
196DM_EXPORT extern int dm_graphical(const struct dm *dmp);
197DM_EXPORT extern const char *dm_get_type(struct dm *dmp);
198DM_EXPORT extern unsigned long dm_get_id(struct dm *dmp);
199DM_EXPORT extern void dm_set_id(struct dm *dmp, unsigned long new_id);
200DM_EXPORT extern int dm_get_displaylist(struct dm *dmp);
201DM_EXPORT extern int dm_close(struct dm *dmp);
202DM_EXPORT extern unsigned char *dm_get_bg(struct dm *dmp);
203DM_EXPORT extern int dm_set_bg(struct dm *dmp, unsigned char r, unsigned char g, unsigned char b);
204DM_EXPORT extern unsigned char *dm_get_fg(struct dm *dmp);
205DM_EXPORT extern int dm_set_fg(struct dm *dmp, unsigned char r, unsigned char g, unsigned char b, int strict, fastf_t transparency);
206DM_EXPORT extern int dm_reshape(struct dm *dmp, int width, int height);
207DM_EXPORT extern int dm_make_current(struct dm *dmp);
208DM_EXPORT extern int dm_doevent(struct dm *dmp, void *clientData, void *eventPtr);
209DM_EXPORT extern int dm_get_dirty(struct dm *dmp);
210DM_EXPORT extern void dm_set_dirty(struct dm *dmp, int i);
211DM_EXPORT extern vect_t *dm_get_clipmin(struct dm *dmp);
212DM_EXPORT extern vect_t *dm_get_clipmax(struct dm *dmp);
213DM_EXPORT extern int dm_get_bound_flag(struct dm *dmp);
214DM_EXPORT extern void dm_set_bound(struct dm *dmp, fastf_t val);
215DM_EXPORT extern int dm_get_stereo(struct dm *dmp);
216DM_EXPORT extern int dm_set_win_bounds(struct dm *dmp, fastf_t *w);
217DM_EXPORT extern int dm_configure_win(struct dm *dmp, int force);
218DM_EXPORT extern struct bu_vls *dm_get_pathname(struct dm *dmp);
219DM_EXPORT extern void dm_set_pathname(struct dm *dmp, const char *pname);
220DM_EXPORT extern struct bu_vls *dm_get_dname(struct dm *dmp);
221DM_EXPORT extern const char *dm_get_name(const struct dm *dmp);
222DM_EXPORT extern struct bu_vls *dm_get_tkname(struct dm *dmp);
223DM_EXPORT extern int dm_get_fontsize(struct dm *dmp);
224DM_EXPORT extern void dm_set_fontsize(struct dm *dmp, int size);
225DM_EXPORT extern int dm_get_light(struct dm *dmp);
226DM_EXPORT extern int dm_set_light(struct dm *dmp, int light);
227DM_EXPORT extern int dm_get_transparency(struct dm *dmp);
228DM_EXPORT extern int dm_set_transparency(struct dm *dmp, int transparency);
229DM_EXPORT extern int dm_get_zbuffer(struct dm *dmp);
230DM_EXPORT extern int dm_set_zbuffer(struct dm *dmp, int zbuffer);
231DM_EXPORT extern int dm_get_linewidth(struct dm *dmp);
232DM_EXPORT extern void dm_set_linewidth(struct dm *dmp, int linewidth);
233DM_EXPORT extern int dm_get_linestyle(struct dm *dmp);
234DM_EXPORT extern void dm_set_linestyle(struct dm *dmp, int linestyle);
235DM_EXPORT extern int dm_get_zclip(struct dm *dmp);
236DM_EXPORT extern void dm_set_zclip(struct dm *dmp, int zclip);
237DM_EXPORT extern int dm_get_perspective(struct dm *dmp);
238DM_EXPORT extern void dm_set_perspective(struct dm *dmp, fastf_t perspective);
239DM_EXPORT extern int dm_get_display_image(struct dm *dmp, unsigned char **image, int flip, int alpha);
240DM_EXPORT extern int dm_gen_dlists(struct dm *dmp, size_t range);
241DM_EXPORT extern int dm_begin_dlist(struct dm *dmp, unsigned int list);
242DM_EXPORT extern int dm_draw_dlist(struct dm *dmp, unsigned int list);
243DM_EXPORT extern int dm_end_dlist(struct dm *dmp);
244DM_EXPORT extern int dm_free_dlists(struct dm *dmp, unsigned int list, int range);
245DM_EXPORT extern int dm_draw_vlist(struct dm *dmp, struct bv_vlist *vp);
246DM_EXPORT extern int dm_draw_vlist_hidden_line(struct dm *dmp, struct bv_vlist *vp);
247DM_EXPORT extern int dm_set_line_attr(struct dm *dmp, int width, int style);
248DM_EXPORT extern int dm_draw_begin(struct dm *dmp);
249DM_EXPORT extern int dm_draw_end(struct dm *dmp);
250DM_EXPORT extern int dm_hud_begin(struct dm *dmp);
251DM_EXPORT extern int dm_hud_end(struct dm *dmp);
252DM_EXPORT extern int dm_loadmatrix(struct dm *dmp, fastf_t *mat, int eye);
253DM_EXPORT extern int dm_loadpmatrix(struct dm *dmp, fastf_t *mat);
254DM_EXPORT extern int dm_draw_string_2d(struct dm *dmp, const char *str, fastf_t x, fastf_t y, int size, int use_aspect);
255DM_EXPORT extern int dm_string_bbox_2d(struct dm *dmp, vect2d_t *bmin, vect2d_t *bmax, const char *str, fastf_t x, fastf_t y, int size, int use_aspect);
256DM_EXPORT extern int dm_draw_line_2d(struct dm *dmp, fastf_t x1, fastf_t y1_2d, fastf_t x2, fastf_t y2);
257DM_EXPORT extern int dm_draw_line_3d(struct dm *dmp, point_t pt1, point_t pt2);
258DM_EXPORT extern int dm_draw_lines_3d(struct dm *dmp, int npoints, point_t *points, int sflag);
259DM_EXPORT extern int dm_draw_point_2d(struct dm *dmp, fastf_t x, fastf_t y);
260DM_EXPORT extern int dm_draw_point_3d(struct dm *dmp, point_t pt);
261DM_EXPORT extern int dm_draw_points_3d(struct dm *dmp, int npoints, point_t *points);
262DM_EXPORT extern int dm_draw(struct dm *dmp, struct bv_vlist *(*callback)(void *), void **data);
263DM_EXPORT extern int dm_draw_obj(struct dm *dmp, struct display_list *obj);
264DM_EXPORT extern int dm_set_depth_mask(struct dm *dmp, int d_on);
265DM_EXPORT extern int dm_debug(struct dm *dmp, int lvl);
266DM_EXPORT extern int dm_logfile(struct dm *dmp, const char *filename);
267DM_EXPORT extern struct fb *dm_get_fb(struct dm *dmp);
268DM_EXPORT extern int dm_get_fb_visible(struct dm *dmp);
269DM_EXPORT extern int dm_set_fb_visible(struct dm *dmp, int is_fb_visible);
270
271// TODO - this should be using libicv - right now this just moving the guts of
272// dmo_png_cmd behind the call table, so only provides PNG...
273DM_EXPORT extern int dm_write_image(struct bu_vls *msgs, FILE *fp, struct dm *dmp);
274
275DM_EXPORT extern void dm_flush(struct dm *dmp);
276DM_EXPORT extern void dm_sync(struct dm *dmp);
277
278// Return 1 if same, 0 if different and -1 if no dmp available
279typedef enum {
284DM_EXPORT extern int dm_event_cmp(struct dm *dmp, dm_event_t type, int event);
285
286/* TODO - dm_vp is supposed to go away, but until we figure it out
287 * expose it here to allow dm hiding */
288DM_EXPORT extern void dm_set_vp(struct dm *dmp, fastf_t *vp);
289
290DM_EXPORT extern int dm_set_hook(const struct bu_structparse_map *map,
291 const char *key, void *data, struct dm_hook_data *hook);
292
293DM_EXPORT extern struct bu_structparse *dm_get_vparse(struct dm *dmp);
294DM_EXPORT extern void *dm_get_mvars(struct dm *dmp);
295
296DM_EXPORT extern int dm_draw_display_list(struct dm *dmp,
297 struct bu_list *dl,
298 fastf_t transparency_threshold,
299 fastf_t inv_viewsize,
300 short r, short g, short b,
301 int line_width,
302 int draw_style,
303 int draw_edit,
304 unsigned char *gdc,
305 int solids_down,
306 int mv_dlist
307 );
308
309DM_EXPORT extern const char *dm_default_type();
310
311/*
312 * Needed for fd_set, avoid including sys/select.h outright since it
313 * conflicts on some systems (e.g. freebsd4).
314 *
315 * FIXME: would be nice to decouple this interface from fd_set as it's
316 * only used in one place right now.
317 */
318#if defined(HAVE_SYS_TYPES_H)
319# include <sys/types.h>
320#endif
321#if defined(HAVE_SYS_TIME_H)
322# include <sys/time.h>
323#endif
324#include <stdio.h> /* for FILE */
325
326#include "bsocket.h"
327
328#include "pkg.h"
329#include "bu/magic.h"
330#include "bu/vls.h"
331
332/**
333 * Format of disk pixels is .pix raw image files. Formerly used as
334 * arguments to many of the library routines, but has fallen into
335 * disuse due to the difficulties with ANSI function prototypes, and
336 * the fact that arrays are not real types in C. The most notable
337 * problem is that of passing a pointer to an array of RGBpixel. It
338 * looks doubly dimensioned, but isn't.
339 */
340typedef unsigned char RGBpixel[3];
341
342
343/**
344 * These generic color maps have up to 16 bits of significance,
345 * left-justified in a short. Think of this as fixed-point values
346 * from 0 to 1.
347 */
348typedef struct {
349 unsigned short cm_red[256];
350 unsigned short cm_green[256];
351 unsigned short cm_blue[256];
352} ColorMap;
353
354
355#define PIXEL_NULL (unsigned char *) 0
356#define RGBPIXEL_NULL (unsigned char *) 0
357#define COLORMAP_NULL (ColorMap *) 0
358
359#define FB_NULL (struct fb *) 0
360
361/**
362 * assert the integrity of a framebuffer struct.
363 */
364#define FB_CK_FB(_p) BU_CKMAG(_p, FB_MAGIC, "FB")
365
366/* Library entry points */
367
368DM_EXPORT struct fb *fb_get();
369DM_EXPORT struct fb *fb_raw(const char *type);
370DM_EXPORT void fb_put(struct fb *ifp);
371DM_EXPORT struct dm *fb_get_dm(struct fb *ifp);
372DM_EXPORT extern const char *fb_gettype(struct fb *ifp);
373DM_EXPORT extern void fb_set_standalone(struct fb *ifp, int val);
374DM_EXPORT extern int fb_get_standalone(struct fb *ifp);
375DM_EXPORT extern int fb_get_max_width(struct fb *ifp);
376DM_EXPORT extern int fb_get_max_height(struct fb *ifp);
377DM_EXPORT extern int fb_getwidth(struct fb *ifp);
378DM_EXPORT extern int fb_getheight(struct fb *ifp);
379DM_EXPORT extern int fb_poll(struct fb *ifp);
380/* Returns in microseconds the maximum recommended amount of time to linger
381 * before polling for updates for a specific framebuffer instance (can be
382 * implementation dependent.) Zero means the fb_poll process does nothing
383 * (for example, the NULL fb). */
384DM_EXPORT extern long fb_poll_rate(struct fb *ifp);
385DM_EXPORT extern int fb_help(struct fb *ifp);
386DM_EXPORT extern int fb_free(struct fb *ifp);
387DM_EXPORT extern int fb_clear(struct fb *ifp, unsigned char *pp);
388DM_EXPORT extern ssize_t fb_read(struct fb *ifp, int x, int y, unsigned char *pp, size_t count);
389DM_EXPORT extern ssize_t fb_write(struct fb *ifp, int x, int y, const unsigned char *pp, size_t count);
390DM_EXPORT extern int fb_rmap(struct fb *ifp, ColorMap *cmap);
391DM_EXPORT extern int fb_wmap(struct fb *ifp, const ColorMap *cmap);
392DM_EXPORT extern int fb_view(struct fb *ifp, int xcenter, int ycenter, int xzoom, int yzoom);
393DM_EXPORT extern int fb_getview(struct fb *ifp, int *xcenter, int *ycenter, int *xzoom, int *yzoom);
394DM_EXPORT extern int fb_setcursor(struct fb *ifp, const unsigned char *bits, int xb, int yb, int xo, int yo);
395DM_EXPORT extern int fb_cursor(struct fb *ifp, int mode, int x, int y);
396DM_EXPORT extern int fb_getcursor(struct fb *ifp, int *mode, int *x, int *y);
397DM_EXPORT extern int fb_readrect(struct fb *ifp, int xmin, int ymin, int width, int height, unsigned char *pp);
398DM_EXPORT extern int fb_writerect(struct fb *ifp, int xmin, int ymin, int width, int height, const unsigned char *pp);
399DM_EXPORT extern int fb_bwreadrect(struct fb *ifp, int xmin, int ymin, int width, int height, unsigned char *pp);
400DM_EXPORT extern int fb_bwwriterect(struct fb *ifp, int xmin, int ymin, int width, int height, const unsigned char *pp);
401
402DM_EXPORT extern struct fb *fb_open(const char *file, int _width, int _height);
403DM_EXPORT extern int fb_close(struct fb *ifp);
404DM_EXPORT extern int fb_close_existing(struct fb *ifp);
405DM_EXPORT extern int fb_genhelp(void);
406DM_EXPORT extern int fb_ioinit(struct fb *ifp);
407DM_EXPORT extern int fb_seek(struct fb *ifp, int x, int y);
408DM_EXPORT extern int fb_tell(struct fb *ifp, int *xp, int *yp);
409DM_EXPORT extern int fb_rpixel(struct fb *ifp, unsigned char *pp);
410DM_EXPORT extern int fb_wpixel(struct fb *ifp, unsigned char *pp);
411DM_EXPORT extern int fb_flush(struct fb *ifp);
412DM_EXPORT extern int fb_configure_window(struct fb *, int, int);
413DM_EXPORT extern int fb_refresh(struct fb *ifp, int x, int y, int w, int h);
414#if !defined(_WIN32) || defined(__CYGWIN__)
415DM_EXPORT extern void fb_log(const char *fmt, ...) _BU_ATTR_PRINTF12;
416#endif
417DM_EXPORT extern int fb_null(struct fb *ifp);
418DM_EXPORT extern int fb_null_setcursor(struct fb *ifp, const unsigned char *bits, int xbits, int ybits, int xorig, int yorig);
419
420/* utility functions */
421DM_EXPORT extern int fb_common_file_size(size_t *widthp, size_t *heightp, const char *filename, int pixel_size);
422DM_EXPORT extern int fb_common_image_size(size_t *widthp, size_t *heightp, size_t npixels);
423DM_EXPORT extern int fb_common_name_size(size_t *widthp, size_t *heightp, const char *name);
424DM_EXPORT extern int fb_write_fp(struct fb *ifp, FILE *fp, int req_width, int req_height, int crunch, int inverse, struct bu_vls *result);
425DM_EXPORT extern int fb_read_fd(struct fb *ifp, int fd, int file_width, int file_height, int file_xoff, int file_yoff, int scr_width, int scr_height, int scr_xoff, int scr_yoff, int fileinput, char *file_name, int one_line_only, int multiple_lines, int autosize, int inverse, int clear, int zoom, struct bu_vls *result);
426DM_EXPORT extern int fb_read_icv(struct fb *ifp, icv_image_t *img, int file_xoff, int file_yoff, int file_maxwidth, int file_maxheight, int scr_xoff, int scr_yoff, int clear, int zoom, int inverse, int one_line_only, int multiple_lines, struct bu_vls *result);
427DM_EXPORT extern icv_image_t *fb_write_icv(struct fb *ifp, int scr_xoff, int scr_yoff, int width, int height);
428DM_EXPORT extern int fb_read_png(struct fb *ifp, FILE *fp_in, int file_xoff, int file_yoff, int scr_xoff, int scr_yoff, int clear, int zoom, int inverse, int one_line_only, int multiple_lines, int verbose, int header_only, double def_screen_gamma, struct bu_vls *result);
429
430DM_EXPORT extern int fb_set_interface(struct fb *ifp, const char *interface_type);
431DM_EXPORT extern const char *fb_get_name(const struct fb *ifp);
432DM_EXPORT extern void fb_set_magic(struct fb *ifp, uint32_t magic);
433DM_EXPORT extern long fb_get_pagebuffer_pixel_size(struct fb *ifp);
434
435DM_EXPORT extern int fb_is_set_fd(struct fb *ifp, fd_set *infds);
436DM_EXPORT extern int fb_set_fd(struct fb *ifp, fd_set *select_list);
437DM_EXPORT extern int fb_clear_fd(struct fb *ifp, fd_set *select_list);
438
439/* color mapping */
440DM_EXPORT extern int fb_is_linear_cmap(const ColorMap *cmap);
441DM_EXPORT extern void fb_make_linear_cmap(ColorMap *cmap);
442
443/* open_existing functionality. */
444struct fb_platform_specific {uint32_t magic; void *data;};
445DM_EXPORT extern struct fb_platform_specific *fb_get_platform_specific(uint32_t magic);
446DM_EXPORT extern void fb_put_platform_specific(struct fb_platform_specific *fb_p);
447DM_EXPORT extern struct fb *fb_open_existing(const char *file, int _width, int _height, struct fb_platform_specific *fb_p);
448DM_EXPORT extern void fb_setup_existing(struct fb *fbp, int _width, int _height, struct fb_platform_specific *fb_p);
449
450/* backward compatibility hacks */
451DM_EXPORT extern int fb_reset(struct fb *ifp);
452DM_EXPORT extern int fb_viewport(struct fb *ifp, int left, int top, int right, int bottom);
453DM_EXPORT extern int fb_window(struct fb *ifp, int xcenter, int ycenter);
454DM_EXPORT extern int fb_zoom(struct fb *ifp, int xzoom, int yzoom);
455DM_EXPORT extern int fb_scursor(struct fb *ifp, int mode, int x, int y);
456
457/*
458 * Copy one RGB pixel to another.
459 */
460#define COPYRGB(to, from) { (to)[RED]=(from)[RED];\
461 (to)[GRN]=(from)[GRN];\
462 (to)[BLU]=(from)[BLU]; }
463
464/* Debug Bitvector Definition */
465#define FB_DEBUG_BIO 1 /* Buffered io calls (less r/wpixel) */
466#define FB_DEBUG_CMAP 2 /* Contents of colormaps */
467#define FB_DEBUG_RW 4 /* Contents of reads and writes */
468#define FB_DEBUG_BRW 8 /* Buffered IO rpixel and wpixel */
469
470/**
471 * report version information about LIBFB
472 */
473DM_EXPORT extern const char *fb_version(void);
474
475
476/* To avoid breaking things too badly, temporarily expose
477 * what is now internal API */
478#ifdef EXPOSE_FB_HEADER
479# include "../src/libfb/fb_private.h"
480#endif
481
482typedef struct fb_internal FBIO;
483
484
485/*
486 * Types of packages used for the remote frame buffer
487 * communication
488 */
489#define MSG_FBOPEN 1
490#define MSG_FBCLOSE 2
491#define MSG_FBCLEAR 3
492#define MSG_FBREAD 4
493#define MSG_FBWRITE 5
494#define MSG_FBCURSOR 6 /**< @brief fb_cursor() */
495#define MSG_FBWINDOW 7 /**< @brief OLD */
496#define MSG_FBZOOM 8 /**< @brief OLD */
497#define MSG_FBSCURSOR 9 /**< @brief OLD */
498#define MSG_FBVIEW 10 /**< @brief NEW */
499#define MSG_FBGETVIEW 11 /**< @brief NEW */
500#define MSG_FBRMAP 12
501#define MSG_FBWMAP 13
502#define MSG_FBHELP 14
503#define MSG_FBREADRECT 15
504#define MSG_FBWRITERECT 16
505#define MSG_FBFLUSH 17
506#define MSG_FBFREE 18
507#define MSG_FBGETCURSOR 19 /**< @brief NEW */
508#define MSG_FBPOLL 30 /**< @brief NEW */
509#define MSG_FBSETCURSOR 31 /**< @brief NEW in Release 4.4 */
510#define MSG_FBBWREADRECT 32 /**< @brief NEW in Release 4.6 */
511#define MSG_FBBWWRITERECT 33 /**< @brief NEW in Release 4.6 */
512
513#define MSG_DATA 20
514#define MSG_RETURN 21
515#define MSG_CLOSE 22
516#define MSG_ERROR 23
517
518#define MSG_NORETURN 100
519
520__END_DECLS
521
522#endif /* DM_H */
523
524/** @} */
525/*
526 * Local Variables:
527 * mode: C
528 * tab-width: 8
529 * indent-tabs-mode: t
530 * c-file-style: "stroustrup"
531 * End:
532 * ex: shiftwidth=4 tabstop=8
533 */
Header file for the BRL-CAD Numerical Computation Library, LIBBN.
Header file for the BRL-CAD common definitions.
This header holds generic routines and data structures used for TCP based communication between a fra...
#define _BU_ATTR_PRINTF12
Definition: defines.h:103
void int int * yp
Definition: tig.h:209
void int float float float * scale
Definition: tig.h:142
void int * xp
Definition: tig.h:208
void float float * y
Definition: tig.h:73
void int char * mode
Definition: tig.h:179
void float float int int int int float * size
Definition: tig.h:132
void float * x
Definition: tig.h:72
long fb_poll_rate(struct fb *ifp)
int fb_reset(struct fb *ifp)
int dm_get_width(struct dm *dmp)
int dm_get_transparency(struct dm *dmp)
int dm_set_bg(struct dm *dmp, unsigned char r, unsigned char g, unsigned char b)
void * dm_get_ctx(struct dm *dmp)
int dm_set_hook(const struct bu_structparse_map *map, const char *key, void *data, struct dm_hook_data *hook)
unsigned char * dm_get_fg(struct dm *dmp)
int dm_get_stereo(struct dm *dmp)
int dm_event_cmp(struct dm *dmp, dm_event_t type, int event)
int fb_close(struct fb *ifp)
void fb_put(struct fb *ifp)
int fb_cursor(struct fb *ifp, int mode, int x, int y)
int dm_get_display_image(struct dm *dmp, unsigned char **image, int flip, int alpha)
int dm_free_dlists(struct dm *dmp, unsigned int list, int range)
void dm_set_fontsize(struct dm *dmp, int size)
struct fb_internal FBIO
Definition: dm.h:482
unsigned long dm_get_id(struct dm *dmp)
int fb_bwwriterect(struct fb *ifp, int xmin, int ymin, int width, int height, const unsigned char *pp)
int dm_get_linestyle(struct dm *dmp)
int dm_close(struct dm *dmp)
void dm_geometry_request(struct dm *dmp, int width, int height)
int dm_draw_point_2d(struct dm *dmp, fastf_t x, fastf_t y)
void dm_set_bound(struct dm *dmp, fastf_t val)
void dm_draw_rect(struct dm *dmp, struct bv_interactive_rect_state *grsp)
int dm_Normal2Xx(struct dm *dmp, fastf_t f)
int dm_get_zclip(struct dm *dmp)
void dm_set_vp(struct dm *dmp, fastf_t *vp)
void fb_log(const char *fmt,...) _BU_ATTR_PRINTF12
int fb_free(struct fb *ifp)
int dm_hud_begin(struct dm *dmp)
int dm_gen_dlists(struct dm *dmp, size_t range)
void dm_flush(struct dm *dmp)
const char * dm_graphics_system(const char *dmtype)
int fb_wmap(struct fb *ifp, const ColorMap *cmap)
fastf_t dm_Xy2Normal(struct dm *dmp, int y, int use_aspect)
int dm_draw_string_2d(struct dm *dmp, const char *str, fastf_t x, fastf_t y, int size, int use_aspect)
int dm_get_zbuffer(struct dm *dmp)
void dm_draw_hud_axes(struct dm *dmp, fastf_t viewSize, const mat_t rmat, struct bv_axes *bnasp)
int dm_have_graphics()
int fb_view(struct fb *ifp, int xcenter, int ycenter, int xzoom, int yzoom)
const char * dm_get_dm_name(const struct dm *dmp)
int dm_unlimit(int i)
struct fb * fb_open_existing(const char *file, int _width, int _height, struct fb_platform_specific *fb_p)
int fb_is_set_fd(struct fb *ifp, fd_set *infds)
struct bu_structparse * dm_get_vparse(struct dm *dmp)
int fb_write_fp(struct fb *ifp, FILE *fp, int req_width, int req_height, int crunch, int inverse, struct bu_vls *result)
struct bu_vls * dm_get_pathname(struct dm *dmp)
int dm_end_dlist(struct dm *dmp)
const char * dm_bestXType(const char *dpy_string)
int dm_share_dlist(struct dm *dmp1, struct dm *dmp2)
int dm_get_bound_flag(struct dm *dmp)
fastf_t dm_Xx2Normal(struct dm *dmp, int x)
int dm_loadpmatrix(struct dm *dmp, fastf_t *mat)
struct dm * dm_open(void *ctx, void *interp, const char *type, int argc, const char *argv[])
void dm_draw_scale(struct dm *dmp, fastf_t viewSize, const char *unit, int *lineColor, int *textColor)
void fb_set_standalone(struct fb *ifp, int val)
const char * fb_version(void)
void dm_set_height(struct dm *dmp, int height)
int fb_window(struct fb *ifp, int xcenter, int ycenter)
void fb_make_linear_cmap(ColorMap *cmap)
int fb_null(struct fb *ifp)
void fb_put_platform_specific(struct fb_platform_specific *fb_p)
int dm_Normal2Xy(struct dm *dmp, fastf_t f, int use_aspect)
void dm_draw_adc(struct dm *dmp, struct bv_adc_state *adcp, mat_t view2model, mat_t model2view)
int dm_draw_vlist_hidden_line(struct dm *dmp, struct bv_vlist *vp)
void fb_setup_existing(struct fb *fbp, int _width, int _height, struct fb_platform_specific *fb_p)
int fb_setcursor(struct fb *ifp, const unsigned char *bits, int xb, int yb, int xo, int yo)
int dm_logfile(struct dm *dmp, const char *filename)
int dm_get_dirty(struct dm *dmp)
int dm_draw_line_2d(struct dm *dmp, fastf_t x1, fastf_t y1_2d, fastf_t x2, fastf_t y2)
int dm_draw_line_3d(struct dm *dmp, point_t pt1, point_t pt2)
int fb_writerect(struct fb *ifp, int xmin, int ymin, int width, int height, const unsigned char *pp)
int fb_clear(struct fb *ifp, unsigned char *pp)
struct dm * fb_get_dm(struct fb *ifp)
int dm_set_fg(struct dm *dmp, unsigned char r, unsigned char g, unsigned char b, int strict, fastf_t transparency)
int fb_common_image_size(size_t *widthp, size_t *heightp, size_t npixels)
int dm_draw_obj(struct dm *dmp, struct display_list *obj)
int fb_read_fd(struct fb *ifp, int fd, int file_width, int file_height, int file_xoff, int file_yoff, int scr_width, int scr_height, int scr_xoff, int scr_yoff, int fileinput, char *file_name, int one_line_only, int multiple_lines, int autosize, int inverse, int clear, int zoom, struct bu_vls *result)
struct bu_vls * dm_get_tkname(struct dm *dmp)
fastf_t dm_wrap(fastf_t f)
int dm_set_zbuffer(struct dm *dmp, int zbuffer)
int fb_clear_fd(struct fb *ifp, fd_set *select_list)
ssize_t fb_read(struct fb *ifp, int x, int y, unsigned char *pp, size_t count)
int fb_viewport(struct fb *ifp, int left, int top, int right, int bottom)
int dm_doevent(struct dm *dmp, void *clientData, void *eventPtr)
int dm_draw_lines_3d(struct dm *dmp, int npoints, point_t *points, int sflag)
long fb_get_pagebuffer_pixel_size(struct fb *ifp)
vect_t * dm_get_clipmax(struct dm *dmp)
int dm_set_transparency(struct dm *dmp, int transparency)
void dm_set_linewidth(struct dm *dmp, int linewidth)
unsigned char RGBpixel[3]
Definition: dm.h:340
int dm_graphical(const struct dm *dmp)
const char * dm_default_type()
int dm_begin_dlist(struct dm *dmp, unsigned int list)
void dm_set_linestyle(struct dm *dmp, int linestyle)
int fb_configure_window(struct fb *, int, int)
struct fb * fb_get()
int dm_set_depth_mask(struct dm *dmp, int d_on)
int dm_draw_begin(struct dm *dmp)
unsigned char * dm_get_bg(struct dm *dmp)
int dm_get_light(struct dm *dmp)
int dm_set_line_attr(struct dm *dmp, int width, int style)
int fb_seek(struct fb *ifp, int x, int y)
void * dm_interp(struct dm *dmp)
struct fb * fb_raw(const char *type)
const char * fb_get_name(const struct fb *ifp)
const char * dm_get_type(struct dm *dmp)
int fb_close_existing(struct fb *ifp)
int fb_tell(struct fb *ifp, int *xp, int *yp)
int fb_getview(struct fb *ifp, int *xcenter, int *ycenter, int *xzoom, int *yzoom)
int dm_draw_vlist(struct dm *dmp, struct bv_vlist *vp)
const char * dm_get_dm_lname(struct dm *dmp)
void dm_draw_data_axes(struct dm *dmp, fastf_t viewSize, struct bv_data_axes_state *bndasp)
void fb_set_magic(struct fb *ifp, uint32_t magic)
void dm_list_types(struct bu_vls *list, const char *separator)
int dm_get_fontsize(struct dm *dmp)
struct dm dm_null
void dm_draw_grid(struct dm *dmp, struct bv_grid_state *ggsp, fastf_t scale, mat_t model2view, fastf_t base2local)
int dm_make_current(struct dm *dmp)
struct bu_vls * dm_get_dname(struct dm *dmp)
int fb_help(struct fb *ifp)
int dm_get_linewidth(struct dm *dmp)
int dm_set_fb_visible(struct dm *dmp, int is_fb_visible)
int dm_hud_end(struct dm *dmp)
void dm_internal_var(struct bu_vls *result, struct dm *dmp, const char *key)
int fb_genhelp(void)
int dm_draw_point_3d(struct dm *dmp, point_t pt)
void dm_sync(struct dm *dmp)
int fb_get_max_width(struct fb *ifp)
fastf_t dm_get_aspect(struct dm *dmp)
int dm_get_perspective(struct dm *dmp)
struct fb * dm_get_fb(struct dm *dmp)
int fb_read_png(struct fb *ifp, FILE *fp_in, int file_xoff, int file_yoff, int scr_xoff, int scr_yoff, int clear, int zoom, int inverse, int one_line_only, int multiple_lines, int verbose, int header_only, double def_screen_gamma, struct bu_vls *result)
void dm_set_perspective(struct dm *dmp, fastf_t perspective)
struct fb * fb_open(const char *file, int _width, int _height)
int dm_processOptions(struct dm *dmp, struct bu_vls *init_proc_vls, int argc, const char **argv)
int fb_refresh(struct fb *ifp, int x, int y, int w, int h)
int dm_draw_end(struct dm *dmp)
int fb_scursor(struct fb *ifp, int mode, int x, int y)
void dm_set_width(struct dm *dmp, int width)
int fb_set_interface(struct fb *ifp, const char *interface_type)
int dm_draw_dlist(struct dm *dmp, unsigned int list)
const char * dm_get_name(const struct dm *dmp)
int fb_ioinit(struct fb *ifp)
int fb_getheight(struct fb *ifp)
void dm_set_udata(struct dm *dmp, void *udata)
int fb_getcursor(struct fb *ifp, int *mode, int *x, int *y)
int vclip(point_t, point_t, fastf_t *, fastf_t *)
int fb_get_standalone(struct fb *ifp)
int fb_read_icv(struct fb *ifp, icv_image_t *img, int file_xoff, int file_yoff, int file_maxwidth, int file_maxheight, int scr_xoff, int scr_yoff, int clear, int zoom, int inverse, int one_line_only, int multiple_lines, struct bu_vls *result)
int fb_rpixel(struct fb *ifp, unsigned char *pp)
const char * dm_version(void)
void dm_fogHint(struct dm *dmp, int fastfog)
void dm_set_zclip(struct dm *dmp, int zclip)
int clip(fastf_t *, fastf_t *, fastf_t *, fastf_t *)
int dm_debug(struct dm *dmp, int lvl)
int fb_poll(struct fb *ifp)
int fb_null_setcursor(struct fb *ifp, const unsigned char *bits, int xbits, int ybits, int xorig, int yorig)
int fb_common_file_size(size_t *widthp, size_t *heightp, const char *filename, int pixel_size)
int fb_common_name_size(size_t *widthp, size_t *heightp, const char *name)
int fb_flush(struct fb *ifp)
int fb_set_fd(struct fb *ifp, fd_set *select_list)
int dm_draw_display_list(struct dm *dmp, struct bu_list *dl, fastf_t transparency_threshold, fastf_t inv_viewsize, short r, short g, short b, int line_width, int draw_style, int draw_edit, unsigned char *gdc, int solids_down, int mv_dlist)
int fb_readrect(struct fb *ifp, int xmin, int ymin, int width, int height, unsigned char *pp)
int dm_set_light(struct dm *dmp, int light)
void dm_set_id(struct dm *dmp, unsigned long new_id)
const char * dm_init_msgs()
int dm_reshape(struct dm *dmp, int width, int height)
int dm_draw(struct dm *dmp, struct bv_vlist *(*callback)(void *), void **data)
int dm_draw_points_3d(struct dm *dmp, int npoints, point_t *points)
int dm_set_win_bounds(struct dm *dmp, fastf_t *w)
int dm_get_height(struct dm *dmp)
icv_image_t * fb_write_icv(struct fb *ifp, int scr_xoff, int scr_yoff, int width, int height)
void dm_draw_scene_axes(struct dm *dmp, struct bv_scene_obj *s)
const char * fb_gettype(struct fb *ifp)
vect_t * dm_get_clipmin(struct dm *dmp)
void * dm_get_mvars(struct dm *dmp)
int dm_write_image(struct bu_vls *msgs, FILE *fp, struct dm *dmp)
int fb_rmap(struct fb *ifp, ColorMap *cmap)
int dm_configure_win(struct dm *dmp, int force)
int dm_get_fb_visible(struct dm *dmp)
void * dm_get_udata(struct dm *dmp)
void dm_set_dirty(struct dm *dmp, int i)
int fb_get_max_height(struct fb *ifp)
int fb_is_linear_cmap(const ColorMap *cmap)
int dm_loadmatrix(struct dm *dmp, fastf_t *mat, int eye)
int dm_string_bbox_2d(struct dm *dmp, vect2d_t *bmin, vect2d_t *bmax, const char *str, fastf_t x, fastf_t y, int size, int use_aspect)
int dm_get_displaylist(struct dm *dmp)
const char * dm_get_graphics_system(const struct dm *dmp)
int dm_limit(int i)
dm_event_t
Definition: dm.h:279
int fb_wpixel(struct fb *ifp, unsigned char *pp)
int fb_zoom(struct fb *ifp, int xzoom, int yzoom)
ssize_t fb_write(struct fb *ifp, int x, int y, const unsigned char *pp, size_t count)
struct fb_platform_specific * fb_get_platform_specific(uint32_t magic)
void dm_set_pathname(struct dm *dmp, const char *pname)
int fb_bwreadrect(struct fb *ifp, int xmin, int ymin, int width, int height, unsigned char *pp)
int dm_valid_type(const char *name, const char *dpy_string)
int fb_getwidth(struct fb *ifp)
@ DM_BUTTON_PRESS
Definition: dm.h:281
@ DM_BUTTON_RELEASE
Definition: dm.h:282
@ DM_MOTION_NOTIFY
Definition: dm.h:280
fastf_t vect_t[ELEMENTS_PER_VECT]
3-tuple vector
Definition: vmath.h:345
double fastf_t
fastest 64-bit (or larger) floating point type
Definition: vmath.h:330
fastf_t mat_t[ELEMENTS_PER_MAT]
4x4 matrix
Definition: vmath.h:366
fastf_t point_t[ELEMENTS_PER_POINT]
3-tuple point
Definition: vmath.h:351
fastf_t vect2d_t[ELEMENTS_PER_VECT2D]
2-tuple vector
Definition: vmath.h:333
Global registry of recognized magic numbers.
Definition: dm.h:348
Definition: list.h:131
Definition: vls.h:53
Definition: vlist.h:64
void(* dm_hook)(const struct bu_structparse *, const char *, void *, const char *, void *)
Definition: dm.h:75
void * dmh_data
Definition: dm.h:76
Definition: defines.h:57
struct dm_impl * i
Definition: defines.h:59
uint32_t magic
Definition: dm.h:444
void * data
Definition: dm.h:444
Definition: defines.h:70
Definition: wdb.h:56
fundamental vector, matrix, quaternion math macros