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

This commit is contained in:
2019-12-10 10:22:09 +00:00
parent 86f4e0ad78
commit 9d05dbe6da
24 changed files with 186 additions and 137 deletions

View File

@@ -172,7 +172,7 @@ void Renderer::releaseShader() {
}
void Renderer::fillObjectsBuffer(const QList<ObjectBase *> & ol, RenderPass pass) {
void Renderer::fillObjectsBuffer(const ObjectBaseList & ol, RenderPass pass) {
cur_objects_.resize(ol.size());
for (int i = 0; i < ol.size(); ++i) {
Object & so(cur_objects_[i]);
@@ -195,23 +195,26 @@ void Renderer::fillObjectsBuffer(const QList<ObjectBase *> & ol, RenderPass pass
void Renderer::renderObjects(Scene & scene, RenderPass pass) {
QOpenGLExtraFunctions * f = view;
QMapIterator<Mesh*, QList<ObjectBase*> > it(scene.geometries_used);
QMapIterator<Mesh*, ObjectBaseList> it(scene.geometries_used[pass]);
bool emit_pos_change = false;
while (it.hasNext()) {
it.next();
Mesh * mesh = it.key();
if (mesh->objects_changed) {
mesh->objects_changed = false;
if (mesh->isObjectsChanged(pass)) {
mesh->setObjectsChanged(pass, false);
emit_pos_change = true;
fillObjectsBuffer(it.value(), pass);
mesh->loadObjects(f, cur_objects_);
//qDebug() << "loadObjects" << pass << cur_objects_.size();
mesh->loadObjects(f, cur_objects_, pass);
}
if (mesh->selected_changed && edit_mode) {
mesh->selected_changed = false;
if (mesh->isSelectionChanged(pass) && edit_mode) {
mesh->setSelectionChanged(pass, false);
fillSelectionsBuffer(rend_selection.cur_selections_, it.value());
mesh->loadSelections(f, rend_selection.cur_selections_);
//qDebug() << "fillSelectionsBuffer" << pass << rend_selection.cur_selections_.size();
mesh->loadSelections(f, rend_selection.cur_selections_, pass);
}
mesh->draw(f, it.value().size());
//qDebug() << "draw" << pass << it.value().size();
mesh->draw(f, it.value().size(), pass);
}
if (emit_pos_change) emit view->objectsPositionChanged();
}