2016-11-26 3 views
0

J'essaye de déboguer mon application graphique pour voir pourquoi l'objet n'est pas rendu à l'écran. Donc je vais dans mon débogueur graphique et vérifie l'état du pipeline de l'objet que j'essaie de rendre (un plan simple). Le Pixel Shader ne s'est pas exécuté, mais les niveaux d'entrée et de vertex shader sont corrects (il montre un plan). Je suis allé cliquer sur le bouton play sous vertex shader pour le déboguer, mais quand je le fais je reçois cette erreur tout de suite: les informations de la source sont manquantes dans les informations de débogage pour ce module.VS 2015 débogueur graphique me donnant l'erreur source

J'ai utilisé le débogueur sur un couple de projets jusqu'à présent, mais pour ce projet, le débogueur ne fonctionnera pas. Ces projets que j'ai utilisés étaient des projets d'applications universels, donc ils sont venus avec un tas de code qui avait déjà un objet rendu. Ce projet que je fais maintenant, j'ai commencé avec un projet vide et tout fait moi-même jusqu'à présent.

J'ai vérifié ma pile d'appels quand j'ai reçu l'erreur, et elle m'a donné le nom "inconnu" et le langage HLSL. Pas vraiment utile malheureusement. Existe-t-il de meilleurs moyens de voir quel pourrait être le problème? Ou connaissez-vous des problèmes potentiels que je peux avoir? Note latérale: Chaque fois que j'ai utilisé le débogueur graphique, on m'a dit d'aller au panneau de contrôle directx et d'ajouter le répertoire du projet dans lequel je travaille dans la liste des exécutables. Je l'ai fait pour ce projet après l'erreur, et je l'ai toujours. Je regarde quelques-unes des informations de la liste d'événements, et quand je regarde l'obj qui a le code pour mes shaders, il dit: "Shader Edit and Apply n'est pas disponible pour ce shader. provenir de la construction de shaders sans informations de débogage ou avec un compilateur non pris en charge. " Peut-être que cela a quelque chose à voir avec ça parce que mes autres shaders dans mon autre projet n'ont pas cette erreur. J'ai oublié d'inclure du code, alors en voici quelques-unes. Une partie du code que je suis en train de faire est différent dans ce projet, mais tous les HRESULTs que je reviens disent qu'ils sont S_OK. Comme lorsque je crée mon périphérique, swapchain et le contexte de périphérique, je m'assure d'envoyer le drapeau de débogage. Je pense que c'est vraiment juste pour ma fenêtre de sortie, mais j'ai juste pensé à inclure juste au cas où cela pourrait avoir un effet sur le débogueur graphique.

if (_DEBUG) 
{ 
    flags = D3D11_CREATE_DEVICE_DEBUG; 
} 

HRESULT swapResult = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, flags, NULL, NULL, D3D11_SDK_VERSION, &swapChainDesc, swapChain.GetAddressOf(), device.GetAddressOf(), NULL, deviceContext.GetAddressOf()); 

Je dois aussi utiliser D3DCompileFromFile au lieu de la façon dont l'application universelle fait (ou même la façon dont des tutoriels en ligne font ce) parce que la façon dont ils faisaient était un peu bizarre pour moi de répliquer. Enfin, mes shaders sont des os très nus car j'essaie juste de faire apparaître un objet de base en ce moment. Je ne vois pas comment il pourrait vraiment y avoir des défauts avec eux, mais ici ils sont juste au cas où.

//My Vertex shader (VS_Basic.hlsl) 

// A constant buffer that stores the three basic column-major matrices for  composing geometry. 
cbuffer ModelViewProjectionConstantBuffer : register(b0) 
{ 
matrix model; 
matrix view; 
matrix projection; 
}; 

// Per-vertex data used as input to the vertex shader. 
struct VertexShaderInput 
{ 
float3 pos : POSITION; 
float3 normal : NORMAL; 
float3 uv : TEXCOORD; 
}; 

// Per-pixel color data passed through the pixel shader. 
struct PixelShaderInput 
{ 
float4 pos : SV_POSITION; 
float3 normal : NORMAL; 
float3 uv : TEXCOORD; 
}; 

// Simple shader to do vertex processing on the GPU. 
PixelShaderInput main(VertexShaderInput input) 
{ 
PixelShaderInput output; 
float4 pos = float4(input.pos, 1.0f); 

// Transform the vertex position into projected space. 
pos = mul(pos, model); 
pos = mul(pos, view); 
pos = mul(pos, projection); 
output.pos = pos; 

// Pass the color through without modification. 
output.uv = input.uv; 

//pass normal 
output.normal = input.normal; 

return output; 
} 

Voici mon pixel shader (PS_Basic.hlsl)

struct PS_BasicInput 
{ 
float4 position : SV_POSITION; 
float3 normal : NORMAL; 
float2 uv : TEXCOORD; 
}; 

float4 main(PS_BasicInput input) : SV_TARGET 
{ 
float4 resultColor; 

//just basic test 
resultColor = float4(1, 0, 0, 1); 

return resultColor; 
} 
+0

Bienvenue dans Stackoverflow. S'il vous plaît partagez votre code. Lisez [Comment créer un exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve). Il vous indique ce qu'il faut fournir pour maximiser vos chances d'obtenir des réponses. – MikeJRamsey56

Répondre

0

L'erreur que j'ai remarqué après avoir fait quelques recherches (Shader Modifier et Appliquer ne sont pas disponibles pour ce shader. Cela peut être causé par la construction shaders sans informations de débogage ou avec un compilateur non pris en charge.) m'a fait gratter la tête et j'ai décidé de voir si les shaders pouvaient recevoir des drapeaux. Effectivement, dans la fonction D3DCompileFromFile, il y a un paramètre flag. Envoyer dans D3DCOMPILE_DEBUG, et vous serez en mesure de déboguer ce shader. Je l'ai mis à NULL quand je l'ai fait l'autre jour parce que je ne connaissais pas de drapeaux qui seraient bénéfiques.