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

Reply via email to