|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 02.10.2004, 13:28 Titel: LPDIRECT3DSURFACE9 ...why? |
|
|
Hi!
Ich habe diese Funktion hier, die mir einfach ne Grafik in eine Surface lädt..
Code: | void Graphics::LoadImageFileInSurface(LPDIRECT3DSURFACE9 _surface, D3DXIMAGE_INFO* _info,
LPCSTR _imagefile_name)
{
ETS.error_msg() << "Start of LoadImageFileInSurface\n";
// Infos über die Grafik holen
D3DXGetImageInfoFromFile(_imagefile_name,_info);
ETS.error_msg() << "imagefile_name: " << _imagefile_name << " " \
<< _info->Width << " * " << _info->Height << "\n";
ETS.error_msg() << _surface << "\n";
// Surface für die Grafik anlegen
lpD3DDevice->CreateOffscreenPlainSurface(
_info->Width, // Breite
_info->Height, // Höhe
D3DFMT_A8R8G8B8, // Farbformat
D3DPOOL_DEFAULT, // Pool
&_surface, // Surface
0); // noch nicht von DX verwendeter Paramter
ETS.error_msg() << _surface << "\n";
// In die erstellte Surface die Grafik laden
D3DXLoadSurfaceFromFile(_surface, // Surface
NULL, // Palette, wenn man <256 Farben verwendet [PALETTEENTRY]
NULL, // Rechteck auf die Surface
_imagefile_name, // filename der Grafik
NULL, // Rechteck in der Grafik
D3DX_FILTER_NONE, // Filter
0, // Colorkey, ersetzt die Pixelfarbe durch Schwarz
NULL); // [D3DXIMAGE_INFO], haben wir schon abgefragt..
ETS.error_msg() << _surface << "\n";
ETS.error_msg() << "End of LoadImageFileInSurface\n";
} |
Warum geht das nur so:
Code: | void Graphics::LoadImageFileInSurface(LPDIRECT3DSURFACE9 *_surface, D3DXIMAGE_INFO* _info,
LPCSTR _imagefile_name)
{
ETS.error_msg() << "Start of LoadImageFileInSurface\n";
// Infos über die Grafik holen
D3DXGetImageInfoFromFile(_imagefile_name,_info);
ETS.error_msg() << "imagefile_name: " << _imagefile_name << " " \
<< _info->Width << " * " << _info->Height << "\n";
ETS.error_msg() << *_surface << "\n";
// Surface für die Grafik anlegen
lpD3DDevice->CreateOffscreenPlainSurface(
_info->Width, // Breite
_info->Height, // Höhe
D3DFMT_A8R8G8B8, // Farbformat
D3DPOOL_DEFAULT, // Pool
_surface, // Surface
0); // noch nicht von DX verwendeter Paramter
ETS.error_msg() << *_surface << "\n";
// In die erstellte Surface die Grafik laden
D3DXLoadSurfaceFromFile(*_surface, // Surface
NULL, // Palette, wenn man <256 Farben verwendet [PALETTEENTRY]
NULL, // Rechteck auf die Surface
_imagefile_name, // filename der Grafik
NULL, // Rechteck in der Grafik
D3DX_FILTER_NONE, // Filter
0, // Colorkey, ersetzt die Pixelfarbe durch Schwarz
NULL); // [D3DXIMAGE_INFO], haben wir schon abgefragt..
ETS.error_msg() << *_surface << "\n";
ETS.error_msg() << "End of LoadImageFileInSurface\n";
} |
Wenn ich die erste Variante benutze und die Funktion geendet hat, ist die übergebene Surface Variable wieder NULL bei der zweiten Variante nicht...warum? _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 02.10.2004, 13:40 Titel: |
|
|
Weil du das Surface normal übergibst:
Code: | void Graphics::LoadImageFileInSurface(LPDIRECT3DSURFACE9 _surface, D3DXIMAGE_INFO* _info, LPCSTR _imagefile_name) |
So wird beim Übergeben eine Kopie erstellt und nach der Funktion wieder verworfen(wie bei einer lokalen Variablen). Wenn du einen Zeiger übergibst, wird das an der Adresse bereits bestehende Surface modifiziert. Du übergibst ja nur die Adresse.
Aber was ist denn das Problem bei der zweiten Variante? Alternativ kannst du natürlich auch eine Referenz verwenden. Da ändert sich AFAIK zum normalen von der Verwendung/Syntax sonst kaum etwas _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 02.10.2004, 14:16 Titel: |
|
|
Ich dachte weil ich ja LPDIRECT3DSURFACE9 nehme und nicht IDirect3DSurface9....LP ist doch diese windows ungarische Notation die eigentlich sagt, dass das schon ein Zeiger ist...? _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 02.10.2004, 20:26 Titel: |
|
|
Ach so...
Hmm...so wie du das beschreibst, könnte es ja sein, dass das keine wirklichen Zeiger sind. Vielleicht wird da auch nicht nur der Zeiger, sondern auch die Daten im RAM kopiert _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
|
|
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
|