Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Hi,
da ich ebengerade auf nen Fehler im Jedi-SDL-Header gestossen bin, der dazu sorgt, dass fälschlicherweise SDL_BYTEORDER auf SDL_BIG_ENDIAN gesetzt wird, obwohl man sich auf einer Little_Endian-Maschine befindet.
Um dieses Problem zu lösen, sollte folgender Code der jedi-sdl.inc hinzugefügt werden:
Code:
{$IFDEF ver180}
{$DEFINE Delphi} {TurboDelphi}
{$DEFINE Delphi32}
{$DEFINE Delphi4UP}
{$DEFINE Delphi5UP}
{$DEFINE Delphi6UP}
{$DEFINE Delphi7UP}
{$DEFINE Delphi8UP}
{$DEFINE Delphi9UP}
{$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types in Delphi 7}
{$DEFINE Has_Int64}
{$DEFINE HAS_TYPES}
{$ENDIF ver180}
Dies ist nur eine temporäre Lösung, ich hoffe, dass die Jedis da bald nachlegen.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Guten Abend (Servus, wie man bei uns sagt)
Ich bin dabei, einen Texturen-Loader mittels SDL zu schreiben. Eine Funktion, die ich unbedingt haben wollte, ist das Freistellen von Bildern, wenn sie z.B. einen schwarzen Hintergrund haben. Das soll auch bei Bildern funktionieren, die keinen Alphakanal haben. Ich habe eine solche Prozedur geschrieben (Dank an ionos und sein EasySDL), und sie funktioniert auch, z.B. für JPEG. Allerdings nur dann, wenn ich statt dem SDL_BIG_ENDIAN (den mir SDL zuweist) einen SDL_LIL_ENDIAN nehme (die Prozedur erwartet übrigens ein Bild mit 24 Bit):
Ich arbeite auf einem nicht mehr ganz taufrischen Laptop mit Windows XP.
Hat das vielleicht mit dem Problem im obigen Beitrag zu tun? Das hab ich ausprobiert, hat aber nichts genutzt.
Vielleicht weiß ja einer was? >Hoff<
Traude
@edit: ich habe die Zuweisung der Zeiger (PRed:=@Red...., die ja nur einmal gemacht werden muss) aus der Schleife herausgenommen.
@edit2: habe die Zeile "Pixel:=SDL_MapRGBA(ADestination.Format,Blue,Green,Red,Alpha);" richtiggestellt. Wenn man SDL_MapRGBA aufruft, sollten die Farbanteile in der richtigen Reihenfolge kommen!
Zuletzt geändert von Traude am Do Nov 23, 2006 08:11, insgesamt 2-mal geändert.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Hallo,
Ich habe folgendes gefunden:
In der sdl.pas gibt es in Zeile 412 die Sektion "{$IFDEF IA32}", eine bedingte Kompilierung, die entscheidet, ob SDL_BIG_ENDIAN oder SDL_LIL_ENDIAN genommen wird. Es ist mir aufgefallen, weil mein Code betreffend den SDL_LIL_ENDIAN (der für mich der richtige ist) ÜBERHAUPT NICHT KOMPILIERT WURDE.
Dieses IA32 ist aber nirgends definiert - zumindest bei mir nicht.
Ich habe die Anweisung "{$DEFINE IA32}" in der Jedi-SDL.inc nachgetragen, und zwar in der Sektion "{$IFDEF Win32}" und damit funktioniert es.
Diese Lösung ist zwar auch nicht korrekt, aber ich habe wenigstens nicht in der sdl.pas herummurksen müssen.
Viele Grüße
Traude
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Mit etwas Verspätung:
Du hast vermutlich eine veraltete Jedi-SDL.inc. Dort wurde das entsprechende vergessen. Die Jedis hatten es schnell behoben, aber die Version in dem ?vorletzen? Windows DGLSDK wurde von uns leider nicht upgedatet. Dazu gibt es auch eine News wo es auch einen Link zur aktuell von uns verwendeten Jedi-SDL.inc gibt.
Ansonsten ist wie gesagt die Version im Jedi-CVS ohne diesen Fehler.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Hallo i0n0s,
Ich habe mir Eure neue jedi-sdl.inc herüberkopiert und Hurra, es funktioniert! Danke für den Tip. Ich habe es allerdings nicht mit den EasySDL-Fonts ausprobiert, sondern mit meinem eigenen Code. Allerdings habe ich Codeteile aus der Unit "easySDLFont" verwendet (auf die Idee, kleine Buchstabentexturen auf eine große Fonttextur zu kleben wäre ich alleine nie gekommen ***). Der Fehler war übrigens kaum zu merken: bei einer hellgrauen Textur war eine leichte Rotverschiebung zu sehen. Interessanterweise haben meine Schriften vorher auch gut funktioniert , nur leider nach der Fehlerbehebung klarerweise nicht mehr. Aber da ich jetzt schon Übung habe - hab ich's schon wieder hingekriegt.
Vielen Dank für Deine Antwort,
Traude
*** @edit: das musste ich einfach noch nachtragen.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Hallo,
ich muss noch schnell etwas nachfragen: in meiner Euphorie, dass es jetzt klaglos funktioniert, habe ich etwas Wichtiges übersehen: diese bedingten Kompilierungen, die ich mir mit der plattformübergreifenden SDL eingehandelt habe.
Das ganze bedeutet doch, dass derjenige, der das Programm benutzt, es auf der Maschine kompilieren muss, die er verwendet. Das heißt, man kann keine EXE übergeben, sondern nur den Sourcecode. Das stimmt doch, oder?
Traude
Mitglieder in diesem Forum: Google [Bot] und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.