Muszę sprawdzić dynamicznie, czy używane urządzenie obsługuje OpenGL ES 2.0. Jak mogę to zrobić?Czy istnieje sposób sprawdzenia, czy urządzenie z Androidem obsługuje OpenGL ES 2.0?
Odpowiedz
Tak. Poniższy kod rade:
final ActivityManager activityManager =
(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
final ConfigurationInfo configurationInfo =
activityManager.getDeviceConfigurationInfo();
final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000;
przeczytać ten o więcej informacji: http://www.learnopengles.com/android-lesson-one-getting-started/
Możesz także wymagają chcą ograniczyć urządzeń, które nie obsługują 2,0 widząc swoją aplikację na rynku dodając do manifestu:
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
Zobacz także the doc of uses-feature
.
Funkcja getDeviceConfigurationInfo() zwraca wartość ConfigurationInfo, która zgodnie ze specyfikacją to: "Informacje, które można pobrać o preferencjach konfiguracji sprzętu zadeklarowanych przez aplikację. Odpowiada to informacjom zebranym z tagów
@jeroent To właśnie określa klasa "ConfigurationInfo" w specyfikacji, ale użycie kontekstu "ACTIVITY_SERVICE" w "getSystemService" powoduje pobranie "ActivityManager" do interakcji z globalnym stanem systemu. – Foggzie
Przepraszam? A jak sprawdzić, czy obsługa 3.0 –
Ustalenie rozszerzeń OpenGL:
Implementacje OpenGL różnić w zależności od urządzenia z systemem Android w kategoriach rozszerzeń do API OpenGL ES, które są obsługiwane. Rozszerzenia te obejmują kompresję tekstur, ale zazwyczaj obejmują także inne rozszerzenia zestawu funkcji OpenGL.
Aby określić tekstury formatów kompresji i inne rozszerzenia OpenGL, są obsługiwane w danym urządzeniu:
Uruchom poniższy kod na urządzeniach docelowych, aby określić co tekstury formaty kompresji są obsługiwane:
String extensions = javax.microedition.khronos.opengles.GL10.glGetString(GL10.GL_EXTENSIONS);
Ostrzeżenie: wyniki tego połączenia różnią się w zależności od urządzenia! Musisz uruchomić to połączenie na kilku urządzeniach docelowych, aby określić, które typy kompresji są powszechnie obsługiwane. Przejrzyj dane wyjściowe tej metody, aby określić, jakie rozszerzenia OpenGL są obsługiwane w urządzeniu.
Ta metoda jest zawiła. Jeśli zamierzasz użyć funkcji glGetString(), której nie nazwałbyś GL_EXTENSIONS, wywołasz ją za pomocą GL_VERSION, a następnie przeanalizujesz ciąg znaków. Klasa ConfigurationInfo została zaprojektowana, aby szybko i łatwo rozwiązać ten problem. – Foggzie
Nigdy nie używane OpenGL ES, ale widziałem, że ma tę samą metodę glGetString
jak OpenGL. Należy rade:
http://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetString.xml
Oprócz sprawdzania w kodzie w sposób, który wspominają inni, jeśli chcesz restrct go na rynku tylko do tych urządzeń z 2,0 następnie w manifeście:
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
Powinieneś robić jedno i drugie. Kazałem ludziom instalować apk bezpośrednio na nieodpowiednich urządzeniach i musiałem radzić sobie z dziwnymi wyjątkami. Teraz rzucam Czas:
private boolean detectOpenGLES20() {
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
ConfigurationInfo info = am.getDeviceConfigurationInfo();
return (info.reqGlEsVersion >= 0x20000);
}
//in activity onCreate
if (!detectOpenGLES20()) {
throw new RuntimeException("Open GL ES 2.0 was not found on device");
}
Ten kod działa poprawnie ..
// Check if the system supports OpenGL ES 2.0.
final ActivityManager activityManager = ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
final ConfigurationInfo configurationInfo = activityManager
.getDeviceConfigurationInfo();
final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000;
if (supportsEs2) {
Log.i("JO", "configurationInfo.reqGlEsVersion:"
+ configurationInfo.reqGlEsVersion + "supportsEs2:"
+ supportsEs2);
// Request an OpenGL ES 2.0 compatible context.
myGlsurfaceView.setEGLContextClientVersion(2);
final DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
// Set the renderer to our demo renderer, defined below.
myRenderer = new MyRenderer(this, myGlsurfaceView);
} else {
// This is where you could create an OpenGL ES 1.x compatible
// renderer if you wanted to support both ES 1 and ES 2.
return;
}
Przez pewien czas szukałem dla tej samej odpowiedzi, zbyt. Ale niestety nie mogłem znaleźć odpowiedniego opisu. Właśnie znalazłem sposób przed chwilą sam i czuję, że chciałbym się nim podzielić z każdym.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FeatureInfo[] list = this.getPackageManager()
.getSystemAvailableFeatures();
Toast.makeText(this,
"OpenGL ES Version: " + list[list.length - 1].getGlEsVersion(),
Toast.LENGTH_LONG).show();
}
Można użyć tego kodu w kodzie:
int result;
ActivityManager activityManager =
(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
ConfigurationInfo configInfo = activityManager.getDeviceConfigurationInfo();
if (configInfo.reqGlEsVersion != ConfigurationInfo.GL_ES_VERSION_UNDEFINED) {
result= configInfo.reqGlEsVersion;
} else {
result= 1 << 16; // Lack of property means OpenGL ES version 1
}
Log.e("reqGlEsVersion", String.valueOf(result));
Log.e("getGlEsVersion", configInfo.getGlEsVersion());
to powinno być zaakceptowane jako odpowiedź – Bunny
- 1. Czy iPad lub iPhone obsługuje OpenGL ES 2.0?
- 2. Czy istnieje sposób sprawdzenia, czy operacja OpenGL została zakończona?
- 3. OpenGL ES 2.0 IllegalArgumentException
- 4. Wykryj, czy OpenGl ES 2.0 jest dostępny czy nie
- 5. Problemy z aparatami OpenGL ES 2.0
- 6. Wybierz OpenGL ES 1.1 lub OpenGL ES 2.0?
- 7. OpenGL ES 2.0 + Cairo: HUD
- 8. OpenGL ES 2.0 możliwe bez NDK?
- 9. OpenGL es 2.0 Czytaj bufor głębokości
- 10. OpenGL vs OpenGL ES 2.0 - Czy aplikacja OpenGL może być łatwo przeniesiona?
- 11. Obsługa OpenGL ES 2.0 dla Androida?
- 12. OpenGL lub OpenGL ES
- 13. OpenGL ES 1.1 lub 2.0 na iPhonie
- 14. Jak osiągnąć GlOrthof w OpenGL ES 2.0
- 15. PowerVR SGX535 Shader Performance (OpenGL ES 2.0)
- 16. Obrazy i maska w OpenGL ES 2.0
- 17. Teksturowane punkty w OpenGL ES 2.0?
- 18. Renderowanie OpenGL ES 2.0 do obrazu
- 19. irrlicht android na opengl es 2.0 sterownik
- 20. OpenGL ES 2.0 vs OpenGL 3 - Podobieństwa i różnice
- 21. Czy istnieje sposób na wykrycie, czy telefon z Androidem obsługuje integrację poczty głosowej w dzienniku połączeń?
- 22. Czy istnieje szybki sposób na odzyskanie dokumentacji funkcji i symboli OpenGL ES w Xcode?
- 23. Algorytmy transformacji wierzchołków OpenGL ES 2.0
- 24. Libgdx nie używa Opengl ES 2.0
- 25. iPhone OpenGL ES 2.0 - Pixel Perfect Textures
- 26. Strukturyzowanie tekstur w OpenGL ES 2.0
- 27. Java - Najszybszy sposób sprawdzenia, czy URL istnieje
- 28. pytoniczny sposób sprawdzenia, czy coś istnieje?
- 29. Tekstury zmiennoprzecinkowe w OpenGL ES 2.0
- 30. OpenGL-ES i Cg
GLES20 dodaje na poziomie API 8, nie powinno być tyle, aby sprawdzić przed nim, a nie? – harism
harism: To nie jest prawda. Mam HTC Wildfire z systemem Android 2.2.1. Nie obsługuje OpenGL ES 2.0. – petrnohejl