git-svn-id: svn://db.shs.com.ru/libs@705 a8b55f48-bf90-11e4-a774-851b48703e85

This commit is contained in:
2019-12-20 10:55:11 +00:00
parent cb19854e1b
commit 7c271cc3b5
13 changed files with 193 additions and 44 deletions

View File

@@ -35,7 +35,7 @@ Scene::Scene() {
Scene::~Scene() {
destroying = true;
destroy();
clear();
delete root_;
}
@@ -74,7 +74,7 @@ void Scene::addScene(const Scene * s) {
void Scene::assignFrom(const Scene * s) {
destroy();
clear();
setName(s->name());
foreach (Material * m, s->materials) {
Material * nm = new Material();
@@ -91,6 +91,19 @@ void Scene::assignFrom(const Scene * s) {
}
void Scene::clear() {
selected_.clear();
selected_top.clear();
emitSelectionChanged();
root_->clearChildren(true);
td_geometries << geometries;
qDeleteAll(materials);
geometries.clear();
materials.clear();
emit __destroyed();
emit treeChanged();}
void Scene::objectsCountInternal(int * cnt, ObjectBase * where) {
++(*cnt);
foreach (ObjectBase * i, where->children_)
@@ -422,6 +435,9 @@ void Scene::prepareTree(ObjectBase * o) {
co->setObjectsChanged();
}
break;
case ObjectBase::glCamera:
cameras_used << globject_cast<Camera * >(co);
break;
default: break;
}
prepareTree(co);
@@ -445,6 +461,7 @@ bool Scene::prepare() {
geometries_used[rpSolid ].clear();
geometries_used[rpTransparent].clear();
lights_used.clear();
cameras_used.clear();
prepareTree(root_);
if (tree_struct_changed) {
tree_struct_changed = false;
@@ -459,17 +476,9 @@ bool Scene::prepare() {
}
void Scene::destroy() {
selected_.clear();
selected_top.clear();
emitSelectionChanged();
root_->clearChildren(true);
td_geometries << geometries;
qDeleteAll(materials);
geometries.clear();
materials.clear();
emit __destroyed();
emit treeChanged();
void Scene::destroy(QOpenGLExtraFunctions * f) {
foreach (Mesh * g, geometries)
g->destroy(f);
}