【问题标题】:Reading effect file always returns no technique读取效果文件总是不返回任何技巧
【发布时间】:2014-05-29 08:29:02
【问题描述】:

我有一个非常简单的测试效果文件,我尝试使用以下代码加载:

using D3D = Microsoft.WindowsAPICodePack.DirectX.Direct3D10;
...
var DxDevice = CreateDevice(D3D.DriverType.Hardware);
var stream = Application.GetResourceStream(Global.MakePackUri("Resources/Effects/Test.ps"));
var DxEffect = DxDevice.CreateEffectFromCompiledBinary(stream.Stream);
MessageBox.Show(DxEffect.Description.Techniques);

效果中的技术数量始终为零。

效果文件只对位图着色以便于识别:

sampler2D input1 : register(S0);

float4 DoHorizontal(float2 uv : TEXCOORD) : COLOR
{
  return float4(1, 0, 1, 1);
}

float4 DoVertical(float2 uv : TEXCOORD) : COLOR
{
  return float4(1, 1, 0, 1);
}

technique Test
{
  pass P0
  {
    PixelShader = compile ps_4_0 DoHorizontal();
  }
  pass P1
  {
    PixelShader = compile ps_4_0 DoVertical();
  }
}

它编译没有任何错误(使用fxc /T fx_4_0)。 Windows API 代码包中是否存在任何 HLSL 不兼容问题,可能会导致这种奇怪行为?

【问题讨论】:

    标签: hlsl windows-api-code-pack


    【解决方案1】:

    您的效果仍然使用旧的 DirectX9 语法,并且您使用 Shader Model 4,这可能会产生问题。

    更新版本,以适应 DX10+ 语法:

    SamplerState input1 : register(S0);
    
    float4 DoHorizontal(float2 uv : TEXCOORD) : SV_Target
    {
        return float4(1, 0, 1, 1);
    }
    
    float4 DoVertical(float2 uv : TEXCOORD) : SV_Target
    {
        return float4(1, 1, 0, 1);
    }
    
    technique10 Test
    {
    pass P0
    {
        SetPixelShader( CompileShader( ps_4_0, DoHorizontal() ) );
    }
    pass P1
    {
        SetPixelShader( CompileShader( ps_4_0, DoVertical() ) );
    }
    }
    

    刚刚尝试在SlimDX和SharpDX中加载,我得到的技术没有问题,所以如果你仍然没有列举技术,这肯定是Windows API Core Pack的问题。

    【讨论】:

    • 天哪,你是对的。谢谢你。我想知道为什么它在加载效果时没有给出错误消息......
    猜你喜欢
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 2023-03-13
    • 2015-04-05
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多