Condividi tramite


Procedure dettagliate: debug degli errori di rendering dovuti allo sfondo

In questa procedura dettagliata viene illustrato come utilizzare la diagnostica della grafica di Visual Studio per esaminare un oggetto non colorato correttamente a causa di un bug di shader.

In questa procedura guidata viene illustrato come eseguire le seguenti operazioni:

  • Esaminare gli elementi grafici registrano il documento per identificare i pixel che mostrano il problema.

  • Utilizzare la finestra Cronologia pixel grafica per esaminare in modo più approfondito lo stato del pixel.

  • Utilizzare Debugger HLSL per esaminare il pixel shader e il vertex shader.

Scenario

La colorazione non corretta degli oggetti si verifica in genere quando un vertex shader passa informazioni errate o incomplete a un pixel shader.

In questo scenario, è stato aggiunto di recente un oggetto all'app, insieme ai nuovi vertex shader e pixel shader per trasformare l'oggetto e per conferirgli un aspetto univoco.Quando si esegue l'applicazione durante un test, il rendering dell'oggetto viene eseguito in nero a tinta unita.Tramite la diagnostica della grafica, è possibile acquisire il problema in un log della grafica in modo da poter eseguire il debug dell'applicazione.Il problema si presenta nel seguente modo nell'app:

Rendering dell'oggetto con colori non corretti.

Analisi

Utilizzando gli strumenti di diagnostica grafiche, è possibile caricare gli elementi grafici registrare il documento per verificare i frame acquisiti durante il test.

Per esaminare un frame nel log di grafica

  1. In Visual Studio caricare un log di grafica contenente un frame che mostra il modello mancante.Una nuova finestra del documento del grafico viene visualizzato in Visual Studio.Nella parte superiore della finestra costituisce l'output della destinazione di rendering del frame selezionato.Nella parte inferiore è presente Elenco frame che visualizza ogni frame acquisito come immagine di anteprima.

  2. In Elenco frame selezionare un frame in cui l'oggetto non ha l'aspetto corretto.La destinazione rendering viene aggiornata per riflettere il frame selezionato.In questo scenario, gli aspetti della finestra del documento del grafico è simile al seguente:

    Log grafico in Visual Studio.

Dopo avere selezionato un frame in cui viene illustrato il problema, è possibile utilizzare la finestra Cronologia pixel grafici per diagnosticarlo.La finestra Cronologia pixel grafica mostra i primitivi che potrebbero aver avuto un effetto su un pixel specifico, gli shader e gli effetti sulla destinazione rendering, in ordine cronologico.

Per esaminare un pixel

  1. Aprire è la finestra Cronologia pixel grafica.Sulla barra degli strumenti Diagnostica grafica scegliere Cronologia pixel.

  2. Selezionare un pixel da esaminare.Gli elementi grafici registrare la finestra del documento, selezionare uno dei pixel nell'oggetto che è di colore in modo errato:

    La selezione di un pixel comporta la visualizzazione di informazioni sulla relativa cronologia.

    La finestra Cronologia pixel grafica viene aggiornata per riflettere il pixel selezionato.In questo scenario la finestra Cronologia pixel grafica ha l'aspetto seguente:

    La cronologia pixel mostra un evento DrawIndexed.

    Si noti che il risultato del pixel shader è nero completamente opaco (0, 0, 0, 1) e che Unione output questo è combinato con il colore Precedente del pixel in modo che Risultato è anche nero completamente opaco.

Dopo avere esaminato un pixel con colore errato e rilevato che l'output di pixel shader non è del colore previsto, è possibile utilizzare il debugger HLSL per esaminare il pixel shader e per scoprire cosa è successo al colore dell'oggetto.È possibile utilizzare il debugger HLSL per esaminare lo stato delle variabili di HLSL durante l'esecuzione, eseguire il codice HLSL e impostare i punti di interruzione per semplificare la diagnostica del problema.

Per esaminare il pixel shader

  1. Avviare il debug del pixel shader.Nella finestra Cronologia pixel grafica sotto la primitiva dell'oggetto, accanto a Pixel shader, scegliere il pulsante Avvia debug.

  2. In questo scenario, poiché il pixel shader passa semplicemente il colore tramite il vertex shader, è facile osservare che il pixel shader non è l'origine del problema.

  3. Posizionare il puntatore su input.color.Si noti che il valore è il nero completamente opaco (0, 0, 0, 1).

    Il membro "color" dell'"input" non è definito.

    In questo scenario, la revisione è evidente che si immette il colore è probabile che il risultato di un vertex shader non fornisce le informazioni corrette sui colori per il pixel shader agisce su.

Dopo avere stabilito che il vertex shader probabilmente non produce informazioni corrette in pixel shader, è necessario esaminare vertex shader.

Per esaminare il vertex shader

  1. Avviare il debug del vertex shader.Nella finestra Cronologia pixel grafica sotto la primitiva dell'oggetto, accanto a Vertex shader, scegliere il pulsante Avvia debug.

  2. Individuare la struttura di output del vertex shader, ovvero l'input al pixel shader.In questo scenario, il nome di questa struttura è output.Esaminare il codice di vertex shader e notare che il membro di color della struttura di output in modo esplicito è stato impostato su nero completamente opaco, probabilmente a causa di un utente che esegue il debug delle attività.

  3. Verificare che il membro di colore non viene mai copiato dalla struttura di input.Poiché il valore di output.color è impostato su nero completamente opaco prima della struttura di output viene restituita, è consigliabile assicurarsi che il valore di output correttamente non sia stato inizializzato su una riga precedente.Eseguire codice di vertex shader fino a raggiungere la riga che impostare output.color in nero come controllare il valore di output.color.Si noti che il valore di output.color non viene inizializzato fino a modificarlo in nero.In questo modo viene confermato che la riga di codice che imposta output.color in nero deve essere modificata, anziché eliminati.

    Il valore di "output.color" non viene mai inizializzato.

Dopo che determina che il problema di rendering è che il vertex shader non fornisce il valore del colore corretto del pixel shader, è possibile utilizzare queste informazioni per correggere il problema.In questo scenario, è possibile correggere l'errore modificando il codice seguente nel vertex shader

output.color = float3(0.0f, 0.0f, 0.0f);

in

output.color = input.color;

Questo codice passa semplicemente invariato il colore del vertice dai vertici dell'oggetto. Shader di vertice più complessi possono modificare il colore prima di passarlo.Il codice corretto di vertex shader deve essere analogo al seguente:

Codice del Vertex shader corretto.

Dopo avere corretto il codice, ricompilarlo ed eseguire nuovamente l'applicazione per rilevare la risoluzione del problema di rendering.

Rendering dell'oggetto con colori corretti.