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