Seite 1 von 1

Ogre Mesh Speicherverteilung

Verfasst: 09.06.2013 15:10
von man-in-black
Moin moin,

weis einer von euch, wie Ogre (in PB5.11) die Meshs im Speicher hinterlegt?

Angenommen ich habe die eine Datei "baum.mesh" (und "baum.material") und erstelle daraus 2 meshs (2x loadmesh(#PB_any,...)),
sagt mir der Debugger, dass beide auf getrennte Speicherbereiche gelegt wurden (2 unterschiedliche Addressen).
Danach kann ich ohne Probleme Entitys erzeugen und wild rumspielen.
Lösche ich aber beide, kommt es manchmal beim Löschen des zweiten zu einem IMA.
Der Witz, wenn ich vorher isMesh abfrage, existiert das zweite noch. Ergo kann gelöscht werden?!
Das lässt mich jetzt vermuten, dass sich beide Meshs in Wahrheit doch einige Informationen teilen (Material,...)?

Bevor jetzt einer nach einem abgespeckten Code fragt: Nein, damit kann ich nicht dienen. Den Originalcode reinzustellen, wäre auch zu viel des Guten.
Außerdem geht es mir auch weniger um den Fehler in meinem Code, sondern um die Arbeitsweise von Ogre...

Wär cool, wenn mir das mal einer erklären könnte ;)

Re: Ogre Mesh Speicherverteilung

Verfasst: 09.06.2013 17:40
von PMV
Wenn du wissen willst, wie OGRE arbeitet, sollteste dir
den Quellcode runter laden und nachschauen. :D

Ich glaub aber kaum, dass da was besonderes gemacht
wird. Ein mal Mesh laden ist ein Mesh im speicher. Ein
zweites Mesh laden ist das auch im Speicher. Ein duzend
Entities erstellen, verweise auf das Mesh im Speicher mit
ein paar Zusatzdaten und verweis auf ein Material.

Ein IMA sollte es in keinem Fall geben, so lange du
nur sachen löschst, die vorher erstellt wurden. Das ist
dann kein Fehler im Code, sondern ein Fehler von PB. :wink:
-> Bugreport

Meshes von denen noch Entities existieren und genutzt
werden sollte allerdings nicht gelöscht werden, das
ist das einzige Szenario, wo ich mir ein "berechtigten"
IMA vorstellen kann.

MFG PMV

Re: Ogre Mesh Speicherverteilung

Verfasst: 10.06.2013 14:38
von man-in-black
Hi,

die Idee mit dem OgreSource war nicht übel. (Wusste gar nicht, dass der offen ist - im Nachhinein ziemlich dämlich :lol: )


[ Ogre 1.8.1 | PB5.11 ]
Nach ein bisschen Wühlen meine ich fündig geworden zu sein. Wenn ich es richtig sehe,
soll der ResourceManager ("OgreResourceManager.cpp") den Speicher optimal ausnutzen (ergo nur das Nötigste).
Jedes Mal wenn ich zB ein Mesh lade, wird mit ".createOrRetrieve()" zunächst überprüft,
ob schon ein Mesh mit dem selben Namen im Speicher liegt und sofern vorhanden der alte Pointer übergeben.

PureBasic scheint da nur sonne Art "Header" vorzusetzen. Logisch, dass dann beim Löschen von einem "baum"
der erste "Header" + Mesh verschwinden und nur der zweite (tote) "Header" übrig bleibt. Wenn ich jetzt mit isMesh()
nach dem zweiten Mesh suche, wird nur geguckt, ob der "Header 2" ok ist ... --> IMA

Möglich, dass man das schon als Bug einstufen kann. Schließlich müsste sich der 2. "Header" aktualisieren ODER bei gleichen
Quelldateien ein komplett neues Mesh erzeugt werden!

Provisorium:
Selbst mitschneiden, was geladen wurde. Wenn man wirklich zwei getrennte Meshs haben will, sollte man CopyMesh verwenden.
Ogre bastelt dann wirklich 2 Meshs aus einem.

Wenn ich mich irgendwie vertan haben sollte, melden ;)
mib

Re: Ogre Mesh Speicherverteilung

Verfasst: 10.06.2013 20:40
von PMV
man-in-black hat geschrieben:Jedes Mal wenn ich zB ein Mesh lade, wird mit ".createOrRetrieve()" zunächst überprüft,
ob schon ein Mesh mit dem selben Namen im Speicher liegt und sofern vorhanden der alte Pointer übergeben.

PureBasic scheint da nur sonne Art "Header" vorzusetzen. Logisch, dass dann beim Löschen von einem "baum"
der erste "Header" + Mesh verschwinden und nur der zweite (tote) "Header" übrig bleibt. Wenn ich jetzt mit isMesh()
nach dem zweiten Mesh suche, wird nur geguckt, ob der "Header 2" ok ist ... --> IMA
Das wäre eine fehlerhafte Implementation seites PB.
Bug-Report im englischen Forum und in einer der
nächsten Version wird das dann sicherlich gefixed.

Es wäre schon ziemlich unsauber, wenn das so
gelassen werden würde, zumal man dann
praktisch das System von OGRE selber
noch mal programmieren müsste, damit es
kein IMA gibt. :wink:

MFG PMV

Re: Ogre Mesh Speicherverteilung

Verfasst: 16.07.2013 13:51
von PMV
Ich hab nicht mit bekommen, das du einen erstellt hast, also hab
ich das nun gemacht.

Bugreport: http://www.purebasic.fr/english/viewtop ... =4&t=55452

MFG PMV