Android模拟器是否支持OpenGL ES 3.0?

时间:2014-07-21 20:26:05

标签: android opengl-es android-emulator opengl-es-3.0

我知道模拟器has supported OpenGL ES 2.0 as of SDK tools 17 and Android 4.0.3,但是它已于2012年4月推出。

Android模拟器是否支持OpenGL ES 3.0,还是我们还在等待呢? 如果没有,是否有其他第三方仿真器/模拟器(例如Genymotion)支持OpenGL ES 3.0?

4 个答案:

答案 0 :(得分:10)

最新的Android Emulator现在支持OpenGL ES 3.0。要使用OpenGL ES 3.0,您的开发机器需要一个主机GPU图形卡,在Microsoft®Windows®或Linux上支持OpenGL 3.2或更高版本。

请参阅: https://android-developers.googleblog.com/2017/05/android-studio-3-0-canary1.html

OpenGL ES 3.0 in Android Emulator

NDK的gles3jni sample app是一个很好的选择。

如果失败了:

java.lang.RuntimeException: createContext failed: EGL_BAD_CONFIG

也尝试先在主机上运行:

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

由于开发人员目前将受支持的主机GPU列入白名单,并覆盖它,请参阅:https://issuetracker.google.com/issues/68496715

答案 1 :(得分:6)

即使OpenGL ES 2.0支持在模拟器中也有些限制和错误。但是例如Nexus4支持OpenGL ES 3.0。使用N4很便宜。

老实说,我不希望在模拟器中支持OpenGL ES 3.x。它不是Android规范的强制性部分 - 这是一个可选的功能,可以存在并且可以丢失。所以即使是测试OpenGL ES 3.x,我也建议坚持使用真正的硬件。如果您需要测试不需要OpenGL ES 3.0的应用程序的功能,那么您最好选择模拟器。但是为了测试任何OpenGL ES(从1.0到3.1)我强烈建议使用真实设备有两个原因 - 首先,真实设备上的GL环境是稳定的(在模拟器上它具有有限的功能,有缺陷和不稳定,甚至可以有时崩溃模拟器),其次,你可能会在不同的真实GPU上发现很多OpenGL驱动程序/硬件错误/限制。

答案 2 :(得分:5)

Android Emulator和系统图像以及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);
    }

}

答案 3 :(得分:3)

我通过运行glGetString(GLES20.GL_VERSION)找到了模拟器支持的版本。看来我测试的模拟器不支持OpenGL ES 3.0或更高版本,但我不想假设他们报告的内容是他们实际支持的,所以我没有做出任何承诺,这个词是最终的。

在我的Nexus 5上

OpenGL ES 3.0 V@104.0 AU@ (GIT@Id3510ff6dc)

使用HAXM的Android模拟器

OpenGL ES 2.0 (2.1 NVIDIA-10.2.7 310.41.25f01)

Genymotion模拟器

OpenGL ES 2.0 (2.1 NVIDIA-10.2.7 310.41.25f01)