problème fondamental DirectX11, le code se bloque dès que je commence à dessiner quoi que ce soit l'écran. Aussi aide à la configuration Netbeans

StackOverflow https://stackoverflow.com/questions/3492987

Question

Alors, je commencé à programmer en DirectX11 aujourd'hui, j'ai eu beaucoup d'expérience avec le codage, mais pas spécifiquement DirectX, donc je suis allé voir quelques tutoriels. Tout était houle va, je pourrais initialiser une fenêtre, définir une couleur d'arrière-plan, mais dès que j'ai essayé de définir un shader et dessiner un objet, il se bloque juste de la charge. Ce code est extrêmement simple, et je l'ai mis dans un rar afin que vous puissiez me dire ce qui ne va pas. Je codage dans Visual C ++ Express Edition parce que j'ai essayé pendant des heures hier pour obtenir des chemins de référence OpenGL mis en place dans Netbeans en vain, donc je ne suis pas essayer d'obtenir DirectX qui y travaillent soit encore. Voici le code je actuellement: http://www.mediafire.com/?i8w1trkx7c03qts

J'ai aussi essayé de télécharger et juste exécuter l'exe fourni dans www.dx11.org.uk/3dcube.htm, pour vérifier si c'est mon interrogatoire X ou quelque chose, et que l'on me donne une erreur de « Impossible de créer dispositif de D3D11 », qui à partir de leur code est un échec pour compléter la commande « D3D11CreateDeviceAndSwapChain ». Honnêtement, ce que je fais mal / ce qui se passe? (Et toute aide sur la façon de définir les références de bibliothèque directX dans NetBeans serait une grande aide).

Était-ce utile?

La solution

Il fonctionne pour moi:)

Je devais supprimer le préfixe L de certaines chaînes pour la compilation du code: "shaders.hlsl", "WindowClass", "Our First Direct3D Program"

Avez-vous des fichiers .hlsl dans le même chemin que votre exécutable? vous pouvez aussi ne pas démarrer le programme de VS. Vous devrez lancer le .exe de l'explorateur. Mais vous pouvez définir un chemin absolu à votre shaders si vous ne voulez pas ce comportement, comme ça:

D3DX11CompileFromFile("C:\\Users\\Stringer\\Desktop\\DXTest\\shaders.hlsl", ...
D3DX11CompileFromFile("C:\\Users\\Stringer\\Desktop\\DXTest\\shaders.hlsl", ...

Edit: Aussi lors de la création d'un dispositif ou un appareil / swapchain toujours utiliser D3D11_CREATE_DEVICE_DEBUG en mode débogage. Cette imprimera dans VS sortie fenêtre avertissements utiles et des erreurs (tout est OK sur mon côté).

    D3D11CreateDeviceAndSwapChain(NULL,
                                  D3D_DRIVER_TYPE_REFERENCE,
                                  NULL,
#ifdef _DEBUG
                                  D3D11_CREATE_DEVICE_DEBUG,
#else
                                  0,
#endif
                                  NULL,
                                  NULL,
                                  D3D11_SDK_VERSION,
                                  &scd,
                                  &swapchain,
                                  &dev,
                                  NULL,
                                  &devcon);

Edit2:

En outre toujours vérifier les codes d'erreur partout application peut échouer:

ID3D10Blob* pErrorBlob = NULL;

HRESULT hr = D3DX11CompileFromFile("C:\\Users\\Stringer\\Desktop\\\\DXTest\\shaders.hlsl", 0, 0, "VShader", "vs_5_0", 0, 0, 0, &VS, &pErrorBlob, 0);
LPVOID pError = NULL;
if( pErrorBlob )
{
    pError = pErrorBlob->GetBufferPointer();
    // then cast to a char* to see it in the locals window
}

Autres conseils

Le code DX11 des tentatives www.directxtutorial.com pour compiler les shaders comme Shader 5. Bien que le matériel de classe DX 10 / 10.1 a été mis à jour pour profiter de certaines caractéristiques DX11, Shader 5 n'est pas un d'entre eux.

Changement: D3DX11CompileFromFile (L "shaders.hlsl", 0, 0, "VShader", "vs_5_0", 0, 0, 0, & VS, 0, 0); D3DX11CompileFromFile (L "shaders.hlsl", 0, 0, "PShader", "ps_5_0", 0, 0, 0, & PS, 0, 0);

à

D3DX11CompileFromFile (L "shaders.hlsl", 0, 0, "VShader", "vs_4_0", 0, 0, 0, & VS, 0, 0); D3DX11CompileFromFile (L "shaders.hlsl", 0, 0, "PShader", "ps_4_0", 0, 0, 0, & PS, 0, 0);

http://en.wikipedia.org/wiki/DirectX#DirectX_11

J'ai eu exactement le même problème en utilisant le même tutoriel. J'ai simplement essayé le DirectX 9 version du même tutoriel à la place, qui a travaillé tout de suite sans aucun problème (à l'exception des caractères L retirés du qui ont besoin début des cordes, quelque chose à faire avec le support Unicode). Il semble que la cause profonde de ce problème est le manque de soutien pour DX11 sur les systèmes de certaines personnes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top