Revision: 64326
          http://sourceforge.net/p/brlcad/code/64326
Author:   indianlarry
Date:     2015-03-02 16:54:45 +0000 (Mon, 02 Mar 2015)
Log Message:
-----------
The "struct ged" contains a function pointer "void 
(*ged_create_vlist_callback)(struct display_list *)" that is used to create 
display list objects for solids in the "dl_headSolid" list. 'mged' and 'archer' 
assign different functions to this pointer but both eventually call 
"createDListAll()". The "createDListAll()" as its name implies loops through 
all the solids currently in the display lists' solid list 'dl_headSolid'. I 
think due to some recent restructuring/consolidating this is now being called 
from each leaf node in the tree walker(while drawing) causing each successive 
solid to recreate the display list for each solid currently in the list( n! 
effect). I've added function pointer "void 
(*ged_create_vlist_solid_callback)(struct solid *)" to "struct ged" that 
creates a display list for the solid parameter and not all solids.  I've 
assigned this function pointer to "createDListSolid()" in 'mged' and to 
"to_create_vlist_callback_solid()" in 'archer'. I modified "dl_add_path()" an
 d "invent_solid()" in 'libged' to use "(*ged_create_vlist_solid_callback)" 
function pointer instead of (*ged_create_vlist_callback)(). There are other 
uses of (*ged_create_vlist_callback)() that look correct in that they intend 
for all the display list to be (re)created so those were left alone but I would 
like someone a bit more familiar to look over. 


Also (at least within an ogl 'mged' session) there are 5 displays in the 
'dm_list' which I believe are relating to the multipane mode for which separate 
display list are created (so actually currently have 5*n!). I now check for 
'dlp->dml_mapped' to make sure displays are mapped before creating display list 
object. I hope that's consistent?

Modified Paths:
--------------
    brlcad/trunk/include/ged.h
    brlcad/trunk/src/libged/display_list.c
    brlcad/trunk/src/libged/draw.c
    brlcad/trunk/src/libged/ged_private.h
    brlcad/trunk/src/libged/vdraw.c
    brlcad/trunk/src/libtclcad/tclcad_obj.c
    brlcad/trunk/src/mged/dodraw.c
    brlcad/trunk/src/mged/dozoom.c
    brlcad/trunk/src/mged/mged.c

Modified: brlcad/trunk/include/ged.h
===================================================================
--- brlcad/trunk/include/ged.h  2015-03-02 16:29:32 UTC (rev 64325)
+++ brlcad/trunk/include/ged.h  2015-03-02 16:54:45 UTC (rev 64326)
@@ -79,6 +79,7 @@
 
 #define GED_FUNC_PTR_NULL ((ged_func_ptr)0)
 #define GED_REFRESH_CALLBACK_PTR_NULL ((ged_refresh_callback_ptr)0)
+#define GED_CREATE_VLIST_SOLID_CALLBACK_PTR_NULL 
((ged_create_vlist_solid_callback_ptr)0)
 #define GED_CREATE_VLIST_CALLBACK_PTR_NULL ((ged_create_vlist_callback_ptr)0)
 #define GED_FREE_VLIST_CALLBACK_PTR_NULL ((ged_free_vlist_callback_ptr)0)
 
@@ -367,7 +368,8 @@
     void                       (*ged_refresh_handler)(void *); /**< @brief  
function for handling refresh requests */
     void                       (*ged_output_handler)(struct ged *, char *);    
/**< @brief  function for handling output */
     char                       *ged_output_script;             /**< @brief  
script for use by the outputHandler */
-    void                       (*ged_create_vlist_callback)(struct 
display_list *);    /**< @brief  function to call after creating a vlist */
+    void                       (*ged_create_vlist_solid_callback)(struct solid 
*);     /**< @brief  function to call after creating a vlist to create display 
list for solid */
+    void                       (*ged_create_vlist_callback)(struct 
display_list *);    /**< @brief  function to call after all vlist created that 
loops through creating display list for each solid  */
     void                       (*ged_free_vlist_callback)(unsigned int, int);  
/**< @brief  function to call after freeing a vlist */
 
     /* FIXME -- this ugly hack needs to die.  the result string should be 
stored before the call. */
@@ -389,6 +391,7 @@
 
 typedef int (*ged_func_ptr)(struct ged *, int, const char *[]);
 typedef void (*ged_refresh_callback_ptr)(void *);
+typedef void (*ged_create_vlist_solid_callback_ptr)(struct solid *);
 typedef void (*ged_create_vlist_callback_ptr)(struct display_list *);
 typedef void (*ged_free_vlist_callback_ptr)(unsigned int, int);
 
@@ -464,7 +467,7 @@
 #define POLYGON_HEADER_MAGIC 0x8623bad2
 GED_EXPORT extern void dl_polybinout(struct bu_list *hdlp, struct 
polygon_header *ph, FILE *fp);
 
-GED_EXPORT extern int invent_solid(struct bu_list *hdlp, struct db_i *dbip, 
void (*callback_create)(struct display_list *), void (*callback_free)(unsigned 
int, int), char *name, struct bu_list *vhead, long int rgb, int copy, fastf_t 
transparency, int dmode, struct solid *freesolid, int csoltab);
+GED_EXPORT extern int invent_solid(struct bu_list *hdlp, struct db_i *dbip, 
void (*callback_create)(struct solid *), void (*callback_free)(unsigned int, 
int), char *name, struct bu_list *vhead, long int rgb, int copy, fastf_t 
transparency, int dmode, struct solid *freesolid, int csoltab);
 
 
 /* defined in ged.c */

Modified: brlcad/trunk/src/libged/display_list.c
===================================================================
--- brlcad/trunk/src/libged/display_list.c      2015-03-02 16:29:32 UTC (rev 
64325)
+++ brlcad/trunk/src/libged/display_list.c      2015-03-02 16:54:45 UTC (rev 
64326)
@@ -37,6 +37,7 @@
 
 /* defined in draw_calc.cpp */
 extern fastf_t brep_est_avg_curve_len(struct rt_brep_internal *bi);
+extern void createDListSolid(struct solid *sp);
 
 struct display_list *
 dl_addToDisplay(struct bu_list *hdlp, struct db_i *dbip,
@@ -667,7 +668,7 @@
 }
 
 void
-dl_add_path(struct display_list *gdlp, int dashflag, int transparency, int 
dmode, int hiddenLine, struct bu_list *vhead, const struct db_full_path *pathp, 
struct db_tree_state *tsp, unsigned char *wireframe_color_override, void 
(*callback)(struct display_list *), struct solid *freesolid)
+dl_add_path(struct display_list *gdlp, int dashflag, int transparency, int 
dmode, int hiddenLine, struct bu_list *vhead, const struct db_full_path *pathp, 
struct db_tree_state *tsp, unsigned char *wireframe_color_override, void 
(*callback)(struct solid *sp), struct solid *freesolid)
 {
     struct solid *sp;
     GET_SOLID(sp, &freesolid->l);
@@ -699,8 +700,8 @@
     BU_LIST_APPEND(gdlp->dl_headSolid.back, &sp->l);
     bu_semaphore_release(RT_SEM_MODEL);
 
-    if (callback != GED_CREATE_VLIST_CALLBACK_PTR_NULL) {
-       (*callback)(gdlp);
+    if (callback != GED_CREATE_VLIST_SOLID_CALLBACK_PTR_NULL) {
+       (*callback)(sp);
     }
 
 }
@@ -1101,7 +1102,7 @@
 }
 
 int invent_solid(struct bu_list *hdlp, struct db_i *dbip,
-               void (*callback_create)(struct display_list *), void 
(*callback_free)(unsigned int, int),
+               void (*callback_create)(struct solid *), void 
(*callback_free)(unsigned int, int),
                char *name, struct bu_list *vhead, long int rgb, int copy, 
fastf_t transparency, int dmode,
                struct solid *freesolid, int csoltab)
 {
@@ -1167,8 +1168,8 @@
     if (csoltab)
        color_soltab(sp);
 
-    if (callback_create != GED_CREATE_VLIST_CALLBACK_PTR_NULL)
-       (*callback_create)(gdlp);
+    if (callback_create != GED_CREATE_VLIST_SOLID_CALLBACK_PTR_NULL)
+       (*callback_create)(sp);
 
     return 0;           /* OK */
 

Modified: brlcad/trunk/src/libged/draw.c
===================================================================
--- brlcad/trunk/src/libged/draw.c      2015-03-02 16:29:32 UTC (rev 64325)
+++ brlcad/trunk/src/libged/draw.c      2015-03-02 16:54:45 UTC (rev 64326)
@@ -165,9 +165,9 @@
 {
 
     if (dgcdp->wireframe_color_override) {
-       dl_add_path(dgcdp->gdlp, dashflag, dgcdp->transparency, dgcdp->dmode, 
dgcdp->hiddenLine, vhead, pathp, tsp, (unsigned char 
*)&(dgcdp->wireframe_color), dgcdp->gedp->ged_create_vlist_callback, 
dgcdp->freesolid);
+       dl_add_path(dgcdp->gdlp, dashflag, dgcdp->transparency, dgcdp->dmode, 
dgcdp->hiddenLine, vhead, pathp, tsp, (unsigned char 
*)&(dgcdp->wireframe_color), dgcdp->gedp->ged_create_vlist_solid_callback, 
dgcdp->freesolid);
     } else {
-       dl_add_path(dgcdp->gdlp, dashflag, dgcdp->transparency, dgcdp->dmode, 
dgcdp->hiddenLine, vhead, pathp, tsp, NULL, 
dgcdp->gedp->ged_create_vlist_callback, dgcdp->freesolid);
+       dl_add_path(dgcdp->gdlp, dashflag, dgcdp->transparency, dgcdp->dmode, 
dgcdp->hiddenLine, vhead, pathp, tsp, NULL, 
dgcdp->gedp->ged_create_vlist_solid_callback, dgcdp->freesolid);
     }
 }
 
@@ -563,7 +563,7 @@
        if (BU_LIST_IS_EMPTY(&(vbp->head[i])))
            continue;
        snprintf(namebuf, 64, "%s%lx", shortname, vbp->rgb[i]);
-       invent_solid(gedp->ged_gdp->gd_headDisplay, gedp->ged_wdbp->dbip, 
gedp->ged_create_vlist_callback, gedp->ged_free_vlist_callback, namebuf, 
&vbp->head[i], vbp->rgb[i], copy, 0.0, 0, gedp->freesolid, 0);
+       invent_solid(gedp->ged_gdp->gd_headDisplay, gedp->ged_wdbp->dbip, 
gedp->ged_create_vlist_solid_callback, gedp->ged_free_vlist_callback, namebuf, 
&vbp->head[i], vbp->rgb[i], copy, 0.0, 0, gedp->freesolid, 0);
     }
 }
 

Modified: brlcad/trunk/src/libged/ged_private.h
===================================================================
--- brlcad/trunk/src/libged/ged_private.h       2015-03-02 16:29:32 UTC (rev 
64325)
+++ brlcad/trunk/src/libged/ged_private.h       2015-03-02 16:54:45 UTC (rev 
64326)
@@ -184,7 +184,7 @@
 /* Returns a bu_ptbl of all solids referenced by the display list */
 extern struct bu_ptbl *dl_get_solids(struct display_list *gdlp);
 
-extern void dl_add_path(struct display_list *gdlp, int dashflag, int 
transparency, int dmode, int hiddenLine, struct bu_list *vhead, const struct 
db_full_path *pathp, struct db_tree_state *tsp, unsigned char 
*wireframe_color_override, void (*callback)(struct display_list *), struct 
solid *freesolid);
+extern void dl_add_path(struct display_list *gdlp, int dashflag, int 
transparency, int dmode, int hiddenLine, struct bu_list *vhead, const struct 
db_full_path *pathp, struct db_tree_state *tsp, unsigned char 
*wireframe_color_override, void (*callback)(struct solid *), struct solid 
*freesolid);
 
 extern int dl_redraw(struct display_list *gdlp, struct db_i *dbip, struct 
db_tree_state *tsp, struct bview *gvp, void (*callback)(struct display_list *));
 extern union tree * append_solid_to_display_list(struct db_tree_state *tsp, 
const struct db_full_path *pathp, struct rt_db_internal *ip, void *client_data);

Modified: brlcad/trunk/src/libged/vdraw.c
===================================================================
--- brlcad/trunk/src/libged/vdraw.c     2015-03-02 16:29:32 UTC (rev 64325)
+++ brlcad/trunk/src/libged/vdraw.c     2015-03-02 16:54:45 UTC (rev 64326)
@@ -544,7 +544,7 @@
     }
 
     /* 0 means OK, -1 means conflict with real solid name */
-    idx = invent_solid(gedp->ged_gdp->gd_headDisplay, gedp->ged_wdbp->dbip, 
gedp->ged_create_vlist_callback, gedp->ged_free_vlist_callback, solid_name, 
&(gedp->ged_gdp->gd_currVHead->vdc_vhd), gedp->ged_gdp->gd_currVHead->vdc_rgb, 
1, 0.0, 0, gedp->freesolid, 0);
+    idx = invent_solid(gedp->ged_gdp->gd_headDisplay, gedp->ged_wdbp->dbip, 
gedp->ged_create_vlist_solid_callback, gedp->ged_free_vlist_callback, 
solid_name, &(gedp->ged_gdp->gd_currVHead->vdc_vhd), 
gedp->ged_gdp->gd_currVHead->vdc_rgb, 1, 0.0, 0, gedp->freesolid, 0);
 
     bu_vls_printf(gedp->ged_result_str, "%d", idx);
 

Modified: brlcad/trunk/src/libtclcad/tclcad_obj.c
===================================================================
--- brlcad/trunk/src/libtclcad/tclcad_obj.c     2015-03-02 16:29:32 UTC (rev 
64325)
+++ brlcad/trunk/src/libtclcad/tclcad_obj.c     2015-03-02 16:54:45 UTC (rev 
64326)
@@ -943,6 +943,7 @@
 HIDDEN void to_fbs_callback();
 HIDDEN int to_open_fbs(struct ged_dm_view *gdvp, Tcl_Interp *interp);
 
+HIDDEN void to_create_vlist_callback_solid(struct solid *gdlp);
 HIDDEN void to_create_vlist_callback(struct display_list *gdlp);
 HIDDEN void to_free_vlist_callback(unsigned int dlist, int range);
 HIDDEN void to_refresh_all_views(struct tclcad_obj *top);
@@ -1684,6 +1685,7 @@
 
     top->to_gop->go_gedp->ged_output_handler = to_output_handler;
     top->to_gop->go_gedp->ged_refresh_handler = to_refresh_handler;
+    top->to_gop->go_gedp->ged_create_vlist_solid_callback = 
to_create_vlist_callback_solid;
     top->to_gop->go_gedp->ged_create_vlist_callback = to_create_vlist_callback;
     top->to_gop->go_gedp->ged_free_vlist_callback = to_free_vlist_callback;
 

Modified: brlcad/trunk/src/mged/dodraw.c
===================================================================
--- brlcad/trunk/src/mged/dodraw.c      2015-03-02 16:29:32 UTC (rev 64325)
+++ brlcad/trunk/src/mged/dodraw.c      2015-03-02 16:54:45 UTC (rev 64326)
@@ -62,7 +62,7 @@
 
        snprintf(namebuf, 32, "%s%lx",  shortname, vbp->rgb[i]);
        /*invent_solid(namebuf, &vbp->head[i], vbp->rgb[i], copy);*/
-       invent_solid(gedp->ged_gdp->gd_headDisplay, dbip, createDListAll, 
gedp->ged_free_vlist_callback, namebuf, &vbp->head[i], vbp->rgb[i], copy, 
0.0,0, gedp->freesolid, 0);
+       invent_solid(gedp->ged_gdp->gd_headDisplay, dbip, createDListSolid, 
gedp->ged_free_vlist_callback, namebuf, &vbp->head[i], vbp->rgb[i], copy, 
0.0,0, gedp->freesolid, 0);
     }
 }
 

Modified: brlcad/trunk/src/mged/dozoom.c
===================================================================
--- brlcad/trunk/src/mged/dozoom.c      2015-03-02 16:29:32 UTC (rev 64325)
+++ brlcad/trunk/src/mged/dozoom.c      2015-03-02 16:54:45 UTC (rev 64326)
@@ -275,7 +275,8 @@
     save_dlp = curr_dm_list;
 
     FOR_ALL_DISPLAYS(dlp, &head_dm_list.l) {
-       if (dm_get_displaylist(dlp->dml_dmp) &&
+       if (dlp->dml_mapped &&
+               dm_get_displaylist(dlp->dml_dmp) &&
                dlp->dml_mged_variables->mv_dlist) {
            if (sp->s_dlist == 0)
                sp->s_dlist = dm_gen_dlists(dmp, 1);

Modified: brlcad/trunk/src/mged/mged.c
===================================================================
--- brlcad/trunk/src/mged/mged.c        2015-03-02 16:29:32 UTC (rev 64325)
+++ brlcad/trunk/src/mged/mged.c        2015-03-02 16:54:45 UTC (rev 64326)
@@ -2769,6 +2769,7 @@
     GED_INIT(gedp, ged_wdbp);
     gedp->ged_output_handler = mged_output_handler;
     gedp->ged_refresh_handler = mged_refresh_handler;
+    gedp->ged_create_vlist_solid_callback = createDListSolid;
     gedp->ged_create_vlist_callback = createDListAll;
     gedp->ged_free_vlist_callback = freeDListsAll;
 

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to