MCGP之后,GLSL中缺少声明

时间:2019-01-28 16:19:47

标签: monogame

我在HLSL中制作了一个-basic-着色器,该着色器在DX中运行良好,但在OpenGL中引发了编译错误:

ERROR: 0:47: 'ps_v4' : undeclared identifier 
ERROR: 0:47: 'xyz' :  field selection requires structure, vector, or matrix on left hand side 
ERROR: 0:48: 'ps_v3' : undeclared identifier 
ERROR: 0:48: 'xyz' :  field selection requires structure, vector, or matrix on left hand side 
ERROR: 0:70: 'ps_v5' : undeclared identifier 
ERROR: 0:70: 'xxxx' :  field selection requires structure, vector, or matrix on left hand side 

我对GLSL不太了解,但是我确实调查了生成的.xnb文件,实际上,缺少声明:

...
...
uniform sampler2D ps_s0;
uniform sampler2D ps_s1;
varying vec4 vTexCoord0;
#define ps_v0 vTexCoord0
#define ps_oC0 gl_FragColor
varying vec4 vTexCoord1;
#define ps_v1 vTexCoord1
varying vec4 vFrontColor;
#define ps_v2 vFrontColor

void main()
...
...
ps_r1 = (ps_r1.xyzx * ps_c12.wwwz) + ps_c12.zzzw;
ps_r0 = clamp(ps_r0 * ps_r1, vec4(0.0), vec4(1.0));
ps_oC0 = mix(ps_c12.zzzw, ps_r0, ps_v5.xxxx);
...

但它们在同一文件中使用。

有人可以帮助我找出问题所在吗,因此MGCP正在错误地建立该文件? MGCP中没有错误,只是有关隐式矢量截断的警告。

整个着色器代码可能有点不对,但并不是很不常见,而是使用Tangent / Binormal进行凹凸贴图:

struct VSI
{
    float4 Position : POSITION0;
    float4 Normal : NORMAL0;
    float2 UV : TEXCOORD0;
    float4 Color : COLOR0;
    float3 Tangent : TANGENT;
    float3 Binormal : BINORMAL;
};

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我实际上也在VS-Output中使用了TANGENT和BINORMAL寄存器,无论出于什么原因,它都不起作用。

我用TEXCOORD2 / 3替换了VS Output结构中的TANGENT0和BINORMAL0寄存器,并解决了错误

到目前为止,屏幕上的输出看起来不错,但是我将做进一步的测试。

相关问题