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
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits