android jni assets文件路径,Android NDK从Assets目录下读取shader文件 ? 琢 · 磨

好久没写文章了,最近花了几天时间来学习Android NDK下的OpenGL ES 2.0编程,其实有Opengl基础的人转战ES是很容易上手的,特别是NDK用的也是c/c++。在写shader的时候,我们大都习惯从外部读取shader文件,所以我的想法是把shader文件打包进apk中安装时自动释放然后找到文件路径,在ndk中指定我要读的文件名,然后把读取内容交给ndk来处理。

这里关于文件定位有三种方法

第一种是把文件释放到类似sd卡或者内置存储内存这些存储器上的某个固定路径,然后在读取文件,这种比较简单,缺点是shader文件直接暴露给用户了。

第二种是把shader文件放入res/raw目录下,这样在R.java中就有了shader文件的资源号,可以通过资源号直接读取文件,然后传递给ndk部分,这种方法非常好,shader文件不会暴露给用户,但是缺点是资源编号只能在java部分引用,也就是说读取哪些文件实在java部分指定的,当然可以在ndk部分可以加一些处理来实现在ndk中指定我要读取的文件,但是就有点略显繁琐了。

所以我们采用第三种方法,就是利用android自带的Assets目录来实现。

1. 首先在java代码中任意一个类中实现一个静态方法 getAssetContents(),这里我的例子把这个方法定义在了

org.mixsec.wzs.cube下的GL2CubeJNILib类中了, 注意这里包和类的名字后面ndk部分会用到。

代码如下

publicstaticAssetManagerassMgr;

publicstaticbyte[]getAssetContents(Stringpath)throwsIOExcep


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部