ASSIMP auf iPhone und Binärformate

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
maxx2097
Beiträge: 22
Registriert: 15.03.2011, 18:37

ASSIMP auf iPhone und Binärformate

Beitrag von maxx2097 »

Hallo zusammen,

ich bin heute über ein Problem mit ASSIMP auf dem iPhone gestossen:

Textbasierte Formate (z.B. collada) funktionieren wunderbar. Allerdings habe ich ein Problem mit Binärformaten (getestet habe ich 3ds und lwo). Bei diesen Formaten funktioniert der Import im iPhone Simulator wunderbar... allerdings nicht auf einem echten Gerät.

Da der Simulator ja kein Emulator ist und direkt X86 Code ausführt ist das auch halbwegs nachvollziehbar. Ich vermute mal es könnte evtl. an einem Endian-Problem im Zusammenhang mit der ARM-CPU des iPhones liegen.

Konkret geht es z.B. bei der Ausführung an folgenden Stellen daneben (EXC_BAD_ACCESS):

bei 3ds in Streamreader.h

Code: Alles auswählen

// ---------------------------------------------------------------------
	/** Generic read method. ByteSwap::Swap(T*) *must* be defined */
	template <typename T>
	T Get()	{
		if (current + sizeof(T) > limit) {
			throw DeadlyImportError("End of file or stream limit was reached");
		}

		T f = *((const T*)current);
		Intern :: Getter<SwapEndianess,T,RuntimeSwitch>() (&f,le);

		current += sizeof(T);
		return f;
	}
und bei lwo in LWOLoader.h

Code: Alles auswählen

// ------------------------------------------------------------------------------------------------
inline float LWOImporter::GetF4()
{
	float f = *((float*)mFileBuffer);mFileBuffer += 4;
	AI_LSWAP4(f);
	return f;
}
Soweit ich sehen kann wird die aktuelle Architektur ja in aiDefines.h festgelegt. Ich habe dort auch mal ein wenig experimentiert, aber leider ohne Erfolg.

Hat jemand eine Idee?

Vielen Dank!

Maxx
Benutzeravatar
Schrompf
Moderator
Beiträge: 4934
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: ASSIMP auf iPhone und Binärformate

Beitrag von Schrompf »

Das klingt wirklich nach Endian-Problemen. Kannst Du mit Sicherheit sagen, dass der ARM ein BigEndian-Speichermodell nutzt? Wenn ja, müsste man die Plattformdefs entsprechend erweitern.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: ASSIMP auf iPhone und Binärformate

Beitrag von Aramis »

BigEndian sollte theoretisch bereits funktionieren, nur haben wir es zum letzten Mal vor vielleicht 2 Jahren getestet. Allerdings nutzen etliche Loader (LWO wohl nicht, aber 3DS) den StreamReader, der die Endian-Konvertierung zentral eingebaut hat.
maxx2097
Beiträge: 22
Registriert: 15.03.2011, 18:37

Re: ASSIMP auf iPhone und Binärformate

Beitrag von maxx2097 »

Schrompf hat geschrieben:Das klingt wirklich nach Endian-Problemen. Kannst Du mit Sicherheit sagen, dass der ARM ein BigEndian-Speichermodell nutzt? Wenn ja, müsste man die Plattformdefs entsprechend erweitern.
Der ARM kann wohl beides. Was ich so gelesen hab läuft der im iPhone angeblich auch auf Little-Endian... dann wäre es aber komisch, dass es nicht funktioniert.
maxx2097
Beiträge: 22
Registriert: 15.03.2011, 18:37

Re: ASSIMP auf iPhone und Binärformate

Beitrag von maxx2097 »

Hmm... also ich kann soweit doch schon mal Entwarnung geben... in der Release-Konfiguration funktioniert es auch auf dem physikalischen iPhone. Warum es aber in der Debug-Config nicht geht erschliesst sich mir gerade nicht.
Evtl. liegt es an irgendwelchen Compiler-Flags die sich da unterscheiden... zumindest in XCode sehe ich da aber jetzt keinen Unterschied (bis auf die üblichen Optimierungen für Release).
Jörg
Establishment
Beiträge: 296
Registriert: 03.12.2005, 13:06
Wohnort: Trondheim
Kontaktdaten:

Re: ASSIMP auf iPhone und Binärformate

Beitrag von Jörg »

Welchen Wert haben current und mFileBuffer wenn es kracht?
maxx2097
Beiträge: 22
Registriert: 15.03.2011, 18:37

Re: ASSIMP auf iPhone und Binärformate

Beitrag von maxx2097 »

Also der Wert von mFileBuffer (LWO Import) scheint zumindest nicht total ins Nirvana zu zeigen... zumindest ist der Wert immer gleich ">" (siehe screenshot).
Screen shot 2011-03-25 at 9.09.55 PM.png
Dass das Ganze nur in der Release-Konfiguration läuft wäre ja zumindest für den Moment noch zu verschmerzen... ein weiteres "Phänomen" ist allerdings, dass in der Release-Konfig anscheinend die Normals der Meshes nicht richtig gelesen, oder gespeichert werden (auch bei Textformaten wie Collada).

Somit ist bei mir im Moment die einzig lauffähige Kombination Debug + Textformat.

Jemand noch eine Idee? Bzw. hat es jemand erfolgreich auf dem iPhone laufen?

Prost!
Jörg
Establishment
Beiträge: 296
Registriert: 03.12.2005, 13:06
Wohnort: Trondheim
Kontaktdaten:

Re: ASSIMP auf iPhone und Binärformate

Beitrag von Jörg »

Auf allen nicht x86-Platformen wuerde ich davon abraten, floats aus nicht passend ausgerichteten Pointern zu lesen.
Wenn das der Wert ist, bei dem es kracht, dann ist er falsch ausgerichtet.
Also memcpy in eine float-Variable machen.
Antworten