使用gl_FragDepth在Android上的MonoGame中的着色器问题

时间:2019-09-20 18:18:16

标签: android opengl-es monogame

我正在使用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),那么它将编译并可以正常工作。

所以似乎特别是深度。

我读到的所有内容都应该可以解决。有什么想法吗?

0 个答案:

没有答案