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

原文地址:https://blog.csdn.net/fqbqrr/article/details/134759059

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_48024.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注