2017-07-31 2 views
0

Comme le fichier .cpp et le fichier .h, je veux faire un fichier qui a beaucoup de fonctions qui font des maths dans le code Shader.comment inclure le fichier dans le fichier .hlsl?

En supposant le code ci-dessous est dans un fichier light.hlsl

struct DirectionalLight 
{ 
    float4 Ambient; 
    float4 Diffuse; 
    float4 Specular; 
    float3 Direction; 
    float pad; 
}; 
// some structures... 
................ 
............. 

void ComputePointLight(Material mat, PointLight L, float3 pos, float3 normal, float3 toEye, 
    out float4 ambient, out float4 diffuse, out float4 spec) 
{ 
    //define fucntion that i need.... 
} 

define other functions.. 

void ComputeSpotLight(Material mat, SpotLight L, float3 pos, float3 normal, float3 toEye, 
    out float4 ambient, out float4 diffuse, out float4 spec) 
{ 

} 

et je crée le fichier PixelShader.hlsl et ce fichier va comme ceci

#include"light.hlsl" 
float4 main(Pin pin):SV_TARGET 
{ 
    do something with functions in light.hlsl file..... 
} 

Je ne veux pas copier et coller ce code à tous mes codes hlsl .. et si je dois changer mon code de fonction de lumière, alors je devrais changer tous les codes hlsl, ce n'est pas je veux ..

J'ai cherché sur internet à propos de ça. Implémenter la classe ID3D10Include alors personne ne dit comment l'utiliser ... Je ne sais pas quelle extension de fichier utiliser ... est-ce .hlsli ?? comme #include "lightfuncs.hlsli" ??

une bonne suggestion pour cela?

Répondre

0

Il est exactement comme la normale C comprennent, à savoir #include « common.hlsl »: https://msdn.microsoft.com/en-us/library/windows/desktop/dd607349(v=vs.85).aspx

+0

Si je ne vous écris pas le point d'entrée, il se produit erreur lorsque je compile projet (en appuyant sur Ctrl + CAPS + B). comment puis-je laisser le compilateur savoir que certains fichiers hlsl est juste pour inclure? –

+0

L'IDE n'essaiera pas de compiler le fichier en tant que shader HLSL si vous utilisez '' hlsli'' –

+0

@ChuckWalbourn donc "Excluded From Build" par défaut dans Visual Studio? – Matthias