|
You last visited: Today at 11:43
Advertisement
D3DXCreateTextureFromFile returnt d3dxerr_invaliddata
Discussion on D3DXCreateTextureFromFile returnt d3dxerr_invaliddata within the General Coding forum part of the Coders Den category.
11/12/2011, 20:16
|
#1
|
elite*gold: 1371
Join Date: Apr 2010
Posts: 13,785
Received Thanks: 15,047
|
D3DXCreateTextureFromFile returnt d3dxerr_invaliddata
Hallo,
Ich habe ein kleines Problem beim entwickeln einer Klasse.
Wenn ich D3DXCreateTextureFromFile aufrufe, wird immer
d3dxerr_invaliddata zurückgegeben. Die Textur ist im gleichen Ordner
wie die DLL.
Code :
Code:
#include <Windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#pragma once
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")
LPD3DXSPRITE sprite;
LPDIRECT3DTEXTURE9 gTexture;
void Init(LPDIRECT3DDEVICE9 pDevice,LPCTSTR path);
DWORD WINAPI Func(LPVOID lpParam);
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved )
{
if(fdwReason == DLL_PROCESS_ATTACH)
{
CreateThread(0,0,Func,0,0,0);
break;
}
return TRUE;
}
void Init(LPDIRECT3DDEVICE9 pDevice,LPCTSTR path)
{
gTexture = NULL;
sprite = NULL;
HRESULT h1 = D3DXCreateSprite(pDevice,&sprite);
if(h1 != S_OK)
{
MessageBox(NULL,L"Failed to Create Sprite",NULL,NULL);
}
HRESULT h2 = D3DXCreateTextureFromFile(pDevice,path,&gTexture);
if(h2 != D3D_OK)
{
if(h2 == D3DERR_NOTAVAILABLE){MessageBox(NULL,L"D3DERR_NOTAVAIBLE",0,0); }
if(h2 == D3DERR_OUTOFVIDEOMEMORY){MessageBox(NULL,L"D3DERR_OUTOFVIDEOMEMORY",0,0); }
if(h2 == D3DERR_INVALIDCALL){MessageBox(NULL,L"D3DERR_INVALIDCALL",0,0); }
if(h2 == D3DERR_INVALIDCALL){MessageBox(NULL,L"D3DERR_INVALIDCALL",0,0); }
if(h2 == D3DXERR_INVALIDDATA){MessageBox(NULL,L"D3DXERR_INVALIDDATA",0,0); }
}
}
DWORD WINAPI Func(LPVOID lpParam)
{
Init(/*Address of EndScene*/,"haha.png");
return 0;
}
|
|
|
11/12/2011, 22:35
|
#2
|
elite*gold: 169
Join Date: Jun 2010
Posts: 663
Received Thanks: 1,138
|
Du musst den vollen Pfad angeben .
oder eben mit
GetModuleFileName
arbeiten.
|
|
|
11/13/2011, 08:20
|
#3
|
elite*gold: 1371
Join Date: Apr 2010
Posts: 13,785
Received Thanks: 15,047
|
Ja natürlich habe ich auch schon gemacht.
Aber die haha.png liegt im gleichen Ordner.
|
|
|
11/13/2011, 11:35
|
#4
|
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
|
|
|
|
11/13/2011, 11:47
|
#5
|
elite*gold: 1371
Join Date: Apr 2010
Posts: 13,785
Received Thanks: 15,047
|
Der Code ist nur schnell hier hingeklatscht.
Im original Code siehts anders aus :'D
Das war nur ein Flüchtigkeitsfehler meinerseits hier ;>
|
|
|
11/13/2011, 16:05
|
#6
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,408
|
Versuch halt nicht FromFileEx sondern FromMemoryEx und öffne und lies die Datei vorher mit CreateFile und ReadFile.
INVALIDDATA heißt aber normalerweise nicht, dass das File nicht gefunden wurde. Textur beschädigt oder in unbekanntem Format?
|
|
|
11/13/2011, 16:11
|
#7
|
elite*gold: 1371
Join Date: Apr 2010
Posts: 13,785
Received Thanks: 15,047
|
Quote:
Originally Posted by MrSm!th
Versuch halt nicht FromFileEx sondern FromMemoryEx und öffne und lies die Datei vorher mit CreateFile und ReadFile.
INVALIDDATA heißt aber normalerweise nicht, dass das File nicht gefunden wurde. Textur beschädigt oder in unbekanntem Format?
|
Danke erstmal.
Diesen Gedanken hatte ich auch zu erst, aber dann habe ich es noch mit einer .dds und .jpg File versucht. Ging nicht.
Ich versuchs erstmal mit dem, was du mir vorgeschlagen hast.
Edit : Muss ich dafür noch irgendeine Header File hinzufügen?
Bei mir ist sie nämlich nicht definiert und im Internet findet man auch nicht viel zu der Funk.
Gibts denn irgendeinen anderen Weg, so ein Bild auf den Monitor zu zeichnen ;O?
Ich hab mal irgendwas mit "Surface" in dem Zusammenhang gehört.
|
|
|
11/13/2011, 17:15
|
#8
|
elite*gold: 169
Join Date: Jun 2010
Posts: 663
Received Thanks: 1,138
|
|
|
|
11/13/2011, 17:50
|
#9
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,408
|
Die Klasse macht intern doch auch nichts anderes.
Vielleicht war es auch FromMemory, weiß ich nicht mehr ;O
Google doch einfach D3DXCreateTexture, da solltest du alle Versionen finden.
Oder schau bei D3DXCreateTextureFromFileEx unter see also.
Also auf Texturen bist du so oder so angewiesen. Ob du sie normal erstellst oder mit den D3DX Funktionen bleibt dir überlassen. Zweiteres ist aber zu empfehlen, da du sonst das Image Format selbst parsen und eine Textur mit CreateTexture erstellen müsstest.
Du kannst auch ohne Sprites zeichnen, indem du mit DrawPrimitive(UP) und Vertices arbeitest ;O Nichts anderes macht die Sprite-Klasse intern.
Die Variante bevorzuge ich auch, da man da mehr Freiheiten hat, allerdings ist es auch komplizierter und teilweise verdammt schwer in D3D Hooks einzubauen, da manche Game-Einstellungen das massiv beeinflussen.
Ach ja: Ist nur ne Vermutung, aber vielleicht beduetet INVALIDDATA in diesem Fall auch, dass das Image Format und die Image Info, die daraus ausgelesen wird, nicht zu den Device Einstellungen passt, mit denen es erstellt wurde.
|
|
|
11/13/2011, 18:14
|
#10
|
elite*gold: 1371
Join Date: Apr 2010
Posts: 13,785
Received Thanks: 15,047
|
Hmm...
Beim Aufrufen von ImageInfoObjekt->DrawImage(...) crasht jedes Spiel ;O.
Ich schätze mal, dass es auch crashen würde, wenn ich es ohne Klasse machen
würde.
Ich versuch es einfach mal mir D3DXCreateTextureFromFileInMemoryEx, wenn das
Problem weiterhin besteht, melde ich mich einfach wieder.
Edit:
Mit D3DXCreateTextureFromFileInMemoryEx bekomme ich D3DERR_INVALIDCALL.
Ich vermute mal der Pfad ist ungueltig?
|
|
|
11/15/2011, 14:49
|
#11
|
elite*gold: 0
Join Date: May 2010
Posts: 3,334
Received Thanks: 6,127
|
Vllt liegt es auch an der statischen Lib, die du gemacht hast ô_O
|
|
|
11/15/2011, 15:02
|
#12
|
elite*gold: 1371
Join Date: Apr 2010
Posts: 13,785
Received Thanks: 15,047
|
Mir ist heute aufgefallen, dass es jetzt geht.
Aber nur auf meinem anderen Computer (Windows 7 64-Bit), und bei meinem anderen nicht
(WIndows 7 32-Bit).Woran kann das liegen?
Und wie Support schon sagte, ich habe mir eine statische lib gemacht, kann das daran liegen?
|
|
|
11/15/2011, 15:54
|
#13
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,408
|
Nein, was soll die damit zu tun haben?
Hast du die richtigen redistributables im Dll Ordner?
Vielleicht liegts am DX Driver.
|
|
|
11/15/2011, 19:03
|
#14
|
elite*gold: 1371
Join Date: Apr 2010
Posts: 13,785
Received Thanks: 15,047
|
Welche redistributables ;O?
Edit : Ok, mit einer exe funktioniert es, aber wieso mit einer dll nicht ?
Ich hab die Lösung gefunden, das Bild musste im Spiel-Ordner sein und
nicht im Dll-Ordner ;>
|
|
|
11/15/2011, 21:06
|
#15
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,408
|
Die d3dx9_XX.dll.
Alles klar. Joa, ich pack solche wichtigen Dateien bei Tests (bei denen die Dll nicht im Game Ordner ist) immer in alle notwendigen Ordner :P
|
|
|
All times are GMT +1. The time now is 11:43.
|
|