OpenGLES Android设备支持的查询精度

时间:2016-07-20 21:28:14

标签: android opengl-es precision

我正在使用OpenGL ES在Android上运行一些着色器。

在一些较旧/便宜的设备上,它们不支持高精度,因此着色器输出不正确。

如果设备可以支持高精度,我需要知道应用程序何时启动。这样我就可以告诉用户“忘掉它,你的设备不支持高精度浮动”,而不是为它们输出垃圾。

我在网上找到了这个查询代码,但似乎只适用于WebGL

var highp = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT);
var highpSupported = highp.precision != 0;

有没有人可以查询Android设备(KitKat或更高版本)以查看GLES着色器支持的精度?

这是我现在使用的最终代码,但无论我在应用程序中运行代码的位置,范围和精度的内容始终为-999。创建GLSurfaceView之前,期间或之后,GLES输出已运行。

IntBuffer range = IntBuffer.allocate(2);
IntBuffer precision = IntBuffer.allocate(1);
range.put(0,-999);
range.put(1,-999);
precision.put(0,-999);
android.opengl.GLES20.glGetShaderPrecisionFormat(android.opengl.GLES20.GL_FRAGMENT_SHADER, android.opengl.GLES20.GL_HIGH_FLOAT,range,precision);
String toastText="Range[0]="+String.valueOf(range.get(0))+" Range[1]="+String.valueOf(range.get(1))+" Precision[0]="+String.valueOf(precision.get(0));
Toast.makeText(getApplicationContext(),toastText, Toast.LENGTH_SHORT).show();

上述代码对于所有3个值始终返回-999,而kronos doco表示如果发生错误则值将保持不变。所以看起来有错误或者我没有在合适的时间调用它。

0 个答案:

没有答案