我正在使用MonoGame,我有一个着色器,用于将颜色纹理和深度纹理与我的MonoGame渲染数据合并。在我的UWP(通用Windows)版本中运行正常,但是在Android版本中失败。
MonoGame管道可以很好地编译我的HLSL,但是当在Shader.OpenGL.cs中调用GL.CompileShader并出现以下错误时,它将在运行时失败:
错误:0:18:“ gl_FragDepth”:未声明的标识符`
编译的着色器如下所示:
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
vec4 ps_r0;
uniform sampler2D ps_s0;
uniform sampler2D ps_s2;
varying vec4 vTexCoord0;
#define ps_v0 vTexCoord0
#define ps_oC0 gl_FragColor
#define ps_oDepth gl_FragDepth
void main()
{
ps_oC0 = texture2D(ps_s0, ps_v0.xy);
ps_r0 = texture2D(ps_s2, ps_v0.xy);
ps_oDepth = ps_r0.x;
}
我尝试了几种设备,这两个设备都使用了OpenGL ES 3.2,并通过以下输出进行了验证:
V/AndroidGameView(20506): Created GLES 3.2 Context
据我所知,应该支持gl_FragDepth
。这是在片段着色器期间发生的,因为我对使用gl_FragColor
命令没有任何错误。
如果我不修改深度而只是设置颜色(因此着色器确实包含gl_FragColor
),那么它将编译并可以正常工作。
所以似乎特别是深度。
我读到的所有内容都应该可以解决。有什么想法吗?