Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 解释HLSL着色器编译器宏代码_C++_Directx 11_Hlsl - Fatal编程技术网

C++ 解释HLSL着色器编译器宏代码

C++ 解释HLSL着色器编译器宏代码,c++,directx-11,hlsl,C++,Directx 11,Hlsl,个人资料: WiN7 Prof SP1 Directx11 开发IDE:VS 2015 程序语言:C# 应用类型:3D渲染 Directx11包装器:SLimDX 在我的C#项目中,我有一个3D渲染器正在工作 我想集成第三方HLSL着色器代码 我已经翻译了Directx11功能级别的代码,它使用fxc.exe编译,没有错误或警告 着色器由我的C#应用程序加载,我可以访问所有着色器变量并设置它们的值 问题: 当我试图在我的C#代码中获取一个引用来访问着色器的第一个技术的第一个过程时,我得到了一个S

个人资料:
WiN7 Prof SP1

Directx11

开发IDE:VS 2015

程序语言:C#

应用类型:3D渲染

Directx11包装器:SLimDX

在我的C#项目中,我有一个3D渲染器正在工作

我想集成第三方HLSL着色器代码

我已经翻译了Directx11功能级别的代码,它使用fxc.exe编译,没有错误或警告

着色器由我的C#应用程序加载,我可以访问所有着色器变量并设置它们的值

问题:

当我试图在我的C#代码中获取一个引用来访问着色器的第一个技术的第一个过程时,我得到了一个SlimDX运行时错误

我可以在没有运行时错误的情况下引用着色器的第一种技术,但获得的对象有一个标志is_valid=false,表明该技术未被正确引用

澄清:我不尝试进行抽签,但在准备抽签时,我必须获得相关通行证的证明

问题:

我无法理解最后一个编译器指令中关于这些技术的确切含义

有人能翻译编译器指令最终生成的HLSL代码吗

我的意思是从:

#定义对象\u TEC(名称,mmdpass)\

#包括“./ray.conf”
#包括“./ray_advanced.conf”
#包括“./shader/math.fxsub”
#包括“./shader/common.fxsub”
#包括“./shader/gbuffer.fxsub”
#包括“./shader/lighting.fxsub”
float3 LightDirection:DIRECTION;
float3 LightSpecular:SPECULAR;
bool:控制对象;
纹理扩散图:材质纹理;
采样器扩散图SAMP=采样器_状态
{
纹理=;
MINFILTER=各向异性;
磁过滤=各向异性;
MIPFILTER=点;
最大各向异性=16;
地址u=包裹;
地址v=包裹;
};
float4 GetTextureColor(float4反照率,float2 uv)
{
如果(使用纹理)
{
float4 TexColor=tex2D(DiffuseMapSamp,uv);
TexColor.rgb=lerp(1,TexColor*TextureMulValue+TextureAddValue,TextureAddValue.a+TextureAddValue.a);
反照率*=TexColor;
}
返回SRGB2线性(反照率);
}
无效DrawObjectVS(
在浮动4位置:位置,
在float3 Normal中:Normal,
在float4 Texcoord:TEXCOORD0中,
out float4 oTexcoord:TEXCOORD0,
浮点数3不正常:TEXCOORD1,
out float3 oViewdir:TEXCOORD2,
输出浮动4位置:SV_位置)
{
正常=正常;
oTexcoord=Texcoord;
oViewdir=CameraPosition-Position.xyz;
位置=mul(位置,matWorldViewProject);
}
float4 DrawObjectPS(float4 texcoord:TEXCOORD0,float3 normal:TEXCOORD1,float3 viewdir:TEXCOORD2):SV_目标
{
#如果存在射线
#如果放弃α启用
浮动α=材料扩散a;
#如果放弃\u ALPHA\u映射\u启用
如果(使用纹理)alpha*=tex2D(DiffuseMapSamp,texcoord.xy);
#恩迪夫
剪辑(α-α阈值);
#恩迪夫
返回0;
#否则
如果(退出)
{
#如果放弃α启用
浮动α=材料扩散a;
#如果放弃\u ALPHA\u映射\u启用
如果(使用纹理)alpha*=tex2D(DiffuseMapSamp,texcoord.xy);
#恩迪夫
剪辑(α-α阈值);
#恩迪夫
返回0;
}
其他的
{
float4反照率=GetTextureColor(MaterialDiffuse,texcoord.xy);
float3 L=标准化(-LightDirection);
float3 V=标准化(viewdir);
float3 N=正常化(正常);
浮子材料粗糙度=平滑度或粗糙度(光泽至平滑度(材料功率));
浮动4照明=反照率;
lighting.rgb*=扩散BRDF(N、L、V、材料粗糙度);
照明度.rgb+=镜面反射比f_GGX(N,L,V,材料粗糙度,0.04,1.0);
lighting.rgb*=LightSpecular;
回流管2SRGB(照明);
}
#恩迪夫
}
#定义对象(名称,mmdpass)\
技术名称 { \
传递对象{\
AlphaTestEnable=FALSE;AlphaBlendEnable=FALSE\
VertexShader=编译vs_3_0 DrawObjectVS()\
PixelShader=编译ps_3_0 DrawObjectPS()\
} \
}
对象(MainTec0,“对象”)
对象技术(MainTecBS0,“对象技术”)
技术EdgeTec{}
技术阴影技术{}
技术ZplotTec{}
#include "../ray.conf"
#include "../ray_advanced.conf"
#include "../shader/math.fxsub"
#include "../shader/common.fxsub"
#include "../shader/gbuffer.fxsub"
#include "../shader/lighting.fxsub"

float3  LightDirection  : DIRECTION < string Object = "Light"; >;
float3  LightSpecular   : SPECULAR  < string Object = "Light"; >;

bool ExistRay : CONTROLOBJECT<string name = "ray.x";>;

texture DiffuseMap: MATERIALTEXTURE;
sampler DiffuseMapSamp = sampler_state
{
    texture = <DiffuseMap>;
    MINFILTER = ANISOTROPIC;
    MAGFILTER = ANISOTROPIC;
    MIPFILTER = POINT;
    MAXANISOTROPY = 16;
    ADDRESSU  = WRAP;
    ADDRESSV  = WRAP;
};

float4 GetTextureColor(float4 albedo, float2 uv)
{
    if (use_texture)
    {
        float4 TexColor = tex2D(DiffuseMapSamp, uv);
        TexColor.rgb = lerp(1, TexColor * TextureMulValue + TextureAddValue, TextureMulValue.a + TextureAddValue.a).rgb;
        albedo *= TexColor;
    }

    return srgb2linear(albedo);
}

void DrawObjectVS(
    in float4 Position : POSITION,
    in float3 Normal   : NORMAL,
    in float4 Texcoord : TEXCOORD0,
    out float4 oTexcoord  : TEXCOORD0,
    out float3 oNormal    : TEXCOORD1,
    out float3 oViewdir   : TEXCOORD2,
    out float4 oPosition  : SV_Position)
{
    oNormal = Normal;
    oTexcoord = Texcoord;
    oViewdir = CameraPosition - Position.xyz;
    oPosition = mul(Position, matWorldViewProject);
}

float4 DrawObjectPS(float4 texcoord : TEXCOORD0, float3 normal : TEXCOORD1, float3 viewdir : TEXCOORD2) : SV_Target
{
#if EXIST_RAY
    #if DISCARD_ALPHA_ENABLE
        float alpha = MaterialDiffuse.a;
    #if DISCARD_ALPHA_MAP_ENABLE
        if (use_texture) alpha *= tex2D(DiffuseMapSamp, texcoord.xy).a;
    #endif
        clip(alpha - DiscardAlphaThreshold);
    #endif
        return 0;
#else
    if (ExistRay)
    {
#if DISCARD_ALPHA_ENABLE
        float alpha = MaterialDiffuse.a;
#if DISCARD_ALPHA_MAP_ENABLE
        if (use_texture) alpha *= tex2D(DiffuseMapSamp, texcoord.xy).a;
#endif
        clip(alpha - DiscardAlphaThreshold);
#endif
        return 0;
    }
    else
    {
        float4 albedo = GetTextureColor(MaterialDiffuse, texcoord.xy);

        float3 L = normalize(-LightDirection);
        float3 V = normalize(viewdir);
        float3 N = normalize(normal);

        float MaterialRoughness = SmoothnessToRoughness(ShininessToSmoothness(MaterialPower));

        float4 lighting = albedo;
        lighting.rgb *= DiffuseBRDF(N, L, V, MaterialRoughness);
        lighting.rgb += SpecularBRDF_GGX(N, L, V, MaterialRoughness, 0.04, 1.0);
        lighting.rgb *= LightSpecular;

        return linear2srgb(lighting);
    }
#endif
}

#define OBJECT_TEC(name, mmdpass) \
    technique name < string MMDPass = mmdpass;\
    > { \
        pass DrawObject { \
            AlphaTestEnable = FALSE; AlphaBlendEnable = FALSE; \
            VertexShader = compile vs_3_0 DrawObjectVS(); \
            PixelShader  = compile ps_3_0 DrawObjectPS(); \
        } \
    }

OBJECT_TEC(MainTec0, "object")
OBJECT_TEC(MainTecBS0, "object_ss")

technique EdgeTec < string MMDPass = "edge"; > {}
technique ShadowTech < string MMDPass = "shadow";  > {}
technique ZplotTec < string MMDPass = "zplot"; > {}