Kullanılan aygıt openGL ES 2.0'ı destekliyorsa dinamik olarak kontrol etmem gerekiyor. Bunu nasıl yapabilirim?Android cihazının openGL ES 2.0 destekleyip desteklemediğini kontrol etmenin bir yolu var mı?
cevap
Evet.
final ActivityManager activityManager =
(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
final ConfigurationInfo configurationInfo =
activityManager.getDeviceConfigurationInfo();
final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000;
fazla bilgi için bunu okuyun: http://www.learnopengles.com/android-lesson-one-getting-started/
Ayrıca ekleyerek uygulamanızı mağazada görmesini 2.0 desteklemeyen cihazlar kısıtlamak istediğiniz gerektirebilir aşağıdaki kod işinizi görecektir Açıklamanızın izlediği:
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
Ayrıca bkz. the doc of uses-feature
.
getDeviceConfigurationInfo() özelliği, özelliklerine göre aşağıdaki şekilde bir ConfigurationInfo döndürür: 'Bir uygulama tarafından bildirilen donanım yapılandırma tercihleri hakkında bilgi alabilirsiniz. Bu, AndroidManifest.xml'nin
@jeroent 'ConfigurationInfo' sınıfının özelliklerinde belirtildiği, ancak 'getSystemService' içindeki 'ACTIVITY_SERVICE' bağlamının kullanıldığı durum, global sistem durumuyla etkileşim için bir 'ActivityManager' alır. – Foggzie
Özür diler misiniz? Ve destek 3.0 –
belirlenmesi OpenGL uzantıları: OpenGL
Uygulamaları desteklenir OpenGL ES API uzantıları açısından Android cihaza göre değişir. Bu uzantılar, doku sıkıştırmalarını içerir, ancak tipik olarak OpenGL özellik kümesine diğer uzantıları da içerir.
, belirli bir cihazda desteklenen ne doku sıkıştırma biçimlerini ve diğer OpenGL eklentileri belirlemek için:
desteklenen ne doku sıkıştırma formatları belirlemek için hedef cihazlar üzerinde şu kodu çalıştırın:
String extensions = javax.microedition.khronos.opengles.GL10.glGetString(GL10.GL_EXTENSIONS);
Uyarı: Bu çağrının sonuçları cihaza göre değişir! Hangi sıkıştırma türlerinin yaygın olarak desteklendiğini belirlemek için bu aramayı birkaç hedef cihazda çalıştırmalısınız. Aygıtta hangi OpenGL uzantılarının desteklendiğini belirlemek için bu yöntemin çıktısını gözden geçirin.
Bu yöntem kıvrımlıdır. Eğer glGetString() kullanacaksanız, bunu GL_EXTENSIONS ile çağırmazsınız, bunu GL_VERSION ile çağırır ve sonra dizeyi daha sonra ayrıştırırsınız. ConfigurationInfo sınıfı, bu sorunu hızlı ve kolay bir şekilde çözmek için tasarlanmıştır. – Foggzie
Hiçbir zaman OpenGL ES kullanılmadı, ancak aynı glGetString
yöntemini OpenGL olarak gördü. Bu hile yapmak gerekir:
pazarda bunu restrct istiyorsanız o zaman manifest'te 2.0 ile SADECE bu cihazlara, diğerleri de söylediğim şekilde kod denetimi yanında http://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetString.xml
:
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
Her ikisini de yapmalısınız, insanları doğrudan uygun olmayan cihazlara yükledim ve garip istisnalarla uğraşmak zorunda kaldım. de
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");
}
Bu kod Güzel çalışma .. Bir süre
// 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;
}
, ben aynı cevabı arıyordum: Şimdi bir çalışma zamanı atmak. Fakat maalesef bunun için uygun bir açıklama bulamadım. Bir dakika önce kendim tarafından bir yol buldum ve bunu herkesle paylaşmak isterim.
@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();
}
Kodunuzdaki bu kodu kullanabilirsiniz:
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());
bu cevap olarak kabul edilmelidir – Bunny
- 1. Bir Android telefonun arama kaydında sesli posta entegrasyonunu destekleyip desteklemediğini tespit etmenin bir yolu var mı?
- 2. Tarayıcının HTML5 zamanlayıcıyı destekleyip desteklemediğini kontrol edin
- 3. OpenGL ES 2.0
- 4. Android OpenGL ES 2.0: Ben Matrix.traslateM
- 5. GL_LINES ve OpenGL ES 2.0
- 6. LibGdx Opengl ES 2.0 kullanmıyor
- 7. OpenGL ES 2.0 NDK olmadan mümkün mü?
- 8. Bir tarayıcının WebAssembly destekleyip desteklemediğini nasıl kontrol edebilirim?
- 9. OpenGL ES 2.0 PNG alfa kanalı
- 10. CIImage'ın OpenGL ES 2.0 dokuya dönüştürülmesi iOS'ta
- 11. Çerezin httponly olup olmadığını kontrol etmenin bir yolu var mı?
- 12. Yüklediğiniz hangi gulp versiyonunu kontrol etmenin bir yolu var mı?
- 13. Koddan izin alma iznini kontrol etmenin bir yolu var mı?
- 14. Kabarcık tıklamayı tetikleyip tetiklemediğini kontrol etmenin bir yolu var mı?
- 15. UITableView scrollToRowAtIndexPath üzerinde animasyonu kontrol etmenin bir yolu var mı?
- 16. (Rails) Alanın veri türünü kontrol etmenin bir yolu var mı?
- 17. Reaksiyon bileşeninin ayrılıp ayrılmadığını kontrol etmenin bir yolu var mı?
- 18. OpenGL ES 2.0 ve glPushMatrix, glPopMatrix
- 19. Bir tarayıcının MJPEG'i destekleyip desteklemediğini nasıl anlayabilirim?
- 20. Android OpenGL - ES Doku kanaması
- 21. OpenGL ES 2.0 ile OpenGL 4 arasındaki farklar
- 22. Android için Shader OpenGL ES
- 23. g ++ lambda işlevlerini destekleyip desteklemediğini nasıl kontrol edersiniz?
- 24. Xcode'ta OpenGL ES işlevlerinin ve simgelerinin belgelerini almanın hızlı bir yolu var mı?
- 25. OpenGL-ES ve Cg
- 26. OpenGL ES 2.0 ve köşe arabellek nesneleri (VBO)
- 27. Bir Android cihazının hangi API seviyesinde çalıştığını çalışma zamanında söylemenin bir yolu var mı?
- 28. OpenGL ES 1.1 - 2.0 önemli bir değişiklik mi?
- 29. Opengl es 2.0'ı incelerken iyi bir yaklaşım nedir?
- 30. Android Yerel NDK OpenGL ES: kullanılmayan API
GLES20 API düzeyinde 8 eklenir, bunun yerine buna karşı denetlemek için yeterli olmamalı? – harism
harism: Bu doğru değil. Android 2.2.1 ile HTC Wildfire var. OpenGL ES 2.0'ı desteklemiyor. – petrnohejl