关键字 View

  • SurfaceView
  • GLSurfaceView
  • TextureView

这三个后缀都是View, 所以这三个东西都是用来显示的, 和普通的View差不多, 类似TextView等。

发展历史:

SurfaceView 出现最早, 解决类似视频播放的问题(可以用单独一个线程来渲染UI)。后来发现用起来不方便, 渲染线程需要单独编写, 一大堆都可以独立成模板。

所以就出现了 GLSurfaceView, 概括一句话就是:使用了模板的 SurfaceView

再后来发现GLSurfaceView不能根据屏幕的变化而变化, 这是由于GLSurfaceView同应用的Surface不是在同一层导致的问题。

人们就想到把这个GLSurfaceView弄到应用的Surface中, 所以就产生了TextureView。

关键字 Texture

  • SurfaceTexture

它不是用来显示给用户看的, 而是一个Texture, 意思是纹理,可以想象成一个View的中间件。

举个例子:

  1. Camera 把视频采集的内容交给 SurfaceView, 就变成了照相机。
  2. Camera 把视频采集的内容交给 SurfaceTexture, SurfaceTexture 在对内容做个美颜, 然后SurfaceTexture 再把内容交给 SurfaceView, 就变成了美图秀秀。

详细点说:

SurfaceView

它继承自类View,因此本质上是一个View。但与普通View不同的是,它有自己的Surface(用来保存像素数据的保留内存区域)。

优点

  • 它与宿主窗口是分离的。这样的好处是对这个Surface的渲染可以放到单独线程去做,渲染时可以有自己的GLContext,它不会影响主线程对事件的响应。

缺点

  • 因为这个Surface不在View hierachy中,它的显示也不受View的属性控制,所以不能进行平移,缩放等变换,也不能放在其它ViewGroup中,一些View中的特性也无法使用。

GLSurfaceView

在SurfaceView的基础上,它加入了EGL的管理,并自带了渲染线程。另外它定义了用户需要实现的Render接口,提供了用Strategy pattern更改具体Render行为的灵活性。作为GLSurfaceView的Client,只需要将实现了渲染函数的Renderer的实现类设置给GLSurfaceView即可。

EglHelper作用(GLSurfaceView包含了EGL,已经帮我们做了)

  • 管理EGL环境。EGL既然做平台和OpenGL ES的中间件那EGL做的就肯定是和平台息息相关的事。
  • 创建绘图窗口。也就是所谓的FrameBuffer,FrameBuffer可以显示到屏幕上(SurfaceView)
  • 创建渲染环境(Context上下文)。渲染环境指OpenGL ES的所有项目运行需要的数据结构。如顶点、片段着色器、顶点数据矩阵。

OpenGL渲染一般流程

  • 线程创建-获取显示设备-初始化egl-选择配置-创建上下文-渲染-销毁上下文-线程销毁

GLThread

  • 渲染线程的工作

TextureView

它可以将内容流直接投影到View中,可以用于实现Live preview等功能。和SurfaceView不同,它不会在WMS中单独创建窗口,而是作为View hierachy中的一个普通View,因此可以和其它普通View一样进行移动,旋转,缩放,动画等变化。值得注意的是TextureView必须在硬件加速的窗口中。

SurfaceTexture

可进行图像流数据二次处理(如Camera滤镜,桌面特效等)。

和SurfaceView不同的是,它对图像流的处理并不直接显示,而是转为GL外部纹理,比如Camera的预览数据,变成纹理后可以交给GLSurfaceView直接显示,也可以通过SurfaceTexture交给TextureView作为View heirachy中的一个硬件加速层来显示。

SurfaceView、GLSurfaceView、SurfaceTexture、TextureView简单对比相关推荐

  1. 主流WEB开发语言简单对比(转)

    主流WEB开发语言简单对比  原文链接:http://www.uml.org.cn/site/201401091.asp   随着时间的飞逝,随着岁月的流失.从世界上第一台计算机ENIAC诞生至今,已 ...

  2. 关注Cortex-M处理器,M0、M3、M4简单对比

    最近在关注Cortex-M处理器,针对目前进入大众视野的M0.M3.M4做了如下简单对比,内容来自ARM等官网,这里仅仅是整理了下,看起来更直观点,呵呵. Cortex-M 系列针对成本和功耗敏感的  ...

  3. sql和python的区别_数据处理简单对比:Excel,SQL,Python

    前言 无论是什么工具,做数据分析的时候一定会涉及到两类工作: 合并多个关联表 做数据透视表 这篇文章简单对比一下Excel.SQL和Python在这两类任务上的实现过程,从而对比其异同. 用到的数据表 ...

  4. 坐火车卧铺,到底是上、中、下哪个好?其实简单对比一下就知道了

    坐火车卧铺,到底是上铺好还是下铺好?其实简单对比一下就知道了 我们出行,长途旅行经济有实惠的方式,当然大部分人还是会选择火车这一种简单快捷的手段,而且可以根据自己的长短距离自行选择是座位票,还是躺票, ...

  5. 不同CPU的MATLAB性能表现的简单对比方法

    MATLAB性能表现 小结:程序不同,无法一概而论.可以分为两部分:1.多线程,2.浮点数.[好像说了一堆众所周知的废话] 参考网址 https://www.mathworks.com/support ...

  6. 阿里云、腾讯云、七牛、网易云CDN简单对比

    阿里云.腾讯云.七牛.网易云简单对比如下, 仅做参考: 1.产品功能 产品功能 阿里云视频 腾讯云视频 七牛直播云 网易云视频 服务 直播 点播 转码 互动直播 直播 点播 转码 互动直播 直播 点播 ...

  7. .NET轻量级MVC框架:Nancy入门教程(二)——Nancy和MVC的简单对比

    在上一篇的.NET轻量级MVC框架:Nancy入门教程(一)--初识Nancy中,简单介绍了Nancy,并写了一个Hello,world.看到大家的评论,都在问Nancy的优势在哪里?和微软的MVC比 ...

  8. Nancy和ASP.NET MVC的简单对比

    Nancy的优势在哪里?和微软的MVC比有什么不同,哪个更好?Nancy是否可以脱离IIS等等,那么今天就拿MVC和Nancy做个简单的对比吧. 今天主要讲理论的东西,不写代码,文章中所提到的配置,只 ...

  9. M0、M3、M4简单对比

    最近在关注Cortex-M处理器,针对目前进入大众视野的M0.M3.M4做了如下简单对比,内容来自ARM等官网,这里仅仅是整理了下,看起来更直观点,呵呵. Cortex-M 系列针对成本和功耗敏感的  ...

最新文章

  1. python 数字循环
  2. 绿色信托任重道远 应建立补偿机制?
  3. 利用SAP FR高效预测客户需求
  4. 云原生高可用技术体系的构建
  5. CentOs7安装apache以及遇到的问题
  6. 《响应式Web设计性能优化》一2.1 性能度量基础
  7. 看到碟摊上有D版的《阿猫阿狗2》
  8. liunxu mysql_Liunx下安装MySql
  9. mysql语句engin_MySQL必会的SQL语句
  10. java输出object object_js控制台显示[object Object]问题
  11. lede旁路由作用_高频旁路电容器作用及工作原理
  12. Flash Builder 找不到Adobe Flash Player或者Flash Builder 找不到debug版本的解决方法
  13. NodeJS收发GET和POST请求
  14. 《啊哈!算法》-----系列更新暂时停止
  15. System level Programming study(1)
  16. 如何查看计算机的硬盘序列号,电脑硬盘序列号怎么查?一招查看硬盘序列号的简单方法...
  17. 中国网络游戏行业发展模式创新与投资前景调研报告2021-2027年
  18. 一周搜索热点20170528
  19. mac删除的文件还能找回吗
  20. 超级警探大战悍匪2java_Java笔记一

热门文章

  1. iPhone销量低迷,或导致苹果放弃自动驾驶项目?
  2. Exchange数据库无法装载的问题
  3. android 多用户管理UserManager
  4. 选择HttpHandler还是HttpModule?
  5. vue数据源转json问题
  6. python基础补充
  7. linux下C++ 插件(plugin)实现技术
  8. iOS使用多线程提高数据并发访问 之七
  9. 网络字节序,主机字节序,地址转换函数
  10. Altium Designer 发现的机密