Revision: 76936
http://sourceforge.net/p/brlcad/code/76936
Author: starseeker
Date: 2020-08-25 03:03:02 +0000 (Tue, 25 Aug 2020)
Log Message:
-----------
Needs more testing, but adjusting the setting of the dirty flags gives saner
behavior with the classic X libdm backend. Still can't embed the X dm backend
in Tk with 8.6 - that seems to be a different category of failure - but this
allows the X dm to function in classic mode. Checkpointing a state that shows
progress.
Modified Paths:
--------------
brlcad/trunk/src/mged/attach.c
brlcad/trunk/src/mged/cmd.c
brlcad/trunk/src/mged/dm-generic.c
brlcad/trunk/src/mged/doevent.c
brlcad/trunk/src/mged/dozoom.c
brlcad/trunk/src/mged/fbserv.c
brlcad/trunk/src/mged/mged.c
brlcad/trunk/src/mged/predictor.c
Modified: brlcad/trunk/src/mged/attach.c
===================================================================
--- brlcad/trunk/src/mged/attach.c 2020-08-25 02:29:42 UTC (rev 76935)
+++ brlcad/trunk/src/mged/attach.c 2020-08-25 03:03:02 UTC (rev 76936)
@@ -683,6 +683,9 @@
view_ring_init(mged_curr_dm->dm_view_state, (struct _view_state *)NULL);
DMP_dirty = 1;
+ if (target_dm->dm_dmp) {
+ dm_set_dirty(target_dm->dm_dmp, 1);
+ }
mapped = 1;
netfd = -1;
owner = 1;
Modified: brlcad/trunk/src/mged/cmd.c
===================================================================
--- brlcad/trunk/src/mged/cmd.c 2020-08-25 02:29:42 UTC (rev 76935)
+++ brlcad/trunk/src/mged/cmd.c 2020-08-25 03:03:02 UTC (rev 76936)
@@ -1463,6 +1463,7 @@
memmove((void *)scroll_array, (void *)dml->dm_scroll_array, sizeof(struct
scroll_item *) * 6);
DMP_dirty = 1;
+ dm_set_dirty(DMP, 1);
refresh();
view_state = vsp; /* restore state info pointer */
Modified: brlcad/trunk/src/mged/dm-generic.c
===================================================================
--- brlcad/trunk/src/mged/dm-generic.c 2020-08-25 02:29:42 UTC (rev 76935)
+++ brlcad/trunk/src/mged/dm-generic.c 2020-08-25 03:03:02 UTC (rev 76936)
@@ -586,6 +586,7 @@
}
DMP_dirty = 1;
+ //dm_set_dirty(DMP, 1);
(void)dm_make_current(DMP);
return dm_set_bg(DMP, r, g, b);
}
Modified: brlcad/trunk/src/mged/doevent.c
===================================================================
--- brlcad/trunk/src/mged/doevent.c 2020-08-25 02:29:42 UTC (rev 76935)
+++ brlcad/trunk/src/mged/doevent.c 2020-08-25 03:03:02 UTC (rev 76936)
@@ -151,6 +151,7 @@
dm_configure_win(DMP, 0);
rect_image2view();
DMP_dirty = 1;
+ dm_set_dirty(DMP, 1);
if (fbp)
(void)fb_configure_window(fbp, conf->width, conf->height);
@@ -159,16 +160,19 @@
status = TCL_RETURN;
} else if (eventPtr->type == MapNotify) {
mapped = 1;
+ dm_set_dirty(DMP, 1);
/* no further processing of this event */
status = TCL_RETURN;
} else if (eventPtr->type == UnmapNotify) {
mapped = 0;
+ dm_set_dirty(DMP, 1);
/* no further processing of this event */
status = TCL_RETURN;
} else if (eventPtr->type == MotionNotify) {
motion_event_handler((XMotionEvent *)eventPtr);
+ dm_set_dirty(DMP, 1);
/* no further processing of this event */
status = TCL_RETURN;
@@ -176,6 +180,7 @@
#ifdef IR_KNOBS
else if (dm_event_cmp(DMP, DM_MOTION_NOTIFY, eventPtr->type) == 1) {
dials_event_handler((XDeviceMotionEvent *)eventPtr);
+ dm_set_dirty(DMP, 1);
/* no further processing of this event */
status = TCL_RETURN;
@@ -184,11 +189,13 @@
#ifdef IR_BUTTONS
else if (dm_event_cmp(DMP, DM_BUTTON_PRESS, eventPtr->type) == 1) {
buttons_event_handler((XDeviceButtonEvent *)eventPtr, 1);
+ dm_set_dirty(DMP, 1);
/* no further processing of this event */
status = TCL_RETURN;
} else if (dm_event_cmp(DMP, DM_BUTTON_RELEASE, eventPtr->type) == 1) {
buttons_event_handler((XDeviceButtonEvent *)eventPtr, 0);
+ dm_set_dirty(DMP, 1);
/* no further processing of this event */
status = TCL_RETURN;
Modified: brlcad/trunk/src/mged/dozoom.c
===================================================================
--- brlcad/trunk/src/mged/dozoom.c 2020-08-25 02:29:42 UTC (rev 76935)
+++ brlcad/trunk/src/mged/dozoom.c 2020-08-25 03:03:02 UTC (rev 76936)
@@ -232,6 +232,7 @@
while (BU_LIST_NOT_HEAD(gdlp, hdlp)) {
next_gdlp = BU_LIST_PNEXT(display_list, gdlp);
+ dm_set_dirty(DMP, 1);
dm_draw_obj(DMP, gdlp);
gdlp = next_gdlp;
@@ -261,6 +262,7 @@
if (sp->s_dlist == 0)
sp->s_dlist = dm_gen_dlists(DMP, 1);
+ dm_set_dirty(DMP, 1);
(void)dm_make_current(DMP);
(void)dm_begin_dlist(DMP, sp->s_dlist);
if (sp->s_iflag == UP)
@@ -314,6 +316,7 @@
}
dlp->dm_dirty = 1;
+ dm_set_dirty(DMP, 1);
}
}
Modified: brlcad/trunk/src/mged/fbserv.c
===================================================================
--- brlcad/trunk/src/mged/fbserv.c 2020-08-25 02:29:42 UTC (rev 76935)
+++ brlcad/trunk/src/mged/fbserv.c 2020-08-25 03:03:02 UTC (rev 76936)
@@ -146,8 +146,10 @@
if ((npp = pkg_process(clients[i].c_pkg)) < 0)
bu_log("pkg_process error encountered (1)\n");
- if (npp > 0)
+ if (npp > 0) {
DMP_dirty = 1;
+ dm_set_dirty(DMP, 1);
+ }
if (clients[i].c_fd != fd)
continue;
@@ -162,8 +164,10 @@
if ((npp = pkg_process(clients[i].c_pkg)) < 0)
bu_log("pkg_process error encountered (2)\n");
- if (npp > 0)
+ if (npp > 0) {
DMP_dirty = 1;
+ dm_set_dirty(DMP, 1);
+ }
}
/* restore */
Modified: brlcad/trunk/src/mged/mged.c
===================================================================
--- brlcad/trunk/src/mged/mged.c 2020-08-25 02:29:42 UTC (rev 76935)
+++ brlcad/trunk/src/mged/mged.c 2020-08-25 03:03:02 UTC (rev 76936)
@@ -375,6 +375,7 @@
bn_mat_inv(vsp->vs_objview2model, vsp->vs_model2objview);
}
vsp->vs_flag = 1;
+ dm_set_dirty(mged_curr_dm->dm_dmp, 1);
}
@@ -2334,98 +2335,103 @@
if (mged_variables->mv_predictor)
predictor_frame();
- dm_draw_begin(DMP); /* update displaylist prolog */
+ if (dm_get_dirty(DMP)) {
- if (DBIP != DBI_NULL) {
- /* do framebuffer underlay */
- if (mged_variables->mv_fb && !mged_variables->mv_fb_overlay) {
- if (mged_variables->mv_fb_all)
+ dm_draw_begin(DMP); /* update displaylist prolog */
+
+ if (DBIP != DBI_NULL) {
+ /* do framebuffer underlay */
+ if (mged_variables->mv_fb &&
!mged_variables->mv_fb_overlay) {
+ if (mged_variables->mv_fb_all)
+ fb_refresh(fbp, 0, 0, dm_get_width(DMP),
dm_get_height(DMP));
+ else if (mged_variables->mv_mouse_behavior != 'z')
+ paint_rect_area();
+ }
+
+ /* do framebuffer overlay for entire window */
+ if (mged_variables->mv_fb &&
+ mged_variables->mv_fb_overlay &&
+ mged_variables->mv_fb_all) {
fb_refresh(fbp, 0, 0, dm_get_width(DMP),
dm_get_height(DMP));
- else if (mged_variables->mv_mouse_behavior != 'z')
- paint_rect_area();
- }
- /* do framebuffer overlay for entire window */
- if (mged_variables->mv_fb &&
- mged_variables->mv_fb_overlay &&
- mged_variables->mv_fb_all) {
- fb_refresh(fbp, 0, 0, dm_get_width(DMP),
dm_get_height(DMP));
+ if (restore_zbuffer)
+ dm_set_zbuffer(DMP, 1);
+ } else {
+ if (restore_zbuffer)
+ dm_set_zbuffer(DMP, 1);
- if (restore_zbuffer)
- dm_set_zbuffer(DMP, 1);
- } else {
- if (restore_zbuffer)
- dm_set_zbuffer(DMP, 1);
+ /* Draw each solid in its proper place on the
+ * screen by applying zoom, rotation, &
+ * translation. Calls dm_loadmatrix() and
+ * dm_draw_vlist().
+ */
- /* Draw each solid in its proper place on the
- * screen by applying zoom, rotation, &
- * translation. Calls dm_loadmatrix() and
- * dm_draw_vlist().
- */
+ if (dm_get_stereo(DMP) == 0 ||
+ mged_variables->mv_eye_sep_dist <= 0) {
+ /* Normal viewing */
+ dozoom(0);
+ } else {
+ /* Stereo viewing */
+ dozoom(1);
+ dozoom(2);
+ }
- if (dm_get_stereo(DMP) == 0 ||
- mged_variables->mv_eye_sep_dist <= 0) {
- /* Normal viewing */
- dozoom(0);
- } else {
- /* Stereo viewing */
- dozoom(1);
- dozoom(2);
+ /* do framebuffer overlay in rectangular area */
+ if (mged_variables->mv_fb &&
+ mged_variables->mv_fb_overlay &&
+ mged_variables->mv_mouse_behavior != 'z')
+ paint_rect_area();
}
- /* do framebuffer overlay in rectangular area */
- if (mged_variables->mv_fb &&
- mged_variables->mv_fb_overlay &&
- mged_variables->mv_mouse_behavior != 'z')
- paint_rect_area();
- }
+ /* Restore to non-rotated, full brightness */
+ dm_normal(DMP);
- /* Restore to non-rotated, full brightness */
- dm_normal(DMP);
+ /* only if not doing overlay */
+ if (!mged_variables->mv_fb ||
+ mged_variables->mv_fb_overlay != 2) {
+ if (rubber_band->rb_active || rubber_band->rb_draw)
+ draw_rect();
- /* only if not doing overlay */
- if (!mged_variables->mv_fb ||
- mged_variables->mv_fb_overlay != 2) {
- if (rubber_band->rb_active || rubber_band->rb_draw)
- draw_rect();
+ if (grid_state->draw)
+ draw_grid();
- if (grid_state->draw)
- draw_grid();
+ /* Compute and display angle/distance cursor */
+ if (adc_state->adc_draw)
+ adcursor();
- /* Compute and display angle/distance cursor */
- if (adc_state->adc_draw)
- adcursor();
+ if (axes_state->ax_view_draw)
+ draw_v_axes();
- if (axes_state->ax_view_draw)
- draw_v_axes();
+ if (axes_state->ax_model_draw)
+ draw_m_axes();
- if (axes_state->ax_model_draw)
- draw_m_axes();
+ if (axes_state->ax_edit_draw &&
+ (STATE == ST_S_EDIT || STATE == ST_O_EDIT))
+ draw_e_axes();
- if (axes_state->ax_edit_draw &&
- (STATE == ST_S_EDIT || STATE == ST_O_EDIT))
- draw_e_axes();
+ /* Display titles, etc., if desired */
+ bu_vls_strcpy(&tmp_vls, bu_vls_addr(&overlay_vls));
+ dotitles(&tmp_vls);
+ bu_vls_trunc(&tmp_vls, 0);
+ }
+ }
- /* Display titles, etc., if desired */
- bu_vls_strcpy(&tmp_vls, bu_vls_addr(&overlay_vls));
- dotitles(&tmp_vls);
- bu_vls_trunc(&tmp_vls, 0);
+ /* only if not doing overlay */
+ if (!mged_variables->mv_fb ||
+ mged_variables->mv_fb_overlay != 2) {
+ /* Draw center dot */
+ dm_set_fg(DMP,
+ color_scheme->cs_center_dot[0],
+ color_scheme->cs_center_dot[1],
+ color_scheme->cs_center_dot[2], 1, 1.0);
+ dm_draw_point_2d(DMP, 0.0, 0.0);
}
- }
- /* only if not doing overlay */
- if (!mged_variables->mv_fb ||
- mged_variables->mv_fb_overlay != 2) {
- /* Draw center dot */
- dm_set_fg(DMP,
- color_scheme->cs_center_dot[0],
- color_scheme->cs_center_dot[1],
- color_scheme->cs_center_dot[2], 1, 1.0);
- dm_draw_point_2d(DMP, 0.0, 0.0);
+ dm_draw_end(DMP);
+ dm_set_dirty(DMP, 0);
+
}
-
- dm_draw_end(DMP);
}
}
Modified: brlcad/trunk/src/mged/predictor.c
===================================================================
--- brlcad/trunk/src/mged/predictor.c 2020-08-25 02:29:42 UTC (rev 76935)
+++ brlcad/trunk/src/mged/predictor.c 2020-08-25 03:03:02 UTC (rev 76936)
@@ -316,6 +316,7 @@
predictor_kill();
DMP_dirty = 1;
+ dm_set_dirty(DMP, 1);
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits