Neuer Assimp-Release geplant

Spieleentwicklung mit Autorensystemen und Toolkits - Will man Spiele entwicklen, ist es oft sinnvoll nicht erst seine eigene Engine zu entwickeln, sondern gleich mit einem ausgefeilten Autorensystem zu beginnen.
Forumsregeln
Bitte nur zu Engines und Toolkits posten, die auch eine eigene Entwicklungsumgebung anbieten. Zu Engines, die nur programmatisch angesprochen werden können, bitte hier posten.

Re: Neuer Assimp-Release geplant

Beitragvon Krishty » 04.05.2017, 22:57

Die Version von vor drei Stunden stürzt bei mir ab – in std::copy(tempBuf.cbegin(), tempBuf.cend(), ++curPosition); mit vector + offset out of range

Warum benutzt ihr überhaupt IOStreamBuffer<T>::getNextLine(), wenn das Newline-Zeichen in OBJ keinen logischen Zeilenumbruch bedeutet? Wäre das nicht die Stelle, an der man backslash + line break filtert, statt hinterher auf Backslash zu prüfen und die Zeilen dann wieder zusammenzukleistern? Wäre doch sicher auch mindestens eine Größenordnung schneller …
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
 
Beiträge: 5661
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Neuer Assimp-Release geplant

Beitragvon kimmi » 05.05.2017, 00:39

Beim Schreiben von getNextLine war mir dieser Zusammenhang nicht bekannt, da die bisherigen Files anders strukturiert waren. Da ist definitiv Luft nach oben. Wenn mir der Alltag mal wieder etwas Luft lässt, werde ich hier nachbessern. Wenn jemand anders gerade nicht jede Nacht zu früh einschläft; ich würde mich über etwas Hilfe freuen :)...

Gruß Kimmi
Benutzeravatar
kimmi
Kim Kulling
Moderator
 
Beiträge: 1324
Registriert: 26.02.2009, 10:42
Wohnort: Luebeck

Re: Neuer Assimp-Release geplant

Beitragvon Krishty » 10.05.2017, 17:25

SpatialSort: use std::vector::resize( 0 ) to improve readability. commit 186629b37282d880ad059516c7a3673844b74ac9 Kim Kulling committed 2 days ago
Code: Ansicht erweitern :: Alles auswählen
// clear the array in this strange fashion because a simple clear() would also deallocate
// the array which we want to avoid
- poResults.erase( poResults.begin(), poResults.end());
+ poResults.resize( 0 );
resize(0) ist identisch mit clear() und der Kommentar ist zweifelhalft. Siehe hier, hier, und hier.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
 
Beiträge: 5661
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Neuer Assimp-Release geplant

Beitragvon Krishty » 10.05.2017, 20:23

Ich sehe auch, dass ihr mit Master gemerged habt – enthält Master jetzt den defekten OBJ-Importer?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
 
Beiträge: 5661
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Neuer Assimp-Release geplant

Beitragvon kimmi » 11.05.2017, 16:18

Clear und resize sind nicht gleich, clear released die Capacity, resize nicht, siehe : http://en.cppreference.com/w/cpp/contai ... tor/resize:
Vector capacity is never reduced when resizing to smaller size because that would invalidate all iterators, rather than only the ones that would be invalidated by the equivalent sequence of pop_back() calls.

Den Effect kann man auch im Profiler beobachten: resize( 0 ) setzt die Size zwar auf 0, die Capacity allerdings nicht. Wenn nun jemand erneut Items pusht, wird kein erneuten Allocate durchgeführt, clear ist da langsamer.

Aber Obacht: das gilt nur für std::vector.

Gruß Kim
Benutzeravatar
kimmi
Kim Kulling
Moderator
 
Beiträge: 1324
Registriert: 26.02.2009, 10:42
Wohnort: Luebeck

Re: Neuer Assimp-Release geplant

Beitragvon kimmi » 11.05.2017, 16:18

Der Obj-Importer-Bug ist bereits behoben.

Kim
Benutzeravatar
kimmi
Kim Kulling
Moderator
 
Beiträge: 1324
Registriert: 26.02.2009, 10:42
Wohnort: Luebeck

Re: Neuer Assimp-Release geplant

Beitragvon Krishty » 11.05.2017, 18:04

kimmi hat geschrieben:Clear und resize sind nicht gleich, clear released die Capacity, resize nicht, siehe : http://en.cppreference.com/w/cpp/contai ... tor/resize:
Vector capacity is never reduced when resizing to smaller size because that would invalidate all iterators, rather than only the ones that would be invalidated by the equivalent sequence of pop_back() calls.
Doch, http://en.cppreference.com/w/cpp/container/vector/clear:
Leaves the capacity() of the vector unchanged
Mit welcher STL hast du es gemessen?

[IMHO, wenn man es lesbar haben will:

  clearAndKeepCapacity(poResults);

und

  clearAndDeallocate(poResults);

mit

  template <typename T> void clearAndKeepCapacity(std::vector<T> & v) {
    v.clear(); // oder erase(begin(), end()) oder wasauchimmer
  }

  template <typename T> void clearAndDeallocate(std::vector<T> & v) {
    std::vector<T>().swap(v);
  }


Wenn schon leserlich machen, dann richtig ;) ]


@OBJ: Stimmt; der Crash ist raus :) Die Geschwindigkeit ist aber nichtsdestotrotz eine Katastrophe – wenn ich in Notepad++ alle Backslash+Newline aus meiner Testdatei lösche (15 Sekunden Arbeit), lädt die OBJ in drei Sekunden. Wenn ich sie drinlasse … muss ich den Test nach zwei Stunden mit 100 % Kern-Auslastung abbrechen weil ich nicht weiß, ob es je fertig geworden wäre oder in einer Endlosschleife hängt. Da war der Crash fast besser.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
 
Beiträge: 5661
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Neuer Assimp-Release geplant

Beitragvon kimmi » 11.05.2017, 18:57

Ops, das war mal anders. Gut zu wissen, das mit dem clear(), danke :). Ich hatte mich schon ewig gewundert, warum clear das früher ( so vor 10 Jahren ) im VS anders gemacht hat. Die Messungen habe ich damals durchgeführt und bis heute nicht wiederholt.
Welches Obj-Modell benutzt du? Ich habe da gerade kein ungünstiges Modell bei der Hand, um das nachzuvollziehen. In der Tat habe ich den Fix in Eile mit dem Dragon gegen gecheckt und da sind die Linebreaks nicht drinne, Schande über mich.
Benutzeravatar
kimmi
Kim Kulling
Moderator
 
Beiträge: 1324
Registriert: 26.02.2009, 10:42
Wohnort: Luebeck

Re: Neuer Assimp-Release geplant

Beitragvon Krishty » 11.05.2017, 21:31

X3D behandelt Kommas endlich als Whitespace, schön :)

Für die verbleibenden Probleme habe ich dir nochmal Testfälle geschickt.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
 
Beiträge: 5661
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Neuer Assimp-Release geplant

Beitragvon kimmi » 12.05.2017, 09:24

Danke für das Feedback, ganze Menge ...

Gruß Kim
Benutzeravatar
kimmi
Kim Kulling
Moderator
 
Beiträge: 1324
Registriert: 26.02.2009, 10:42
Wohnort: Luebeck

Re: Neuer Assimp-Release geplant

Beitragvon Krishty » 15.05.2017, 22:29

Mir ist gerade beim Testen noch eine desaströse Nebenwirkung des OBJ-Problems aufgefallen.

Nämlich scheint OBJ der Standard-Importer zu sein, falls ihr ein Format nicht erkennt und es Text-only ist. Von da an passiert der GAU:
  • textbasiertes Format; kein Importer passt … Found a matching importer: Wavefront OBJ
  • natürlich springt er mit den unbekannten Daten in ignoreNewLines()
  • natürlich bleibt er dann in der Schleife hängen, die stundenlang Assimp damit deadlocked, in einen std::vector zu kopieren
Kurz: Früher hat jedes unbekannte Datei zu einem abgebrochen Import geführt, wie es sein soll. Jetzt führen die meisten unbekannten Dateien zum Deadlock im OBJ-Backslash-Removal.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
 
Beiträge: 5661
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: Neuer Assimp-Release geplant

Beitragvon kimmi » 16.05.2017, 09:24

WTF! Ich mach mich heute abend drann, ich hab ja sturmfrei!

Kimmi
Benutzeravatar
kimmi
Kim Kulling
Moderator
 
Beiträge: 1324
Registriert: 26.02.2009, 10:42
Wohnort: Luebeck

Re: Neuer Assimp-Release geplant

Beitragvon kimmi » 18.05.2017, 08:22

So, und STL's > 500 MB wollen auch nicht: https://github.com/assimp/assimp/issues/1277
Benutzeravatar
kimmi
Kim Kulling
Moderator
 
Beiträge: 1324
Registriert: 26.02.2009, 10:42
Wohnort: Luebeck

Vorherige

Zurück zu Autorensysteme und Toolkits

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast