mirror of
https://github.com/italicsjenga/vello.git
synced 2025-01-10 12:41:30 +11:00
Merge branch 'master' into ext_query
This commit is contained in:
commit
01e4024599
|
@ -41,7 +41,7 @@ fn main() -> Result<(), Error> {
|
|||
render_scene(&mut ctx);
|
||||
let n_paths = ctx.path_count();
|
||||
let n_pathseg = ctx.pathseg_count();
|
||||
let n_trans = ctx.pathseg_count();
|
||||
let n_trans = ctx.trans_count();
|
||||
let scene = ctx.get_scene_buf();
|
||||
|
||||
let renderer = Renderer::new(&session, scene, n_paths, n_pathseg, n_trans)?;
|
||||
|
|
|
@ -386,10 +386,10 @@ void main() {
|
|||
case Element_BeginClip:
|
||||
Clip begin_clip = Element_BeginClip_read(this_ref);
|
||||
AnnoBeginClip anno_begin_clip;
|
||||
// This is the absolute bbox, it's been transformed during encoding.
|
||||
anno_begin_clip.bbox = begin_clip.bbox;
|
||||
if (is_stroke) {
|
||||
vec2 lw = get_linewidth(st);
|
||||
// This is the absolute bbox, it's been transformed during encoding.
|
||||
anno_begin_clip.bbox = begin_clip.bbox + vec4(-lw, lw);
|
||||
anno_begin_clip.linewidth = st.linewidth * sqrt(abs(st.mat.x * st.mat.w - st.mat.y * st.mat.z));
|
||||
} else {
|
||||
anno_begin_clip.bbox = begin_clip.bbox;
|
||||
|
|
Binary file not shown.
|
@ -127,25 +127,12 @@ fn render_clip_test(rc: &mut impl RenderContext) {
|
|||
|
||||
#[allow(unused)]
|
||||
fn render_alpha_test(rc: &mut impl RenderContext) {
|
||||
// Alpha compositing tests. kernel4 expects colors encoded in alpha-premultiplied sRGB:
|
||||
//
|
||||
// [α,sRGB(α⋅R),sRGB(α⋅G),sRGB(α⋅B)]
|
||||
//
|
||||
// See also http://ssp.impulsetrain.com/gamma-premult.html.
|
||||
rc.fill(
|
||||
diamond(Point::new(1024.0, 100.0)),
|
||||
&Color::Rgba32(0xff0000ff),
|
||||
);
|
||||
rc.fill(
|
||||
diamond(Point::new(1024.0, 125.0)),
|
||||
&Color::Rgba32(0x00ba0080),
|
||||
);
|
||||
// Alpha compositing tests.
|
||||
rc.fill(diamond(Point::new(1024.0, 100.0)), &Color::Rgba32(0xff0000ff));
|
||||
rc.fill(diamond(Point::new(1024.0, 125.0)), &Color::Rgba32(0x00ff0080));
|
||||
rc.save();
|
||||
rc.clip(diamond(Point::new(1024.0, 150.0)));
|
||||
rc.fill(
|
||||
diamond(Point::new(1024.0, 175.0)),
|
||||
&Color::Rgba32(0x0000ba80),
|
||||
);
|
||||
rc.fill(diamond(Point::new(1024.0, 175.0)), &Color::Rgba32(0x0000ff80));
|
||||
rc.restore();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,21 +1,19 @@
|
|||
use std::{borrow::Cow, ops::RangeBounds};
|
||||
|
||||
use piet_gpu_types::encoder::{Encode, Encoder};
|
||||
|
||||
use piet_gpu_types::scene::{
|
||||
Clip, CubicSeg, Element, FillColor, LineSeg, QuadSeg, SetFillMode, SetLineWidth, Transform,
|
||||
};
|
||||
|
||||
use piet::{
|
||||
kurbo::{Affine, Insets, PathEl, Point, Rect, Shape, Size},
|
||||
HitTestPosition, TextAttribute, TextStorage,
|
||||
HitTestPosition,
|
||||
kurbo::{Affine, Insets, PathEl, Point, Rect, Shape, Size}, TextAttribute, TextStorage,
|
||||
};
|
||||
|
||||
use piet::{
|
||||
Color, Error, FixedGradient, FontFamily, HitTestPoint, ImageFormat, InterpolationMode,
|
||||
IntoBrush, LineMetric, RenderContext, StrokeStyle, Text, TextLayout, TextLayoutBuilder,
|
||||
};
|
||||
|
||||
use piet_gpu_types::encoder::{Encode, Encoder};
|
||||
use piet_gpu_types::scene::{
|
||||
Clip, CubicSeg, Element, FillColor, LineSeg, QuadSeg, SetFillMode, SetLineWidth, Transform,
|
||||
};
|
||||
|
||||
pub struct PietGpuImage;
|
||||
|
||||
#[derive(Clone)]
|
||||
|
@ -139,7 +137,14 @@ impl RenderContext for PietGpuRenderContext {
|
|||
}
|
||||
|
||||
fn solid_brush(&mut self, color: Color) -> Self::Brush {
|
||||
PietGpuBrush::Solid(color.as_rgba_u32())
|
||||
// kernel4 expects colors encoded in alpha-premultiplied sRGB:
|
||||
//
|
||||
// [α,sRGB(α⋅R),sRGB(α⋅G),sRGB(α⋅B)]
|
||||
//
|
||||
// See also http://ssp.impulsetrain.com/gamma-premult.html.
|
||||
let (r, g, b, a) = color.as_rgba();
|
||||
let premul = Color::rgba(to_srgb(from_srgb(r) * a), to_srgb(from_srgb(g) * a), to_srgb(from_srgb(b) * a), a);
|
||||
PietGpuBrush::Solid(premul.as_rgba_u32())
|
||||
}
|
||||
|
||||
fn gradient(&mut self, _gradient: impl Into<FixedGradient>) -> Result<Self::Brush, Error> {
|
||||
|
@ -177,8 +182,7 @@ impl RenderContext for PietGpuRenderContext {
|
|||
_brush: &impl IntoBrush<Self>,
|
||||
_width: f64,
|
||||
_style: &StrokeStyle,
|
||||
) {
|
||||
}
|
||||
) {}
|
||||
|
||||
fn fill(&mut self, shape: impl Shape, brush: &impl IntoBrush<Self>) {
|
||||
let brush = brush.make_brush(self, || shape.bounding_box()).into_owned();
|
||||
|
@ -280,8 +284,7 @@ impl RenderContext for PietGpuRenderContext {
|
|||
_image: &Self::Image,
|
||||
_rect: impl Into<Rect>,
|
||||
_interp: InterpolationMode,
|
||||
) {
|
||||
}
|
||||
) {}
|
||||
|
||||
fn draw_image_area(
|
||||
&mut self,
|
||||
|
@ -289,8 +292,7 @@ impl RenderContext for PietGpuRenderContext {
|
|||
_src_rect: impl Into<Rect>,
|
||||
_dst_rect: impl Into<Rect>,
|
||||
_interp: InterpolationMode,
|
||||
) {
|
||||
}
|
||||
) {}
|
||||
|
||||
fn blurred_rect(&mut self, _rect: Rect, _blur_radius: f64, _brush: &impl IntoBrush<Self>) {}
|
||||
|
||||
|
@ -587,3 +589,21 @@ fn to_scene_transform(transform: Affine) -> Transform {
|
|||
translate: [c[4] as f32, c[5] as f32],
|
||||
}
|
||||
}
|
||||
|
||||
fn to_srgb(f: f64) -> f64 {
|
||||
if f <= 0.0031308 {
|
||||
f * 12.92
|
||||
} else {
|
||||
let a = 0.055;
|
||||
(1. + a) * f64::powf(f, f64::recip(2.4)) - a
|
||||
}
|
||||
}
|
||||
|
||||
fn from_srgb(f: f64) -> f64 {
|
||||
if f <= 0.04045 {
|
||||
f / 12.92
|
||||
} else {
|
||||
let a = 0.055;
|
||||
f64::powf((f + a) * f64::recip(1. + a), 2.4)
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue