任何Android仿真器都支持OpenGL ES顶点数组对象吗? 我一直试图在C++中使用VAOs使用Android NDK运行代码,并在模拟器上运行。我希望能够使用glDeleteVertexArraysOES,glGenVertexArraysOES和glbindVertexArraySoES

任何Android仿真器都支持OpenGL ES顶点数组对象吗? 我一直试图在C++中使用VAOs使用Android NDK运行代码,并在模拟器上运行。我希望能够使用glDeleteVertexArraysOES,glGenVertexArraysOES和glbindVertexArraySoES,android,c++,opengl-es,android-emulator,Android,C++,Opengl Es,Android Emulator,我发现emulator无法运行代码,即使我使用OpenGL ES 2并使用此解决方案动态链接扩展: 我在运行API级别19和GPU加速的Nexus 4仿真器上运行了glGetString(GL_扩展),得到了以下结果: 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_linea

我发现emulator无法运行代码,即使我使用OpenGL ES 2并使用此解决方案动态链接扩展:

我在运行API级别19和GPU加速的Nexus 4仿真器上运行了
glGetString(GL_扩展)
,得到了以下结果:

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\u OES\u vertex\u array\u object
才能使用顶点数组对象。因此,它看起来像是一个特定的模拟器不去


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

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);
    }

}
它来自


需要将参数更改为emulator

1) 您需要编辑仿真器映像,转到硬件部分,添加“GPU仿真”并将其设置为true

2) 仿真器有一个bug,因此这行代码“final boolean SupportsS2=configurationInfo.reqGlEsVersion>=0×20000”不起作用。它总是返回false。您可以添加“| | Build.FINGERPRINT.startsWith”(“generic”)”或简单地注释掉这些检查,并假设在emulator上运行时支持OpenGL ES 2

3) 如果它因“找不到配置”而崩溃,请尝试在调用“setRenderer(…)”之前添加此行:“glSurfaceView.setEGLConfigChooser(8,8,8,8,16,0);”


试试这个。

正式地说,这应该由用户目录下的
标签支持,但从我的判断来看,这个功能目前不起作用。它可能在过去的某个时候起过作用,但如果真的起了作用,那么到目前为止,最新的NDK和Android Studio版本就不再起作用了。(因此,如果有更好的答案,我很感激。)

不确定您的应用程序与Android平台的关联程度,但我想您可以使用Adreno、PowerVR或Mali SDK的模拟器来调整和测试您的核心3D引擎。 除了libEGL和libGLESv2 libs之外,还有一些配套工具,包括opengles的实时调试

编辑:VAO是GLES 3.0的核心功能。这些函数是GLDeleteVertexArray、GLGenVertexArray和glBindVertexArray的别名。因此,如果SDK支持GLES 3.0,那么它确实支持OES_VERTEX_ARRAY_对象

重要提示:根据SDK要求,确保您的电脑支持OpenGL 3.x或更高版本

我正在使用上述SDK库为Android的OpenGL ES Java API开发一个模拟器。它处于非常早期的阶段,现在可能对您没有帮助,但它运行了一些很好的简单示例。开发此java仿真器的原因之一是操作系统仿真器(如Genymotion和其他仿真器)对GLE的支持有限。现在我可以依赖GPU制造商的原生SDK了。

如果emulator使用硬件加速GLE,则这些功能是否可用取决于主机上的实际实现。我认为这不一定是真的。我运行的2014年中期MacBook Pro的模拟器与英伟达GeFrand GT 750M 2048 MB,当我运行GelGeStand(GLUX扩展)在模拟器中,它报告说,它不支持顶点数组对象扩展。当我运行glGetString(GLES20.GL_版本)时,它报告说它只支持2.0版本。如果它使用了主机GPU的所有功能,我希望它支持OpenGL ES 3.0,但我想我并不完全理解这一点。应用程序可以请求特定版本的GLES上下文(或多或少),如果它只获得2.0,则不一定能获得所有后续功能,即使GPU能够做到这一点。如果
glGetString
返回了2.0,则最终得到了2.0。仿真器可能请求了它。也许你甚至可以在一些设置对话框中更改它。但我以前从未使用过AndroID模拟器,所以我不知道。不过,我也不知道nvidia如何处理OES扩展。官方看来,这应该由用户目录下的
标记支持,但从我的经验来看,它目前不起作用。它可能在过去的某个时候起过作用,但如果真的起了作用,那么在最新的NDK和Android Studio版本中就不再起作用了。自本评论发表之日起,如果您使用扩展,AFAICT.OpenGL 2.0仍然可以支持顶点数组对象。如果我只能通过emulator访问OpenGL 2.0,有没有办法使用这些扩展?这仍然是可能的。我更新了我的答案,更改了参数,如果这对你的分数答案有效,我发现很多人都面临这个问题。这将帮助他们。你的观点(1)表明你不理解这个问题。OP询问模拟器中的GL_OES_*扩展支持。这个答案目前并没有解决这个问题。这里的问题是OpenGL ES扩展的模拟器支持,特别是在这个特殊情况下,OES_VERTEX_ARRAY_对象。如果你能提供可靠的证据表明,ADRIO、PowerVR或Mali仿真器提供了这个功能,我可以考虑你的赏金。除了谷歌角,来自AdReo、马里和PowerVR的AfAIK SDK确实支持OESI VisteXARAYAY对象扩展,包括ValueBundTrimeRayayOES(UIN数组)功能;DeleteVertexArraysOES(大小n,常数*数组);void GenVertexArraysOES(sizei n,uint*数组)和boolean IsVertexArrayOES(uint数组);由于操作系统模拟器(如Genymotion、VMBox等)的限制,它们无法提供所有扩展,也无法提供完整的操作系统主机OpenGL功能。那个