Я использую 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
)затем он компилируется и работает просто отлично.
Так что, похоже, это именно глубина.
Все, что я прочитал, говорит, что это должно работать.Есть идеи?