Skip to content

Instantly share code, notes, and snippets.

View mooman219's full-sized avatar
🐄

mooman219

🐄
View GitHub Profile
pub fn get_bitmap(&self) -> Vec<u8> {
let length = self.w * self.h;
let aligned_length = (length + 3) & !3;
assert!(aligned_length <= self.a.len());
let mut output = vec![0; aligned_length];
unsafe {
// offset = Zeroed out lanes
let mut offset = _mm_setzero_ps();
// lookup = The 4 bytes (12, 8, 4, 0) in all lanes
let lookup = _mm_set1_epi32(0x0c_08_04_00);
pub fn get_bitmap(&self) -> Vec<u8> {
let length = self.w * self.h;
let aligned_length = (length + 3) & !3;
assert!(aligned_length - 1 <= self.a.len());
let mut output = vec![0; aligned_length];
unsafe {
// offset = Zeroed out lanes
let mut offset = _mm_setzero_ps();
// lookup = The 4 bytes (12, 8, 4, 0) in all lanes
let lookup = _mm_set1_epi32(0x0c_08_04_00);
#[cfg(all(target_feature = "sse", any(target_arch = "x86", target_arch = "x86_64")))]
pub fn get_bitmap(&self) -> Vec<u8> {
let length = self.w * self.h;
let aligned_length = (length + 3) & !3;
let mut output = Vec::with_capacity(aligned_length);
unsafe {
output.set_len(aligned_length);
// offset = Zeroed out lanes
let mut offset = _mm_setzero_ps();
// lookup = The 4 bytes (12, 8, 4, 0) in all lanes
use crate::math::Polygons;
use alloc::vec;
use alloc::vec::*;
pub struct Raster {
w: usize,
h: usize,
a: Vec<f32>,
}
// MIT
#[inline(always)]
pub fn line(
&mut self,
x0: f32,
y0: f32,
x1: f32,
y1: f32,
) {
let dy = y1 - y0;
0eNrdvU1vnLmSNfhXLrwuGQ+/yYtBL2bdwAzmXcyi0Sik5bQrp2TJSMk1XWjUf5+UrEw9thkR50Smdad6U2VL5mGQjIgnGF/87zfvbr5sP+93tw+/vru7+/3NP//75Sf3b/75H6u/Pv5ud313+/XH97uPt5ubx589/Pl5++afb3YP209vfnlzu/n0+Lf7h7vb7dX/u7m5efPXL292t++3//Xmn+Gv//zlzfb2Yfew235FefrLn7/efvn0brs//IOX8V/e3T9sHnZ3twfMz3f3u6c/HmY7wFwtb8svb/48/KG8LX/99csPMPEEc7O53+6vHr7s99uHCVB/BopznATiNB0mz3blR2LGE8YUoTAIeYZQMYQu09AYhCkNHUNoMg2DQZjSEBYMospEhMBAzKmIGERRqEgMxJwKkDGzQkVhIOZUgKyZFCoaAzGnAmTOqFAxGIgpFfGFOz9uHraTweF5/l/evN/tt9dffxVnUMGAWmCkCCFlAClhy0OgMN4N8nHFQiDMTwvjXIVlYiMQ5jRgfKsITxwEwpSGhOlURY2kQCDMacA0qqJQUyIQ5jRgPKl8WlIhEOY0YDypfGNTIxDmNGA8qdgaaRAIBxoOZuWT+fnPlbX6y8Foe7c9WKhv/u+vg//Y7u+fxra0hFFjSK2+2KbLIxlOW/fuZrO/+ry53XqN3RXARCd+3erD/3Vb10DJGkpCUYKGkkGUroEUEKRoIBUEiRpIw0DULekYhno4A8NQ2WRt96qLWVQUkGdDUlFAng1VRUms/JhGMCZA2TKEMQkyjWFIhLJlD0MyZJrEkBBlyypGpMiyiyExmoMETo7mIJGUozlKIuVojpJJOcqWHYzJUbCMYUyOgmERb66vv3z6crN5uNtP5ejoBHr8k2Ea61DDRBogUrOQVqayjlRMpAAiJRMpoltuIiUMaTGBMgYUTaCCAWUTqGJA1QQCGbybQCB7B3u3B6mNppKbF1IbzVFYq7hPUVireI6SaF00BA9wxhzbw8IprCKSgCqrhyS
0eNqVltFugyAUhl9l4VobgaLFy75EL5al0Y4sZBYbxW5N47uP2m026ZGccycon1/ML/xXVjeDOXXW+X3dtp+svM4zPStfH4a3e/bQuvt0bz9c1dzm/OVkWMmsN0eWMFcdb6Pet86kX1XTsDFh1r2bb1by8S1hxnnrrblTpsFl74ZjbbrwwLx+qHtfedu6wDy1vZ0uw9sCJs1WKmGXcKFWahyTJ4z4xzRVb7rUD11nPADa/IIEzJFIThHHrKGv8iyjJwZIUBTCGiLkOMJm2aGgEECHDY5QLDtoCgF04BkOkS9LcE5BwBYCh1ARC0lBwBbIYK4jFoqCgC2Q0ZQRi4KCgC2Q4RQRC01BgBYCmU6+bCE4BQFb4NKZRSQkgQA74LIZ+xCKQIAdcMmMREIUBALsgMtl5OcQmkAAHSQulZFtQnICAXbAZTKyYUpJIMAOuExGjg6pCATYAZfJyBkqCwIBdsBlMtIlpCYQgkOojVO9LB/aaBJKWW1CA2W7++Kz6fppbSEzroWWuc7n7plBkHTqvDNpG2rey3buvwmrDt6ezf4PsvCW8QcIBrVJ
Current todo for 1.0:
- Raster rewrite
- Metrics is incomplete
- Layout utility is incomplete
- Kerning is missing
pub fn draw_line(&mut self, p0: &Point, p1: &Point) {
if p0.y == p1.y {
return;
}
let (dir, p0, p1) = if p0.y < p1.y {
(1.0, p0, p1)
} else {
(-1.0, p1, p0)
};
let dxdy = (p1.x - p0.x) / (p1.y - p0.y);
#[cfg(not(target_feature = "sse"))]
fn accumulate(src: &[f32]) -> Vec<u8> {
let mut acc = 0.0;
src.iter()
.map(|c| {
acc += c;
let y = acc.abs();
let y = if y < 1.0 {
y
} else {