2017-11-16 15 views
0

우리는 화재 7 대부분의 안드로이드 기기하지만 아마존 킨들에 OpenGLES2.0의 IOS에 잘 작동 쉐이더를 가지고 우리의 다양한 구성 요소 중 하나가 GLSL 정밀 규정은 무시

정밀

을 잃는 것 같다의 버텍스 쉐이더에서 정의 픽셀 쉐이더

varying highp vec4 v_worldposition; 

와 같이 우리는 또한 각 파일의 상단에

precision highp float; 

있습니다.

그러나이 기기에서는 정밀도가 악화되고 수치가 높을수록 정밀도가 떨어집니다. 0 주위에는 많은 정확도가 있지만 위치가 200 이상이되면 정밀도가 약 0.1 단위로 떨어집니다. 따라서 셰이더가 16 비트 부동 소수점을 사용하고있는 것으로 보입니다. 내 마음 속에서, 하이프가 아니라 어쩌면 그것이 할 수있는 모든 것일까요?

모든 다양한 구성 요소에 대해 16 비트 부동 소수점을 사용할 수는 있지만 월드 좌표를 기반으로 픽셀 쉐이더에서 텍스처를 처리 할 때 우리의 경우 크게 나빠질 수 있습니다.

셰이더 또는 다른 코드에서 32 비트 부동 소수점을 강제 실행하거나 Amazon Fire 7이이를 지원할 수있는 방법이 있는지 아는 사람이 있습니까? 매니 페스트의 설정 일 수 있습니까? 이 문제를 본 유일한 Android 기기입니다.

감사

숀 서던

답변

1

OpenGLES 2 사양은 장치에 프래그먼트 쉐이더 mediump 정밀도를 지원할 수있다.

아마도 Amazon Kindle Fire 7의 Mali-450MP4 GPU는 이러한 장치 중 하나입니다. 런타임시 glGetShaderPrecisionFormat을 사용하여 쿼리 할 수 ​​있습니다.

단순한 매니페스트 옵션이 없기 때문에 이러한 장치에 대한 지원을 중단하거나 (단순한 매니페스트 옵션이 없으므로 쉽게 수행되지 않음) 셰이더를 리팩토링하여 고정밀도에 의존하지 않도록하거나 런타임에 감지하여 이 종류의 장치에 대한 낮은 세부 셰이더. 나는 후자를하는 경향이있다.

+0

"mediump"정밀도가 정확히 무엇인지에 따라 달라집니다. 셰이더를 변경했지만 제안 된대로 정밀도를 검사합니다. 감사. – user3162134