深度テクスチャがGL_DEPTH24_STENCIL8
(またはGL_DEPTH_COMPONENT24
)ですが、一部のデバイス(iPhone5s iPad1)でこのテクスチャを正しくサンプリングできますが、無効なピクセルで失敗します。私はに値をクリップしましたサンプルGL_DEPTH24_STENCIL8一部のIOSデバイスの深度テクスチャエラー
注[0.999、1]ホモ深以来で、主に以下のとおりです。次のようにGPUのテクスチャ(深さ)とXcodeで捕捉フォーマット情報バインドされていますセット。私はテクスチャをサンプリングして、シェーダの値もクリップします。
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);
}
そして、このシェーダは、上記のデバイス上で誤った結果が得られます。
デバイスおよびドライバ情報は、次のとおりです。
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
この問題への任意の手がかり?または他のデバッグの提案ですか?
すべてを強制的にハイパーにすると、よりうまく動作しますか?私はあなたが、APIが精度に関して保証しているものに近いところにいると考えています。例えば、zbはlowpで256の精度で1つの部分しか保証しませんが、linearz計算で1000に少なくとも1を必要とする計算で使用しようとします。 – solidpixel
@lsogenはい!深さテクスチャが正しくサンプリングされるためには、sampler2dがhighpである必要があることが分かります。 – zoujyjs
よかった、うれしかった。私はこの行に沿って答えを加えました。質問が答えた通りに表示されます。 – solidpixel