seteglcontextclientversion(2) работает неправильно для устройства OpenGL ES 2.0

Я пытаюсь изучить OpenGL ES 2.0, следуя базовому руководству.

http://www.droidnova.com/android-3d-game-tutorial-part-ii,328.html

Это конструктор моего производного GLSurfaceView

public FirstOpenGLSurfaceView(Context context){
        super(context);
        // Set the Renderer for drawing on the GLSurfaceView
        setEGLContextClientVersion(2);
        _renderer = new FirstOpenGLRenderer();
        setRenderer(_renderer);
    }

После некоторых экспериментов я пришел к выводу, что проект не будет работать должным образом, если будет выполнен вызов seteglcontextclientversion(2) (закомментируйте эту строку кода, и рендеринг будет работать). сделан для запуска вышеуказанного метода.

Я обновил манифест и следовал всем советам в этом посте здесь... (включая настройки manifest.xml)

Android: GLES20: вызван нереализованный OpenGL ES API

Я слышал предположение, что это может указывать на то, что OpenGL ES 2.0 недоступен на рассматриваемых устройствах (или что используется эмулятор). Я не верю, что это правда в данном случае, как при запуске следующего кода ... (Найдено в нескольких учебниках, я верю, что этот код говорит правду)

// 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;

Значением supportsEs2 является «истина», и это относится к трем независимым устройствам, а именно

  • Samsung Galaxy Tab 10.1 — Android 3.2 с ядром 2.6.36.4
  • Google Nexus S — Android 4.0.4 — ядро ​​3.0.27
  • Samsung Galaxy S3 — Android 4.0.4 с ядром 3.0.15

Кто-нибудь испытал это раньше?


person Paul Maidment    schedule 06.06.2012    source источник
comment
У вас есть ‹uses-feature› для gles в манифесте? Я не уверен, имеет ли это значение, но язык может подразумевать, что без этого устройство будет поддерживать только 1.0. Я не уверен, что это так. developer.android.com/guide/topics/manifest/   -  person Tim    schedule 06.06.2012
comment
@Tim ‹uses-feature android:glEsVersion=0x00020000› ‹/uses-feature› ‹uses-sdk android:targetSdkVersion=10 android:minSdkVersion=10›‹/uses-sdk› в манифесте (также пробовал с SDK версии 8, тот же результат)   -  person Paul Maidment    schedule 06.06.2012
comment
У меня были проблемы, из-за которых OpenGL 2.0 не запускался после OpenGL 1.0 в том же приложении.   -  person Daniel Ryan    schedule 11.07.2012


Ответы (1)


Я также столкнулся с той же проблемой на моем XOLO a500s, и использование setEGLConfigChooser() решило мою проблему:

myGLSurface.setEGLConfigChooser(5, 6, 5, 0, 24, 8);
myGLSurface.setEGLContextClientVersion(2);
myGLSurface.setRenderer(new MyGLRenderer());

Откуда я взял значения для setEGLConfigChooser(redSize, greenSize, blueSize, alphaSize, depthSize, stencilSize):

http://gfxbench.com/result.jsp

person amuTBKT    schedule 14.05.2014