Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.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
OpenGLES Android设备支持的查询精度_Android_Opengl Es_Precision - Fatal编程技术网

OpenGLES Android设备支持的查询精度

OpenGLES Android设备支持的查询精度,android,opengl-es,precision,Android,Opengl Es,Precision,我正在使用OpenGL ES在Android上运行一些着色器 在一些旧的/便宜的设备上,它们不支持高精度,因此着色器输出不正确 我需要知道应用程序何时启动,设备是否支持高精度。这样我就可以告诉用户“算了,你的设备不支持高精度浮点”,而不是让它为它们输出垃圾 我在网上找到了这个查询代码,但它似乎只适用于WebGL var highp = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT); var highpSupporte

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

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

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

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

var highp = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT);
var highpSupported = highp.precision != 0;
有没有人能让我查询android设备(KitKat或更高版本)以了解GLES着色器支持的精度

这是我现在使用的最后一个代码,但是无论我在我的应用程序中运行代码到哪里,范围和精度的内容总是-999。在创建GLSURFACHEVIEW并运行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表示,如果发生错误,则值将保持不变。所以看起来好像有错误,或者我没有在正确的时间打电话。

相关:谢谢,但这没有关系。这是指没有在着色器代码中指定默认精度。我想在运行着色器代码之前查询精度。我已经在我的着色器中设置了highp。你找不到:,int,java.nio.IntBuffer,java.nio.IntBuffer)好的,这帮助我获得了语法。我修改了我的问题。但是我如何从代码中提取精度并检查高支持率呢?你到底把它称为什么?在渲染器实现的
onSurfaceCreated()
中?相关:谢谢,但这不相关。这是指没有在着色器代码中指定默认精度。我想在运行着色器代码之前查询精度。我已经在我的着色器中设置了highp。你找不到:,int,java.nio.IntBuffer,java.nio.IntBuffer)好的,这帮助我获得了语法。我修改了我的问题。但是我如何从代码中提取精度并检查高支持率呢?你到底把它称为什么?在渲染器实现的
onSurfaceCreated()
中?