Also, ich bin echt am verzweifeln!
Ich habe mich endlich mal daran gewagt Texturen mit FreePascal zu machen, aber irgendwie wollte meine meine glaux unit nicht auf meinem PC eine Funktion rausrücken. Kurzerhand habe ich versucht selst ein paar Funktionen zu schreiben, die mir eine Textur laden sollten. Es kompiliert auch alles Fehlerlos, aber es gibt eine Exception.
Im Debugger bekomme ich folgendes mitgeteilt:
Code:
Program received signal SIGSEGV, Segmentation fault.
$405418 in T24BITBITMAP__GETTGL_RGBA_BITMAP (this=$416dbc) at tex.pp:82
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
Code:
AktuellerBereich^ := (Data + DataPosition)^;
Diese Zeile macht für mich nicht wirklich Sinn. Das Dächlein am Ende ist meines erachtens fehl am Platze. Es soll dort ja nicht auf einen "Inhalt" zugegriffen werden, sondern auf die "Variableninhalte"... arg.... kann es mal wieder nicht erklären, aber meines erachtens ist sowas bei Delphi sogar ungültig.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Beim überfliegen ist mir eine Sache aufgefallen.
Ist es nicht sinnvoller, wenn du gleich in Result.Pixels liest?
Also nicht erst über den Pointer AktuellerBereich.
Und noch eines, du iterierst von 0 bis zum Ende des Speichers.
An und für sich ist das ja nichts schlimmes. Aber in der Schleife erhöhst du die Pointer um 3.
Meines erachtens läuft er dir eiskalt aus deinem Speicherbereich raus, weil du zu viele Pixel lesen und schreiben willst.
Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
Mein Tipp: Schau mal in die Textures.pas von Jan Horn. Da findest du bestimmt was.
Zitat:
for Position := 0 to speichergroesse do begin ... inc(Position,3); ... end;
Das geht ja gleich garnicht. Du kannst nicht einfach in einer for-Schleife den Durchlaufwert verändern. Wie's unter FreePascal ist weiß ich nicht, aber der Delphicompiler bemängelt diesen groben Fehler sofort. Für 3er Schritte empfehle ich
Code:
while Position <> speichergroesse do // bzw. <= oder >=
begin
inc(Position, 3);
end;
Ansonsten, geht es mit For-Schleifen nur in Einerschritten.
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
@bluetoby: Weiß nicht wie es unter Delphi ist... aber mit genau der Aussage hat sich mein Info-Lehrer damals vor der gesamten Klasse blamiert, als er eine Aufgabe von mir als komplett falsch darstellen wollte und mir "5 minuten gab" um es zu beweisen... es geht hrhrhr
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
Äääh... hä?
1. Wieso weißt du nicht wie es in Delphi ist?
2. Hat das Forum Mist gebaut und du bist DigitalVertex nicht Phobeus?
3. Mag sein, dass es geht, aber dazu hat man wohl die For-Schleife nicht erfunden...
In Delphi meldet der Compiler klipp und klar:
"Fehler: Befehl für For-Schleifenvariable 'i'"
Was wurde denn da im Infountericht gelehrt? FreePascal?
1. Phobeus will sicher damit ausdrücken dass er nicht weiß wie Delphi darauf reagiert.
2. Das Forum hat keinen Fehler gemacht.
3. Ich weiß nicht was Phobeus in seinem Info Unterricht hatte, aber warscheinlich war der Lehrer TP geeicht.
Mitglieder in diesem Forum: 0 Mitglieder und 2 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.