使用两个FBO互相绑定实现PS液化效果(2)_使用PBO保存FBO当前画面
之前的文章(11条消息) 使用两个FBO互相绑定实现PS液化效果_cjzcjl的博客-CSDN博客
基于两个FBO之间,互相错开使用,互为纹理和输出FrameBuffer,实现效果在两个FBO之间不断迭代的纯shader液化工具。但那时候没有写保存逻辑,今天心血来潮就使用PBO顺便补充一下吧:
首先在创建完FBO之后,创建一个封包用的PBO——和解包用的PBO不同,封包用的PBO是指打包数据用的:
//生成PixelBufferObject纹理pointer(因为只要取走纹理中的数据,不用更新,所以一个PBO够了)mPixelBuffferPointerArray = new int[1];GLES30.glGenBuffers(1, mPixelBuffferPointerArray, 0);GLES30.glBindBuffer(GLES30.GL_PIXEL_PACK_BUFFER, mPixelBuffferPointerArray[0]);GLES30.glBufferData(GLES30.GL_PIXEL_PACK_BUFFER, mFrameBufferWidth * mFrameBufferHeight * 4, null, GLES30.GL_STREAM_DRAW);
接下来,当每次绘图完成时调用如下方法:
private void saveImgByPBO() {GLES30.glBindBuffer(GLES30.GL_PIXEL_PACK_BUFFER, mPixelBuffferPointerArray[0]);GLES30.glReadPixels(0, 0, mFrameBufferWidth, mFrameBufferHeight, GLES30.GL_RGBA, GLES30.GL_UNSIGNED_BYTE, 0);//将OpenGL缓存区映射到客户端内存ByteBuffer byteBuffer = (ByteBuffer) GLES30.glMapBufferRange(GLES30.GL_PIXEL_PACK_BUFFER, 0, mFrameBufferWidth * mFrameBufferHeight * 4, GLES30.GL_MAP_READ_BIT);if (byteBuffer != null) {mSaveBmp = Bitmap.createBitmap(mFrameBufferWidth, mFrameBufferHeight, Bitmap.Config.ARGB_8888);mSaveBmp.copyPixelsFromBuffer(byteBuffer);} else {Log.e("cjztest", "保存图像失败");}//取消内存映射GLES30.glUnmapBuffer(GLES30.GL_PIXEL_PACK_BUFFER);GLES30.glBindBuffer(GLES30.GL_PIXEL_PACK_BUFFER, 0);}
注意所有GL操作都要在GL线程下进行,因此不能直接在安卓UI线程中调用该方法,而是应该先设置好标志,等下一次drawCall到来时,根据标志位调用该逻辑,是一个必须异步的操作来的。
具体代码:
app/src/main/java/com/cjz/littleps/MainActivity.java · lvlv/learnOpengl - 码云 - 开源中国 (gitee.com)
最终效果如下,右下角就是拿到的Bitmap所呈现的样子:
通过PBO保存当前绑定的FrameBuffer画面
使用两个FBO互相绑定实现PS液化效果(2)_使用PBO保存FBO当前画面相关推荐
- VBO, PBO与FBO(三)
VBO, PBO与FBO(三) (2008-08-14 22:52:28) <script> var $tag='fbo,framebuffer,opengl,extension,it'; ...
- 天蓝色在ps中的色值_天蓝色云上的机器学习
天蓝色在ps中的色值 Data Science & Azure Machine Learning Service - An introduction 数据科学和Azure机器学习服务-简介 B ...
- 天蓝色在ps中的色值_用天蓝色构建混合云
天蓝色在ps中的色值 In this day and age who would bother developing solutions on anything but the public clou ...
- 天蓝色在ps中的色值_天蓝色AI服务在游戏世界中的作用
天蓝色在ps中的色值 Welcome Back Readers, 欢迎读者, 介绍 (Introduction) I am Dhruv Trehan, Microsoft Student Partne ...
- [FFMpeg开发]视频转高质量GIF优化方案(接近ps生成效果),从原理剖析
摘要 虽然此前有人发过了,但是这个博主没有分析原理并且没有提炼出来.不适合开发者学习. 所以我只是进行二次优化,原文高质量视频转gif 此前,做产品的时候,产品用到了ffmpeg框架,手上几个ffmp ...
- layui table 表格两种赋值方式下,data分页效果有效, url分页效果的失效 问题的解决。
layui table 表格两种赋值方式下,data分页效果有效, url分页效果的失效 问题的解决. 参考文章: (1)layui table 表格两种赋值方式下,data分页效果有效, url分页 ...
- js + jquery 两栏Tab鼠标移入显示/隐藏的效果(详)
学习文献: 必须要掌握的原生JS实现JQuery 了解了这些才能开始发挥jQuery的威力 - 谦行 – JavaScript和jQuery两款TAB选项卡示例 -- 西门 jquery原创分享社区 ...
- php下雨效果源码,ps下雨效果制作步骤
ps下雨效果制作步骤:首先打开ps软件,并导入一张图片素材:然后新建一个透明图层,并选择填充工具,将填充图层为白色:接着点击菜单栏的滤镜选项,并在弹出的列表选择像素化:最后在点状化的设置窗口中调整参数 ...
- matlab ps液化,photoshop液化工具崩溃怎么办 ps液化工具崩溃解决方法
photoshop液化工具崩溃怎么办?photoshop液化工具在使用过程中遇到问题了该怎么解决呢?下文小乐哥给大家介绍ps液化工具崩溃解决方法,一起来了解下吧! photoshop液化工具可以令图像 ...
最新文章
- 阿里云Redis多线程性能提升思路解析
- 在Eclipse中创建Maven多模块工程的例子
- 通过ssh建立点对点的隧道,实现两个子网通信
- 深数据 - Deep Data
- 如何给网站瘦身?图文并茂的前端性能优化指南
- 每日程序C语言48-字符串排序
- idea 编写javafx_用JavaFX编写图块引擎
- 容器编排技术 -- Kubernetes 为 Namespace 配置Pod配额
- 【转】【最小树形图】有向图的最小生成树【朱刘算法】
- 洛谷——P1100 高低位交换
- 使用Supervisor让你的Swift Perfect服务器项目后台运行
- 微型计算机主要特点有哪些,微型计算机的主要特点是什么呢?
- Cesium加载GeoJson数据
- UBT26:ubuntu安装genymotion安卓模拟器
- mysql随机生成中文姓名_mysql 生成随机手机号和随机中文名-阿里云开发者社区
- eclipse、myeclipse大代码格式化 (自动对齐) 功能,太长的行会被强制换行
- SqlServer 查询一段时间,没有数据自动补充0
- 阿里云短信服务(无需营业执照)快速上手
- Android Studio中模拟器如何输入中文、将模拟器语言设置为中文
- 通过手机访问计算机FTP服务器