Properly use premultiplied alpha
This commit is contained in:
@@ -24,19 +24,18 @@ impl Drawable for Circle {
|
||||
for l_row in 1..self.radius {
|
||||
let inner_diff = (((self.radius-1).pow(2) - l_row.pow(2)) as f64).sqrt();
|
||||
let outer_diff = ((self.radius.pow(2) - l_row.pow(2)) as f64).sqrt();
|
||||
let row: Vec<u32> = vec![self.color; 2*(inner_diff.floor() as usize)];
|
||||
shm_pool.write(&row, (self.y-l_row)*buffer.width + self.x - inner_diff.floor() as usize + buffer.offset);
|
||||
shm_pool.write(&row, (self.y+l_row-1)*buffer.width + self.x - inner_diff.floor() as usize + buffer.offset);
|
||||
shm_pool.write(self.color, (self.y-l_row)*buffer.width + self.x - inner_diff.floor() as usize + buffer.offset, 2*(inner_diff.floor() as usize));
|
||||
shm_pool.write(self.color, (self.y+l_row-1)*buffer.width + self.x - inner_diff.floor() as usize + buffer.offset, 2*(inner_diff.floor() as usize));
|
||||
for l_col in (inner_diff.floor() as usize+1)..(outer_diff.ceil() as usize) {
|
||||
let distance = ((l_row.pow(2) + l_col.pow(2)) as f64).sqrt();
|
||||
let offset = (self.y-l_row)*buffer.width + self.x - l_col + buffer.offset;
|
||||
shm_pool.write_pixel(color_blend(self.color, shm_pool.read_pixel(offset).unwrap(), distance.fract()), offset);
|
||||
shm_pool.write_pixel(color_blend(self.color, 0, distance.fract()), offset);
|
||||
let offset = (self.y-l_row)*buffer.width + self.x + l_col-1 + buffer.offset;
|
||||
shm_pool.write_pixel(color_blend(self.color, shm_pool.read_pixel(offset).unwrap(), distance.fract()), offset);
|
||||
shm_pool.write_pixel(color_blend(self.color, 0, distance.fract()), offset);
|
||||
let offset = (self.y+l_row-1)*buffer.width + self.x - l_col + buffer.offset;
|
||||
shm_pool.write_pixel(color_blend(self.color, shm_pool.read_pixel(offset).unwrap(), distance.fract()), offset);
|
||||
shm_pool.write_pixel(color_blend(self.color, 0, distance.fract()), offset);
|
||||
let offset = (self.y+l_row-1)*buffer.width + self.x + l_col-1 + buffer.offset;
|
||||
shm_pool.write_pixel(color_blend(self.color, shm_pool.read_pixel(offset).unwrap(), distance.fract()), offset);
|
||||
shm_pool.write_pixel(color_blend(self.color, 0, distance.fract()), offset);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user