Directx9 GUI Schwarzer Bildschirm

05/16/2013 18:07 Light.D.Right#1
Hallo erstmal,

da ich wenig von Directx9 momentan verstehe, hab ich mir eine Library geladen die mir die Controls zur verfügung stellt.

Alles schön und gut, nur bekomm ich, sobald der endscene hook gesetzt ist ein Schwarzen Bildschirm bzw der Hintergrund verschwindet.
Hab da mal 2 Beispiele.
Das erste war ein einfaches Programm mit dem DIRECT3DDEVICE9.
Bevor meine DLL geladen wurde sah es so aus:
Nachdem sie geladen wurde so:
Die Hintergrund animation fehlt.

Bei dem Game war es da schon komischer.
Vor dem Laden:
Nach dem Laden:

Beim Login und der Serverauswahl ist das Spiel komplett schwarz und man sieht nur die Texte von dem D3D GUI.

Ich hab die Renderklasse in dem Spoiler unten gepackt und hoffe ihr könnt mir helfen.
Header

Source

PS: Die Library stammt nicht von mir. Sie gehört Garrey Newman.
05/16/2013 20:13 Zwawo#2
Zeig mal lieber deinen hook Code. Woher sollen wir wissen was du mit der lib anstellst.
05/16/2013 20:22 Light.D.Right#3
Snipped, ist halt ein Endscene hook.
05/16/2013 21:57 Zwawo#4
Nehm das " if(init..)" mal aus deiner myEndScene.
//Ansonsten mal die myEndScene leer lassen und schauen ob der Fehler trotzdem auftritt.
05/17/2013 02:28 MrSm!th#5
Sehr wahrscheinlich die Render-States. Für mein eigenes GUI-FW habe ich Tage an den richtigen Alpha-Blend States gesessen, bis alles funktionierte, ohne dass irgendwelche Textur- oder Transparenzfehler entstanden :x
Bzw. nicht direkt die Einstellungen selbst, sondern das Backup. Die Render-States in dem Source sehen ganz gut aus, allerdings konnte ich es letztendlich nur in den Griff bekommen, indem ich zusätzlich StateBlocks zum Sichern der vorherigen Renderstates nutzte. Damit funktionierte es dann auch in jedem Spiel ohne Grafikbugs.
Einfacher ist es mit D3DXSPRITE für Grafiken, welches den ganzen Scheiß übernimmt, allerdings lässt es einem weniger (für mich zu wenig) Freiheiten.
Wobei ich gerade sehe, dass deine Base keinen einzigen Render-State zurücksetzt. Könnte eine Ursache sein. Man kann sich nicht darauf verlassen, dass das Game jeden benötigten State jede EndScene aufs neue setzt.

Übrigens, es wird zwar keine großen Änderungen nach sich ziehen, aber ein Thread hat den Rückgabetyp DWORD, wobei ein Wert von 0 einen Erfolg und jeder andere einen Fehler angibt.
Mit return TRUE gibst du also streng genommen einen fehlerhaften Ablauf bekannt. Das nur so nebenbei, wenn du mal irgendwann mehr mit Multithreading und den Exitcodes arbeitest.

Quote:
Nehm das " if(init..)" mal aus deiner myEndScene.
Und dann? Soll er die Bedingungen wegnehmen, sodass das Menü immer wieder aufs neue initialisiert wird? Oder soll er den ganzen Block entfernen, sodass er mit uninitialisierten Variablen arbeitet?
05/17/2013 07:19 Zwawo#6
Hab nicht gesehen, dass pCanvas schon global deklariert wurde, aber ansonsten hätte der compiler eh Fehler ausgespuckt.
05/23/2013 21:39 Light.D.Right#7
Danke dir Smith, Problem gelöst. Kau hat mir dabei geholfen.
Kann geschlossen werden.
05/29/2013 12:30 MrSm!th#8
#closed