Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 31, 2025 21:19

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Devil und streams
BeitragVerfasst: So Sep 05, 2004 19:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 28, 2004 18:30
Beiträge: 25
Wohnort: Chemnitz
hallo, hab mein prob mit den langen texturgenerierzeiten gelöst indem ich einfach auf Devil (openil) umgestiegen bin, hat den datei support den ich brauche. hab jetzt aber das problem das ich nicht weiß wie ich texturen aus nem stream lad. in der hilfe steht, dass man für filestreams ilLoadF verwenden soll, den ersten Parameter den Bildtyp kann ich auch noch angeben aber dann will er einen Pointer aif einen Stream (?) haben und wenn ich einen Pointer auf einen TFileStream (@FileStream) übergebe klappts net, wäre also nett wenn mir jemand sagen könnte was devil dort erwartet.

schon mal danke im vorraus

mfg
GSE

_________________
In a world without walls and fences, who needs Windows or Gates?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 06, 2004 07:10 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Ich schätze Du wirst erst deine Bild von dem FileStream in einen TMemoryStream umkopieren müßen. Dieser hat einer Property auf einen Speicher, den Du dann an Devil übergeben kannst.

Gruß
KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 06, 2004 15:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 28, 2004 18:30
Beiträge: 25
Wohnort: Chemnitz
geht leider nicht, oder hab ich was falsch gemacht?
Code:
  1.    
  2.    {...}
  3.     // Laden einer Textur in den Speicher
  4.     ilGenImages(1, @id);
  5.     ilBindImage(id);
  6.  
  7. //    ilLoadImage(PChar(Filename));  // Loads into the current bound image
  8.  
  9.     fstream := TFileStream.create(Filename, fmOpenRead);
  10.     mstream := TMemoryStream.Create;
  11.     mstream.CopyFrom(fstream, 0);
  12.  
  13.     ilLoadF(IL_BMP, mstream.Memory);
  14.  
  15.     mstream.free;
  16.     fstream.free;


schonmal thx

mfg
GSE

_________________
In a world without walls and fences, who needs Windows or Gates?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 06, 2004 15:54 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Man lädt doch zuerst ein Bild in den Speicher, bevor es mit glBind gebunden wird, oder verstehe ich da etwas falsch. Ich habe selber noch nie mit Devil gearbeitet. Was funktioniert nicht?

Gruß
KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 06, 2004 16:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 28, 2004 18:30
Beiträge: 25
Wohnort: Chemnitz
das mit den streams funktioniert nicht, wenn ich das ausklammer und ilLoadImage nehm funktionierts (er hängt bei dem ilLoadF Befehl der laut Hilfe daten aus nem stream lädt (er will aber nen pointer?) -> Zugrissverletzung)

Zitat:
Man lädt doch zuerst ein Bild in den Speicher, bevor es mit glBind gebunden wird,
der befehl ist aber ein devil befehl ilBindimage, er muss doch wissen wo er das bild hinladen soll

mfg
GSE

_________________
In a world without walls and fences, who needs Windows or Gates?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 06, 2004 18:40 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Was machst du denn für komische Sachen?

Zitat:
fstream := TFileStream.create(Filename, fmOpenRead);
mstream := TMemoryStream.Create;
mstream.CopyFrom(fstream, 0);

ilLoadF(IL_BMP, mstream.Memory);


Erst lädst du einen FileStream, kopierst dann 0 bytes daraus in einen Memorystream, greifst auf den Memorystream zu und das soll klappen?

Erst mal bringt die Datenkopiererei in diesem Fall überhaupt nichts (zumal du gar keine Daten kopierst :wink: ), außerdem kann DevIL mit Delphi Streams schon rein gar nichts anfangen (das sind ja Delphi spezifische Klassen), deshalb steht in der Dokumentation auch

Code:
  1. ILboolean ilLoadF(
  2.   ILenum Type,
  3.   ILHANDLE File
  4. );


wobei ich mangels Nutzung von DevIL nicht weiß, was nun ein ILHANDLE genau sein soll, nehme aber stark an, dass es sich unter Windows um ganz normale Filehandles handeln wird, wie sie etwa von der Windows API Funktion CreateFile zurückgeliefert werden (also im Prinzip ganz normale Cardinals).

In deinem Fall würde ich ilLoadL verwenden, das einen Zeiger auf einen Speicherbereich erwartet - den kannst du dann tatsächlich mit deinen MemoryStream Konstrukt übergeben - aber natürlich musst du vorher wirklich die ganzen Daten rüberkopieren und nicht die 0 Bytes deines aktuellen Codes.

Im Übrigen bietet Lischkes GraphicEx einen Zugriff auf eine Vielfalt von Dateiformaten, ist leicht erweiterbar (da die TGraphic Schnittstelle verwendet wird) und man braucht keine weitere DLL.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 06, 2004 18:45 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Mars hat geschrieben:
Erst lädst du einen FileStream, kopierst dann 0 bytes daraus in einen Memorystream, greifst auf den Memorystream zu und das soll klappen?


Wenn man bei TMemorStream.CopyFrom als zweiten Parameter 0 angibt, dann wird ganz einfach der komplette Stream (von Position 0 an) kopiert. Das ist also kein Fehler.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 06, 2004 18:57 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Ah, gut zu wissen, danke sehr

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 06, 2004 19:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 28, 2004 18:30
Beiträge: 25
Wohnort: Chemnitz
@SoS: danke für die verteidigung :wink:

@Mars:
Zitat:
In deinem Fall würde ich ilLoadL verwenden, das einen Zeiger auf einen Speicherbereich erwartet - den kannst du dann tatsächlich mit deinen MemoryStream Konstrukt übergeben
super, funktioniert.

thx

mfg
GSE

_________________
In a world without walls and fences, who needs Windows or Gates?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]