Поддерживаются ли объекты 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