Directx HLSL:空的fx文件:X3000:意外标记';{';

Directx HLSL:空的fx文件:X3000:意外标记';{';,directx,hlsl,Directx,Hlsl,出现以下错误: fx(1,1):错误X3000:语法错误:意外标记“{” Text.fx包含以下内容: 没什么 我还使用一个在另一个测试项目中运行良好的效果文件进行了尝试: float4x4 mWorld; struct TInputVertex { float3 vPosition : POSITION0; float3 vNormal : NORMAL0; float2 vTexCoord : TEXCOORD0; float4 vCo

出现以下错误: fx(1,1):错误X3000:语法错误:意外标记“{”

Text.fx包含以下内容: 没什么

我还使用一个在另一个测试项目中运行良好的效果文件进行了尝试:

float4x4 mWorld;

struct TInputVertex {
    float3 vPosition    : POSITION0;
    float3 vNormal      : NORMAL0;
    float2 vTexCoord    : TEXCOORD0;
    float4 vColor       : COLOR0;
};

struct TOutputVertex {
    float4 vPosition    : POSITION0;
    float3 vNormal      : TEXCOORD1;
    float4 vColor       : COLOR0;
};

TOutputVertex vsMain(TInputVertex i) {
    TOutputVertex o;

    o.vPosition = mul(float4(i.vPosition, 1), mWorld);
    o.vColor = i.vColor;

    o.vNormal = mul(float4(i.vNormal, 1), mWorld).xyz;

    //o.vColor += pow(dot(normal_world, float3(0, 0, 1)) * 2 + 0.3, 10);

    return o;
}

struct TInputFragment {
    float3 vNormal      : TEXCOORD1;
    float2 vTexCoord    : TEXCOORD0;
    float4 vColor       : COLOR0;
};

struct TOutputFragment {
    float4 vColor       : COLOR0;
};

TOutputFragment psMain(TInputFragment i) {
    TOutputFragment o;

    o.vColor = i.vColor;
    o.vColor += pow(dot(i.vNormal, float3(0, 0, 1)) * 2 + 0.3, 10);

    return o;
}

technique mytech {
    pass p0 {
        //ShadeMode = Flat;
        //ZEnable = false;

        WorldTransform[0] = mWorld;

        VertexShader = compile vs_1_1 vsMain();
        PixelShader = compile ps_2_0 psMain();
    }
}
与结果相同的错误

在两个项目中包括来自同一dx sdk的dx文件。包括并链接相同的标头和库

我从测试项目中复制了加载函数,我自己编写了整个测试项目

HRESULT res = D3DXCreateEffectFromFile(device, file_name, NULL, NULL, 0,  0, &effect, &error_buffer);
谷歌不会出现这样的情况。如果你能从我的湿巾上取下匕首,我会非常感激


Antoon

解决方案:不要创建RTF文件,然后重命名它们并使用写字板进行编辑。写字板仍会将其解释为RTF,因为该文件以“{\rtf1}”开头。将其拖到visual studio中向我展示了真实的内容。哦,世界,你太有趣了。

是的,绝对不要用文本编辑器编辑代码。它们可以做一些事情,比如不输出任何远程接近编译器期望的结果,遵守文本格式标准(与代码标准不同,)并且没有我们所依赖的IDE的大部分特性。