当前位置: 首页 > news >正文

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模式用所有分量颜色信息,用不可分离混合模式,转换源和目标像素.

相关文章:

2312skia,15vulkan及技巧

ANGLE介绍 ANGLE,把OpenGLES2或3调用转换为DirectX9,11或OpenGL调用.这些说明记录了如何在Windows或Linux上使用ANGLE而不是本地OpenGL后端. 细节 gclient sync下载ANGLE的源码及Skia的其他仅测试依赖项. 要针对ANGLE构建Skia测试工具,请添加skia_use_angletrue到args.gn文件…...

TLSF算法概念,原理,内存碎片问题分析

TLSF算法介绍 TLSF&#xff08;Two-Level Segregated Fit&#xff0c;两级分割适应算法&#xff09;。 第一级&#xff08;first level,简称fl&#xff09;&#xff1a;将内存大小按2的幂次方划分一个粗粒度的范围&#xff0c;如一个72字节的空闲内存的fl是6&#xff08;72介…...

sharding-jdbc实现分库分表

shigen日更文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 &#x1f605;&#x1f605;最近几天的状态有点不对&#xff0c;所以有几天没有更新了。 当我们的数据量比较大…...

JDK中lock锁的机制,其底层是一种无锁的架构实现的,公平锁和非公平锁

简述JDK中lock锁的机制&#xff0c;其底层是一种无锁的架构实现的&#xff0c;是否知道其是如何实现的 synchronized与lock lock是一个接口&#xff0c;而synchronized是在JVM层面实现的。synchronized释放锁有两种方式&#xff1a; 获取锁的线程执行完同步代码&#xff0c;…...

c++通过serial库进行上下位机通信

​编辑 风紊 现役大学牲&#xff0c;半退休robomaster视觉队员 写在前面 本文章主要介绍的是如何通过开源的serial库和虚拟串口实现上位机和下位机通信。 需求 假设下位机有这样一个数据报发送给上位机 struct DataRecv {char start s;TeamColor color TeamColor::Blu…...

【傻瓜级JS-DLL-WINCC-PLC交互】7.​C#直连PLC并读取PLC数据

思路 JS-DLL-WINCC-PLC之间进行交互&#xff0c;思路&#xff0c;先用Visual Studio创建一个C#的DLL控件&#xff0c;然后这个控件里面嵌入浏览器组件&#xff0c;实现JS与DLL通信&#xff0c;然后DLL放入到WINCC里面的图形编辑器中&#xff0c;实现DLL与WINCC的通信。然后PLC与…...

指针常量和常量指针的区别

文章目录 指针常量常量指针即是指针常量又是常量指针 指针常量 指针常量的本质是常量&#xff0c;表示的是 这个指针所指向的地址不能发生改变。即指针变量的值&#xff08;即地址值&#xff09;不能发生修改。但是指针所指向的那块内存里的值是可以修改的。 注意&#xff1a;…...

离散化算法总结

离散化是将大范围的数字映射到小范围的区间内&#xff0c;适用于稀疏的区间。 两个问题需要考虑&#xff1a; 1. 原数组中可能有重复元素&#xff0c;需要去重。 2. 如何算出离散化后的值&#xff08;离散化后保序&#xff0c;使用二分&#xff09;。 题目链接&#xff1a; …...

【海思SS528 | VO】MPP媒体处理软件V5.0 | VO模块编程总结

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

逻辑卷管理器lvm

啥意思&#xff0c;个人理解就是可以将物理分区合并一起组成大的磁盘&#xff0c;也可以移除其中的某个分区。 有四个概念需要了解下 PV&#xff0c;物理卷&#xff0c;VG 卷用户组&#xff0c;PE物理扩展块&#xff0c;LV逻辑卷 p物理&#xff0c;v卷&#xff0c;g用户组&a…...

函数声明后的“ - >”是什么?

这种语法的优势之一是可以在函数的返回类型中使用函数参数&#xff0c;使得返回类型更灵活。 先来看一个使用尾返回类型的例子&#xff1a; #include <iostream> auto add(int a, int b) -> int {return a b; }int main() {std::cout << add(3, 4) <<…...

51爱心流水灯32灯炫酷代码

源代码摘自远眺883的文章&#xff0c;大佬是30个灯的&#xff0c;感兴趣的铁汁们可以去看看哦~&#xff08;已取得原作者的许可&#xff09;&#xff1a;基于STC89C51单片机设计的心形流水灯软件代码部分_单片机流水灯代码_远眺883的博客-CSDN博客 由于博主是个小菜鸡&#xff…...

将不同时间点的登录状态记录转化为不同时间段的相同登录状态SQL求解

题目 有不同时间点的登录状态记录表state_log如下 请使用sql将其转化为如下表的不同时间段的相同登录状态记录 思路分析&#xff1a; 此类问题需要用到lag或lead函数取上下行对应的数据&#xff0c;然后对前后结果做比较打标签&#xff08;0或1&#xff09;&#xff0c;再…...

正则表达式与SQL数据库教程

使用正则表达式通过用例查询 Postgres 数据库&#xff1a; 正则表达式&#xff08;又名 Regex&#xff09; 正则表达式是一个强大的工具&#xff0c;广泛用于模式匹配和文本操作。 几乎所有编程语言都支持它们&#xff0c;并且经常用于文本提取、搜索和匹配文本等用例。 正则…...

HTML_web扩展标签

1.表格标签 2.增强表头表现 4.表格属性&#xff08;实际不常用&#xff09; 结构标签&#xff1a; 合并单元格&#xff1a; 更多请查看主页...

论文阅读:Distributed Initialization for VVIRO with Position-Unknown UWB Network

前言 Distributed Initialization for Visual-Inertial-Ranging Odometry with Position-Unknown UWB Network这篇论文是发表在ICRA 2023上的一篇文章&#xff0c;本文提出了一种基于位置未知UWB网络的一致性视觉惯性紧耦合优化测距算法( DC-VIRO )的分布式初始化方法。 对于…...

scrapy爬虫中间件和下载中间件的使用

一、关于中间件 之前文章说过&#xff0c;scrapy有两种中间件&#xff1a;爬虫中间件和下载中间件&#xff0c;他们的作用时间和位置都不一样&#xff0c;具体区别如下&#xff1a; 爬虫中间件&#xff08;Spider Middleware&#xff09; 作用&#xff1a; 爬虫中间件主要负…...

手敲单链表,简单了解其运行逻辑

1. 链表 1.1 结构组成 链表是一种物理存储结构上非连续存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。 链表的结构如下图所示&#xff0c;是由很多个节点相互通过引用来连接而成的&#xff1b;每一个节点由两部分组成&#xff0c;分别数据域&…...

Redis RDB

基于内存的 Redis, 数据都是存储在内存中的。 那么如果重启的话, 数据就会丢失。 为了解决这个问题, Redis 提供了 2 种数据持久化的方案: RDB 和 AOF。 RDB 是 Redis 默认的持久化方案。当满足一定条件的时候, 会把当前内存中的数据写入磁盘, 生成一个快照文件 dump.rdb。Redi…...

Elasticsearch一些函数查询

1. 根据价格分组统计数量&#xff0c;每组区间为2000&#xff0c; filter_pathaggregations 设置查询结果只展示函数结果 也有date_histogram函数根据日期分组等等 GET order/_search?filter_pathaggregations {"aggs": {"hist_price": {"histogr…...

竞赛选题 : 题目:基于深度学习的水果识别 设计 开题 技术

1 前言 Hi&#xff0c;大家好&#xff0c;这里是丹成学长&#xff0c;今天做一个 基于深度学习的水果识别demo 这是一个较为新颖的竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/pos…...

Linux expect命令详解

在Linux系统中&#xff0c;expect 是一款非常有用的工具&#xff0c;它允许用户自动化与需要用户输入进行交互的程序。本文将深入探讨expect命令的基本语法、使用方法以及一些最佳实践。 什么是Expect命令&#xff1f; expect 是一个用于自动化交互式进程的工具。它的主要功能…...

ubuntu18编译Android8的Failed to contact Jack server问题

环境 ubuntu18.04 Android8.1.0 步骤 安装环境 apt install git-core apt install gnupg apt install flex apt install bison apt install gperf apt install build-essential apt install curl apt install libc6-dev apt install libssl-dev apt install libncurses5-dev:…...

FindSecBugs支持的检测规则

很多SAST集成了FindSecBugs这个开源工具&#xff0c;其好处是直接对Class文件进行检测&#xff0c;也就是直接检测二进制问题&#xff0c;可以直接检测war、jar&#xff0c;还是非常方便的。虽然误报率较高&#xff0c;但是这些检测出来的安全漏洞很多是安全从业人员耳熟能详的…...

【WPF.NET开发】WPF.NET桌面应用开发概述

本文内容 为何从 .NET Framework 升级使用 WPF 进行编程标记和代码隐藏输入和命令控件布局数据绑定图形和动画文本和版式自定义 WPF 应用 Windows Presentation Foundation (WPF) 是一个与分辨率无关的 UI 框架&#xff0c;使用基于矢量的呈现引擎&#xff0c;构建用于利用现…...

态势感知是什么

在当今高度信息化的时代&#xff0c;信息安全风险已经成为企业、政府和个人的重要关注点。为了有效应对这些风险&#xff0c;态势感知成为了一种日益重要的能力。态势感知是一种基于环境的、动态、整体地洞悉安全风险的能力&#xff0c;是以安全大数据为基础&#xff0c;从全局…...

Spring MVC常用的注解, Controller注解的作用,RequestMapping注解的作用 @ResponseBody注解的作用

文章目录 Spring MVC常用的注解和注解的相关作用Controller注解的作用RequestMapping注解的作用ResponseBody注解的作用PathVariable和RequestParam的区别 Spring MVC常用的注解和注解的相关作用 RequestMapping&#xff1a;用于处理请求 url 映射的注解&#xff0c;可用于类或…...

「Verilog学习笔记」自动贩售机1

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 自动贩售机中可能存在的几种金额&#xff1a;0&#xff0c;0.5&#xff0c;1&#xff0c;1.5&#xff0c;2&#xff0c;2.5&#xff0c;3。然后直接将其作为状态机的几种状…...

【大模型】更强的 ChatGLM3-6B 来了,开源可商用

【大模型】更强的 ChatGLM3-6B 来了&#xff0c;开源可商用 简介ChatGLM3-6B 环境配置环境搭建安装依赖 代码及模型权重拉取拉取 ChatGLM3-6B拉取 ChatGLM3-6B 模型权重及代码 终端测试网页测试安装 gradio加载模型并启动服务 参考 简介 ChatGLM3-6B ChatGLM3-6B 是 ChatGLM …...

Maxscript到Python转换工具教程

Maxscript到Python转换器教程 Maxscript到Python转换器采用MAXScript程序&#xff0c;将其解析为语法树&#xff0c;然后从语法树中生成等效的Python代码。通过提供python的自动翻译&#xff0c;帮助python程序员理解maxscript示例。 【项目状况】 将正确解析最正确的maxcript…...