JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

D3DXGetImageInfoFromFile

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


Alter: 30
Anmeldedatum: 03.10.2005
Beiträge: 244
Wohnort: Sauerland
Medaillen: Keine

BeitragVerfasst am: 15.03.2009, 11:01    Titel: D3DXGetImageInfoFromFile Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jakozk
Junior JLI'ler



Anmeldedatum: 16.05.2004
Beiträge: 88
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 15.03.2009, 13:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 15.03.2009, 17:47    Titel: Antworten mit Zitat

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 Wink

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
C++progging
Senior JLI'ler


Alter: 30
Anmeldedatum: 03.10.2005
Beiträge: 244
Wohnort: Sauerland
Medaillen: Keine

BeitragVerfasst am: 16.03.2009, 12:51    Titel: Antworten mit Zitat

jo thx, jetzt klappts Very Happy

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
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 16.03.2009, 15:37    Titel: Antworten mit Zitat

C++progging hat Folgendes geschrieben:
jo thx, jetzt klappts Very Happy

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 17.03.2009, 08:24    Titel: Antworten mit Zitat

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
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