3 votes

ABC de la compilation des shaders

Je vous jure que j'ai cherché la réponse à cette question de manière exhaustive, mais je n'ai trouvé aucune solution réelle à mon problème. Et quel est ce problème ?

Je suis novice en matière de DirectX et de shaders. Il y a plusieurs choses sur les shaders que je ne comprends toujours pas.

1 - Comment faire un shader ? Dois-je créer un fichier .fx dans le projet ? Parfois, c'est le cas, mais dans certains exemples, je ne trouve pas de fichier .fx. Et comment créer ce fichier ? Ma version de Visual Studio ne peut pas créer directement des fichiers .fx ; je dois "forcer" le fichier à être .fx.

2 - Comment les compiler ? Sont-ils compilés en même temps que la solution ou ont-ils des moyens spéciaux de compiler ?

3 - Existe-t-il un bon tutoriel ? J'ai cherché une bible des shaders mais j'ai surtout trouvé des tutoriels vagues et courts expliquant peu de choses, et jamais de manière approfondie.

3voto

SridharKritha Points 346

1. Nouveau à Shader ?

Pour obtenir l'introduction à sharder, utilisez l'éditeur de shaders gratuit shazzam ( http://shazzam-tool.com/ ) pour créer les shaders simples à l'aide d'outils de dessin interactifs. Essayez de jouer avec les différentes options et comparez ensuite les codes HLSL(.fx) générés automatiquement pour mieux comprendre. Une fois que vous avez compris comment le code du shader doit être écrit, achetez un livre standard ou un tutoriel en ligne et entraînez-vous à écrire votre propre code en fonction de vos besoins.

2. Méthodes communes de compilation :

a. D3DXCreateEffectFromFile- Écrire le code du shader et le sauvegarder dans l'extension .fx et compiler dynamiquement le code par D3DXCreateEffectFromFile (créer un effet à partir d'un fichier) . Le code compilé peut être utilisé dans votre module de base en utilisant l'interface effect(ID3DXEffect).

b. Compilation explicite : Écrivez le code du shader et sauvegardez-le dans l'extension .fx, puis compilez explicitement le code à l'aide de fxc.exe (que vous trouverez dans le dossier DirectX SDK Utility).

Exemple :
fxc.exe /Tfx_2_0 /Fo fichier.fxo fichier.fx

Après la création du fichier binaire, suivez la procédure suivante

  1. Create a buffer and load the generated binary file(.fxo) by the file stream.
  2. Call D3DXCreateEffect and give the buffer content as a input parameter.
  3. Like "method a" use effect(ID3DXEffect) interface for interacting with the
     shader code. 

3. Tutoriel d'introduction :

http://rbwhitaker.wikidot.com/hlsl-tutorials

1voto

Barış Uşaklı Points 11980
  1. Les shaders sont comme des fichiers texte normaux : vous y mettez votre code de shaders. Vous n'avez pas besoin de les ajouter à votre projet si vous compilez le shader au moment de l'exécution avec les fonctions D3D.

  2. Il y a deux façons de procéder. La première consiste à placer le code du shader dans des fichiers .fx ou *.hlsl, puis à compiler le shader au moment de l'exécution en utilisant les fonctions de la bibliothèque D3D (D3DCompileFromFile). Bien que Microsoft ne suggère plus cette méthode car D3DCompileFromFile ne fonctionne pas dans les applications de style Metro. L'autre moyen est d'utiliser fxc.exe pour compiler vos shaders au moment de la construction. Visual Studio 2012 a intégré ce processus dans le processus de construction habituel. Vous pouvez donc ajouter vos fichiers hlsl à votre projet et ils seront compilés lorsque vous construirez votre projet. Cela vous permettra également de voir toutes les erreurs ou avertissements dans le shader au moment de la compilation.

  3. http://msdn.microsoft.com/en-us/library/Windows/desktop/bb509633(v=vs.85).aspx

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X