繁体   English   中英

Android模拟器是否支持OpenGL ES顶点阵列对象?

[英]Are OpenGL ES Vertex Array Objects supported in any Android Emulator?

我一直在尝试使用Android NDK在C ++中运行使用VAO的代码,并在模拟器上运行。 我希望能够使用glDeleteVertexArraysOESglGenVertexArraysOESglBindVertexArrayOES

我发现即使使用OpenGL ES 2并使用此解决方案动态链接扩展程序,仿真器也无法运行代码: 使用扩展程序的Android OpenGL ES 2.0是否支持顶点数组对象?

我在运行API级别19和GPU加速的Nexus 4模拟器上运行glGetString(GL_EXTENSIONS) ,并得到以下信息:

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才能使用顶点数组对象。 因此,对于特定的仿真器来说这似乎是徒劳的。

您知道是否可以在任何现有的Android仿真器(第三方或其他)上的OpenGL ES中使用顶点数组对象? 如果是这样,怎么办?

据官方统计,这是应该由支持<d:gl-extensions>标签中devices.xml用户目录下的,但是从我可以告诉从环顾四周 ,这个功能目前是不起作用的。 它可能曾经在过去的某个时间运行过,但如果成功了,那么截至目前为止,它不再适用于最新的NDK和Android Studio版本。 (因此,请允许我提供更多更好的答案。)

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)您需要编辑模拟器图像,转到硬件部分,然后添加“ GPU Emulation”并将其设置为true。

2)仿真器存在一个错误,因此此行:“ final booleansupportsEs2 = configurationInfo.reqGlEsVersion> = 0×20000;”不起作用。 它将始终返回false。 您可以添加“ || Build.FINGERPRINT.startsWith(“ generic”)“或简单地注释掉这些检查,并假设在模拟器上运行时支持OpenGL ES 2。

3)如果崩溃并显示“未找到配置”,请尝试在调用“ setRenderer(...)”之前添加以下行:“ glSurfaceView.setEGLConfigChooser(8、8、8、8、16、0);”

尝试这个。

不确定您的应用程序与Android平台之间的联系如何,但是我想您可以使用Adreno,PowerVR或Mali SDK的仿真器来适应和测试您的核心3D引擎。 除了libEGL和libGLESv2库之外,还有一些可用的辅助工具,包括OpenGL-ES的实时调试。

编辑:VAO是GLES 3.0的核心功能。 这些函数是glDeleteVertexArrays,glGenVertexArrays和glBindVertexArray的别名。 因此,如果SDK提供对GLES 3.0的支持,则它确实支持OES_VERTEX_ARRAY_OBJECTS。

重要信息:根据SDK要求,确保您的PC支持OpenGL 3.x或更高版本。

我正在使用上述SDK库为Android的OpenGL-ES Java API开发模拟器。 它处于起步阶段,可能现在对您没有帮助,但是它运行了一些简单的示例。 开发此Java模拟器的原因之一是OS模拟器(如Genymotion等)对GLES的支持有限。 现在,我可以依靠GPU制造商的本地SDK。 https://github.com/AlessandroBorges/madri-gles

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM