|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
C++progging Senior JLI'ler
Alter: 31 Anmeldedatum: 03.10.2005 Beiträge: 244 Wohnort: Sauerland Medaillen: Keine
|
Verfasst am: 15.03.2009, 11:01 Titel: D3DXGetImageInfoFromFile |
|
|
Wenn ich den folgenden Code ausführe, kommt die Fehlermeldung
D3DXGetImageInfoFromFile
Invalid data
So wie's aussieht, liegt das Problem in der Methode
DrawTitle Screen....
Am ende der methode ist dann noch n haltepunkt erzeugt worden
Direct3D.cpp
CPP: | #include "Direct3D.h"
#include <dxerr9.h>
// Dateinamen der zu ladenden Grafiken
const char* TITSCR = "../../avgn-tna-pc/textures/AVGN_LOGO.bmp";
CDirect3D::CDirect3D()
{
m_lpD3D = NULL;
m_lpD3DFont = NULL;
m_lpSurface = NULL;
m_lpD3DDevice = NULL;
m_lpBackBuffer = NULL;
}
CDirect3D::~CDirect3D()
{
CleanUp();
}
BOOL CDirect3D::Init(HWND hWnd, BOOL bWindowed)
{
m_lpD3D = Direct3DCreate9(D3D_SDK_VERSION);
if(NULL == m_lpD3D)
{
return FALSE;
}
D3DPRESENT_PARAMETERS PParams;
ZeroMemory(&PParams, sizeof(PParams));
PParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
PParams.hDeviceWindow = hWnd;
PParams.Windowed = bWindowed;
PParams.BackBufferWidth = SCR_WIDTH;
PParams.BackBufferHeight = SCR_HEIGHT;
PParams.BackBufferFormat = D3DFMT_A8R8G8B8;
HRESULT hr;
if(FAILED(hr = m_lpD3D->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&PParams,
&m_lpD3DDevice)))
{
const char* Err = DXGetErrorDescription9(hr);
DXTRACE_MSG(Err);
MessageBox(NULL, Err, "CreateDevice", MB_OK);
return FALSE;
}
CreateFont();
return TRUE;
}
void CDirect3D::SetClearColor(D3DCOLOR Color)
{
m_ClearColor = Color;
}
void CDirect3D::DrawText(LPCSTR Text, int x, int y, D3DCOLOR TextColor)
{
RECT r = { x, y, 0, 0 };
m_lpD3DFont->DrawText(NULL, Text, -1, &r, DT_CALCRECT, TextColor);
m_lpD3DFont->DrawText(NULL, Text, -1, &r, DT_CENTER, TextColor);
}
void CDirect3D::BeginScene(void)
{
m_lpD3DDevice->Clear(0, 0,
D3DCLEAR_TARGET,
m_ClearColor,
0, 0);
m_lpD3DDevice->BeginScene();
}
void CDirect3D::DrawTitleScreen(void)
{
HRESULT hr = {0};
if(FAILED(hr = D3DXGetImageInfoFromFile(TITSCR, &m_SrcInfo)))
{
const char* Err = DXGetErrorDescription9(hr);
DXTRACE_MSG(Err);
MessageBox(NULL, Err, "D3DXGetImageInfoFromFile", MB_OK);
}
// Offscreen-Surface anlegen
m_lpD3DDevice->CreateOffscreenPlainSurface(
m_SrcInfo.Width,
m_SrcInfo.Height,
D3DFMT_A8R8G8B8,
D3DPOOL_DEFAULT,
&m_lpSurface,
0);
RECT r = {0, 0, 640, 480};
D3DXLoadSurfaceFromFile(m_lpSurface,
NULL,
NULL,
TITSCR,
NULL,
D3DX_FILTER_NONE,
0,
NULL);
m_lpD3DDevice->GetBackBuffer(0, 0,
D3DBACKBUFFER_TYPE_MONO,
&m_lpBackBuffer);
// Offscreen-Surface kopieren
m_lpD3DDevice->StretchRect(m_lpSurface,
NULL,
m_lpBackBuffer,
&r,
D3DTEXF_NONE);
m_lpSurface->Release(); // Haltepunkt wird erzeugt
m_lpSurface = NULL;
m_lpBackBuffer->Release();
m_lpBackBuffer = NULL;
}
void CDirect3D::EndScene(void)
{
m_lpD3DDevice->EndScene();
m_lpD3DDevice->Present(0, 0, 0, 0);
}
// Erzeugen der D3D-Schrift
void CDirect3D::CreateFont(void)
{
D3DXFONT_DESC FontDesc = { 0 };
strcpy_s(FontDesc.FaceName, "Microsoft Sans Serif");
D3DXCreateFontIndirect(m_lpD3DDevice,
&FontDesc,
&m_lpD3DFont);
}
// Freigeben der Objekte
void CDirect3D::CleanUp(void)
{
if(NULL != m_lpSurface)
{
m_lpSurface->Release();
m_lpSurface = NULL;
}
if(NULL != m_lpD3DFont)
{
m_lpD3DFont->Release();
m_lpD3DFont = NULL;
}
if(NULL != m_lpBackBuffer)
{
m_lpBackBuffer->Release();
m_lpBackBuffer = NULL;
}
if(NULL != m_lpD3DDevice)
{
m_lpD3DDevice->Release();
m_lpD3DDevice = NULL;
}
if(NULL != m_lpD3D)
{
m_lpD3D->Release();
m_lpD3D = NULL;
}
} |
thx ma im vorraus... _________________ http://gtsp.gt.funpic.de
NEU: http://gtspforum.gt.funpic.de - das dazugehörige board
ProjectX for PSP - Jetzt runterladen!!
unter http://www.pspsource.de/news.php?extend.4537 |
|
Nach oben |
|
|
Jakozk Junior JLI'ler
Anmeldedatum: 16.05.2004 Beiträge: 88 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 15.03.2009, 13:50 Titel: |
|
|
Invalid Data kommt meist, wenn die Datei nicht gefunden werden kann, oder die Datei korrupt ist. Starte mal die EXE aus dem Ordner heraus und nicht durch den Compiler. |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 15.03.2009, 17:47 Titel: |
|
|
Der erste Post hier hätte kaum noch wirrer sein können:
Zitat: | So wie's aussieht, liegt das Problem in der Methode
DrawTitle Screen.... |
Wäre mir anhand der Fehlermeldung nie in den Sinn gekommen
Zitat: | Am ende der methode ist dann noch n haltepunkt erzeugt worden |
Klar wird der erreicht (nicht erzeugt!) du hast ja nirgends einen vorzeitigen Abbruch in DrawTitleScreen im Falle eines Fehlers.
Wie Jakozk bereits sagte iset den Pfad entweder absoluter Müll oder die Datei ist Schrott. Ich tippe auf Ersteres. Denk dran das ohne Änderungen an den Projekteinstellungen das aktuelle Arbeitsverzeichnis dort ist wo deine Projektdatei ist (oder wars die Solutiondatei, egal eines von beide auf jeden Fall).
Führst du die exe per Hand aus ist das aktuelle Arbeitsverzeichniss dagegen das Verzeichniss in dem die exe liegt (meist der Release oder Debug Ordner).
mfg Mark _________________ "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 |
|
|
C++progging Senior JLI'ler
Alter: 31 Anmeldedatum: 03.10.2005 Beiträge: 244 Wohnort: Sauerland Medaillen: Keine
|
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 16.03.2009, 15:37 Titel: |
|
|
C++progging hat Folgendes geschrieben: | jo thx, jetzt klappts
was muss ich nochma ändern damit ichs von Vc++ aus starten kann??
's is n bisschen nervig, die exe jedes ma über den Ordner zu startn |
Schau dir die Projekteinstellungen/Projekteigenschaften mal an, unter der Kategorie "Debugging"/"Debuggen". _________________ "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 |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 17.03.2009, 08:24 Titel: |
|
|
Alternativ (und meiner Meinung nach eh viel Besser) ist es, den Pfad zur Exe zu ermitteln und externe Resourcen von dort aus relativ anzusprechen. Den Pfad zur Exe holt man sich am besten mittels Win32-API-Funktion
CPP: | GetModuleFileName(HMODULE hMod, LPTSTR lpFileName, DWORD nSize) |
für das Modul übergibt man NULL, für lpFileName einen Buffer mit 260 Zeichen Platz und als DWORD die größe des Buffers (incl. End-0)
Mit Hilfe dieses Strings dann einen abhängigen ResourcenPfad einzurichten sollte kein Problem sein. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
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
|