Поскольку вы говорите, что используете OpenGL ES, но также упомянули, что пытаетесь ограничить gl_FragDepth, я предполагаю, что вы используете OpenGL ES 2.0, поэтому вот трюк с шейдером:
Вы можете эмулировать ARB_depth_clamp с помощьюиспользуя отдельную переменную для z-компонента.
Вершинный шейдер:
varying float z;
void main()
{
gl_Position = ftransform();
// transform z to window coordinates
z = gl_Position.z / gl_Position.w;
z = (gl_DepthRange.diff * z + gl_DepthRange.near + gl_DepthRange.far) * 0.5;
// prevent z-clipping
gl_Position.z = 0.0;
}
Фрагментный шейдер:
varying float z;
void main()
{
gl_FragColor = vec4(vec3(z), 1.0);
gl_FragDepth = clamp(z, 0.0, 1.0);
}