gpt4 book ai didi

android - 在 NativeActivity 中创建 OpenGL 着色器

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:29:37 24 4
gpt4 key购买 nike

我调整了 native Activity NDK 示例以合并 hello-gl2 示例中的 OpenGL 代码。我处理 APP_CMD_INIT_WINDOW 消息,然后尝试创建着色器。着色器创建失败,我尝试通过 getShaderInfoiv 获取信息,但同样失败。

所以我的问题是 - 如何在纯原生 Android 应用程序中创建 OpenGL ES 2.0 着色器?

附言我知道如果您使用 Java GLSurfaceView 并且没有在正确的线程中创建它们,着色器创建可能会失败,但是查看 native Activity 示例,它似乎只有一个线程!

最佳答案

当然可以在原生 Android 应用程序中创建 OpenGL ES 2.0 着色器。关键是使用正确的 OpenGL ES 2.0 上下文。我在我的应用程序中做了类似的事情,即在 native 部分初始化 EGL 上下文,然后仅在 native 代码中创建(和使用)着色器。根据我设法做到的,我认为您想要做的也是完全可能的。

由于我在 Java 代码中有一个入口点(没有使用 NativeAcvity 机制),我还必须将 native 窗口句柄 (EGLNativeWindowType) 从 java 传递到 C++,以便在 native 代码中创建 EGL 表面.但是,由于您想简单地修改 NativeActivity 示例,因此您可以使用 engine->app->window 创建 EGL 表面,如 NativeActivity main.c 示例中所示。

好的,如何在 native 代码中创建适当的 OpenGL ES 2.0 上下文?我刚刚对 NativeActivity 示例中的 main.c 文件进行了两项更改并检查了它是否有效。

首先,使用了下面的EGL属性

const EGLint attribs[] = {
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, //important
EGL_BLUE_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_RED_SIZE, 8,
EGL_NONE
};

eglChooseConfig(display, attribs, &config, 1, &numConfigs); 中。

其次,稍后在创建上下文中使用

const EGLint attrib_list [] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE};

context = eglCreateContext(display, config, NULL, attrib_list);

我保留了其余代码不变。我打印了一些信息以确保正在使用 OpenGL ES 2.0:

I/native-activity(  955): Details: [Version: OpenGL ES 2.0 1403843], [Vendor: Qualcomm], [Renderer: Adreno 205], [Extensions: GL_AMD_compressed_3DC_texture GL_AMD_compressed_ATC_texture ... ]

希望对您有所帮助!

关于android - 在 NativeActivity 中创建 OpenGL 着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8764454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com