Share via


Grafikpixelverlauf

Der Grafikpixelverlauf, eines der Grafikdiagnose-Tools in Visual Studio, hilft Ihnen, zu verstehen, wie ein bestimmtes Pixel von Direct3D-Ereignissen in einem bestimmten Frame eines Ihrer Spiele oder Ihrer Anwendungen betroffen war.

Dies ist das Fenster Grafikpixelverlauf:

Ein Pixel mit drei Direct3D-Ereignissen im Verlauf.

Hinweis

Ab Visual Studio 2013 Update 3 werden die Grafikdiagnose-Toolfenster in einer unabhängigen Kopie der Visual Studio-Shell gehostet.Diese benutzerdefinierte Shell, genannt Grafik-Analyse, beseitigt unnötige Menüs und Optionen, aber der Pixelverlauf und der Workflow sind gleich geblieben.Weitere Informationen über diese Änderung finden Sie unter Übersicht über die Grafikdiagnose.

Verständnis des Pixelverlaufs

Mithilfe des Grafikpixelverlaufs können Sie analysieren, wie Direct3D-Ereignisse sich in einem bestimmten Frame auf ein bestimmtes Pixels des Renderingziels auswirken. Sie können ein Rendering-Problem auf ein bestimmtes Ereignis für Direct3D zurückführen, selbst wenn die nachfolgenden Ereignisse – oder nachfolgende Primitive im selben Ereignis – weiterhin den endgültigen Farbwert des Pixel verändern. Beispielsweise wird ein Pixel nicht ordnungsgemäß erzeugt und dann unleserlich durch ein anderes, halbtransparenten Pixel, dessen Farben in den Framebuffer-Kontrastwerten auftreten. Diese Art von Problem wäre nur schwer zu diagnostizieren, wenn Sie nur den endgültigen Inhalt des Renderingziels als Unterstützung zur Verfügung hätten.

Das Fenster Grafikpixelverlauf zeigt den vollständigen Verlauf eines Pixels im Verlauf des ausgewählten Frames an. Der Letzte Framepuffer am oberen Fensterrand zeigt die Farbe an, die am Framepuffer am Ende des Frames zusammen mit zusätzlichen Informationen über das Pixel geschrieben wird, wie z. B. der Frame, der davon abgeleitet wird, und dessen Bildschirmkoordinaten. Dieser Bereich enthält auch das Kontrollkästchen Alpha wiedergeben. Wenn dieses Kontrollkästchen aktiviert ist, werden die Farbe des letzten Framepuffers und die Zwischenfarbe transparent über einem Schachbrettmuster angezeigt. Wenn das Kontrollkästchen deaktiviert ist, wird der Alphakanal der Farbwerte ignoriert.

Der untere Teil des Fensters zeigt die Ereignisse, die sich auf die Farbe des Pixels auswirken konnten, zusammen mit den ersten und endgültigen Pseudo-Ereignissen an, die die ersten und endgültigen Farbwerte der Pixel im Framepuffer darstellen. Der ursprüngliche Farbwert wird bestimmt durch das erste Ereignis, das die Farbe des Pixels änderte (in der Regel ein Clear-Ereignis). Eine Pixel hat immer diese beiden Pseudo-Ereignisse in dessen Verlauf, auch wenn keine weiteren Ereignisse betroffen sind. Wenn andere Ereignisse sich auf die Pixels auswirken konnten, werden sie zwischen den ersten und letzten Ereignissen angezeigt. Die Ereignisse können erweitert werden, um ihre Details anzuzeigen. Bei einfachen Ereignissen, wie der Deaktivierung eines Renderingziels, wirkt sich das Ereignis nur einen Farbwert aus. Komplexere Ereignisse, wie Zeichnen-Aufrufe, generieren mindestens eine Primitive, die zur Farbe des Pixels beitragen könnten.

Primitive, die vom Ereignis gezeichnet wurden, werden durch ihren Primitivtyp und Index zusammen mit der Gesamtzahl der Primitive für das Objekt angegeben. Z. B. bedeutet ein Bezeichner wie Dreieck (1456) von (6214), dass der Primitiv dem 1456. Dreieck in einem Objekt bestehend aus 6214 Dreiecken entspricht. Auf der linken Seite jeder Primitiv-ID befindet sich ein Symbol, das den Effekt des Primitivs auf das Pixel zusammenfasst. Primitive, die Auswirkungen auf die Pixelfarbe haben, werden durch ein abgerundetes Rechteck dargestellt, die mit der Ergebnisfarbe gefüllt ist. Primitive, die keine Auswirkungen auf die Pixelfarbe haben, werden durch Symbole dargestellt, die den Grund für den Ausschluss des Pixels angeben. Diese Symbole werden im Abschnitt Primitive exclusion weiter unten in diesem Artikel beschrieben.

Sie können jeden Primitiv erweitern, um zu untersuchen, wie die Pixel-Shader-Ausgabe mit der vorhandenen Pixelfarbe zusammengeführt wurde, um die Ergebnisfarbe zu erzeugen. Von hier aus können Sie den Pixel Shader-Code prüfen oder debuggen, der dem Primitiv-Typ zugeordnet ist, und Sie können den Vertex-Shader Knoten zum Überprüfen der Vertex-Shaders-Eingaben weiter ausbauen.

Ausschluss eines Primitivs

Wenn ein Primitiv die Pixelfarbe nicht beeinflusst, kann der Ausschluss für eine Vielzahl von Gründen erfolgen. Jeder Grund wird durch ein Symbol dargestellt, das in dieser Tabelle beschrieben wird:

Symbol

Grund für den Ausschluss

Symbol "Fehlerhafter Tiefentest"

Das Pixel wurde ausgeschlossen, weil der Tiefentest fehlgeschlagen ist.

Symbol "Fehlerhafter Scherentest"

Das Pixel wurde ausgeschlossen, weil der Scherentest fehlgeschlagen ist.

Symbol "Fehlerhafter Schablonentest"

Das Pixel wurde ausgeschlossen, weil der Schablonentest fehlgeschlagen ist.

Ausschluss des Zeichenaufrufs

Wenn alle Primitive in einem Zeichnen-Aufruf von der Auswirkung auf das Renderingziel ausgeschlossen werden, da sie einen Test nicht bestehen, kann der Aufruf einer Zeichnung nicht erweitert werden, und ein Symbol, das dem Grund für den Ausschluss entspricht, wird daneben angezeigt. Die Gründe für den Ausschluss des Aufrufs einer Zeichnung ähneln den Gründen für den Ausschluss von Primitiven, und die Symbole sind ähnlich.

Anzeigen und Debuggen des Shader-Codes

Sie können den Code für einen Vertex-Shader, Schiffskörpers Shader, Domain-Shader, Geometrie-Shader oder Pixel-Shader anzeigen oder debuggen, indem Sie die Steuerungen unterhalb der Primitive verwenden, die dem Shader zugeordnet ist.

Um einen Shader-Quellcode anzuzeigen

  • Wählen Sie unterhalb des Primitivs, der dem Shader zugeordnet ist, den Sie anzeigen möchten, den Titel des Shaders – z. B. Vertex-Shader, um den Vertex Shader-Quellcode anzuzeigen.

Um einen Shader zu debuggen

  • Wählen Sie unterhalb des Primitivs, der dem Shader zugeordnet ist, den Sie debuggen möchten, rechts neben dem Titel des Shaders Debuggen starten.

Um die Grafikereignisse im Pixelverlauf zu verstehen, benötigen Sie möglicherweise Informationen über den Gerätezustand zum Zeitpunkt des Ereignisses oder über die Direct3D-Objekte, auf die das Ereignis verweist. Für jedes Ereignis im Pixelverlauf liefert der Grafikpixelverlauf Links zum aktuellen Gerätestatus und zu verwandten Objekten.

Siehe auch

Aufgaben

Exemplarische Vorgehensweise: Fehlende Objekte durch Gerätestatus

Exemplarische Vorgehensweise: Debuggen von Renderingfehlern, die durch Schattierungen entstanden sind