wuhaoyu1990 / MagicCamera

Real-time Filter Camera&VideoRecorder And ImageEditor With Face Beauty For Android---包含美颜等40余种实时滤镜相机,可拍照、录像、图片修改

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

如何实现多个纹理融合

github2016-yuan opened this issue · comments

您好,运行了您的项目,效果很好。看到有人说JNI报错,我来说下我的理解,给大家一点参考:实际上是完全不需要JNI的,因为JNI涉及到两种转换,效率不高。我就直接删除了项目中的JNI部分,一样可以运行。采用全程走shader的方式才是最快的。
有个问题请教大家:我想实现多种纹理的融合效果:比如现在对手机摄像头获取的数据进行滤波或者美颜,但是不论是滤波还是美颜,用的都是一个纹理。我现在想用两个纹理,除了原有的摄像头数据生成的纹理,再往shader中传入一张图片。然后对这两个纹理进行融合。这里我使用了GPUImage(iOS平台上一个很好的第三方库)的函数setBitMap。现在对现在这个工程进行了改变,不再让各种滤波继承GPUImage,而是继承GPUImageTwoInputFilter,这样就可以使用setBitMap直接将图片传入shader,然后图片纹理和视频纹理在shader中进行融合。
现在mFilterSecondTextureCoordinateAttribute = GLES20.glGetAttribLocation(getProgram(), "inputTextureCoordinate2");类似的这种获取Attribute位置的函数的返回值都是正值(我理解返回值应该是正确的)。但是奇怪的是我加入的图片纹理在shader中却无法使用,直接报错退出。错误信息为:SIGSEGV (signal SIGSEGV: invalid address (fault address: 0x0))。所以现在的工作就卡在了这里没法进行。

如果有谁在研究类似的工作或者有任何的solution,请与我讨论。