From fa9812109343f7a2b1f475a863b6ba2c12c3262f Mon Sep 17 00:00:00 2001 From: Denis Tsai Date: Sat, 16 Mar 2024 22:18:41 +0800 Subject: [PATCH] feat: optimize some ifs in hotpath --- src/draw/combined.rs | 26 ++++++++++---------------- src/draw/simple.rs | 14 +++++--------- 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/src/draw/combined.rs b/src/draw/combined.rs index 673ba41..4151450 100644 --- a/src/draw/combined.rs +++ b/src/draw/combined.rs @@ -186,21 +186,19 @@ impl CombinedDrawer { slot.attachment().and_then(|a| a.as_mesh()) { let mut color = mesh_attachment.color() * slot.color() * skeleton.color(); + let mut dark_color = slot + .dark_color() + .unwrap_or_else(|| Color::new_rgba(0.0, 0.0, 0.0, 0.0)); if self.premultiplied_alpha { color.premultiply_alpha(); + dark_color *= color.a; + dark_color.a = 1.0; } color = match self.color_space { ColorSpace::SRGB => color, ColorSpace::Linear => color.nonlinear_to_linear(), }; - let mut dark_color = slot - .dark_color() - .unwrap_or_else(|| Color::new_rgba(0.0, 0.0, 0.0, 0.0)); - if self.premultiplied_alpha { - dark_color *= color.a; - dark_color.a = 1.0; - } dark_color = match self.color_space { ColorSpace::SRGB => dark_color, ColorSpace::Linear => dark_color.nonlinear_to_linear(), @@ -273,23 +271,19 @@ impl CombinedDrawer { (color, dark_color) } else if let Some(region_attachment) = slot.attachment().and_then(|a| a.as_region()) { let mut color = region_attachment.color() * slot.color() * skeleton.color(); + let mut dark_color = slot + .dark_color() + .unwrap_or_else(|| Color::new_rgba(0.0, 0.0, 0.0, 0.0)); if self.premultiplied_alpha { color.premultiply_alpha(); + dark_color *= color.a; + dark_color.a = 1.0; } color = match self.color_space { ColorSpace::SRGB => color, ColorSpace::Linear => color.nonlinear_to_linear(), }; - let mut dark_color = slot - .dark_color() - .unwrap_or_else(|| Color::new_rgba(0.0, 0.0, 0.0, 0.0)); - if self.premultiplied_alpha { - dark_color *= color.a; - dark_color.a = 1.0; - } else { - dark_color.a = 0.0; - } dark_color = match self.color_space { ColorSpace::SRGB => dark_color, ColorSpace::Linear => dark_color.nonlinear_to_linear(), diff --git a/src/draw/simple.rs b/src/draw/simple.rs index df9117f..c341e0f 100644 --- a/src/draw/simple.rs +++ b/src/draw/simple.rs @@ -284,23 +284,19 @@ impl SimpleDrawer { ); color *= slot.color() * skeleton.color(); + let mut dark_color = slot + .dark_color() + .unwrap_or_else(|| Color::new_rgba(0.0, 0.0, 0.0, 0.0)); if self.premultiplied_alpha { color.premultiply_alpha(); + dark_color *= color.a; + dark_color.a = 1.0; } color = match self.color_space { ColorSpace::SRGB => color, ColorSpace::Linear => color.nonlinear_to_linear(), }; - let mut dark_color = slot - .dark_color() - .unwrap_or_else(|| Color::new_rgba(0.0, 0.0, 0.0, 0.0)); - if self.premultiplied_alpha { - dark_color *= color.a; - dark_color.a = 1.0; - } else { - dark_color.a = 0.0; - } dark_color = match self.color_space { ColorSpace::SRGB => dark_color, ColorSpace::Linear => dark_color.nonlinear_to_linear(),