某些IOS设备

时间:2016-08-23 13:52:12

标签: ios opengl-es glsl texture2d depth-buffer

我有一个GL_DEPTH24_STENCIL8(或GL_DEPTH_COMPONENT24)的深度纹理,我可以在某些设备(iPhone5s iPad1)上正确地对此纹理进行采样,但是会因某些无效像素而失败。以下是绑定的gpu纹理(深度)和xcode捕获的格式信息:

bound depth texture enter image description here

请注意,我将值剪辑为[0.999,1],因为同源深度主要在集合中。我正在对纹理进行采样并剪切我的着色器中的值。

uniform sampler2D tex0;
varying mediump vec2 TexCoord0;
void ps_main()
{
  float bias = 0.0;
  lowp vec4 zb = texture2D(tex0, TexCoord0, bias);
  const mediump float mag = 20.0;
  mediump float linearz = (zb - 0.999) / (1.0 - 0.999)
  gl_FragColor = vec4(linearz, linearz, linearz, 1.0);
}

这个着色器在上面提到的设备上给出了错误的结果: enter image description here

设备和驱动程序信息是:

Driver: OpenGLES2
Description: Apple A8 GPU
Version: OpenGL ES 2.0 Apple A8 GPU - 77.14
Vendor: Apple Inc.
Width: 2048, Height: 1536, BitDepth: 32

这个问题的任何线索?还是其他一些调试建议?

1 个答案:

答案 0 :(得分:1)

您提供的API保证比精确度更高。例如,变量zblowp,它只能保证256个精度中的1个部分,但是在计算其中的值时,您尝试在计算中使用至少需要1000个部分的计算。 linearz

尝试将精度提高到highp以超过临界精度阈值。