Skip to content

Canvas 渲染管线

本文档涵盖 OpenLayers 基于 Canvas 的渲染管线,该管线使用 HTML5 Canvas API 提供高性能的矢量和栅格渲染。该管线将地理要素和几何体转换为优化的渲染指令,并在帧渲染期间执行。

有关 WebGL 渲染的信息,请参阅 WebGL 渲染系统。有关一般图层架构概念,请参阅 图层架构

系统概述

Canvas 渲染管线采用两阶段方法:要素处理期间的指令生成阶段和帧渲染期间的执行阶段。这种分离允许通过预先计算绘制操作并缓存它们以供重用来优化渲染性能。

Canvas 渲染架构

SVG
100%

基于指令的渲染系统

Canvas 管线使用命令模式,其中渲染操作在要素处理期间编码为可序列化的指令,然后在帧渲染期间执行。

指令流程

SVG
100%

关键数据结构

组件用途关键属性
SerializableInstructions渲染命令的容器instructions, coordinates, textStates, fillStates, strokeStates
CanvasInstruction单个渲染命令指令类型和参数
ExecutorGroup按 z-index 对执行器进行分组executorsByZIndex_, maxExtent_, resolution_
Executor执行特定几何类型的指令instructions, coordinates, pixelCoordinates_

几何渲染的构建器模式

Canvas 管线使用专门的构建器类将不同的几何类型转换为优化的渲染指令。

构建器类层次结构

SVG
100%

构建器生命周期

构建器模式遵循以下序列:

  1. 初始化CanvasBuilderGroup 为每个几何类型创建构建器
  2. 要素处理renderFeature() 调用适当的构建器方法
  3. 指令生成:构建器累积渲染指令
  4. 完成finish() 返回 SerializableInstructions
SVG
100%

执行管线

在帧渲染期间,ExecutorGroup 协调缓存指令的执行以生成最终的 canvas 输出。

执行架构

SVG
100%

关键执行方法

方法位置用途
execute()ExecutorGroup协调构建器之间的执行
execute_()Executor执行特定几何类型的指令
transform2D()Geometry utilities将坐标转换到像素空间
replayImageOrLabel_()Executor渲染图像和文本标签

特定图层渲染器

不同的图层类型使用专门的 Canvas 渲染器,这些渲染器实现了基于指令的管线,并具有特定于图层的优化。

矢量图层渲染

CanvasVectorLayerRenderer 处理基于要素的图层:

SVG
100%

矢量瓦片图层渲染

CanvasVectorTileLayerRenderer 使用矢量要素扩展了瓦片渲染:

SVG
100%

性能优化

Canvas 管线包括多种性能优化:

  • 指令缓存:渲染指令在帧之间缓存和重用
  • 坐标变换:批量坐标变换以提高效率
  • Z-index 分组:指令按 z-index 分组以实现最佳绘制顺序
  • 命中检测:单独的命中检测 Canvas 用于像素级要素检测
  • 去重:文本和符号定位的碰撞检测