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:
1 parent
e23ae226c8
commit
8a97c2184a
17 files changed
+57
-20
No files matched your search
@@ -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
|
||||
|
||||
|
||||
@@ -187,7 +187,7 @@ null_processEvents(dm *dmp);
|
||||
|
||||
|
||||
DM_EXPORT extern int
|
||||
null_openFb(dm *dmp, fb *ifp);
|
||||
null_openFb(dm *dmp);
|
||||
|
||||
__END_DECLS
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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 */
|
||||
};
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 */
|
||||
};
|
||||
|
||||
|
||||
@@ -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 */
|
||||
};
|
||||
|
||||
|
||||
@@ -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 */
|
||||
};
|
||||
|
||||
|
||||
@@ -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 */
|
||||
};
|
||||
|
||||
|
||||
@@ -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 */
|
||||
};
|
||||
|
||||
|
||||
@@ -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
@@ -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 */
|
||||
};
|
||||
|
||||
|
||||
@@ -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 */
|
||||
};
|
||||
|
||||
|
||||
@@ -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 */
|
||||
};
|
||||
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user