2014-07-21 5 views
12

Ich weiß, dass der Emulator has supported OpenGL ES 2.0 as of SDK tools 17 and Android 4.0.3, aber das wurde im April 2012 eingeführt.Unterstützt der Android-Emulator OpenGL ES 3.0?

Unterstützt der Android-Emulator OpenGL ES 3.0, oder warten wir noch darauf?
Wenn nicht, unterstützt ein anderer Drittanbieter-Emulator/Simulator (z. B. Genymotion) OpenGL ES 3.0?

+0

Sogar OpenGL ES 2.0-Unterstützung ist etwas begrenzt und fehlerhaft im Emulator. Aber Nexus4 unterstützt OpenGL ES 3.0. Und gebrauchtes N4 ist spottbillig. – keaukraine

+0

:) Also das ist ein definitives "Nein"? –

+0

Total akzeptable Antwort, wenn Sie die Frage beantworten. –

Antwort

7

Sogar OpenGL ES 2.0-Unterstützung ist etwas begrenzt und fehlerhaft im Emulator. Aber zum Beispiel unterstützt Nexus4 OpenGL ES 3.0. Und gebrauchtes N4 ist spottbillig.

Ehrlich gesagt erwarte ich nicht, OpenGL ES 3.x-Unterstützung im Emulator. Es ist kein zwanghafter Teil der Android-Spezifikationen - dies ist eine optionale Funktion, die vorhanden sein kann und fehlen kann. Ich würde daher empfehlen, selbst beim Testen von OpenGL ES 3.x an echter Hardware zu bleiben. Wenn Sie Funktionen von Apps testen müssen, die OpenGL ES 3.0 nicht benötigen, sollten Sie Emulatoren verwenden. Aber zum Testen von OpenGL ES (von 1.0 bis 3.1) würde ich dringend empfehlen, echte Geräte aus zwei Gründen zu verwenden - erstens, GL Umgebung auf realen Geräten ist stabil (auf Emulator hat es begrenzte Funktionen, Buggy und instabil, kann sogar Emulator zum Absturz bringen manchmal), und zweitens können Sie viele OpenGL-Treiber/Hardware-Bugs/Einschränkungen auf verschiedenen realen GPUs finden.

5

Weder der Android Emulator und die Systemimages noch Genymotion unterstützen derzeit OpenGL ES Version 3.0.

Während ich dies schreibe die neuesten (Rev. 1) ARM und x86 System Bilder für Android 5.1.1 (API 22) berichten, dass sie OpenGL ES Version 2.0 und nicht 3.0 unterstützen.

Ähnlich berichtet Genymotion Nexus 5 Android 5.1.0 API 22 virtuelles Gerät nur OpenGL ES Version 2.0-Unterstützung.

können Sie den Code verwenden, unter der Unterstützung im Rahmen der künftigen System-Images und Emulatoren zu überprüfen:

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); 
    } 

} 
+0

ist diese Methode zuverlässiger als mit glGetString (GLES20.GL_VERSION)? Ich bin gespannt, was der Unterschied zwischen den beiden ist, denn glGetString scheint einfacher zu laufen. –

+0

glGetString ist einfacher, wenn Sie bereits einen gültigen OpenGL-Kontext haben (z. B. wenn Sie sich von der OnSurfaceCreated-Instanz Ihres Renderers aus anmelden). Der einzige Vorteil, den ich für den obigen Ansatz sehe, ist, dass kein GLSurfaceView und kein Renderer benötigt wird. –

+0

Die Android-Dokumentation schlägt glGetString mit: https://developer.android.com/guide/topics/graphics/opengl.html#version-check Beachten Sie, dass im Falle setEGLContextClientVersion nicht auf dem GLSurfaceView aufgerufen wird, zB : myGLSurfaceView.setEGLContextClientVersion (2), glGetString kann etwas zurückgeben wie: "OpenGL ES-CM 1.1" die für unsere Zwecke ein wenig irreführend sein könnte. Dieser Beitrag (obwohl es mit dem NDK befasst) beschreibt das gleiche Problem: http://stackoverflow.com/questions/25843368/glgetstringgl-version-returns-openl-es-cm-1-1-but-my-phone- supports-opengl –

3

finde ich die Version, die der Emulator durch Ausführen glGetString(GLES20.GL_VERSION) unterstützt. Es scheint, dass die Emulatoren, die ich getestet habe nicht OpenGL ES 3.0 oder höher, aber ich möchte nicht davon ausgehen, dass sie Berichterstattung sind, was sie eigentlich Unterstützung, also mache ich keine Versprechen, dass dieses Wort ist endgültig.

Auf meinem Nexus 5

OpenGL ES 3.0 [email protected] [email protected] ([email protected])

Android Emulator HAXM

OpenGL ES 2.0 (2.1 NVIDIA-10.2.7 310.41.25f01)

Genymotion Emulator

OpenGL ES 2.0 (2.1 NVIDIA-10.2.7 310.41.25f01)

6

Der neueste Android Emulator unterstützt jetzt OpenGL ES 3.0. Um OpenGL ES 3.0 zu verwenden, benötigt Ihr Entwicklungscomputer eine Grafikkarte für den Host-GPU, die OpenGL 3.2 oder höher unter Microsoft® Windows® oder Linux unterstützt.

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

OpenGL ES 3.0 in Android Emulator

Die gles3jni sample app vom NDK ist eine gute Option, um es auszuprobieren.

Wenn es irgendwie:

java.lang.RuntimeException: createContext failed: EGL_BAD_CONFIG 

auch zuerst auf dem Host zu laufen versuchen:

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

wie die Devs werden derzeit unterstützt Host-GPUs Whitelist, und dass außer Kraft gesetzt, siehe auch: https://issuetracker.google.com/issues/68496715

+0

Hallo Jamal, hast du das eigentlich auf deiner eigenen Maschine gesehen? – aaaidan

+0

Ja. Wenn es irgendein Problem gibt, lassen Sie es mich wissen. Sie können hier auch einen Fehler melden: https://issuetracker.google.com/issues/new?component=192727 und wir können einen tieferen Blick darauf werfen. –

+0

Super! Jetzt fehlt nur noch Vulkan :-) https://stackoverflow.com/questions/42581120/how-to-create-and-run-an-an-example-vulkanan-app-on-the-android-emulator –

Verwandte Themen