JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=4defb1f3b42624b0673b259d57e553efMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

CreateTextureFromFileInMemory/Ex ...

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Hasenfuß
Senior JLI'ler


Alter: 37
Anmeldedatum: 20.08.2002
Beiträge: 291

Medaillen: Keine

BeitragVerfasst am: 13.01.2005, 16:10    Titel: CreateTextureFromFileInMemory/Ex ... Antworten mit Zitat

Hallo,

ich wollte mir einen Packer schreiben, der alle meine Grafiken in eine Datei schreibt. Soweit so gut...
Wie kann ich diese dann aber als Textur in DirectX laden? Es gibt da diese Funktionen CreateTextureFromFileInMemory / -Ex , allerdings weiß ich nicht, was ich für den Parameter LPCVOID pSrcData angeben muss... Hoffe, ihr könnt mir da weiterhelfen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 13.01.2005, 16:14    Titel: Antworten mit Zitat

Was soll LPCVOID sein ? kenn nur LPVOID sollte aber denke ich mal das gleiche sein nur mitn const. Naja du musst deinen Pointer zu der Textur einfach nur auf LPCVOID casten (LPCVOID)DeinDatenPointer

Nun wird bestimmt gleich Patrick meckern das ich solche cast sachen nutze ^^
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hasenfuß
Senior JLI'ler


Alter: 37
Anmeldedatum: 20.08.2002
Beiträge: 291

Medaillen: Keine

BeitragVerfasst am: 13.01.2005, 16:16    Titel: Antworten mit Zitat

Ja, soweit wars schon irgendwo klar. Aber wie krieg ich den DatenPointer? Ich hätte dann entweder nen ifstream für die gesamte Packer-Datei oder einen Buffer, in dem die Grafik gespeichert ist, aber keine direkte Adresse im Speicher...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 13.01.2005, 16:42    Titel: Antworten mit Zitat

Du entpackst dein paket und liest die entpeckte(n) Datei(n) ein und somit haste ja den Pointer wenn dus einliest in nen char* zum beispiel
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hasenfuß
Senior JLI'ler


Alter: 37
Anmeldedatum: 20.08.2002
Beiträge: 291

Medaillen: Keine

BeitragVerfasst am: 13.01.2005, 18:19    Titel: Antworten mit Zitat

Hm.. also ich zeig einfach am besten mal wie ichs probiert hab:

CPP:
   ifstream fin;
   fin.open(fileName);

        // Größe ermitteln
   int size;
   char ch;
   while(fin.get(ch))
      ++size;

   char * buf = new char[size];

   for(int i=0; i<size; ++i)
      fin.get(buf[i]);

   fin.close();

   D3DXCreateTextureFromFileInMemoryEx(m_lpD3DDevice,
                        &buf[0],
                        size,
                        srcInfo.Width,
                        srcInfo.Height,
                        1,
                        0,
                        D3DFMT_UNKNOWN,
                        D3DPOOL_MANAGED,
                        D3DX_FILTER_NONE,
                        D3DX_FILTER_NONE,
                        D3DCOLOR_ARGB(0xFF,0,0,0),
                        0,
                        0,
                        &lpTexture)))
   delete buf;


Anstatt &buf[0] hab ich auch schon &buf, *buf und halt alle möglichen Kominationen probiert.. &buf[0] erschien mir logisch weil irgendwo was von anfangsadresse stand wenn ich mich nicht irre...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 13.01.2005, 19:27    Titel: Antworten mit Zitat

äh, hm, ka, aber müsste das nicht einfach nur "buf" heißen? &buf kann nicht gehen, weils ja die Adresse vom Zeiger ist, nicht vom Inhalt, *buf auch nciht weil das ja der Inhalt ist und kein Zeiger, &buf[0], hm, naja sollte doch eigentlich das sebe sein wie buf.
Hab noch nciht so viel mit diese Dateimethoden gemacht, aber die for Schleife sieht irgendwie interessant aus. Gibt es denn irgendwelche Kompilerfehler, Zugriffsverletzungen, oder was macht der?
[edit]Die letzte Zeile muss auch delete buf[] heißen...[/edit]
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hasenfuß
Senior JLI'ler


Alter: 37
Anmeldedatum: 20.08.2002
Beiträge: 291

Medaillen: Keine

BeitragVerfasst am: 13.01.2005, 21:09    Titel: Antworten mit Zitat

nur buf geht auch nicht, das mit delete[] buf stimmt, danke Smile
Es kommt halt dieses Standartfenster mit Es wurde ein Problem festgestellt, bericht senden, etc.... Compilerfehler gibts keine, auch keine relevanten Warnungen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
abc_d
JLI Master Trainee


Alter: 34
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 13.01.2005, 21:41    Titel: Antworten mit Zitat

Jonathan_Klein hat Folgendes geschrieben:
äh, hm, ka, aber müsste das nicht einfach nur "buf" heißen? &buf kann nicht gehen, weils ja die Adresse vom Zeiger ist, nicht vom Inhalt, *buf auch nciht weil das ja der Inhalt ist und kein Zeiger, &buf[0], hm, naja sollte doch eigentlich das sebe sein wie buf.
Hab noch nciht so viel mit diese Dateimethoden gemacht, aber die for Schleife sieht irgendwie interessant aus. Gibt es denn irgendwelche Kompilerfehler, Zugriffsverletzungen, oder was macht der?
[edit]Die letzte Zeile muss auch delete buf[] heißen...[/edit]


Viele DirectX Funktionen (z.B. Vertex/Index Buffer) verlangen die erste Adresse eines Arrays, was ja auch sinn macht, wenn man die größe kennt.

Arrays werden direkt hintereinander angelegt, und so kann man auf alle Elemente zugreifen.
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 13.01.2005, 22:00    Titel: Antworten mit Zitat

FallenAngel84 hat Folgendes geschrieben:
Nun wird bestimmt gleich Patrick meckern das ich solche cast sachen nutze ^^


Stimmt! "Oh wie kannst Du nur????" Very Happy
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 13.01.2005, 22:03    Titel: Antworten mit Zitat

Mir geht der Sinn folgender Zeile nicht ganz auf:

CPP:
for(int i=0; i       fin.get(buf[i]);


Und auch macht es mich stutzig das du beim errechnen von size den Lesepunkt nicht mehr zurück setzt. Ist das Ok so ? Was macht das .get(ch) überhaupt und was is der return wert ?
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hasenfuß
Senior JLI'ler


Alter: 37
Anmeldedatum: 20.08.2002
Beiträge: 291

Medaillen: Keine

BeitragVerfasst am: 14.01.2005, 13:14    Titel: Antworten mit Zitat

soweit ich weiß kann man mit get den nächsten bytewert im übergegebenen char speichern. Mit der Größe stimmt das auch, also wenn ich size ausgeben lasse ist das genauso groß wie die datei. Ich sollte vielleicht noch sagen, dass ich in dem Code noch keine gepackte Datei benutze, sondern einfach jeden Datei erst in einem Puffer speicher und dann über die Memoryfunktion zu laden versuche.
Wenn jemand andere funktionierende Methoden hat, um grafiken in eine datei zu packen und diese dann einzeln und unabhänging von der gespeicherten Reihenfolge mit directx als texture zu laden, immer her damit Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 14.01.2005, 15:36    Titel: Antworten mit Zitat

im Buch von David Scherfgen wird sogar ein virtuelled Dateisystem entwickelt, naja, darfs wahrscheinlich nicht so einfach hier posten...
Die kann auch mehrere Dateinen aus einem unkomprimierten zip-Archiv laden für kompirmierte brauchst du dann glaub ich die zip-lib. Forum zu dem Buch ist www.spieleprogrammierer.de
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 14.01.2005, 15:39    Titel: Antworten mit Zitat

Jonathan_Klein hat Folgendes geschrieben:
im Buch von David Scherfgen wird sogar ein virtuelled Dateisystem entwickelt


Korrektur, emuliert. er benutzt nur zip-dateien die keine komprimierung haben und das kann man nun wirklich nicht als VFS ansehen Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 14.01.2005, 15:51    Titel: Antworten mit Zitat

sagen wir ein sehr einfaches virtuelles Dateisystem
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum