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」??
對此有什麼好的建議?
如果我不寫入口點,當我編譯項目(按CTR +希夫+ B)發生錯誤。我怎麼讓編譯器知道一些hlsl文件只是爲了包括? –
如果您在Visual Studio中默認使用''hlsli'' –
@ChuckWalbourn,那麼「排除自構建」將不會嘗試將該文件編譯爲HLSL着色器? – Matthias