Hieroglyph3项目HLSL着色器报错X3004:未声明标识符'output'求助
错误原因分析及修复方案
触发X3004错误的直接原因
在顶点着色器函数VSMain中,你使用了两个未声明的变量output和input:
output.tex = input.tex;
当前函数内的输出变量是o(通过VS_OUTPUT o;定义),输入参数是v(函数签名in VS_INPUT v),这两个变量名与你写的output/input完全不匹配,HLSL编译器无法识别未声明的标识符,因此抛出X3004错误。
附带的其他潜在错误
除了上述问题,像素着色器PSMain中还有一个大小写错误:
return(sampledtexturecolour);
你之前定义的变量是sampledTextureColour(驼峰命名,T和C为大写),HLSL是大小写敏感的编程语言,这个写法会导致另一个未声明标识符错误,需要一并修正。
修复后的完整代码
//--------------------------------- Texture2D DiffuseTexture : register(t0); SamplerState TextureSampler : register(s0); cbuffer Transforms { matrix WorldMatrix; matrix ViewMatrix; matrix ProjMatrix; }; //--------------------------------- struct VS_INPUT { float4 position : POSITION; float4 color : COLOR; float2 tex : TEXCOORD0; }; struct VS_OUTPUT { float4 position : SV_POSITION; float4 color : COLOR; float2 tex : TEXCOORD0; }; //---------------------------------- VS_OUTPUT VSMain(in VS_INPUT v) { VS_OUTPUT o; float4 WorldSpace = mul(v.position, WorldMatrix); float4 ViewSpace = mul(WorldSpace, ViewMatrix); float4 ScreenSpace = mul(ViewSpace, ProjMatrix); o.position = ScreenSpace; o.color = v.color; o.tex = v.tex; // 修正变量名 return o; } //----------------------------------- float4 PSMain(in VS_OUTPUT input) : SV_Target { float4 sampledTextureColour = DiffuseTexture.Sample(TextureSampler, input.tex); return(sampledTextureColour); // 修正大小写 }
内容的提问来源于stack exchange,提问作者HarryButler21
相关产品推荐
相关产品推荐

