Поддерживаются ли объекты OpenGL ES Vertex Array в любом Android-эмуляторе?

Я пытался запустить код, который использует VAO на C ++ с помощью Android NDK и работает на эмуляторе. Я ожидаю, что смогу использовать glDeleteVertexArraysOES , glGenVertexArraysOES и glBindVertexArrayOES .

Я обнаружил, что эмулятор не смог запустить код, даже если я использую OpenGL ES 2 и динамически свяжу эти расширения с помощью этого решения: поддерживаются ли объекты вершинного массива в Android OpenGL ES 2.0 с помощью расширений?

Я запускал glGetString(GL_EXTENSIONS) на эмуляторе Nexus 4, работающем на уровне API 19, и ускорял GPU и получил следующее:

 GL_EXT_debug_marker GL_OES_EGL_image GL_OES_depth24 GL_OES_depth32 GL_OES_element_index_uint GL_OES_texture_float GL_OES_texture_float_linear GL_OES_compressed_paletted_texture GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth_texture GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_packed_depth_stencil GL_OES_vertex_half_float 

Я предполагаю, что мне нужно увидеть GL_OES_vertex_array_object , чтобы использовать объекты массива вершин. Таким образом, похоже, что это не подходит для этого конкретного эмулятора.

Знаете ли вы, можно ли использовать объекты вершинного массива в OpenGL ES на любом существующем эмуляторе Android (третье лицо или иначе)? Если да, то как?

Официально это предполагается поддерживать <d:gl-extensions> в devices.xml под каталогом пользователя, но из того, что я могу сказать, оглядываясь , эта функциональность в настоящее время не работает. Возможно, он работал некоторое время в прошлом, но если это так, то с последней даты он больше не работает с последними версиями NDK и Android Studio. (Значит, моя щедрость, если найдется какой-нибудь лучший ответ.)

Виртуальное устройство Nexus 5 Android 5.1.0 API 22 Genymotion сообщает только поддержку 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); } } 

Его от Поддерживает ли эмулятор Android OpenGL ES 3.0?


Необходимо изменить параметры в эмулятор :

1) Вам нужно отредактировать изображение эмулятора, перейти в раздел оборудования и добавить «Эмуляция графического процессора» и установить его значение «true».

2) В эмуляторе есть ошибка, так что эта строка: «final boolean supportsEs2 = configurationInfo.reqGlEsVersion> = 0 × 20000;» не работает. Он всегда будет возвращать false. Вы можете добавить «|| Build.FINGERPRINT.startsWith («generic») »или просто закомментируйте эти проверки и предположите, что OpenGL ES 2 поддерживается, когда работает на эмуляторе.

3) если он сработал с «no config found», попробуйте добавить эту строку перед вызовом «setRenderer (…)»: «glSurfaceView.setEGLConfigChooser (8, 8, 8, 8, 16, 0);

Попробуй это.

Не уверен, насколько привязано ваше приложение к платформе Android, но, я думаю, вы можете адаптировать и протестировать свой основной 3D-движок с помощью эмулятора от Adreno, PowerVR или Mali SDK. Вдоль библиотек libEGL и libGLESv2 есть также несколько доступных инструментов для совместной работы, включая живую отладку для OpenGL-ES.

Изменить: VAO – это основные функции GLES 3.0. Функции – это псевдонимы для glDeleteVertexArrays, glGenVertexArrays и glBindVertexArray. Итак, если SDK предлагает поддержку GLES 3.0, он поддерживает OES_VERTEX_ARRAY_OBJECTS.

ВАЖНО: Убедитесь, что ваш ПК поддерживает OpenGL 3.x или выше, в соответствии с требованиями SDK.

Я разрабатываю эмулятор для Java API OpenGL-ES для Android, используя выше SDK libs. Он находится на очень ранней стадии и может вам не помочь, но он содержит простые примеры. Одной из причин для разработки этого java-эмулятора является ограниченная поддержка GLES от эмуляторов ОС, таких как Genymotion и другие. Теперь я могу полагаться на собственный SDK от производителей графических процессоров. https://github.com/AlessandroBorges/madri-gles