깊이 텍스처가 GL_DEPTH24_STENCIL8
(또는 GL_DEPTH_COMPONENT24
)이며 일부 장치 (iPhone5s iPad1)에서이 텍스처를 올바르게 샘플링 할 수 있지만 잘못된 픽셀이 있으면 실패합니다. GPU 질감 (깊이)와 엑스 코드에 의해 캡처 된 형식의 정보를 바인딩 다음은 내가으로 값 클립했습니다샘플 일부 IOS 장치에서 GL_DEPTH24_STENCIL8 깊이 텍스처 오류가 발생했습니다.
주 [0.999, 1] 호모 깊이 이후에 대부분입니다 세트. 텍스처를 샘플링하고 쉐이더에서도 값을 클립합니다. 이다
장치 및 드라이버 정보 :이 문제에 대한
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
모든 단서
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);
}
그리고이 쉐이더는 위에서 언급 한 장치에서 잘못된 결과를 제공? 아니면 다른 디버그 제안?
모든 것을 강제로 highp로하면 더 잘 작동합니까? 정밀도면에서 API가 보장하는 것에 근접하고 있다고 생각합니다. 예를 들어, zb는 lowp로 256의 정확도로 1 부분만을 보증하지만 linearz 계산에서 1000의 부분을 적어도 하나 필요로하는 계산에 사용하려고합니다. – solidpixel
@lsogen 예! 깊이 텍스처가 올바르게 샘플링되도록하려면 sampler2d가 highp 여야합니다. – zoujyjs
위대한, 다행스럽게 도왔다. 이 줄에 따라 답변을 추가 했으므로 질문이 답변으로 표시됩니다. – solidpixel