Framework之渲染流程:应用阶段及几何处理阶段

导读:本篇文章讲解 Framework之渲染流程:应用阶段及几何处理阶段,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

什么是图元:

通常是三角形,线段,顶点等图形,所有的复杂几何图形都是由这些构成的

在Android的Surface中用Bitmap来表示。

应用阶段

这个是CPU完全负责的,CPU负责生成图元,后面的其他步骤就是GPU去负责了

对应于安卓移动端来说其实就是onDraw传入的canvas,Java中的Surface就是null,而canvas是在Surface通过lockCanvas得到的画布,onDrawa调用完成后 之后会调用Surface的unLockCanvas释放掉画布(java中的Surface是null,真正做处理的是native的Surface),Native的Surface接收到后转换成Bitmap存储在DisplayList中,稍后会通知RenderThread去做渲染处理

RenderThread接受到之后会从DisplayLis中取出Bitmap通过OpenGl函数库(可直接利用GPU渲染)将数据存储到FrameBuffer中,SurfaceFlinger和Display的关系目前还未明白,之后反正就是屏幕会去FrameBuffer中取出数据进行“画家算法”渲染,由于某些图层是需要在多个图层合成后再进行添加,所以故而出现了离屏渲染,GPU除了单独开辟一块和Display一样大小的FMBuffer空间,还需要开放一块单独的offScreenFmBuffer空间,效率上 如果此时GPU正将像素数据输出到FMBuffer中此时收到离屏渲染的数据时不得不放弃此次所有内容的输出而且还会进行上下文切换造成性能开销。所以在ios上UI 的阴影之类的会造成离屏渲染。(后面分析离屏渲染的解决)

GPU:

Framework之渲染流程:应用阶段及几何处理阶段

几何处理阶段:处理图元

主要工作:计算纹理,光照(后续片段着色器上色用),将图元转换成Virtex并连接,添加额外的Virtex生成更复杂的几何图形

上次将Surface转换成Bitmpa后这个对应的好像就是图元,然后GPU区在对图元进行处理生成新的图元,主要由这些处理器处理:

  • 顶点着色器:将图元中的顶点信息进行视角转换,添加光照信息,增加纹理等操作。
    Framework之渲染流程:应用阶段及几何处理阶段
  • 形状装配:图元中的三角形,线段,点对应三个Vertex,两个Vertex,一个Vertex。这个阶段会将Vertex连接成对应的形状。
  • 几何着色器:添加额外的Vertex,将原始图元转换成新图元,以构建一个不一样的模型,简单说就是通过三角形,线段和点来构建更复杂的几何图形。

作者:北洋
链接:https://juejin.cn/post/7124910183859355655
转载平台:掘金

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/118843.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!