Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 在NativeActivity中创建OpenGL着色器大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经调整了本机活动NDK示例以合并来自Hello-gl2示例的OpenGL代码.我处理APP_CMD_INIT_WINDOW消息,然后尝试创建着色器.着色器创建失败,我尝试通过getShaderInfoiv获取信息,但是它也会无声地失败.

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

附:我知道,如果你使用Java GLSurfaceView和不正确的线程创建它们着色器创建可能会失败,但看着本地活动的样品,它只是似乎有一个线程!

解决方法

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

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

好的,如何在本代码中创建适当的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,EGL_RED_SIZE,EGL_NONE
};

在eglChooseConfig(display,attribs,& config,1,& numConfigs);.

其次,后来在创建上下文时使用

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

in 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着色器全部内容,希望文章能够帮你解决android – 在NativeActivity中创建OpenGL着色器所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。