Поддерживаются ли объекты OpenGL ES Vertex Array в любом Android-эмуляторе?
Я пытаюсь запустить код, который использует VAO на С++ с помощью Android NDK и работает на эмуляторе. Я ожидаю, что смогу использовать glDeleteVertexArraysOES
, glGenVertexArraysOES
и glBindVertexArrayOES
.
Я обнаружил, что эмулятор не смог запустить код, даже если я использую OpenGL ES 2 и динамически свяжу эти расширения с помощью этого решения: Поддерживаются ли объекты вершинного массива в Android OpenGL ES 2.0 с помощью расширений?
Я запустил glGetString(GL_EXTENSIONS)
в эмуляторе Nexus 4 с API-интерфейсом 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-эмулятора (стороннего или другого)? Если да, то как?
Ответы
Ответ 1
Официально это предполагается поддерживать тегом <d:gl-extensions>
в devices.xml под пользовательским каталогом, но из того, что я может показаться оглядкой, эта функция в настоящее время не работает. Возможно, он работал некоторое время в прошлом, но если это так, то с последней датой он больше не работает с последними версиями NDK и Android Studio. (Следовательно, моя щедрость, должен ли быть лучший ответ.)
Ответ 2
Genymotion Nexus 5 Android 5.1.0 API 22 поддерживает только поддержку 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) Theres ошибка с эмулятором, так что эта строка: "final boolean поддерживаетEs2 = 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);"
Попробуйте это.
Ответ 3
Не уверен, насколько привязано ваше приложение к платформе Android, но, я думаю, вы можете адаптировать и протестировать ваш основной 3D-движок с помощью эмулятора Adreno, PowerVR или Mali SDK.
Вдоль библиотек libEGL и libGLESv2 есть также несколько доступных инструментов для совместной работы, включая live debug для OpenGL-ES.
Изменить: VAO - это основные функции GLES 3.0. Эти функции являются псевдонимами для glDeleteVertexArrays, glGenVertexArrays и glBindVertexArray. Итак, если SDK предлагает поддержку GLES 3.0, он поддерживает OES_VERTEX_ARRAY_OBJECTS.
ВАЖНО: Убедитесь, что ваш ПК поддерживает OpenGL 3.x или выше, согласно требованиям SDK.
Я разрабатываю эмулятор для Android OpenGL-ES Java API, используя выше SDK libs. Он находится на очень ранней стадии и может не помочь вам сейчас, но он выполняет простые простые примеры. Одной из причин для разработки этого java-эмулятора является ограниченная поддержка GLES от эмуляторов ОС, таких как Genymotion и другие. Теперь я могу полагаться на собственный SDK от разработчиков GPU.
https://github.com/AlessandroBorges/madri-gles