Frage

Ich habe eine einfache Anwendung, in der ich den Benutzer eine Shader lassen muß (.fx HLSL oder Baugruppendatei, möglicherweise mit mehreren Durchgängen, aber alle und nur Pixel Shader) und eine Vorschau.

Die Anwendung läuft, kommt die Liste von Shadern auf und eine Taste startet die „Vorschaufenster.“ Von diesem Vorschaufenster (die ein DirectX-Ansichtsfenster in sie hat), wählt der Benutzer ein Bild und der Shader wird auf diesem Bild ausgeführt und angezeigt. Nur ein Rahmen Bedürfnis gemacht (nicht in Echtzeit).

Ich habe einen Vertex / Pixel-Shader-Kombination eingerichtet ist, dass ein Quad nimmt und macht es auf den Bildschirm, mit dem ausgewählten Bild texturiert. Dies funktioniert perfekt. Ich muss dann einen anderen Effekt führen, rein Pixel-Shader, auf der Ausgabe von dem ersten Effekt und zeigen das endgültige Bild (nachbearbeitete) auf den Bildschirm. Dies gilt nicht bei allen.

Ich habe in den letzten paar Tagen versucht, es zum Laufen zu bringen, aber ohne ersichtlichen Grund, die identischen Codeblöcke verwendet, um jeden Effekt zu machen nur die erste machen. Ich kann die zweite Shader-Datei als einen zweiten Durchlauf in der ersten Shader-Datei hinzufügen und es läuft perfekt (obwohl völlig mein Ziel besiegt vom Benutzer erstellten Shader Vorschau). Wenn ich versuche, einen zweiten Effekt zu verwenden (die laden und kompilieren nur in Ordnung), tut es nichts. Ich habe die Ergebnisse des ersten Shader genommen (mit GetRenderTargetData) und legte sie in einer Textur und Oberfläche (destTex und destSur), so eingestellt, dass Textur als Eingang für den zweiten Durchgang (mit dev-> SetTexture und später Effekt-> SetTexture ( "thisframe", destTex)).

Alle Anrufe erfolgreich sein, Effekte zu kompilieren, Texturen Lesen, Quads gezogen werden, aber die Wirkung ist nicht sichtbar. Ich vermutete, dass zunächst das Gerät (mit Software-Vertex-Verarbeitung erstellt) wurde das Problem verursacht, aber das scheint nicht der Fall zu sein (Ich habe versucht, mit Hardware und gemischt). Zusätzlich kann sowohl ein HAL und REF-Gerät (nicht ein Problem, da die Anwendung nicht sowieso ist Echtzeit), das zweite Shader ist nicht sichtbar. Alles ist in C ++ geschrieben für Direct3D 9.

War es hilfreich?

Lösung

Versuchen Sie, den Tiefen Stencilbuffer Clearing nach jedem Mal, wenn Sie das Quad machen.

Andere Tipps

Erstellen Sie zunächst eine Textur, macht dann die ersten Shader direkt in diese Textur. Schließlich macht den zweiten Shader mit der Textur als Eingabe für den Backbuffer.

Es muss eine Art von Scheitelpunkteingabe und Vertex-Verarbeitung (entweder feste Funktion oder Shader), um für die Pixel-Shader ausgeführt werden. Sind Sie die Vertex-Shader-Versorgung, und wenn ja, sind Sie sicher, dass es das tut, was die Pixel-Shader erwartet? Wie sieht Ihr Zeichenaufruf aussehen?

Es ist wahrscheinlich im Wert von einer PIX Spur Ihrer App suchen, um zu sehen, was der Gerätezustand wird beim Versuch, den Benutzer-Effekt zu nutzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top