Android仿真器是否支持OpenGL ES 3.0?

Android仿真器是否支持OpenGL ES 3.0?,android,opengl-es,android-emulator,opengl-es-3.0,Android,Opengl Es,Android Emulator,Opengl Es 3.0,我知道emulator,但它是在2012年4月推出的 Android emulator支持OpenGL ES 3.0吗,还是我们还在等待呢? 如果没有,是否有任何其他第三方仿真器/模拟器(如Genymotion)支持OpenGL ES 3.0?Android仿真器和系统映像以及Genymotion当前都不支持OpenGL ES 3.0版 在我写这篇文章时,Android 5.1.1(API 22)的最新版本(Rev.1)ARM和x86系统映像报告说,它们支持OpenGL ES版本2.0,而不是3

我知道emulator,但它是在2012年4月推出的

Android emulator支持OpenGL ES 3.0吗,还是我们还在等待呢?

如果没有,是否有任何其他第三方仿真器/模拟器(如Genymotion)支持OpenGL ES 3.0?

Android仿真器和系统映像以及Genymotion当前都不支持OpenGL ES 3.0版

在我写这篇文章时,Android 5.1.1(API 22)的最新版本(Rev.1)ARM和x86系统映像报告说,它们支持OpenGL ES版本2.0,而不是3.0

类似地,Genymotion的Nexus 5 Android 5.1.0 API 22虚拟设备报告仅支持OpenGL ES 2.0版

您可以使用以下代码在未来的系统映像和模拟器下检查支持:

package com.example.opengltest;

import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.content.pm.ConfigurationInfo;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class OpenGLESVersionActivity extends Activity {

    private static final String TAG = "OpenGLESVersionActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final ActivityManager activityManager =
                (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        final ConfigurationInfo configurationInfo =
                activityManager.getDeviceConfigurationInfo();
        String versionText = "Device Supported OpenGL ES Version = " + configurationInfo.getGlEsVersion();
        Toast.makeText(this, versionText, Toast.LENGTH_LONG).show();
        Log.d(TAG, versionText);
    }

}

我找到了模拟器通过运行
glGetString(GLES20.GL\u version)
支持的版本。我测试的模拟器似乎不支持OpenGL ES 3.0或更高版本,但我不想假设他们报告的内容是他们实际支持的内容,所以我不保证这个词是最终的

在我的Nexus 5上

opengles3.0V@104.0AU@(GIT@Id3510ff6dc)

使用HAXM的Android仿真器

opengles2.0(2.1nvidia-10.2.7310.41.25f01)

Genymotion仿真器


OpenGL ES 2.0(2.1 NVIDIA-10.2.7 310.41.25f01)
最新的Android仿真器现在支持OpenGL ES 3.0。要使用OpenGL ES 3.0,您的开发机器需要一个主机GPU图形卡,该卡在Microsoft®Windows®或Linux上支持OpenGL 3.2或更高版本

见:

来自NDK的测试是一个很好的选择

如果出现以下故障:

java.lang.RuntimeException: createContext failed: EGL_BAD_CONFIG
另外,请尝试先在主机上运行:

echo "GLESDynamicVersion = on" >> ~/.android/advancedFeatures.ini

由于开发人员目前正在将受支持的主机GPU列入白名单,这会覆盖它,请参见:

即使是OpenGL ES 2.0支持,emulator也有一定的局限性和缺陷。但是Nexus4支持OpenGLES3.0。而且使用的N4非常便宜。:)所以这是一个明确的“不”?如果你回答这个问题,完全可以接受的答案。据我所知,Android模拟器上还不支持OpenGL ES 3.X。然而,许多运行Jelly bean及以上版本的设备都支持GLES 3.0。支持OpenGles 3.0的一些设备有Nexus 4、5、7、10、三星galaxy S4、Note 3等。是的,我正在开发这些设备,所以我意识到它们支持OpenGles 3.0。现在我想在一台有android模拟器但没有物理设备的服务器上运行一些自动化测试\此方法是否比使用glGetString(GLES20.GL_版本)更可靠?我很好奇两者之间的区别是什么,因为运行glGetString似乎更容易。如果您已经拥有有效的OpenGL上下文(例如,如果您从渲染器的onSurfaceCreated中进行日志记录),那么glGetString更容易。我所看到的上述方法的唯一好处是,它不需要GLSURFACHEVIEW和渲染器即可工作。Android文档建议使用glGetString:注意,如果在GLSURFACHEVIEW上未调用setEGLContextClientVersion,例如:MyGLSURFACHEVIEW.setEGLContextClientVersion(2),glGetString可能会返回类似于“OpenGLES-CM1.1”的内容,这对于我们的目的来说可能有点误导。这篇文章(尽管它涉及NDK)描述了同样的问题:截至2020年,genymotion Google Pixel 9(API 28)还显示图形卡NVIDIA GeForce GTX 860M不支持OpenGL 3.0(支持OpengGL 4.6,通过Geeks3D GPU caps viewer验证)。Hi Jamal,你真的看到它在你自己的机器上工作了吗?是的。如果有任何问题,请告诉我。你也可以在这里提交一个bug:我们可以更深入地了解。太棒了!现在只有Vulkan丢失了:-)我添加了ini和设置,并期望在AVD中有一个下拉选项来选择“GLES 3.0”,但我没有看到。我在Windows 10上安装了Android Studio 3.0.1。请注意,Linux和Windows一样是注册商标。