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

Reply via email to