Skip to content

levy-tech-spark/RenderCraft

Repository files navigation

RenderCraft

Flutter 高性能渲染引擎实验项目,探索多层渲染策略和帧率优化

Flutter Dart License

项目简介

这是一个探索 Flutter 渲染性能极限的技术实验项目,专注于:

  • 多层渲染策略的实现和切换
  • 大数据量场景下的帧率优化
  • GPU 计算和原生加速的集成

项目包含两个简单的 demo(K 线图和折线图)用于演示不同数据规模下的渲染性能。

核心特性

三层渲染策略

根据数据量自动选择最优渲染方案:

数据规模 渲染方式 说明
< 5K 点 Canvas Path CPU 渲染,适合小数据
5K - 100K 点 Fragment Shader GPU 加速,中等规模
> 100K 点 Native Texture 原生计算 + 纹理传输

性能优化技术

数据处理

  • 智能分箱算法(保留 min/max/avg)
  • Isolate 后台计算
  • FFI 零拷贝数据传输

GPU 加速

  • GLSL Fragment Shader(Flutter 层)
  • Metal Compute Shader(iOS)
  • NEON SIMD(Android)

渲染优化

  • 自定义 RenderBox 替代 CustomPainter
  • 增量渲染(markNeedsPaint)
  • 帧率监测和性能分析

快速开始

# 安装依赖
flutter pub get

# iOS 依赖(可选)
cd ios && pod install && cd ..

# 运行
flutter run

技术实现

1. 自定义 RenderBox

使用 Flutter 的 RenderObject API 直接操作渲染管线:

class ChartRenderBox extends RenderBox {
  @override
  void paint(PaintingContext context, Offset offset) {
    // 直接绘制,避免 CustomPainter 的额外开销
  }

  void updateData(List<double> newData) {
    markNeedsPaint(); // 增量渲染,无需 layout
  }
}

2. Fragment Shader GPU 加速

// shaders/line_chart.frag
void main() {
  vec2 uv = FlutterFragCoord().xy / iResolution.xy;
  // GPU 并行计算每个像素
  fragColor = computePixelColor(uv);
}

3. 数据分箱算法

将百万级数据降维到屏幕像素级别:

// 示例:1M 数据点 → 1000 bins
final bins = await compute(binDataInIsolate, {
  'data': millionPoints,
  'binCount': screenWidth,
});

4. FFI 零拷贝传输

// 避免 Platform Channel 的序列化开销
final Pointer<Float> ptr = calloc<Float>(count);
nativeProcessData(ptr, count);

项目结构

lib/
├── chart/              # 折线图 demo
├── kline/              # K 线图 demo
├── platform/           # 原生平台桥接
└── core/               # 通用工具

ios/Runner/Metal/       # iOS Metal 渲染实现
android/app/cpp/        # Android NEON SIMD 实现
native/                 # FFI 共享代码
shaders/                # GLSL Shader 源码

性能参考

测试环境:iPhone 14 Pro, Flutter 3.35

数据量 帧率 渲染耗时
10K 60 fps ~16ms
100K 60 fps ~18ms
1M ~58 fps ~25ms

以上数据仅供参考,实际性能取决于设备和数据特征

技术栈

  • 框架: Flutter 3.35+ / Dart 3.9+
  • 状态管理: Riverpod
  • 渲染: RenderObject + Fragment Shader
  • 原生加速: Metal (iOS) / NEON SIMD (Android)
  • 跨平台调用: FFI + Pigeon

许可证

MIT License

作者

levy

About

企业级高性能 Flutter 数据可视化引擎。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors