Revision: 75457
          http://sourceforge.net/p/brlcad/code/75457
Author:   starseeker
Date:     2020-04-18 02:40:26 +0000 (Sat, 18 Apr 2020)
Log Message:
-----------
Push the shared_dlist down into the calltree.  That gets us fairly close to 
just the functions that would need to be tied into a plugin-based mechanism 
having the ifdefs based on backend type.

Modified Paths:
--------------
    brlcad/branches/dm-fb-merge/src/libdm/X/dm-X.c
    brlcad/branches/dm-fb-merge/src/libdm/dm-generic.c
    brlcad/branches/dm-fb-merge/src/libdm/glx/dm-ogl.c
    brlcad/branches/dm-fb-merge/src/libdm/include/calltable.h
    brlcad/branches/dm-fb-merge/src/libdm/null/dm-Null.c
    brlcad/branches/dm-fb-merge/src/libdm/osgl/dm-osgl.cpp
    brlcad/branches/dm-fb-merge/src/libdm/plot/dm-plot.c
    brlcad/branches/dm-fb-merge/src/libdm/postscript/dm-ps.c
    brlcad/branches/dm-fb-merge/src/libdm/qt/dm-qt.cpp
    brlcad/branches/dm-fb-merge/src/libdm/tk/dm-tk.c
    brlcad/branches/dm-fb-merge/src/libdm/txt/dm-txt.c
    brlcad/branches/dm-fb-merge/src/libdm/wgl/dm-wgl.c

Modified: brlcad/branches/dm-fb-merge/src/libdm/X/dm-X.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/X/dm-X.c      2020-04-18 02:18:49 UTC 
(rev 75456)
+++ brlcad/branches/dm-fb-merge/src/libdm/X/dm-X.c      2020-04-18 02:40:26 UTC 
(rev 75457)
@@ -2094,6 +2094,7 @@
     X_sync,
     X_event_cmp,
     NULL,
+    NULL,
     0,
     0,                         /* no displaylist */
     0,                            /* no stereo */

Modified: brlcad/branches/dm-fb-merge/src/libdm/dm-generic.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/dm-generic.c  2020-04-18 02:18:49 UTC 
(rev 75456)
+++ brlcad/branches/dm-fb-merge/src/libdm/dm-generic.c  2020-04-18 02:40:26 UTC 
(rev 75457)
@@ -92,7 +92,9 @@
     return dmp;
 }
 
-
+/* TODO - in a plugin system this function will be provided for all acive
+ * backends via bu_dlsym and loaded into a lookup system mapped to the dm_name
+ * string provided with the plugin. */
 struct dm *
 dm_open(void *interp, const char *type, int argc, const char *argv[])
 {
@@ -154,39 +156,8 @@
     return (void *)dmp->i->dm_interp;
 }
 
-/*
- * Provides a way to (un)share display lists. If dmp2 is
- * NULL, then dmp1 will no longer share its display lists.
- */
-int
-dm_share_dlist(struct dm *dmp1, struct dm *dmp2)
-{
-    if (UNLIKELY(!dmp1) || UNLIKELY(!dmp2)) return BRLCAD_ERROR;
-
-    /*
-     * Only display managers of the same type and using the
-     * same OGL server are allowed to share display lists.
-     *
-     * XXX - need a better way to check if using the same OGL server.
-     */
-    if (dmp2 != DM_NULL)
-       if (!BU_STR_EQUAL(dmp1->i->dm_name, dmp2->i->dm_name) ||
-           bu_vls_strcmp(&dmp1->i->dm_dName, &dmp2->i->dm_dName))
-           return BRLCAD_ERROR;
-
-#if defined(DM_OGL) && defined(HAVE_TK)
-    if (BU_STR_EQUIV(dmp1->i->dm_name, "ogl")) {
-       return ogl_share_dlist(dmp1, dmp2);
-    }
-#endif
-#ifdef DM_WGL
-    if (BU_STR_EQUIV(dmp1->i->dm_name, "wgl")) {
-       return wgl_share_dlist(dmp1, dmp2);
-    }
-#endif
-    return BRLCAD_ERROR;
-}
-
+/* TODO - in a plugin system, this iterates over all supplied plugins
+ * and assembles the list */
 struct bu_vls *
 dm_list_types(const char separator)
 {
@@ -239,6 +210,8 @@
     return list;
 }
 
+/* TODO - in a plugin system, this will search available plugins to see
+ * of there is one that provides the requested name */
 int
 #if !defined(DM_WGL) && !defined(DM_OGL) && !defined(DM_X)
 dm_validXType(const char *UNUSED(dpy_string), const char *name)
@@ -359,12 +332,15 @@
 
 /**
  * dm_default_type suggests a display manager
+ *
+ * TODO - in a plugin system, this will check available plugins
+ * to see if an availble dm matches a preferred dm_name - if
+ * so, that name is returned.  May be able to consolidate with
+ * dm_bestXType - not sure yet.
  */
-
 const char *
 dm_default_type()
 {
-
 #ifdef DM_OSGL
     return "osgl";
 #endif
@@ -401,7 +377,24 @@
     }
 }
 
+/*
+ * Provides a way to (un)share display lists. If dmp2 is
+ * NULL, then dmp1 will no longer share its display lists.
+ */
 int
+dm_share_dlist(struct dm *dmp1, struct dm *dmp2)
+{
+    if (UNLIKELY(!dmp1) || UNLIKELY(!dmp2)) return BRLCAD_ERROR;
+
+    if (dmp1->i->dm_share_dlist) {
+       return dmp1->i->dm_share_dlist(dmp1, dmp2);
+    }
+
+    return BRLCAD_ERROR;
+}
+
+
+int
 dm_write_image(struct bu_vls *msgs, FILE *fp, struct dm *dmp)
 {
     if (!dmp || !dmp->i->dm_write_image) return -1;

Modified: brlcad/branches/dm-fb-merge/src/libdm/glx/dm-ogl.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/glx/dm-ogl.c  2020-04-18 02:18:49 UTC 
(rev 75456)
+++ brlcad/branches/dm-fb-merge/src/libdm/glx/dm-ogl.c  2020-04-18 02:40:26 UTC 
(rev 75457)
@@ -1118,6 +1118,13 @@
     } else {
        /* dmp1 will share its display lists with dmp2 */
 
+       if (!BU_STR_EQUAL(dmp1->i->dm_name, dmp2->i->dm_name)) {
+           return BRLCAD_ERROR;
+       }
+       if (bu_vls_strcmp(&dmp1->i->dm_dName, &dmp2->i->dm_dName)) {
+           return BRLCAD_ERROR;
+       }
+
        old_glxContext = ((struct ogl_vars *)dmp2->i->dm_vars.priv_vars)->glxc;
 
        if ((((struct ogl_vars *)dmp2->i->dm_vars.priv_vars)->glxc =
@@ -2946,6 +2953,7 @@
     NULL,
     ogl_event_cmp,
     ogl_fogHint,
+    ogl_share_dlist,
     0,
     1,                         /* has displaylist */
     0,                          /* no stereo by default */

Modified: brlcad/branches/dm-fb-merge/src/libdm/include/calltable.h
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/include/calltable.h   2020-04-18 
02:18:49 UTC (rev 75456)
+++ brlcad/branches/dm-fb-merge/src/libdm/include/calltable.h   2020-04-18 
02:40:26 UTC (rev 75457)
@@ -101,6 +101,7 @@
     void (*dm_sync)(struct dm *dmp);
     int (*dm_event_cmp)(struct dm *dmp, dm_event_t type, int event);
     void (*dm_fogHint)(struct dm *dmp, int fastfog);
+    int (*dm_share_dlist)(struct dm *dmp1, struct dm *dmp2);
     unsigned long dm_id;          /**< @brief window id */
     int dm_displaylist;                /**< @brief !0 means device has 
displaylist */
     int dm_stereo;                /**< @brief stereo flag */

Modified: brlcad/branches/dm-fb-merge/src/libdm/null/dm-Null.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/null/dm-Null.c        2020-04-18 
02:18:49 UTC (rev 75456)
+++ brlcad/branches/dm-fb-merge/src/libdm/null/dm-Null.c        2020-04-18 
02:40:26 UTC (rev 75457)
@@ -331,6 +331,7 @@
     NULL,
     NULL,
     NULL,
+    NULL,
     0,
     0,                         /* no displaylist */
     0,                         /* no stereo */

Modified: brlcad/branches/dm-fb-merge/src/libdm/osgl/dm-osgl.cpp
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/osgl/dm-osgl.cpp      2020-04-18 
02:18:49 UTC (rev 75456)
+++ brlcad/branches/dm-fb-merge/src/libdm/osgl/dm-osgl.cpp      2020-04-18 
02:40:26 UTC (rev 75457)
@@ -2585,6 +2585,7 @@
     NULL,
     osgl_event_cmp,
     NULL,
+    NULL,
     0,
     1,                         /* has displaylist */
     0,                          /* no stereo by default */

Modified: brlcad/branches/dm-fb-merge/src/libdm/plot/dm-plot.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/plot/dm-plot.c        2020-04-18 
02:18:49 UTC (rev 75456)
+++ brlcad/branches/dm-fb-merge/src/libdm/plot/dm-plot.c        2020-04-18 
02:40:26 UTC (rev 75457)
@@ -576,6 +576,7 @@
     NULL,
     NULL,
     NULL,
+    NULL,
     0,
     0,                         /* no displaylist */
     0,                         /* no stereo */

Modified: brlcad/branches/dm-fb-merge/src/libdm/postscript/dm-ps.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/postscript/dm-ps.c    2020-04-18 
02:18:49 UTC (rev 75456)
+++ brlcad/branches/dm-fb-merge/src/libdm/postscript/dm-ps.c    2020-04-18 
02:40:26 UTC (rev 75457)
@@ -546,6 +546,7 @@
     NULL,
     NULL,
     NULL,
+    NULL,
     0,
     0,                         /* no displaylist */
     0,                            /* no stereo */

Modified: brlcad/branches/dm-fb-merge/src/libdm/qt/dm-qt.cpp
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/qt/dm-qt.cpp  2020-04-18 02:18:49 UTC 
(rev 75456)
+++ brlcad/branches/dm-fb-merge/src/libdm/qt/dm-qt.cpp  2020-04-18 02:40:26 UTC 
(rev 75457)
@@ -1092,6 +1092,7 @@
     NULL,
     qt_event_cmp,
     NULL,
+    NULL,
     0,
     0,                         /* no displaylist */
     0,                         /* no stereo */

Modified: brlcad/branches/dm-fb-merge/src/libdm/tk/dm-tk.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/tk/dm-tk.c    2020-04-18 02:18:49 UTC 
(rev 75456)
+++ brlcad/branches/dm-fb-merge/src/libdm/tk/dm-tk.c    2020-04-18 02:40:26 UTC 
(rev 75457)
@@ -955,6 +955,7 @@
     NULL,
     tk_event_cmp,
     NULL,
+    NULL,
     0,
     0,                         /* no displaylist */
     0,                         /* no stereo */

Modified: brlcad/branches/dm-fb-merge/src/libdm/txt/dm-txt.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/txt/dm-txt.c  2020-04-18 02:18:49 UTC 
(rev 75456)
+++ brlcad/branches/dm-fb-merge/src/libdm/txt/dm-txt.c  2020-04-18 02:40:26 UTC 
(rev 75457)
@@ -387,6 +387,7 @@
     NULL,
     NULL,
     NULL,
+    NULL,
     0,
     0,                         /* no displaylist */
     0,                         /* no stereo */

Modified: brlcad/branches/dm-fb-merge/src/libdm/wgl/dm-wgl.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/wgl/dm-wgl.c  2020-04-18 02:18:49 UTC 
(rev 75456)
+++ brlcad/branches/dm-fb-merge/src/libdm/wgl/dm-wgl.c  2020-04-18 02:40:26 UTC 
(rev 75457)
@@ -293,6 +293,13 @@
     } else {
        /* dmp1 will share its display lists with dmp2 */
 
+       if (!BU_STR_EQUAL(dmp1->i->dm_name, dmp2->i->dm_name)) {
+           return BRLCAD_ERROR;
+       }
+       if (bu_vls_strcmp(&dmp1->i->dm_dName, &dmp2->i->dm_dName)) {
+           return BRLCAD_ERROR;
+       }
+
        old_glxContext = ((struct wgl_vars *)dmp2->i->dm_vars.priv_vars)->glxc;
 
        if ((((struct wgl_vars *)dmp2->i->dm_vars.priv_vars)->glxc =
@@ -2233,6 +2240,7 @@
     NULL,
     wgl_event_cmp,
     wgl_fogHint,
+    wgl_share_dlist,
     0,
     1,                         /* has displaylist */
     0,                          /* no stereo by default */

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