Set the stage for hiding the display manager's framebuffer inside the display manager, hiding the messy details from the toplevel. It looks like the previously added dm_openFb slot in struct dm_internal might have been intended for this purpose, but ended up unused - we'll start using it for this. X is the first to be hidden.

svn:revision:62142
svn:branch:dm-work
svn:account:starseeker
This commit is contained in:
Clifford Yapp committed 2014-08-14 14:00:31 +00:00
1 parent e23ae226c8
commit 8a97c2184a
17 files changed
+57 -20

No files matched your search

+2
View File
@@ -376,6 +376,8 @@ DM_EXPORT extern int dm_draw(dm *dmp, struct bn_vlist *(*callback)(void *), void
DM_EXPORT extern int dm_set_depth_mask(dm *dmp, int d_on);
DM_EXPORT extern int dm_debug(dm *dmp, int lvl);
DM_EXPORT extern int dm_logfile(dm *dmp, const char *filename);
DM_EXPORT extern fb *dm_get_fb(dm *dmp);
__END_DECLS
+1 -1
View File
@@ -187,7 +187,7 @@ null_processEvents(dm *dmp);
DM_EXPORT extern int
null_openFb(dm *dmp, fb *ifp);
null_openFb(dm *dmp);
__END_DECLS
+7
View File
@@ -28,6 +28,7 @@ get_property(libdm_DEFINES GLOBAL PROPERTY libdm_DEFINES)
if(WIN32 AND BRLCAD_ENABLE_OPENGL)
list(APPEND libdm_DEFINES DM_WGL IF_WGL)
set(dmw32_srcs dm-wgl.c)
set_property(SOURCE dm-wgl.c APPEND PROPERTY COMPILE_DEFINITIONS FB_USE_INTERNAL_API)
endif(WIN32 AND BRLCAD_ENABLE_OPENGL)
if(BRLCAD_ENABLE_X11)
@@ -37,22 +38,26 @@ endif(BRLCAD_ENABLE_X11)
if(BRLCAD_ENABLE_X11 AND BRLCAD_ENABLE_TK)
list(APPEND libdm_DEFINES DM_X IF_X)
set(dmx11_srcs dm-X.c)
set_property(SOURCE dm-X.c APPEND PROPERTY COMPILE_DEFINITIONS FB_USE_INTERNAL_API)
endif(BRLCAD_ENABLE_X11 AND BRLCAD_ENABLE_TK)
if(BRLCAD_ENABLE_X11 AND BRLCAD_ENABLE_OPENGL AND BRLCAD_ENABLE_TK)
list(APPEND libdm_DEFINES DM_OGL IF_OGL)
set(dmogl_srcs dm-ogl.c)
set_property(SOURCE dm-ogl.c APPEND PROPERTY COMPILE_DEFINITIONS FB_USE_INTERNAL_API)
endif(BRLCAD_ENABLE_X11 AND BRLCAD_ENABLE_OPENGL AND BRLCAD_ENABLE_TK)
if(BRLCAD_ENABLE_RTGL)
list(APPEND libdm_DEFINES DM_RTGL IF_RTGL)
set(dmrtgl_srcs dm-rtgl.c)
set_property(SOURCE dm-rtgl.c APPEND PROPERTY COMPILE_DEFINITIONS FB_USE_INTERNAL_API)
endif(BRLCAD_ENABLE_RTGL)
if(BRLCAD_ENABLE_TK AND NOT WIN32)
list(APPEND libdm_DEFINES DM_TK IF_TK)
set(DM_TKLIB ${TCL_TK_LIBRARY})
set(dmtk_srcs dm-tk.c)
set_property(SOURCE dm-tk.c APPEND PROPERTY COMPILE_DEFINITIONS FB_USE_INTERNAL_API)
endif(BRLCAD_ENABLE_TK AND NOT WIN32)
if(BRLCAD_ENABLE_QT)
@@ -60,6 +65,7 @@ if(BRLCAD_ENABLE_QT)
list(APPEND libdm_DEFINES DM_QT IF_QT)
set(dmqt_srcs dm-qt.cpp)
set_property(SOURCE dm-qt.cpp APPEND PROPERTY COMPILE_DEFINITIONS FB_USE_INTERNAL_API)
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
add_definitions(${Qt5Widgets_DEFINITIONS})
@@ -69,6 +75,7 @@ endif(BRLCAD_ENABLE_QT)
if(BRLCAD_ENABLE_OSG)
list(APPEND libdm_DEFINES DM_OSG)
set(dmosg_srcs dm-osg.cpp)
set_property(SOURCE dm-osg.cpp APPEND PROPERTY COMPILE_DEFINITIONS FB_USE_INTERNAL_API)
set(OSG_LIBRARIES
${OSG_LIBRARY}
${OSGTEXT_LIBRARY}
+2 -1
View File
@@ -279,7 +279,7 @@ null_makeCurrent(struct dm_internal *UNUSED(dmp))
int
null_openFb(struct dm_internal *UNUSED(dmp), fb *UNUSED(ifp))
null_openFb(struct dm_internal *UNUSED(dmp))
{
return 0;
}
@@ -357,6 +357,7 @@ struct dm_internal dm_null = {
0, /* no zclipping */
1, /* clear back buffer after drawing and swap */
0, /* not overriding the auto font size */
FB_NULL,
0 /* Tcl interpreter */
};
+24 -1
View File
@@ -63,6 +63,9 @@
#include "dm/dm-X.h"
#include "dm/dm-Null.h"
#include "dm/dm_xvars.h"
#include "fb.h"
#include "fb/fb_platform_specific.h"
#include "solid.h"
#include "dm_private.h"
@@ -1649,6 +1652,25 @@ X_getDisplayImage(struct dm_internal *dmp, unsigned char **image)
return TCL_OK;
}
int
X_openFb(struct dm_internal *dmp)
{
struct fb_platform_specific *fb_ps;
struct X24_fb_info *xfb_ps;
fb_ps = fb_get_platform_specific(FB_X24_MAGIC);
xfb_ps = (struct X24_fb_info *)fb_ps->data;
xfb_ps->dpy = ((struct dm_xvars *)dmp->dm_vars.pub_vars)->dpy;
xfb_ps->win = ((struct x_vars *)dmp->dm_vars.priv_vars)->pix;
xfb_ps->cwinp = ((struct dm_xvars *)dmp->dm_vars.pub_vars)->win;
xfb_ps->cmap = ((struct dm_xvars *)dmp->dm_vars.pub_vars)->cmap;
xfb_ps->vip = ((struct dm_xvars *)dmp->dm_vars.pub_vars)->vip;
xfb_ps->gc = ((struct x_vars *)dmp->dm_vars.priv_vars)->gc;
dmp->fbp = fb_open_existing("X", dm_get_width(dmp), dm_get_height(dmp), fb_ps);
fb_put_platform_specific(fb_ps);
return 0;
}
/* Display Manager package interface */
struct dm_internal dm_X = {
@@ -1687,7 +1709,7 @@ struct dm_internal dm_X = {
X_getDisplayImage, /* display to image function */
X_reshape,
null_makeCurrent,
null_openFb,
X_openFb,
0,
0, /* no displaylist */
0, /* no stereo */
@@ -1723,6 +1745,7 @@ struct dm_internal dm_X = {
0, /* no zclipping */
1, /* clear back buffer after drawing and swap */
0, /* not overriding the auto font size */
FB_NULL,
0 /* Tcl interpreter */
};
+9
View File
@@ -268,6 +268,7 @@ dm_put(dm *dmp)
if (dmp != DM_NULL) {
bu_vls_free(&dmp->dm_pathName);
bu_vls_free(&dmp->dm_dName);
if (dmp->fbp) fb_put(dmp->fbp);
BU_PUT(dmp, struct dm_internal);
}
}
@@ -278,6 +279,14 @@ dm_set_null(dm *dmp)
*dmp = dm_null;
}
fb *
dm_get_fb(dm *dmp)
{
if (!dmp) return NULL;
if (dmp->fbp == FB_NULL)
dmp->dm_openFb(dmp);
return dmp->fbp;
}
const char *
dm_get_dm_name(dm *dmp)
+1
View File
@@ -208,6 +208,7 @@ struct dm_internal dm_ogl = {
0, /* no zclipping */
0, /* clear back buffer after drawing and swap */
0, /* not overriding the auto font size */
FB_NULL,
0 /* Tcl interpreter */
};
+1
View File
@@ -570,6 +570,7 @@ dm dm_plot = {
0, /* no zclipping */
1, /* clear back buffer after drawing and swap */
0, /* not overriding the auto font size */
FB_NULL,
NULL /* Tcl interpreter */
};
+1
View File
@@ -560,6 +560,7 @@ dm dm_ps = {
0, /* no zclipping */
1, /* clear back buffer after drawing and swap */
0, /* not overriding the auto font size */
FB_NULL,
0 /* Tcl interpreter */
};
+1
View File
@@ -1004,6 +1004,7 @@ dm dm_qt = {
0, /* no zclipping */
1, /* clear back buffer after drawing and swap */
0, /* not overriding the auto font size */
FB_NULL,
0 /* Tcl interpreter */
};
+1
View File
@@ -158,6 +158,7 @@ dm dm_rtgl = {
0, /* no zclipping */
0, /* clear back buffer after drawing and swap */
0, /* not overriding the auto font size */
FB_NULL,
0 /* Tcl interpreter */
};
+1
View File
@@ -875,6 +875,7 @@ struct dm_internal dm_tk = {
0, /* no zclipping */
1, /* clear back buffer after drawing and swap */
0, /* not overriding the auto font size */
FB_NULL,
0 /* Tcl interpreter */
};
+2 -1
View File
@@ -334,7 +334,7 @@ txt_makeCurrent(dm *UNUSED(dmp))
HIDDEN int
txt_openFb(dm *UNUSED(dmp), fb *UNUSED(ifp))
txt_openFb(dm *UNUSED(dmp))
{
bu_log("openFb called\n");
return 0;
@@ -413,6 +413,7 @@ dm dm_txt = {
0, /* no zclipping */
1, /* clear back buffer after drawing and swap */
0, /* not overriding the auto font size */
FB_NULL,
0 /* Tcl interpreter */
};
+1
View File
@@ -2135,6 +2135,7 @@ dm dm_wgl = {
0, /* no zclipping */
0, /* clear back buffer after drawing and swap */
0, /* not overriding the auto font size */
FB_NULL,
0 /* Tcl interpreter */
};
+2 -1
View File
@@ -75,7 +75,7 @@ struct dm_internal {
int (*dm_getDisplayImage)(struct dm_internal *dmp, unsigned char **image);
void (*dm_reshape)(struct dm_internal *dmp, int width, int height);
int (*dm_makeCurrent)(struct dm_internal *dmp);
int (*dm_openFb)(struct dm_internal *dmp, fb *ifp);
int (*dm_openFb)(struct dm_internal *dmp);
unsigned long dm_id; /**< @brief window id */
int dm_displaylist; /**< @brief !0 means device has displaylist */
int dm_stereo; /**< @brief stereo flag */
@@ -111,6 +111,7 @@ struct dm_internal {
int dm_zclip; /**< @brief !0 means zclipping */
int dm_clearBufferAfter; /**< @brief 1 means clear back buffer after drawing and swap */
int dm_fontsize; /**< @brief !0 override's the auto font size */
fb *fbp; /**< @brief Framebuffer associated with this display instance */
Tcl_Interp *dm_interp; /**< @brief Tcl interpreter */
};
-1
View File
@@ -54,7 +54,6 @@ endif(BRLCAD_ENABLE_OSG)
if(BRLCAD_ENABLE_X11 AND BRLCAD_ENABLE_TK)
set(MGED_DM_SOURCES "${MGED_DM_SOURCES};dm-X.c")
set_property(SOURCE dm-X.c APPEND PROPERTY COMPILE_DEFINITIONS FB_USE_INTERNAL_API)
endif(BRLCAD_ENABLE_X11 AND BRLCAD_ENABLE_TK)
if(BRLCAD_ENABLE_QT AND BRLCAD_ENABLE_TK)
+1 -14
View File
@@ -178,20 +178,7 @@ X_dm_init(struct dm_list *o_dm_list,
void
X_fb_open(void)
{
struct fb_platform_specific *fb_ps;
struct X24_fb_info *xfb_ps;
fb_ps = fb_get_platform_specific(FB_X24_MAGIC);
xfb_ps = (struct X24_fb_info *)fb_ps->data;
xfb_ps->dpy = ((struct dm_xvars *)dmp->dm_vars.pub_vars)->dpy;
xfb_ps->win = ((struct x_vars *)dmp->dm_vars.priv_vars)->pix;
xfb_ps->cwinp = ((struct dm_xvars *)dmp->dm_vars.pub_vars)->win;
xfb_ps->cmap = ((struct dm_xvars *)dmp->dm_vars.pub_vars)->cmap;
xfb_ps->vip = ((struct dm_xvars *)dmp->dm_vars.pub_vars)->vip;
xfb_ps->gc = ((struct x_vars *)dmp->dm_vars.priv_vars)->gc;
fbp = fb_open_existing("X", dm_get_width(dmp), dm_get_height(dmp), fb_ps);
fb_put_platform_specific(fb_ps);
fbp = dm_get_fb(dmp);
}