skia

一款模仿虚幻蓝图的net组件

别等时光非礼了梦想. 提交于 2020-08-14 05:26:02
先看效果图 初衷呢是想搞一个机器学习的可视化展示,做着做着发现可以做通用的可视化蓝图组件,既可以做思维导图,脑图,一些结构,也可以像虚幻引擎和unity动画引擎一样,配合游戏编辑器做成可视化脚本生成,为此专门设计了自由度极高的架构,上面的每段线条,每个节点,节点标题颜色内容,节点互相通信,动态唤醒,既可以做成静态展示,也可以做成实时运算,例如每个节点像跑马灯一样动态展示。不过这个要自己扩展,这是功能上的一些东西。 下面呢说下整个原理,这个蓝图组件我使用了skia的net跨平台封装skiasharp,为什么要用skia呢,这个其实和我前段时间研究cef内核确定的,因为cef底层绘图使用的是skia,又跨平台性能又高,绘制方面使用了DirectUI概念的绘制,基本上作者换个蓝图组件就相当于开发了一套DirectUI界面库,只不过相对于一款界面库来说完成度不是太高,只完成了界面引擎的核心调度绘制,缺少了,比如按钮Button ListBox 等等常用组件,然后核心写完,优化了绘制通知,鼠标交互的部分节点会重新通知计算绘制,这样的话性能会提升,还一个就是加入了脏矩形的绘制检测通知,也就是更细粒度控制哪些需要计算哪些需要绘制何时绘制等等,基本上就没什么了 再放几张gif看看 来源: oschina 链接: https://my.oschina.net/KFS/blog/4406712

Flutter性能优化实践 —— UI篇

白昼怎懂夜的黑 提交于 2020-08-13 23:07:00
原作者:唯鹿 来源:掘金 1.前言 flutter_deer这个项目开源也近一年了,目前收获了3100+的star,这无疑是对这个项目的最大认可。虽然从功能和UI看来和一年前的没什么区别。不过这期间我不断在优化它,希望它的性能和体验越来越好。这篇集中整理了deer在UI流畅上的优化细节,以实践为主,源码为辅。分享出来,希望对你有所启发和帮助。 既然要优化,那么首先就要掌握定位问题、分析性能问题的方法,这样才可以对比优化前后的效果。具体方法这里我就不详细介绍了,可以参考官方文档,或是看这个视频:Flutter 的性能测试和理论。 在官方文档中,性能分析需要确保 使用真机并在profile模式下运行 。不过我们可以使用debug模式来寻找卡顿,因为我觉得它可以放大你的“问题”。 下面正式进入正题。(为了显得口语化一点,我会将Flutter的构建(build)用“刷新”表示。本篇源码基于Flutter SDK版本 1.17.0) 2.控制刷新范围 我们使用setState方法就可以轻松刷新页面,但是要尽力控制刷新范围。我举一个例子: 在注册账户时,通常需要获取验证码。这时会有一个倒计时功能,那么我们就需要每隔一秒刷新一下这个倒计时数字并显示出来。 如果这个倒计时的逻辑处理你放在了注册页面,那么每当setState时都是一整个页面的刷新。而这整页刷新显然是不必要的。而它并不会让你感知到卡顿

文字渲染一探

爷,独闯天下 提交于 2020-08-12 20:10:33
引子 近一个月都在与字体打交道,查阅了不少资料。 发现国内很少有这方面的一些资源,有点奇怪。 故此,想稍微梳理一下这方面的一些资料以及信息,方便对这方面感兴趣的朋友参阅。 文字渲染的组成 文字渲染严格意义上来说包含几个主要的核心模块,分别是: 1.字体光栅化 FreeType 它是一个软件字体引擎,它被设计成小巧、高效、可高度定制和可移植,同时能够生成高质量的输出(字形图像)。它还可以用于图形库、显示服务器、字体转换工具、文本图像生成工具和许多其他产品。 2.字体适配 Fontconfig 主要用于配置、定制管理系统里的 字体 ,简单的说就是通过给出的字体信息,例如粗体,斜体等,找到现有系统中最匹配的这些特征的字体文件。 3.Unicode文本双向算法 FriBidi 主要用来转换不同语系中存在的文本方向问题,例如右向左的文本, 翻转后为左向右顺序的文本。 4.文字塑形 HarfBuzz HarfBuzz是一种文字塑形布局引擎(text shaping library),它主要将Unicode转换为格式正确且位置正确的字形输出。 简单地说就是用于适配全世界不同语言的文字编码布局。 另一个非常知名库是 ICU ,而HarfBuzz的实现中将其作为第三方库引入 5.布局渲染 Cairo 或 Skia Graphics Library 当你拿到字体字形的数据之后,毫无疑问,

【淘系技术】超详解析Flutter渲染引擎|业务想创新,不了解底层原理怎么行?

限于喜欢 提交于 2020-08-12 16:57:47
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 作者 | 万红波(远湖) 出品 | 阿里巴巴新零售淘系技术部 前言 Flutter 作为一个跨平台的应用框架,诞生之后,就被高度关注。它通过自绘 UI ,解决了之前 RN 和 weex 方案难以解决的多端一致性问题。Dart AOT 和精减的渲染管线,相对与 JavaScript 和 webview 的组合,具备更高的性能体验。 目前在集团内也有很多的 BU 在使用和探索。了解底层引擎的工作原理可以帮助我们更深入地结合具体的业务来对引擎进行定制和优化,更好的去创新和支撑业务。在淘宝,我们也基于 Flutter engine 进行了自绘UI的渲染引擎的探索。本文先对 Flutter 的底层渲染引擎做一下深入分析和整理,以理清 Flutter 的渲染的机制及思路,之后分享一下我们基于Flutter引擎一些探索,供大家参考。 本文的分析主要以 Android 平台为例,iOS 上原理大致类似,相关的参考代码基于 stable/v1.12.13+hotfix.8 。 渲染引擎分析 渲染流水线 整个 Flutter 的 UI 生成以及渲染完成主要分下面几个步骤: 其中 1-6 在收到系统 vsync 信号后,在 UI 线程中执行,主要是涉及在 Dart framework 中

Windows 常用设置

本秂侑毒 提交于 2020-08-11 07:21:04
Windows 卸载UWP应用 卸载命令【管理员身份运行PowerShell】 有部分应用无法使用这个方式卸载,所以能通过这种方式卸载的应用,理论上都不会对系统造成影响 闹钟 get-appxpackage *Microsoft.WindowsAlarms* | remove-appxpackage 相机 get-appxpackage *Microsoft.WindowsCamera* | remove-appxpackage Groove Music get-appxpackage *Microsoft.ZuneMusic* | remove-appxpackage Maps get-appxpackage *Microsoft.WindowsMaps* | remove-appxpackage 照片 get-appxpackage *Microsoft.Windows.Photos* | remove-appxpackage 人脉 get-appxpackage *Microsoft.People* | remove-appxpackage Firefox 修改渲染 gfx.content.azure.backends : direct2d1.1,cairo,skia 来源: oschina 链接: https://my.oschina.net/u/3135584/blog

在Flutter中嵌入Native组件的解决方案

只谈情不闲聊 提交于 2020-08-10 21:33:18
摘要:在漫长的从Native向Flutter过渡的混合工程时期,要想平滑地过渡,在Flutter中使用Native中较为完善的控件会是一个很好的选择。本文希望向大家介绍AndroidView的使用方式以及在此基础之上拓展的双端嵌入Native组件的解决方案。 引言 在漫长的从Native向Flutter过渡的混合工程时期,要想平滑地过渡,在Flutter中使用Native中较为完善的控件会是一个很好的选择。本文希望向大家介绍AndroidView的使用方式以及在此基础之上拓展的双端嵌入Native组件的解决方案。 1. 使用教程 1.1. DemoRun 嵌入地图这一场景可能在很多App中都会存在,但是现在的地图SDK都没有提供Flutter的库,而自己开发一套地图显然不太现实。这种场景下,使用混合栈的形式是一个比较好的选择。我们可以直接在Native的绘图树中嵌入一个Map,但是这个方案嵌入的View并不在Flutter的绘图树中,是一种比较暴力且不优雅的方式,使用起来也很费劲。 这时候,使用Flutter官方提供的控件AndroidView就是一种比较优雅的解决方案了。这里做了一个简单的嵌入高德地图的demo,就让我们跟着这个应用场景,看一下AndroidView的使用方式和实现原理。 1.2. AndroidView使用方式

文字渲染一探

社会主义新天地 提交于 2020-08-09 11:55:16
引子 近一个月都在与字体打交道,查阅了不少资料。 发现国内很少有这方面的一些资源,有点奇怪。 故此,想稍微梳理一下这方面的一些资料以及信息,方便对这方面感兴趣的朋友参阅。 文字渲染的组成 文字渲染严格意义上来说包含几个主要的核心模块,分别是: 1.字体光栅化 FreeType 它是一个软件字体引擎,它被设计成小巧、高效、可高度定制和可移植,同时能够生成高质量的输出(字形图像)。它还可以用于图形库、显示服务器、字体转换工具、文本图像生成工具和许多其他产品。 2.字体适配 Fontconfig 主要用于配置、定制管理系统里的 字体 ,简单的说就是通过给出的字体信息,例如粗体,斜体等,找到现有系统中最匹配的这些特征的字体文件。 3.Unicode文本双向算法 FriBidi 主要用来转换不同语系中存在的文本方向问题,例如右向左的文本, 翻转后为左向右顺序的文本。 4.文字塑形 HarfBuzz HarfBuzz是一种文字塑形布局引擎(text shaping library),它主要将Unicode转换为格式正确且位置正确的字形输出。 简单地说就是用于适配全世界不同语言的文字编码布局。 另一个非常知名库是 ICU ,而HarfBuzz的实现中将其作为第三方库引入 5.布局渲染 Cairo 或 Skia Graphics Library 当你拿到字体字形的数据之后,毫无疑问,

全面理解 Flutter

孤人 提交于 2020-08-09 02:46:05
当 Flutter 遇见 Web,会有怎样的秘密? 在线教育团队(简称:OED)已经将 Flutter 这样技术在业务中落地了,做为 IMWeb 前端团队的我们也要进行一些尝试。本文从前端角度进行 Flutter 开发的概况描述。主要是为了让您了解和感受一下:Flutter to Web 的实例、Flutter 为什么会出现、Flutter 设计实现原理、Flutter 技术特点和优势。 前言 OED 的客户端团队在 2019 年上半年 ,就已经把 Flutter 落地到 企鹅辅导 的业务中了。今年我们又一起去上海参加了 2019 年谷歌开发者大会,遇见了更多的 Flutter 开发者,这次体验比第一次去的时候感觉熟悉了很多。希望未来有机会把他们邀请来深圳,进行一些 Flutter 的技术分享。 此次开发者大会又恰逢 Flutter to Web 也已经正式合入 Master ,那么,前端同学是否可以趁着这股东风一起参与到 Flutter 的协同开发中呢,我想这问题会困扰着很多人?如果您有好的想法,可以在留言区参与评论。 本文不是一篇 Flutter 详细的学习教程,更像是一个概览,用尽可能平实的语言和对比的思路去描述它。本着依旧从前端同学的角度出发,去理解一项新的技术,但又不限于前端技术本身。希望您能通过这篇文章相对全面的理解 Flutter 这项技术本身。

Flutter mask a circle into a container

こ雲淡風輕ζ 提交于 2020-07-18 07:24:37
问题 I want to add a circle effect over a container, but I want the circle to not extend the dimensions of the container, but instead get clipped by it. This is what I'm trying to achieve: As you can see the white circle naturally would extend the red container but instead, I'm trying to make it stay into the borders. How can I do it? 回答1: The simplest way to do this is to using an overlap and cliprect. class OverlapSquare extends StatelessWidget { @override Widget build(BuildContext context) {

Windows环境VS2017编译skia库

拈花ヽ惹草 提交于 2020-05-06 18:04:20
采用Google官方提供的编译方式很难成功。 偶然发现了skui这个开源项目。skui使用了skia库。 https://github.com/skui-org/skui https://blog.csdn.net/czhzasui/article/details/103457105 编译skui的过程,会编译skia库。 来源: oschina 链接: https://my.oschina.net/u/4399909/blog/4268543