2017-07-31 46 views
0

與.cpp文件和.h文件一樣,我希望使用Shader代碼中的一些函數來創建文件。如何在.hlsl文件中包含文件?

下面假設這個代碼是在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) 
{ 

} 

,然後我創建PixelShader.hlsl文件,該文件是這樣的

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

我只是不想複製並粘貼此代碼到我所有的hlsl代碼..如果我必須更改我的光功能代碼,那麼我應該更改每個hlsl代碼,這不是我想要的。

我在網上搜索了這個。 實現ID3D10Include類,然後沒有人告訴如何使用它... 我不知道使用什麼文件擴展名...是不是.hlsli ?? 像#include「lightfuncs.hlsli」??

對此有什麼好的建議?

回答

0

這是完全一樣的普通C包括,即#包括「common.hlsl」:https://msdn.microsoft.com/en-us/library/windows/desktop/dd607349(v=vs.85).aspx

+0

如果我不寫入口點,當我編譯項目(按CTR +希夫+ B)發生錯誤。我怎麼讓編譯器知道一些hlsl文件只是爲了包括? –

+0

如果您在Visual Studio中默認使用''hlsli'' –

+0

@ChuckWalbourn,那麼「排除自構建」將不會嘗試將該文件編譯爲HLSL着色器? – Matthias