之前的文章(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当前画面相关推荐

  1. VBO, PBO与FBO(三)

    VBO, PBO与FBO(三) (2008-08-14 22:52:28) <script> var $tag='fbo,framebuffer,opengl,extension,it'; ...

  2. 天蓝色在ps中的色值_天蓝色云上的机器学习

    天蓝色在ps中的色值 Data Science & Azure Machine Learning Service - An introduction 数据科学和Azure机器学习服务-简介 B ...

  3. 天蓝色在ps中的色值_用天蓝色构建混合云

    天蓝色在ps中的色值 In this day and age who would bother developing solutions on anything but the public clou ...

  4. 天蓝色在ps中的色值_天蓝色AI服务在游戏世界中的作用

    天蓝色在ps中的色值 Welcome Back Readers, 欢迎读者, 介绍 (Introduction) I am Dhruv Trehan, Microsoft Student Partne ...

  5. [FFMpeg开发]视频转高质量GIF优化方案(接近ps生成效果),从原理剖析

    摘要 虽然此前有人发过了,但是这个博主没有分析原理并且没有提炼出来.不适合开发者学习. 所以我只是进行二次优化,原文高质量视频转gif 此前,做产品的时候,产品用到了ffmpeg框架,手上几个ffmp ...

  6. layui table 表格两种赋值方式下,data分页效果有效, url分页效果的失效 问题的解决。

    layui table 表格两种赋值方式下,data分页效果有效, url分页效果的失效 问题的解决. 参考文章: (1)layui table 表格两种赋值方式下,data分页效果有效, url分页 ...

  7. js + jquery 两栏Tab鼠标移入显示/隐藏的效果(详)

    学习文献: 必须要掌握的原生JS实现JQuery 了解了这些才能开始发挥jQuery的威力 - 谦行 – JavaScript和jQuery两款TAB选项卡示例 -- 西门 jquery原创分享社区 ...

  8. php下雨效果源码,ps下雨效果制作步骤

    ps下雨效果制作步骤:首先打开ps软件,并导入一张图片素材:然后新建一个透明图层,并选择填充工具,将填充图层为白色:接着点击菜单栏的滤镜选项,并在弹出的列表选择像素化:最后在点状化的设置窗口中调整参数 ...

  9. matlab ps液化,photoshop液化工具崩溃怎么办 ps液化工具崩溃解决方法

    photoshop液化工具崩溃怎么办?photoshop液化工具在使用过程中遇到问题了该怎么解决呢?下文小乐哥给大家介绍ps液化工具崩溃解决方法,一起来了解下吧! photoshop液化工具可以令图像 ...

最新文章

  1. 阿里云Redis多线程性能提升思路解析
  2. 在Eclipse中创建Maven多模块工程的例子
  3. 通过ssh建立点对点的隧道,实现两个子网通信
  4. 深数据 - Deep Data
  5. 如何给网站瘦身?图文并茂的前端性能优化指南
  6. 每日程序C语言48-字符串排序
  7. idea 编写javafx_用JavaFX编写图块引擎
  8. 容器编排技术 -- Kubernetes 为 Namespace 配置Pod配额
  9. 【转】【最小树形图】有向图的最小生成树【朱刘算法】
  10. 洛谷——P1100 高低位交换
  11. 使用Supervisor让你的Swift Perfect服务器项目后台运行
  12. 微型计算机主要特点有哪些,微型计算机的主要特点是什么呢?
  13. Cesium加载GeoJson数据
  14. UBT26:ubuntu安装genymotion安卓模拟器
  15. mysql随机生成中文姓名_mysql 生成随机手机号和随机中文名-阿里云开发者社区
  16. eclipse、myeclipse大代码格式化 (自动对齐) 功能,太长的行会被强制换行
  17. SqlServer 查询一段时间,没有数据自动补充0
  18. 阿里云短信服务(无需营业执照)快速上手
  19. Android Studio中模拟器如何输入中文、将模拟器语言设置为中文
  20. 通过手机访问计算机FTP服务器

热门文章

  1. 淘宝商品信息定向爬虫实例
  2. java数据结构与算法003
  3. 甜蜜好礼丨这个七夕不再孤寡孤寡孤寡~
  4. 叫我修吧与宜联打印 达成全面战略合作
  5. Linux LiveCD U盘制作及演示
  6. python题目:石头剪刀布1.0 (人与电脑)
  7. JAVA中Integer的==和equals
  8. 脉诊(切脉、诊脉、按脉、持脉)之法——入门篇
  9. 香橙派使用笔记(一)
  10. 厦门Android开发三年,工资不到1w,敢问路在何方?