Revision: 76239 http://sourceforge.net/p/brlcad/code/76239 Author: starseeker Date: 2020-06-30 13:22:20 +0000 (Tue, 30 Jun 2020) Log Message: ----------- Fix by Sadeep Darshana for solids not drawing on Linux - turns out we can't call OpenGl methods inside Qt slots.
Modified Paths: -------------- brlcad/trunk/src/qged/display/GeometryRenderer.cpp brlcad/trunk/src/qged/display/GeometryRenderer.h Modified: brlcad/trunk/src/qged/display/GeometryRenderer.cpp =================================================================== --- brlcad/trunk/src/qged/display/GeometryRenderer.cpp 2020-06-29 17:17:35 UTC (rev 76238) +++ brlcad/trunk/src/qged/display/GeometryRenderer.cpp 2020-06-30 13:22:20 UTC (rev 76239) @@ -18,9 +18,6 @@ * information. */ /** @file GeometryRenderer.cpp */ -// -// Created by Sadeep on 28-Jun. -// #include "common.h" #include "GeometryRenderer.h" @@ -46,9 +43,19 @@ if (database == NULL) return; displayManager->saveState(); glEnable(GL_LIGHTING); - for (auto i:solids) { - displayManager->drawDList(i); + + if(!immediateMode) { + if (databaseUpdated) { + drawDatabase(); + databaseUpdated = false; + } + for (auto i:solids) { + displayManager->drawDList(i); + } } + else{ + drawDatabase(); + } displayManager->restoreState(); } @@ -56,12 +63,19 @@ * Clears existing display lists, iterate through each solid and generates display lists by calling drawSolid on each */ void GeometryRenderer::onDatabaseUpdated() { - rt_i * r_db = rt_new_rti(database->dbip); + r_database = rt_new_rti(database->dbip); + if (!immediateMode) { + databaseUpdated = true; + } + else { + } +} +void GeometryRenderer::drawDatabase() { db_tree_state initState; - db_init_db_tree_state(&initState, r_db->rti_dbip, database->wdb_resp); - initState.ts_ttol = &r_db->rti_ttol; - initState.ts_tol = &r_db->rti_tol; + db_init_db_tree_state(&initState, r_database->rti_dbip, database->wdb_resp); + initState.ts_ttol = &r_database->rti_ttol; + initState.ts_tol = &r_database->rti_tol; for (auto i: solids){ displayManager->freeDLists(i,1); @@ -73,11 +87,9 @@ if (path_cnt) { for (int i = 0; i < path_cnt; i++) { const char *topObjectName = dbObjects[i]->d_namep; - db_walk_tree(r_db->rti_dbip, 1, &topObjectName, 1, &initState, 0, 0, drawSolid, this); + db_walk_tree(r_database->rti_dbip, 1, &topObjectName, 1, &initState, 0, 0, drawSolid, this); } } - - rt_free_rti(r_db); } @@ -101,8 +113,12 @@ } } - GLuint dlist = displayManager->genDLists(1); - displayManager->beginDList(dlist); // begin display list -------------- + GLuint dlist; + if (!geometryRenderer->immediateMode) { + dlist = displayManager->genDLists(1); + displayManager->beginDList(dlist); // begin display list -------------- + geometryRenderer->solids.push_back(dlist); + } if (tsp->ts_mater.ma_color_valid) { displayManager->setFGColor(tsp->ts_mater.ma_color[0], tsp->ts_mater.ma_color[1], tsp->ts_mater.ma_color[2], 1); @@ -114,9 +130,10 @@ displayManager->setLineStyle(tsp->ts_sofar & (TS_SOFAR_MINUS | TS_SOFAR_INTER)); displayManager->drawVList(reinterpret_cast<bn_vlist *>(&vhead)); - displayManager->endDList(); // end display list -------------- - geometryRenderer->solids.push_back(dlist); + if (!geometryRenderer->immediateMode) { + displayManager->endDList(); // end display list -------------- + } return ret; } Modified: brlcad/trunk/src/qged/display/GeometryRenderer.h =================================================================== --- brlcad/trunk/src/qged/display/GeometryRenderer.h 2020-06-29 17:17:35 UTC (rev 76238) +++ brlcad/trunk/src/qged/display/GeometryRenderer.h 2020-06-30 13:22:20 UTC (rev 76239) @@ -18,9 +18,6 @@ * information. */ /** @file GeometryRenderer.h */ -// -// Created by Sadeep on 28-Jun. -// #ifndef BRLCAD_GEOMETRYRENDERER_H #define BRLCAD_GEOMETRYRENDERER_H @@ -47,18 +44,21 @@ class GeometryRenderer:public Renderable { public: GeometryRenderer(rt_wdb *database, DisplayManager *displayManager); - rt_wdb * getDatabase(); void setDatabase(rt_wdb *database); - - static tree *drawSolid(db_tree_state *tsp, const db_full_path *pathp, rt_db_internal *ip, void *clientData); void onDatabaseUpdated(); void render(); private: rt_wdb *database; + rt_i * r_database; DisplayManager *displayManager; float defaultWireColor[3] = {1,.1,.4}; std::vector<int> solids; // contains the display list of each solid + bool immediateMode = false; + bool databaseUpdated = false; + + static tree *drawSolid(db_tree_state *tsp, const db_full_path *pathp, rt_db_internal *ip, void *clientData); + void drawDatabase(); }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ BRL-CAD Source Commits mailing list brlcad-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/brlcad-commits