Проблема с шейдером в MonoGame на Android с gl_FragDepth - PullRequest
1 голос
/ 20 сентября 2019

Я использую MonoGame и у меня есть шейдер, который я использую для слияния цветовой текстуры и текстуры глубины с моими данными MonoGame.Он отлично работает в моей сборке UWP (Universal Windows), но не работает в моей сборке Android.

Конвейер MonoGame просто прекрасно компилирует мой HLSL, но не работает во время выполнения, когда вызов GL.CompileShader в Shader.OpenGL.cs с этой ошибкой:

ОШИБКА: 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)затем он компилируется и работает просто отлично.

Так что, похоже, это именно глубина.

Все, что я прочитал, говорит, что это должно работать.Есть идеи?

...