Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 忽略GLSL精度限定符_Android_Opengl Es 2.0_Precision_Fragment Shader - Fatal编程技术网

Android 忽略GLSL精度限定符

Android 忽略GLSL精度限定符,android,opengl-es-2.0,precision,fragment-shader,Android,Opengl Es 2.0,Precision,Fragment Shader,我们有OpenGLES2.0着色器,可以在IOS和大多数Android设备上正常工作,但在Amazon Kindle Fire 7上,我们的一个不同组件似乎正在失去精度 它在顶点着色器和像素着色器中定义为 varying highp vec4 v_worldposition; 我们也有 precision highp float; 在每个文件的顶部 然而,在这台设备上,数字越高,精度越差。在0附近有很多精度,但是当位置达到200+时,精度下降到0.1个单位左右-因此着色器似乎使用了16位浮点

我们有OpenGLES2.0着色器,可以在IOS和大多数Android设备上正常工作,但在Amazon Kindle Fire 7上,我们的一个不同组件似乎正在失去精度

它在顶点着色器和像素着色器中定义为

varying highp vec4 v_worldposition;
我们也有

precision highp float;
在每个文件的顶部

然而,在这台设备上,数字越高,精度越差。在0附近有很多精度,但是当位置达到200+时,精度下降到0.1个单位左右-因此着色器似乎使用了16位浮点。在我看来,一点也不高,但也许这就是它所能做的

它可能对所有不同的组件使用16位浮点,但在我们的例子中,它表现得非常糟糕,因为我们在基于世界坐标的像素着色器中进行纹理处理


有人知道有没有办法在着色器或其他代码中强制使用32位浮点,或者Amazon Fire 7是否支持它。这可能是清单中的一个设置吗?这是我们在Android设备上看到的唯一一个问题。

OpenGLES 2规范允许设备在片段着色器中仅支持mediump精度

亚马逊KindleFire7的Mali-450MP4 GPU大概就是这样一种设备。可以在运行时使用
glGetShaderPrecisionFormat
进行查询


您要么必须放弃对此类设备的支持(说起来容易做起来难,因为没有简单的清单选项),要么必须重构着色器,使其不依赖于高精度,或者在运行时进行检测,并对此类设备使用较低细节的着色器。我倾向于后者。

我想这完全取决于“mediump”的精度。我们已经更改了着色器,但我们还将按照您的建议检查精度。谢谢