Direct3D zeichnet nicht in das fenster...



  • hi,
    ich versuche mal wieder stolperschritte mit DirectX9...
    nun bin ich dabei eine kleine Engine zu basteln.
    allerdings habe ich den fehler, dass wenn ich das fenster erstellt habe und alles initialisiert habe und dann den bildschirm leeren will nichts passiert(im wahrsten sinne des wortes).

    nun wollte ich fragen, ob sich ein netter mensch mal erbarmen könnte meinen source-code ein bisschen durchzublättern und zu schauen, ob er einen fehler findet...

    wäre echt nett 😃

    die klasse für die direct3d komponente:
    sgeDirect3D.h
    sgeDirect3D.cpp

    und das kleine beispiel-programm das ich erstellt habe:
    example.cpp

    das ganze sieht in der ausführung dann so aus:
    screen.jpg
    (das fenster habe ich ein wenig verschoben um den effekt zu "dramatisieren".

    wenn das irgendein typisches mini-problem ist, tut es mir leid, irgendwie verzweifle ich grade dran.

    wäre toll wenns einer machen würde 😃

    thx
    mfg



  • Hab den code jetz nur mal überflogen, könnte mir aber folgendes vorstellen:
    D3DPRESENT_PARAMETERS::DeviceWindow ist bei dir NULL, wenn dem tatsächlich so ist, musst du einen Window Handle an "Present()" übergeben, woher soll d3d sonst auch wissen, wohin es rendern soll.
    prüf das mal im debgger, wie gesagt, habs nur überflogen



  • jep, liegt daran, dass DX nicht weis, wohin es rendern soll, dein present ist fehlgeschlagen. Der screenshot is einfach nur typisch für das problem 😃



  • also, korrigiert mich, wenn ich daneben liegen sollte, aber imho kann das nicht sein, weil ich in der funktion Direct3D::Init() D3DPRESENT_PARAMETERS::hDeviceWindow auf videoInfo.window setze, welches mein erstelltes fenster ist und nicht NULL ist, da ich direkt vorher nochma ne extra-abfrage eingebaut hab, welche schaut ob es NULL ist oder nicht...
    und ich hab jetzt zur sicherheit nochmal ne abfrage in die present methode reingebaut die D3DPRESENT_PARAMETERS::hDeviceWindow auf NULL pointer überprüft, die schlägt auch nich an...
    -.-

    mfg



  • Hab deinen Code auch nur schnell mal überflogen, aber wo kommt denn BeginScene und EndScene bei dir ins Spiel?



  • bisher noch gar nicht, da ich den bildpuffer nur leere...

    ich hab den fehler gefunden:
    in der methode DoMessageLoop hab ich ne while-schleife drinnen (while(!quit)).
    in dieser schleife gehe ich in eine message-schleife. nun habe ich den benötigten code zum ausführen der übergebenen funktionen nich in diese schleife gebaut, sondern außerhalb von ihr.
    jetzt funkts dann aucvh 😃

    vielen dank
    mfg


Anmelden zum Antworten