2312skia,15vulkan及技巧

ANGLE介绍

ANGLE,把OpenGLES23调用转换为DirectX9,11OpenGL调用.这些说明记录了如何在WindowsLinux上使用ANGLE而不是本地OpenGL后端.

细节

gclient sync下载ANGLE的源码及Skia的其他仅测试依赖项.
要针对ANGLE构建Skia测试工具,请添加skia_use_angle=trueargs.gn文件中(或运行gn args来编辑).
运行工具时,请使用--config angle_<backend>_<frontend>,如

out/Debug/dm --src gm --config angle_d3d11_es2
out/Release/nanobench --config angle_gl_es2

Vulkan

SkiaGPU后端有一个Vulkan实现.可与OpenGL后端一起构建Vulkan后端.客户可在运行时在OpenGLVulkan实现间选择.

Vulkan后端已达到与OpenGL后端的功能等价.目前,许多Vulkan驱动都存在没有解决方法的触发Skia的错误.
会在发现错误时向供应商报告错误.

WindowsLinux

要构建Vulkan后端,请在args.gn中设置skia_use_vulkan=true.

Android

可在装有Vulkan驱动的设备上运行包括所有AndroidN+设备的Vulkan后端.要构建Vulkan后端,请在args.gn中设置ndk_api=24来指定AndroidN目标.

Mac

可用SwiftShader在软件仿真中运行Vulkan后端.这允许通过dm测试和调试,在查看器等交互式应用中不支持Vulkan.

Skia已按外部依赖项包含SwiftShader库.要构建它,先要安装CMake.
准备好CMake后,需要编译SwiftShader.请按以下步骤操作,替换你的实际Skia目录,而不是下面的$(SKIA_DIR):

    $ cd $(SKIA_DIR)/third_party/externals/swiftshader/build$ cmake ..$ cmake --build . --parallel

构建完成后,SwiftShader的构建目录,应包含包含libvk_swiftshader.dylibDarwin子目录.为了让Skia看到该库,需要在args.gn中如下引用它:

skia_use_vulkan = true
extra_cflags = [ "-D", "SK_GPU_TOOLS_VK_LIBRARY_NAME=$(SKIA_DIR)/third_party/externals/swiftshader/build/Darwin/libvk_swiftshader.dylib" ]

使用Vulkan后端

要创建由Vulkan支持的GrContext,客户会创建一个Vulkan设备和队列,初化GrVkBackendContext来描述环境,然后调用GrContext::MakeVulkan:

    sk_sp<GrVkBackendContext> vkContext = new GrVkBackendContext;vkBackendContext.fInstance = vkInstance;vkBackendContext.fPhysicalDevice = vkPhysDevice;...vkBackendContext.fInterface.reset(GrVkCreateInterface(instance, vkPhysDevice, extensionFlags);...sk_sp<GrContext> context = GrContext::MakeVulkan(vkBackendContext);

使用Vulkan后端时,用GrVkImageInfo来构造,创建引用Skia客户创建的VkImagesSkSurfaceSkImage对象的GrBackendTextureGrBackendRenderTarget对象.

应按GrVkImageInfo*解释SkImage::getTextureHandle(),SkSurface::getTextureHandle()SkSurface::getRenderTargetHandle()返回的GrBackendObject.这允许客户取SkImageSkSurface的支持VkImage.
GrVkImageInfo指定VkImage和关联的状态(平铺,布局,格式等).通过getTextureHandle()getRenderTargetHandle()GrVkImageInfo*后,客户应检查fImageLayout字段,以了解Skia在使用VkImage之前,将VkImage保留在哪个布局中.

如果客户更改了VkImage的布局,则应在恢复Skia渲染前,调用GrVkImageInfo::updateImageLayout(VkImageLayoutlayout).

Skia对通过GrVkImageInfo导入SkiaVkImage执行I/O之前,客户负责期望的同步阻塞.Skia假定无需额外同步,就可开始发出引用VkImage的命令.

提示

Chromium中网页上抓.skp文件

使用experimental/tools/web_to_skp脚本,或会如下:
1,使用--no-sandbox --enable-gpu-benchmarking启动ChromeChromium.
2,打开JS控制台(Ctrl+Shift+J(Windows/Linux)Cmd+Opt+J(MacOS))
3.执行:chrome.gpuBenchmarking.printToSkPicture('/tmp'),会在成功时返回"undefined".

Skia调试器中打开生成文件,用dm栅格化它,或使用Skia查看器查看:

    out/Release/dm --src skp --skps /tmp/layer_0.skp -w /tmp \--config 8888 gpu pdf --verbosels -l /tmp/(*)/skp/layer_0.skp.*out/Release/viewer --skps /tmp --slide layer_0.skp

Chromium中的网页上抓.mskp文件

多页Skia图片文件抓捕为生成PDF打印文档发送的命令.
使用experimental/tools/web_to_mskp脚本,或会如下:
前2同上,第3步执行

    chrome.gpuBenchmarking.printPagesToSkPictures('/tmp/filename.mskp') 

Skia调试器中打开生成文件,用dm栅格化它,或使用Skia查看器查看:

    experimental/tools/mskp_parser.py /tmp/filename.mskp /tmp/filename.mskp.skpls -l /tmp/filename.mskp.skp# open filename.mskp.skp in the debugger.out/Release/dm --src mskp --mskps /tmp/filename.mskp -w /tmp \--config pdf --verbosels -l /tmp/pdf/mskp/filename.mskp.pdf

如何在Skia中添加硬件加速

Skia可通过两个方式利用指定硬件.
1,自定义瓶颈例程

Skiablit中有一组瓶颈例程,可在平台上替换这些例程,以利用指定的CPU功能.一个此例ARMv7设备上的NEONSIMD指令.见src/opts/这里

Skia是否支持字体提示

Skia有个内置字体缓存,但它不知道如何把实际TrueType等字体文件渲染到其缓存中.为此,它依赖平台来提供SkScalerContext的实例.

这是Skia字体缩放器引擎通信的抽象接口.在src/ports中,可见FreeType,macOSWindowsGDI字体引擎的支持文件.
其他字体引擎也可轻松类似支持.

Skia是否调整字距

变形是用适当字体转换Unicode文本跨度固定字形跨度的过程.

Skia不改变文本.Skia提供了来绘画字形的接口,但不实现文本变形器.Skia的客户经常使用HarfBuzz来生成包括调整字距的字形及其位置.

这里是如何结合使用SkiaHarfBuzz的示例.此例中,使用相同的mmap().ttf字体文件创建SkTypefacehb_face_t.
HarfBuzz面来变形Unicode文本为一系列字形和位置,然后可用SkTypeface绘画这些字形.

如何在文本上添加阴影

混合模式

描述如何替换目标像素自身像素和源像素的组合.Blend_Mode可用源和/或目标.Blend_Mode可独立地操作每个Color组件,也可允许所有源像素组件为一个目标像素组件.

Blend_Mode不使用相邻像素来确定结果.

Blend_Mode使用及读取目标α来确定写入的目标α;源和目标α也可能影响写入的目标Color组件.
在源像素和目标像素中,无论是如何编码的α,几乎所有Color_Types都将其视为从0到1的区间.而且,几乎所有Blend_Mode算法都限制了输出,因此所有结果也是零到一.

两个例外是SkBlendMode::kPluskRGBA_F16_SkColorType.
SkBlendMode::kPlus允许计算大于1αColor分量值.对除kRGBA_F16_SkColorType以外的Color_Types,生成的α分量值被限制为1.
kRGBA_F16_SkColorType允许值超出0到1的区间.由客户决定确保结果在0到1的区间内,因此良好定义.

组合数字图像通过SkBlendMode::kXor,描述了Porter_Duff模式的SkBlendMode::kClear.
使用Porter_Duff合成,绘画透明度的位图自由清理目标.
Porter_Duff合成,绘画有透明度的几何图形不会组合透明源像素,从而保持几何体外部的目标位置不变.

SkBlendMode::kPlusSkBlendMode::kScreen模式使用简单算术来使目标变亮或变暗.:SkBlendMode::kOverlaySkBlendMode::kMultiply模式,使用更复杂的算法变亮或变暗;

有时如混合模式,会同时执行这两个操作.

SkBlendMode::kModulateSkBlendMode::kSrcATopSkBlendMode::kMultiply的混搭.它乘以包括α的所有组件;
SkBlendMode::kMultiply不同,如果源或目标透明,则结果为透明.SkBlendMode::kModulate使用预乘值来计算乘积;
SkBlendMode::kMultiply使用非预乘值值来计算乘积.

SkBlendMode::kHue,SkBlendMode::kSaturation,SkBlendMode::kColorSkBlendMode::kLuminosity模式用所有分量颜色信息,用不可分离混合模式,转换源和目标像素.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/192481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Beta冲刺随笔-DAY6-橘色肥猫

这个作业属于哪个课程软件工程A这个作业要求在哪里团队作业–站立式会议Beta冲刺作业目标记录Beta冲刺Day6团队名称橘色肥猫团队置顶集合随笔链接Beta冲刺笔记-置顶-橘色肥猫-CSDN博客 文章目录 SCRUM部分站立式会议照片成员描述 PM报告项目程序&#xff0f;模块的最新运行图片…

boost-filesystem-删除复制文件-设置文件权限-递归创建删除复制文件夹-解析文件名-C++

文章目录 1.简介2.路径合法性3.路径处理及迭代器4.设置权限5.文件操作6.迭代目录6.1. directory_iterator6.1.1.类摘要6.1.2.单层目录迭代6.1.3.directory_iterator深度遍历目录(递归) 6.2.recursive_directory_iterator6.2.1. 类摘要6.2.2 示例代码 7.查找文件、模糊查找文件、…

制作一个RISC-V的操作系统二-RISC-V ISA介绍

文章目录 ISA的基本介绍啥是ISA为什么要设计ISACISCvsRISCISA的宽度知名ISA介绍 RISC-V历史和特点RISC-V发展RISC-V ISA 命名规范模块化的ISA通用寄存器Hart特权级别Control and Status Register&#xff08;CSR&#xff09;内存管理与保护异常和中断 ISA的基本介绍 啥是ISA …

<DB2>《AIX环境下DB2冷备机恢复方案(生产实践)》

《AIX环境下DB2冷备机恢复方案&#xff08;生产实践&#xff09;》 1 DB2数据库常见备份方式简要说明2 方案说明3 实际方案&#xff08;信息已脱敏&#xff09;3.1 基本信息3.2 创建互信3.3 部署scp脚本3.4 在冷备机192.168.16.165上部署恢复脚本3.5 在冷备机192.168.16.165上部…

【UE】UEC++获取屏幕颜色GetPixelFromCursorPosition()

目录 【UE】UE C 获取屏幕颜色GetPixelFromCursorPosition() 一、函数声明与定义 二、函数的调用 三、运行结果 【UE】UE C 获取屏幕颜色GetPixelFromCursorPosition() 一、函数声明与定义 创建一个蓝图方法库方法 GetPixelFromCursorPosition()&#xff0c;并给他指定UF…

【MATLAB】RLMD分解+FFT+HHT组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 RLMD分解FFTHHT组合算法是一种强大的分析方法&#xff0c;结合了局部均值分解&#xff08;LMD&#xff09;、快速傅里叶变换&#xff08;FFT&#xff09;和希尔伯特-黄变换&#xff08;H…

WIN10 WIN11 关闭更新的绝佳办法(极简单无副作用)

WIN10 WIN11 关闭更新的绝佳办法&#xff08;极简单无副作用&#xff09; 极其简单用实用可以关闭更新20年 winr&#xff0c;输入regedit 打开注册表打开注册表的这个路径&#xff1a; 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 右键空白的地方…

图文深入理解TCP三次握手

前言 TCP三次握手和四次挥手是面试题的热门考点&#xff0c;它们分别对应TCP的连接和释放过程&#xff0c;今天我们先来认识一下TCP三次握手过程&#xff0c;以及是否可以使用“两报文握手”建立连接&#xff1f;。 1、TCP是什么&#xff1f; TCP是面向连接的协议&#xff0c;…

QT 中使用 QTableView 和 QStandardItemModel 实现将数据导出到Excel 和 从Excel导入到 QTableView 的功能

简介 在Qt中&#xff0c;使用QTableView和QStandardItemModel来实现将数据导出到Excel和从Excel导入到QTableView的功能&#xff0c;而不使用第三方库&#xff08;如QXlsx&#xff09;。 效果 将 QTableView 中的数据导出到Excel //从tableview 导出到 EXcle void MainInterfa…

编程中常见的技术难题和解决策略

编程中常见的技术难题有哪些&#xff1f; 编程中常见的技术难题 在编程过程中&#xff0c;我遇到了一些常见的技术难题&#xff0c;这些难题不仅仅是挑战&#xff0c;也是学习和成长的机会。以下是其中的一些例子&#xff1a; 复杂的并发和多线程问题 在一个多用户的系统中&a…

【PTA题目】7-2 完美的素数 分数 20

7-2 完美的素数 分数 20 全屏浏览题目 切换布局 作者 伍建全 单位 重庆科技学院 一个十进制数&#xff0c;如果是素数&#xff0c;而且它的各位数字和也是素数&#xff0c;则称之为“美素数”&#xff0c;如29&#xff0c;本身是素数&#xff0c;而且29 11也是素数&#x…

MQTT协议理解并实践

MQTT是一个轻量的发布订阅模式消息传输协议&#xff0c;专门针对低带宽和不稳定网络环境的物联网应用设计 MQTT协议根据主题来分发消息进行通信&#xff0c;支持通配符匹配&#xff0c;可以低开销的使用数百万Topic进行一对一&#xff0c;一对多双向通信。 协议特点 1. 开放…

Vulhub-信息泄露

1.Jetty WEB-INF 敏感信息泄露漏洞&#xff08;CVE-2021-28164&#xff09; docker-compose up -d 启动环境&#xff0c;显示8080端口被占用 修改 docker-compose.yml 中的映射端口 curl 访问 http://192.168.48.129:8090/WEB-INF/web.xml 显示404&#xff1a; 通过 %2e 绕过…

STlink下载程序不能复位的说明

STLINK在MDK5.28或其他版本中下载程序后不能复位&#xff0c;需要手动按复位键&#xff0c;MCU 才正常运行。 首先判断是不是该MDK版本的问题&#xff0c;按照以下进行 点击魔法棒 点击Debug&#xff0c;Settings 勾选Reset and Run 如果还是不行&#xff0c;取消Enable…

1423. 可获得的最大点数 --力扣 --JAVA

题目 几张卡牌 排成一行&#xff0c;每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动&#xff0c;你可以从行的开头或者末尾拿一张卡牌&#xff0c;最终你必须正好拿 k 张卡牌。 你的点数就是你拿到手中的所有卡牌的点数之和。 给你一个整数数组 cardP…

九章量子计算机:引领量子计算的新篇章

九章量子计算机:引领量子计算的新篇章 一、引言 随着科技的飞速发展,量子计算已成为全球科研领域的前沿议题。九章量子计算机作为中国自主研发的量子计算机,具有划时代的意义。本文将深入探讨九章量子计算机的原理、技术特点、应用前景等方面,带领读者领略量子计算的魅力…

初识主力投资者

在股票市场中&#xff0c;真正赚钱的散户并不多。“七亏二平一赚”似乎已经成为了大家公认的一个股市定律。 为什么散户炒股赚的人少呢&#xff1f;原因很简单&#xff0c;就是因为市场上除了散户之外&#xff0c;还存在着一个重要的投资主体——主力。股市交易的过程&#xff…

树_对称二叉树

//给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 // // // // 示例 1&#xff1a; // // //输入&#xff1a;root [1,2,2,3,4,4,3] //输出&#xff1a;true // // // 示例 2&#xff1a; // // //输入&#xff1a;root [1,2,2,null,3,null,3] //输出…

【源码篇】基于SpringBoot+Vue实现的在线考试系统

文章目录 系统说明技术选型成果展示账号地址及其他说明 系统说明 基于SpringBootVue实现的在线考试系统是为高校打造的一款在线考试平台。 系统功能说明 1、系统共有管理员、老师、学生三个角色&#xff0c;管理员拥有系统最高权限。 2、老师拥有考试管理、题库管理、成绩管…

【物联网无线通信技术】ZigBee从理论到实践(CC2530)

文章延续之前【物联网无线通信技术】系列文章的风格&#xff0c;首先对ZigBee这种在物联网发展初期出现的无线通信技术进行了相关背景概念的介绍&#xff0c;并横向介绍了几款时间跨度比较大的ZigBee芯片。然后以CC2530为例&#xff0c;从硬件到软件介绍了ZigBee这中无线通信技…