错误X3000:着色器文件中的非法字符

时间:2017-05-19 09:59:57

标签: character-encoding shader directx-11

我从SO粘贴了一行着色器代码,现在我的项目拒绝工作。

  • 我删除了受污染的代码行。

  • 我已按照Unity forums的建议,使用VS,Notepad和Notepad ++从头开始多次重写着色器。

  • 我已经在Notepad ++中使用十六进制编辑器视图来排除前两个字节不是gamedev question所建议的0xFE 0xFF

我真的无法解决这个问题。我很感激您的任何建议。

cbuffer CB_PER_FRAME : register(b0)
{
    column_major float4x4 view;
    column_major float4x4 proj;
    float4 eyePosition;
};

struct VertexInput
{
    float3 position : POSITION;
    float3 normal   : NORMAL;
    float2 texCoord : TEXCOORD;

    row_major float4x4 world : WORLD;
    float4 color : COLOR;
    uint instanceID : SV_InstanceID;
};

struct PixelInput
{
    float4 position : SV_POSITION;
    float3 normal   : NORMAL;
    float2 texCoord : TEXCOORD;
    float4 color    : COLOR;
};

PixelInput VertexShaderMain( VertexInput vertexInput )
{
    PixelInput pixelInput (PixelInput)0;

    pixelInput.position = mul( float4( pixelInput.position, 1.0f ), vertexInput.world );
    pixelInput.position = mul( pixelInput.position, view );
    pixelInput.position = mul( pixelInput.position, proj );

    pixelInput.normal = normalize( mul( pixelInput.normal, (float3x3)vertexInput.world ) );
    pixelInput.texCoord = vertexInput.color;
    pixelInput.color = vertexInput.color;

    return pixelInput;
}

float4 PixelShaderMain( PixelInput pixelInput ) : SV_Target
{
    return pixelInput.color;
}

enter image description here

1 个答案:

答案 0 :(得分:10)

这是编码问题。当我粘贴代码行时,它以某种方式使我的编译器将每个文本文件视为UNICODE而不是ASCII。这引起了这个问题 解决方案是在Visual Studio中打开着色器文件并转到
文件 - >另存为>使用编码保存,然后选择正确的格式并重建解决方案。

enter image description here enter image description here