#vector-graphics #path #gpu #tile #spans #rasterizer #vec2

赭石

在GPU上实现高质量的抗锯齿矢量图形渲染

2个不稳定版本

0.2.0 2021年1月31日
0.1.0 2021年1月30日

#664 in 图形API

MIT/Apache

1.5MB
658

赭石

Cargo Documentation

在GPU上实现高质量的抗锯齿矢量图形渲染。

赭石将路径光栅化到路径边界的8×8像素alpha掩码瓦片和路径内部的n×8像素实心跨度,然后可以上传到GPU进行渲染。路径使用适合文本和通用矢量图形的高质量解析抗锯齿方法进行光栅化。

示例

use ochre::{PathCmd, Rasterizer, TileBuilder, Transform, Vec2, TILE_SIZE};

struct Builder;

impl TileBuilder for Builder {
    fn tile(&mut self, x: i16, y: i16, data: [u8; TILE_SIZE * TILE_SIZE]) {
        println!("tile at ({}, {}):", x, y);
        for row in 0..TILE_SIZE {
            print!("  ");
            for col in 0..TILE_SIZE {
                print!("{:3} ", data[row * TILE_SIZE + col]);
            }
            print!("\n");
        }
    }

    fn span(&mut self, x: i16, y: i16, width: u16) {
        println!("span at ({}, {}), width {}", x, y, width);
    }
}

fn main() {
    let mut builder = Builder;

    let mut rasterizer = Rasterizer::new();
    rasterizer.fill(&[
        PathCmd::Move(Vec2::new(400.0, 300.0)),
        PathCmd::Quadratic(Vec2::new(500.0, 200.0), Vec2::new(400.0, 100.0)),
        PathCmd::Cubic(Vec2::new(350.0, 150.0), Vec2::new(100.0, 250.0), Vec2::new(400.0, 300.0)),
        PathCmd::Close,
    ], Transform::id());
    rasterizer.finish(&mut builder);
}

许可证

赭石在MIT许可和Apache许可证(版本2.0)的条款下分发。贡献也接受相同的条款。

无运行时依赖