rename color types to somewhat less "noisy" names
plus these are easier to type. i do not anticipate needing structured color types for any other type of components (e.g. i don't see a need for an ARGBu16x4, etc). so i am fine with just having `ARGB` being associated with four u8's with no real indication of this in the type name itself.
This commit is contained in:
parent
ae178e1fa0
commit
78d8102a23
|
@ -11,7 +11,7 @@ pub struct CoreContext {
|
||||||
pub delta: f32,
|
pub delta: f32,
|
||||||
pub camera_x: i32,
|
pub camera_x: i32,
|
||||||
pub camera_y: i32,
|
pub camera_y: i32,
|
||||||
pub transparent_color: ARGBu8x4,
|
pub transparent_color: ARGB,
|
||||||
pub system: System<Standard>,
|
pub system: System<Standard>,
|
||||||
pub palette: Palette,
|
pub palette: Palette,
|
||||||
pub font: BitmaskFont,
|
pub font: BitmaskFont,
|
||||||
|
|
|
@ -63,7 +63,7 @@ impl TileMap {
|
||||||
tiles: &BitmapAtlas<RgbaBitmap>,
|
tiles: &BitmapAtlas<RgbaBitmap>,
|
||||||
camera_x: i32,
|
camera_x: i32,
|
||||||
camera_y: i32,
|
camera_y: i32,
|
||||||
transparent_color: ARGBu8x4,
|
transparent_color: ARGB,
|
||||||
) {
|
) {
|
||||||
let xt = camera_x / TILE_WIDTH as i32;
|
let xt = camera_x / TILE_WIDTH as i32;
|
||||||
let yt = camera_y / TILE_HEIGHT as i32;
|
let yt = camera_y / TILE_HEIGHT as i32;
|
||||||
|
|
|
@ -7,7 +7,7 @@ pub fn criterion_benchmark(c: &mut Criterion) {
|
||||||
let height = 240;
|
let height = 240;
|
||||||
|
|
||||||
let mut source = IndexedBitmap::new(width, height).unwrap();
|
let mut source = IndexedBitmap::new(width, height).unwrap();
|
||||||
let mut dest = vec![ARGBu8x4::default(); (width * height) as usize].into_boxed_slice();
|
let mut dest = vec![ARGB::default(); (width * height) as usize].into_boxed_slice();
|
||||||
let palette = Palette::new_vga_palette().unwrap();
|
let palette = Palette::new_vga_palette().unwrap();
|
||||||
|
|
||||||
c.bench_function("deindex_bitmap_pixels", |b| b.iter(|| source.copy_as_argb_to(&mut dest, &palette)));
|
c.bench_function("deindex_bitmap_pixels", |b| b.iter(|| source.copy_as_argb_to(&mut dest, &palette)));
|
||||||
|
|
|
@ -6,9 +6,9 @@ pub fn criterion_benchmark(c: &mut Criterion) {
|
||||||
let width = 320;
|
let width = 320;
|
||||||
let height = 240;
|
let height = 240;
|
||||||
|
|
||||||
const BG_COLOR: ARGBu8x4 = ARGBu8x4::from_rgb([0, 0, 0]);
|
const BG_COLOR: ARGB = ARGB::from_rgb([0, 0, 0]);
|
||||||
const SOLID_COLOR: ARGBu8x4 = ARGBu8x4::from_rgb([255, 0, 255]);
|
const SOLID_COLOR: ARGB = ARGB::from_rgb([255, 0, 255]);
|
||||||
const BLEND_COLOR: ARGBu8x4 = ARGBu8x4::from_argb([127, 255, 0, 255]);
|
const BLEND_COLOR: ARGB = ARGB::from_argb([127, 255, 0, 255]);
|
||||||
|
|
||||||
let mut dest = RgbaBitmap::new(width, height).unwrap();
|
let mut dest = RgbaBitmap::new(width, height).unwrap();
|
||||||
|
|
||||||
|
|
|
@ -22,10 +22,10 @@ pub fn criterion_benchmark(c: &mut Criterion) {
|
||||||
let texcoord_0_1 = Vector2::new(0.0, 1.0);
|
let texcoord_0_1 = Vector2::new(0.0, 1.0);
|
||||||
let texcoord_1_1 = Vector2::new(1.0, 1.0);
|
let texcoord_1_1 = Vector2::new(1.0, 1.0);
|
||||||
|
|
||||||
let color = ARGBu8x4::from_rgb([255, 255, 255]);
|
let color = ARGB::from_rgb([255, 255, 255]);
|
||||||
let color_1 = ARGBu8x4::from_argb([255, 255, 0, 0]);
|
let color_1 = ARGB::from_argb([255, 255, 0, 0]);
|
||||||
let color_2 = ARGBu8x4::from_argb([255, 0, 255, 0]);
|
let color_2 = ARGB::from_argb([255, 0, 255, 0]);
|
||||||
let color_3 = ARGBu8x4::from_argb([255, 0, 0, 255]);
|
let color_3 = ARGB::from_argb([255, 0, 0, 255]);
|
||||||
|
|
||||||
c.bench_function("rgbabitmap_triangle_2d_solid_color", |b| {
|
c.bench_function("rgbabitmap_triangle_2d_solid_color", |b| {
|
||||||
let triangle = RgbaTriangle2d::Solid { position: [big_v1, big_v2, big_v3], color };
|
let triangle = RgbaTriangle2d::Solid { position: [big_v1, big_v2, big_v3], color };
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
//! Only a subset of the most common Bitmap drawing operations will be provided here.
|
//! Only a subset of the most common Bitmap drawing operations will be provided here.
|
||||||
|
|
||||||
use crate::graphics::{
|
use crate::graphics::{
|
||||||
ARGBu8x4, BitmapError, Font, FontRenderOpts, IndexedBitmap, IndexedBlitMethod, Pixel, RgbaBitmap, RgbaBlitMethod,
|
BitmapError, Font, FontRenderOpts, IndexedBitmap, IndexedBlitMethod, Pixel, RgbaBitmap, RgbaBlitMethod, ARGB,
|
||||||
};
|
};
|
||||||
use crate::math::Rect;
|
use crate::math::Rect;
|
||||||
|
|
||||||
|
@ -220,7 +220,7 @@ impl GeneralBitmap for IndexedBitmap {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GeneralBitmap for RgbaBitmap {
|
impl GeneralBitmap for RgbaBitmap {
|
||||||
type PixelType = ARGBu8x4;
|
type PixelType = ARGB;
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn new(width: u32, height: u32) -> Result<Self, BitmapError> {
|
fn new(width: u32, height: u32) -> Result<Self, BitmapError> {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
use crate::graphics::{ARGBu8x4, Bitmap, BitmapError, Palette, RgbaBitmap};
|
use crate::graphics::{Bitmap, BitmapError, Palette, RgbaBitmap, ARGB};
|
||||||
|
|
||||||
mod blit;
|
mod blit;
|
||||||
mod primitives;
|
mod primitives;
|
||||||
|
@ -51,7 +51,7 @@ impl IndexedBitmap {
|
||||||
///
|
///
|
||||||
/// * `dest`: destination 32-bit ARGB pixel buffer to copy converted pixels to
|
/// * `dest`: destination 32-bit ARGB pixel buffer to copy converted pixels to
|
||||||
/// * `palette`: the 256 colour palette to use during pixel conversion
|
/// * `palette`: the 256 colour palette to use during pixel conversion
|
||||||
pub fn copy_as_argb_to(&self, dest: &mut [ARGBu8x4], palette: &Palette) {
|
pub fn copy_as_argb_to(&self, dest: &mut [ARGB], palette: &Palette) {
|
||||||
for (src, dest) in self.pixels().iter().zip(dest.iter_mut()) {
|
for (src, dest) in self.pixels().iter().zip(dest.iter_mut()) {
|
||||||
*dest = palette[*src];
|
*dest = palette[*src];
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ use std::path::Path;
|
||||||
use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt};
|
use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt};
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
use crate::graphics::{ARGBu8x4, Bitmap, IndexedBitmap, Palette, PaletteError, PaletteFormat, Pixel, RgbaBitmap};
|
use crate::graphics::{Bitmap, IndexedBitmap, Palette, PaletteError, PaletteFormat, Pixel, RgbaBitmap, ARGB};
|
||||||
use crate::utils::ReadFixedLengthByteArray;
|
use crate::utils::ReadFixedLengthByteArray;
|
||||||
|
|
||||||
const PNG_HEADER: [u8; 8] = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];
|
const PNG_HEADER: [u8; 8] = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];
|
||||||
|
@ -319,8 +319,8 @@ impl ScanlinePixelConverter<u8> for ScanlineBuffer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ScanlinePixelConverter<ARGBu8x4> for ScanlineBuffer {
|
impl ScanlinePixelConverter<ARGB> for ScanlineBuffer {
|
||||||
fn read_pixel(&mut self, x: usize, palette: &Option<Palette>) -> Result<ARGBu8x4, PngError> {
|
fn read_pixel(&mut self, x: usize, palette: &Option<Palette>) -> Result<ARGB, PngError> {
|
||||||
let offset = x * self.bpp;
|
let offset = x * self.bpp;
|
||||||
match self.format {
|
match self.format {
|
||||||
ColorFormat::IndexedColor => {
|
ColorFormat::IndexedColor => {
|
||||||
|
@ -337,20 +337,20 @@ impl ScanlinePixelConverter<ARGBu8x4> for ScanlineBuffer {
|
||||||
let r = self.current[offset];
|
let r = self.current[offset];
|
||||||
let g = self.current[offset + 1];
|
let g = self.current[offset + 1];
|
||||||
let b = self.current[offset + 2];
|
let b = self.current[offset + 2];
|
||||||
Ok(ARGBu8x4::from_rgb([r, g, b]))
|
Ok(ARGB::from_rgb([r, g, b]))
|
||||||
}
|
}
|
||||||
ColorFormat::RGBA => {
|
ColorFormat::RGBA => {
|
||||||
let r = self.current[offset];
|
let r = self.current[offset];
|
||||||
let g = self.current[offset + 1];
|
let g = self.current[offset + 1];
|
||||||
let b = self.current[offset + 2];
|
let b = self.current[offset + 2];
|
||||||
let a = self.current[offset + 3];
|
let a = self.current[offset + 3];
|
||||||
Ok(ARGBu8x4::from_argb([a, r, g, b]))
|
Ok(ARGB::from_argb([a, r, g, b]))
|
||||||
}
|
}
|
||||||
_ => Err(PngError::BadFile(format!("Unsupported color format for this PixelReader: {:?}", self.format))),
|
_ => Err(PngError::BadFile(format!("Unsupported color format for this PixelReader: {:?}", self.format))),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_pixel(&mut self, x: usize, pixel: ARGBu8x4) -> Result<(), PngError> {
|
fn write_pixel(&mut self, x: usize, pixel: ARGB) -> Result<(), PngError> {
|
||||||
let offset = x * self.bpp;
|
let offset = x * self.bpp;
|
||||||
match self.format {
|
match self.format {
|
||||||
ColorFormat::RGB => {
|
ColorFormat::RGB => {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::graphics::{
|
use crate::graphics::{
|
||||||
clip_blit, per_pixel_blit, per_pixel_flipped_blit, per_pixel_rotozoom_blit, ARGBu8x4, BitmapAtlas, BlendFunction,
|
clip_blit, per_pixel_blit, per_pixel_flipped_blit, per_pixel_rotozoom_blit, BitmapAtlas, BlendFunction, RgbaBitmap,
|
||||||
RgbaBitmap,
|
ARGB,
|
||||||
};
|
};
|
||||||
use crate::math::Rect;
|
use crate::math::Rect;
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ use crate::math::Rect;
|
||||||
pub enum RgbaBlitMethod {
|
pub enum RgbaBlitMethod {
|
||||||
/// Solid blit, no transparency or other per-pixel adjustments.
|
/// Solid blit, no transparency or other per-pixel adjustments.
|
||||||
Solid,
|
Solid,
|
||||||
SolidTinted(ARGBu8x4),
|
SolidTinted(ARGB),
|
||||||
SolidBlended(BlendFunction),
|
SolidBlended(BlendFunction),
|
||||||
/// Same as [RgbaBlitMethod::Solid] but the drawn image can also be flipped horizontally
|
/// Same as [RgbaBlitMethod::Solid] but the drawn image can also be flipped horizontally
|
||||||
/// and/or vertically.
|
/// and/or vertically.
|
||||||
|
@ -19,7 +19,7 @@ pub enum RgbaBlitMethod {
|
||||||
SolidFlippedTinted {
|
SolidFlippedTinted {
|
||||||
horizontal_flip: bool,
|
horizontal_flip: bool,
|
||||||
vertical_flip: bool,
|
vertical_flip: bool,
|
||||||
tint_color: ARGBu8x4,
|
tint_color: ARGB,
|
||||||
},
|
},
|
||||||
SolidFlippedBlended {
|
SolidFlippedBlended {
|
||||||
horizontal_flip: bool,
|
horizontal_flip: bool,
|
||||||
|
@ -27,30 +27,30 @@ pub enum RgbaBlitMethod {
|
||||||
blend: BlendFunction,
|
blend: BlendFunction,
|
||||||
},
|
},
|
||||||
/// Transparent blit, the specified source color pixels are skipped.
|
/// Transparent blit, the specified source color pixels are skipped.
|
||||||
Transparent(ARGBu8x4),
|
Transparent(ARGB),
|
||||||
TransparentTinted {
|
TransparentTinted {
|
||||||
transparent_color: ARGBu8x4,
|
transparent_color: ARGB,
|
||||||
tint_color: ARGBu8x4,
|
tint_color: ARGB,
|
||||||
},
|
},
|
||||||
TransparentBlended {
|
TransparentBlended {
|
||||||
transparent_color: ARGBu8x4,
|
transparent_color: ARGB,
|
||||||
blend: BlendFunction,
|
blend: BlendFunction,
|
||||||
},
|
},
|
||||||
/// Same as [RgbaBlitMethod::Transparent] but the drawn image can also be flipped horizontally
|
/// Same as [RgbaBlitMethod::Transparent] but the drawn image can also be flipped horizontally
|
||||||
/// and/or vertically.
|
/// and/or vertically.
|
||||||
TransparentFlipped {
|
TransparentFlipped {
|
||||||
transparent_color: ARGBu8x4,
|
transparent_color: ARGB,
|
||||||
horizontal_flip: bool,
|
horizontal_flip: bool,
|
||||||
vertical_flip: bool,
|
vertical_flip: bool,
|
||||||
},
|
},
|
||||||
TransparentFlippedTinted {
|
TransparentFlippedTinted {
|
||||||
transparent_color: ARGBu8x4,
|
transparent_color: ARGB,
|
||||||
horizontal_flip: bool,
|
horizontal_flip: bool,
|
||||||
vertical_flip: bool,
|
vertical_flip: bool,
|
||||||
tint_color: ARGBu8x4,
|
tint_color: ARGB,
|
||||||
},
|
},
|
||||||
TransparentFlippedBlended {
|
TransparentFlippedBlended {
|
||||||
transparent_color: ARGBu8x4,
|
transparent_color: ARGB,
|
||||||
horizontal_flip: bool,
|
horizontal_flip: bool,
|
||||||
vertical_flip: bool,
|
vertical_flip: bool,
|
||||||
blend: BlendFunction,
|
blend: BlendFunction,
|
||||||
|
@ -58,15 +58,15 @@ pub enum RgbaBlitMethod {
|
||||||
/// Same as [RgbaBlitMethod::Transparent] except that the visible pixels on the destination are all
|
/// Same as [RgbaBlitMethod::Transparent] except that the visible pixels on the destination are all
|
||||||
/// drawn using the same color.
|
/// drawn using the same color.
|
||||||
TransparentSingle {
|
TransparentSingle {
|
||||||
transparent_color: ARGBu8x4,
|
transparent_color: ARGB,
|
||||||
draw_color: ARGBu8x4,
|
draw_color: ARGB,
|
||||||
},
|
},
|
||||||
/// Combination of [RgbaBlitMethod::TransparentFlipped] and [RgbaBlitMethod::TransparentSingle].
|
/// Combination of [RgbaBlitMethod::TransparentFlipped] and [RgbaBlitMethod::TransparentSingle].
|
||||||
TransparentFlippedSingle {
|
TransparentFlippedSingle {
|
||||||
transparent_color: ARGBu8x4,
|
transparent_color: ARGB,
|
||||||
horizontal_flip: bool,
|
horizontal_flip: bool,
|
||||||
vertical_flip: bool,
|
vertical_flip: bool,
|
||||||
draw_color: ARGBu8x4,
|
draw_color: ARGB,
|
||||||
},
|
},
|
||||||
/// Rotozoom blit, works the same as [RgbaBlitMethod::Solid] except that rotation and scaling is
|
/// Rotozoom blit, works the same as [RgbaBlitMethod::Solid] except that rotation and scaling is
|
||||||
/// performed.
|
/// performed.
|
||||||
|
@ -79,7 +79,7 @@ pub enum RgbaBlitMethod {
|
||||||
angle: f32,
|
angle: f32,
|
||||||
scale_x: f32,
|
scale_x: f32,
|
||||||
scale_y: f32,
|
scale_y: f32,
|
||||||
tint_color: ARGBu8x4,
|
tint_color: ARGB,
|
||||||
},
|
},
|
||||||
RotoZoomBlended {
|
RotoZoomBlended {
|
||||||
angle: f32,
|
angle: f32,
|
||||||
|
@ -92,20 +92,20 @@ pub enum RgbaBlitMethod {
|
||||||
angle: f32,
|
angle: f32,
|
||||||
scale_x: f32,
|
scale_x: f32,
|
||||||
scale_y: f32,
|
scale_y: f32,
|
||||||
transparent_color: ARGBu8x4,
|
transparent_color: ARGB,
|
||||||
},
|
},
|
||||||
RotoZoomTransparentTinted {
|
RotoZoomTransparentTinted {
|
||||||
angle: f32,
|
angle: f32,
|
||||||
scale_x: f32,
|
scale_x: f32,
|
||||||
scale_y: f32,
|
scale_y: f32,
|
||||||
transparent_color: ARGBu8x4,
|
transparent_color: ARGB,
|
||||||
tint_color: ARGBu8x4,
|
tint_color: ARGB,
|
||||||
},
|
},
|
||||||
RotoZoomTransparentBlended {
|
RotoZoomTransparentBlended {
|
||||||
angle: f32,
|
angle: f32,
|
||||||
scale_x: f32,
|
scale_x: f32,
|
||||||
scale_y: f32,
|
scale_y: f32,
|
||||||
transparent_color: ARGBu8x4,
|
transparent_color: ARGB,
|
||||||
blend: BlendFunction,
|
blend: BlendFunction,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -117,7 +117,7 @@ impl RgbaBitmap {
|
||||||
src_region: &Rect,
|
src_region: &Rect,
|
||||||
dest_x: i32,
|
dest_x: i32,
|
||||||
dest_y: i32,
|
dest_y: i32,
|
||||||
tint_color: ARGBu8x4,
|
tint_color: ARGB,
|
||||||
) {
|
) {
|
||||||
per_pixel_blit(
|
per_pixel_blit(
|
||||||
self, //
|
self, //
|
||||||
|
@ -183,7 +183,7 @@ impl RgbaBitmap {
|
||||||
dest_y: i32,
|
dest_y: i32,
|
||||||
horizontal_flip: bool,
|
horizontal_flip: bool,
|
||||||
vertical_flip: bool,
|
vertical_flip: bool,
|
||||||
tint_color: ARGBu8x4,
|
tint_color: ARGB,
|
||||||
) {
|
) {
|
||||||
per_pixel_flipped_blit(
|
per_pixel_flipped_blit(
|
||||||
self, //
|
self, //
|
||||||
|
@ -205,8 +205,8 @@ impl RgbaBitmap {
|
||||||
src_region: &Rect,
|
src_region: &Rect,
|
||||||
dest_x: i32,
|
dest_x: i32,
|
||||||
dest_y: i32,
|
dest_y: i32,
|
||||||
transparent_color: ARGBu8x4,
|
transparent_color: ARGB,
|
||||||
tint_color: ARGBu8x4,
|
tint_color: ARGB,
|
||||||
) {
|
) {
|
||||||
per_pixel_blit(
|
per_pixel_blit(
|
||||||
self, //
|
self, //
|
||||||
|
@ -228,7 +228,7 @@ impl RgbaBitmap {
|
||||||
src_region: &Rect,
|
src_region: &Rect,
|
||||||
dest_x: i32,
|
dest_x: i32,
|
||||||
dest_y: i32,
|
dest_y: i32,
|
||||||
transparent_color: ARGBu8x4,
|
transparent_color: ARGB,
|
||||||
blend: BlendFunction,
|
blend: BlendFunction,
|
||||||
) {
|
) {
|
||||||
per_pixel_blit(
|
per_pixel_blit(
|
||||||
|
@ -251,10 +251,10 @@ impl RgbaBitmap {
|
||||||
src_region: &Rect,
|
src_region: &Rect,
|
||||||
dest_x: i32,
|
dest_x: i32,
|
||||||
dest_y: i32,
|
dest_y: i32,
|
||||||
transparent_color: ARGBu8x4,
|
transparent_color: ARGB,
|
||||||
horizontal_flip: bool,
|
horizontal_flip: bool,
|
||||||
vertical_flip: bool,
|
vertical_flip: bool,
|
||||||
tint_color: ARGBu8x4,
|
tint_color: ARGB,
|
||||||
) {
|
) {
|
||||||
per_pixel_flipped_blit(
|
per_pixel_flipped_blit(
|
||||||
self, //
|
self, //
|
||||||
|
@ -278,7 +278,7 @@ impl RgbaBitmap {
|
||||||
src_region: &Rect,
|
src_region: &Rect,
|
||||||
dest_x: i32,
|
dest_x: i32,
|
||||||
dest_y: i32,
|
dest_y: i32,
|
||||||
transparent_color: ARGBu8x4,
|
transparent_color: ARGB,
|
||||||
horizontal_flip: bool,
|
horizontal_flip: bool,
|
||||||
vertical_flip: bool,
|
vertical_flip: bool,
|
||||||
blend: BlendFunction,
|
blend: BlendFunction,
|
||||||
|
@ -308,7 +308,7 @@ impl RgbaBitmap {
|
||||||
angle: f32,
|
angle: f32,
|
||||||
scale_x: f32,
|
scale_x: f32,
|
||||||
scale_y: f32,
|
scale_y: f32,
|
||||||
tint_color: ARGBu8x4,
|
tint_color: ARGB,
|
||||||
) {
|
) {
|
||||||
per_pixel_rotozoom_blit(
|
per_pixel_rotozoom_blit(
|
||||||
self, //
|
self, //
|
||||||
|
@ -362,8 +362,8 @@ impl RgbaBitmap {
|
||||||
angle: f32,
|
angle: f32,
|
||||||
scale_x: f32,
|
scale_x: f32,
|
||||||
scale_y: f32,
|
scale_y: f32,
|
||||||
transparent_color: ARGBu8x4,
|
transparent_color: ARGB,
|
||||||
tint_color: ARGBu8x4,
|
tint_color: ARGB,
|
||||||
) {
|
) {
|
||||||
per_pixel_rotozoom_blit(
|
per_pixel_rotozoom_blit(
|
||||||
self, //
|
self, //
|
||||||
|
@ -391,7 +391,7 @@ impl RgbaBitmap {
|
||||||
angle: f32,
|
angle: f32,
|
||||||
scale_x: f32,
|
scale_x: f32,
|
||||||
scale_y: f32,
|
scale_y: f32,
|
||||||
transparent_color: ARGBu8x4,
|
transparent_color: ARGB,
|
||||||
blend: BlendFunction,
|
blend: BlendFunction,
|
||||||
) {
|
) {
|
||||||
per_pixel_rotozoom_blit(
|
per_pixel_rotozoom_blit(
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use byteorder::ReadBytesExt;
|
use byteorder::ReadBytesExt;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
use crate::graphics::{ARGBu8x4, Bitmap, BitmapError, Palette};
|
use crate::graphics::{Bitmap, BitmapError, Palette, ARGB};
|
||||||
|
|
||||||
mod blit;
|
mod blit;
|
||||||
mod primitives;
|
mod primitives;
|
||||||
|
@ -11,7 +11,7 @@ pub use blit::*;
|
||||||
pub use primitives::*;
|
pub use primitives::*;
|
||||||
pub use triangles::*;
|
pub use triangles::*;
|
||||||
|
|
||||||
pub type RgbaBitmap = Bitmap<ARGBu8x4>;
|
pub type RgbaBitmap = Bitmap<ARGB>;
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
|
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
|
||||||
pub enum RgbaPixelFormat {
|
pub enum RgbaPixelFormat {
|
||||||
|
@ -29,7 +29,7 @@ impl RgbaBitmap {
|
||||||
///
|
///
|
||||||
/// returns: `Result<Bitmap, BitmapError>`
|
/// returns: `Result<Bitmap, BitmapError>`
|
||||||
pub fn new(width: u32, height: u32) -> Result<Self, BitmapError> {
|
pub fn new(width: u32, height: u32) -> Result<Self, BitmapError> {
|
||||||
Self::internal_new(width, height, ARGBu8x4::from_rgb([0, 0, 0]))
|
Self::internal_new(width, height, ARGB::from_rgb([0, 0, 0]))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_bytes<T: ReadBytesExt>(
|
pub fn from_bytes<T: ReadBytesExt>(
|
||||||
|
@ -38,7 +38,7 @@ impl RgbaBitmap {
|
||||||
format: RgbaPixelFormat,
|
format: RgbaPixelFormat,
|
||||||
reader: &mut T,
|
reader: &mut T,
|
||||||
) -> Result<Self, BitmapError> {
|
) -> Result<Self, BitmapError> {
|
||||||
let mut bitmap = Self::internal_new(width, height, ARGBu8x4::from_rgb([0, 0, 0]))?;
|
let mut bitmap = Self::internal_new(width, height, ARGB::from_rgb([0, 0, 0]))?;
|
||||||
for pixel in bitmap.pixels_mut().iter_mut() {
|
for pixel in bitmap.pixels_mut().iter_mut() {
|
||||||
*pixel = match format {
|
*pixel = match format {
|
||||||
RgbaPixelFormat::RGBA => {
|
RgbaPixelFormat::RGBA => {
|
||||||
|
@ -46,14 +46,14 @@ impl RgbaBitmap {
|
||||||
let g = reader.read_u8()?;
|
let g = reader.read_u8()?;
|
||||||
let b = reader.read_u8()?;
|
let b = reader.read_u8()?;
|
||||||
let a = reader.read_u8()?;
|
let a = reader.read_u8()?;
|
||||||
ARGBu8x4::from_argb([a, r, g, b])
|
ARGB::from_argb([a, r, g, b])
|
||||||
}
|
}
|
||||||
RgbaPixelFormat::ARGB => {
|
RgbaPixelFormat::ARGB => {
|
||||||
let a = reader.read_u8()?;
|
let a = reader.read_u8()?;
|
||||||
let r = reader.read_u8()?;
|
let r = reader.read_u8()?;
|
||||||
let g = reader.read_u8()?;
|
let g = reader.read_u8()?;
|
||||||
let b = reader.read_u8()?;
|
let b = reader.read_u8()?;
|
||||||
ARGBu8x4::from_argb([a, r, g, b])
|
ARGB::from_argb([a, r, g, b])
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
use crate::graphics::{ARGBu8x4, BlendFunction, RgbaBitmap};
|
use crate::graphics::{BlendFunction, RgbaBitmap, ARGB};
|
||||||
|
|
||||||
impl RgbaBitmap {
|
impl RgbaBitmap {
|
||||||
/// Sets the pixel at the given coordinates using a blended color via the specified blend function
|
/// Sets the pixel at the given coordinates using a blended color via the specified blend function
|
||||||
/// If the coordinates lie outside of the bitmaps clipping region, no pixels will be changed.
|
/// If the coordinates lie outside of the bitmaps clipping region, no pixels will be changed.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn set_blended_pixel(&mut self, x: i32, y: i32, color: ARGBu8x4, blend: BlendFunction) {
|
pub fn set_blended_pixel(&mut self, x: i32, y: i32, color: ARGB, blend: BlendFunction) {
|
||||||
self.set_custom_pixel(
|
self.set_custom_pixel(
|
||||||
x, //
|
x, //
|
||||||
y,
|
y,
|
||||||
|
@ -16,7 +16,7 @@ impl RgbaBitmap {
|
||||||
/// The coordinates are not checked for validity, so it is up to you to ensure they lie within the
|
/// The coordinates are not checked for validity, so it is up to you to ensure they lie within the
|
||||||
/// bounds of the bitmap.
|
/// bounds of the bitmap.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub unsafe fn set_blended_pixel_unchecked(&mut self, x: i32, y: i32, color: ARGBu8x4, blend: BlendFunction) {
|
pub unsafe fn set_blended_pixel_unchecked(&mut self, x: i32, y: i32, color: ARGB, blend: BlendFunction) {
|
||||||
self.set_custom_pixel_unchecked(
|
self.set_custom_pixel_unchecked(
|
||||||
x, //
|
x, //
|
||||||
y,
|
y,
|
||||||
|
@ -26,7 +26,7 @@ impl RgbaBitmap {
|
||||||
|
|
||||||
/// Draws a line from x1,y1 to x2,y2 by blending the drawn pixels using the given blend function.
|
/// Draws a line from x1,y1 to x2,y2 by blending the drawn pixels using the given blend function.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn blended_line(&mut self, x1: i32, y1: i32, x2: i32, y2: i32, color: ARGBu8x4, blend: BlendFunction) {
|
pub fn blended_line(&mut self, x1: i32, y1: i32, x2: i32, y2: i32, color: ARGB, blend: BlendFunction) {
|
||||||
self.line_custom(
|
self.line_custom(
|
||||||
x1, //
|
x1, //
|
||||||
y1,
|
y1,
|
||||||
|
@ -39,7 +39,7 @@ impl RgbaBitmap {
|
||||||
/// Draws a horizontal line from x1,y to x2,y by blending the drawn pixels using the given
|
/// Draws a horizontal line from x1,y to x2,y by blending the drawn pixels using the given
|
||||||
/// blend function.
|
/// blend function.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn blended_horiz_line(&mut self, x1: i32, x2: i32, y: i32, color: ARGBu8x4, blend: BlendFunction) {
|
pub fn blended_horiz_line(&mut self, x1: i32, x2: i32, y: i32, color: ARGB, blend: BlendFunction) {
|
||||||
self.horiz_line_custom(
|
self.horiz_line_custom(
|
||||||
x1, //
|
x1, //
|
||||||
x2,
|
x2,
|
||||||
|
@ -51,7 +51,7 @@ impl RgbaBitmap {
|
||||||
/// Draws a vertical line from x,y1 to x,y2 by blending the drawn pixels using the given blend
|
/// Draws a vertical line from x,y1 to x,y2 by blending the drawn pixels using the given blend
|
||||||
/// function.
|
/// function.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn blended_vert_line(&mut self, x: i32, y1: i32, y2: i32, color: ARGBu8x4, blend: BlendFunction) {
|
pub fn blended_vert_line(&mut self, x: i32, y1: i32, y2: i32, color: ARGB, blend: BlendFunction) {
|
||||||
self.vert_line_custom(
|
self.vert_line_custom(
|
||||||
x, //
|
x, //
|
||||||
y1,
|
y1,
|
||||||
|
@ -64,7 +64,7 @@ impl RgbaBitmap {
|
||||||
/// drawn, assuming they are specifying the top-left and bottom-right corners respectively.
|
/// drawn, assuming they are specifying the top-left and bottom-right corners respectively.
|
||||||
/// The box is drawn by blending the drawn pixels using the given blend function.
|
/// The box is drawn by blending the drawn pixels using the given blend function.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn blended_rect(&mut self, x1: i32, y1: i32, x2: i32, y2: i32, color: ARGBu8x4, blend: BlendFunction) {
|
pub fn blended_rect(&mut self, x1: i32, y1: i32, x2: i32, y2: i32, color: ARGB, blend: BlendFunction) {
|
||||||
self.rect_custom(
|
self.rect_custom(
|
||||||
x1, //
|
x1, //
|
||||||
y1,
|
y1,
|
||||||
|
@ -78,7 +78,7 @@ impl RgbaBitmap {
|
||||||
/// drawn, assuming they are specifying the top-left and bottom-right corners respectively. The
|
/// drawn, assuming they are specifying the top-left and bottom-right corners respectively. The
|
||||||
/// filled box is draw by blending the drawn pixels using the given blend function.
|
/// filled box is draw by blending the drawn pixels using the given blend function.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn blended_filled_rect(&mut self, x1: i32, y1: i32, x2: i32, y2: i32, color: ARGBu8x4, blend: BlendFunction) {
|
pub fn blended_filled_rect(&mut self, x1: i32, y1: i32, x2: i32, y2: i32, color: ARGB, blend: BlendFunction) {
|
||||||
self.filled_rect_custom(
|
self.filled_rect_custom(
|
||||||
x1, //
|
x1, //
|
||||||
y1,
|
y1,
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
use std::simd;
|
use std::simd;
|
||||||
|
|
||||||
use crate::graphics::{edge_function, per_pixel_triangle_2d, ARGBu8x4, BlendFunction, RgbaBitmap};
|
use crate::graphics::{edge_function, per_pixel_triangle_2d, BlendFunction, RgbaBitmap, ARGB};
|
||||||
use crate::math::Vector2;
|
use crate::math::Vector2;
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||||
pub enum RgbaTriangle2d<'a> {
|
pub enum RgbaTriangle2d<'a> {
|
||||||
Solid {
|
Solid {
|
||||||
position: [Vector2; 3], //
|
position: [Vector2; 3], //
|
||||||
color: ARGBu8x4,
|
color: ARGB,
|
||||||
},
|
},
|
||||||
SolidBlended {
|
SolidBlended {
|
||||||
position: [Vector2; 3], //
|
position: [Vector2; 3], //
|
||||||
color: ARGBu8x4,
|
color: ARGB,
|
||||||
blend: BlendFunction,
|
blend: BlendFunction,
|
||||||
},
|
},
|
||||||
SolidMultiColor {
|
SolidMultiColor {
|
||||||
position: [Vector2; 3], //
|
position: [Vector2; 3], //
|
||||||
color: [ARGBu8x4; 3],
|
color: [ARGB; 3],
|
||||||
},
|
},
|
||||||
SolidMultiColorBlended {
|
SolidMultiColorBlended {
|
||||||
position: [Vector2; 3], //
|
position: [Vector2; 3], //
|
||||||
color: [ARGBu8x4; 3],
|
color: [ARGB; 3],
|
||||||
blend: BlendFunction,
|
blend: BlendFunction,
|
||||||
},
|
},
|
||||||
SolidTextured {
|
SolidTextured {
|
||||||
|
@ -31,26 +31,26 @@ pub enum RgbaTriangle2d<'a> {
|
||||||
SolidTexturedColored {
|
SolidTexturedColored {
|
||||||
position: [Vector2; 3], //
|
position: [Vector2; 3], //
|
||||||
texcoord: [Vector2; 3],
|
texcoord: [Vector2; 3],
|
||||||
color: ARGBu8x4,
|
color: ARGB,
|
||||||
bitmap: &'a RgbaBitmap,
|
bitmap: &'a RgbaBitmap,
|
||||||
},
|
},
|
||||||
SolidTexturedColoredBlended {
|
SolidTexturedColoredBlended {
|
||||||
position: [Vector2; 3], //
|
position: [Vector2; 3], //
|
||||||
texcoord: [Vector2; 3],
|
texcoord: [Vector2; 3],
|
||||||
color: ARGBu8x4,
|
color: ARGB,
|
||||||
bitmap: &'a RgbaBitmap,
|
bitmap: &'a RgbaBitmap,
|
||||||
blend: BlendFunction,
|
blend: BlendFunction,
|
||||||
},
|
},
|
||||||
SolidTexturedMultiColored {
|
SolidTexturedMultiColored {
|
||||||
position: [Vector2; 3], //
|
position: [Vector2; 3], //
|
||||||
texcoord: [Vector2; 3],
|
texcoord: [Vector2; 3],
|
||||||
color: [ARGBu8x4; 3],
|
color: [ARGB; 3],
|
||||||
bitmap: &'a RgbaBitmap,
|
bitmap: &'a RgbaBitmap,
|
||||||
},
|
},
|
||||||
SolidTexturedMultiColoredBlended {
|
SolidTexturedMultiColoredBlended {
|
||||||
position: [Vector2; 3], //
|
position: [Vector2; 3], //
|
||||||
texcoord: [Vector2; 3],
|
texcoord: [Vector2; 3],
|
||||||
color: [ARGBu8x4; 3],
|
color: [ARGB; 3],
|
||||||
bitmap: &'a RgbaBitmap,
|
bitmap: &'a RgbaBitmap,
|
||||||
blend: BlendFunction,
|
blend: BlendFunction,
|
||||||
},
|
},
|
||||||
|
@ -58,7 +58,7 @@ pub enum RgbaTriangle2d<'a> {
|
||||||
position: [Vector2; 3], //
|
position: [Vector2; 3], //
|
||||||
texcoord: [Vector2; 3],
|
texcoord: [Vector2; 3],
|
||||||
bitmap: &'a RgbaBitmap,
|
bitmap: &'a RgbaBitmap,
|
||||||
tint: ARGBu8x4,
|
tint: ARGB,
|
||||||
},
|
},
|
||||||
SolidTexturedBlended {
|
SolidTexturedBlended {
|
||||||
position: [Vector2; 3], //
|
position: [Vector2; 3], //
|
||||||
|
@ -69,7 +69,7 @@ pub enum RgbaTriangle2d<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RgbaBitmap {
|
impl RgbaBitmap {
|
||||||
pub fn solid_triangle_2d(&mut self, positions: &[Vector2; 3], color: ARGBu8x4) {
|
pub fn solid_triangle_2d(&mut self, positions: &[Vector2; 3], color: ARGB) {
|
||||||
per_pixel_triangle_2d(
|
per_pixel_triangle_2d(
|
||||||
self, //
|
self, //
|
||||||
positions[0],
|
positions[0],
|
||||||
|
@ -79,7 +79,7 @@ impl RgbaBitmap {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn solid_blended_triangle_2d(&mut self, positions: &[Vector2; 3], color: ARGBu8x4, blend: BlendFunction) {
|
pub fn solid_blended_triangle_2d(&mut self, positions: &[Vector2; 3], color: ARGB, blend: BlendFunction) {
|
||||||
per_pixel_triangle_2d(
|
per_pixel_triangle_2d(
|
||||||
self, //
|
self, //
|
||||||
positions[0],
|
positions[0],
|
||||||
|
@ -89,7 +89,7 @@ impl RgbaBitmap {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn solid_multicolor_triangle_2d(&mut self, positions: &[Vector2; 3], colors: &[ARGBu8x4; 3]) {
|
pub fn solid_multicolor_triangle_2d(&mut self, positions: &[Vector2; 3], colors: &[ARGB; 3]) {
|
||||||
let area = simd::f32x4::splat(edge_function(positions[0], positions[1], positions[2]));
|
let area = simd::f32x4::splat(edge_function(positions[0], positions[1], positions[2]));
|
||||||
let color1 = colors[0].0.cast();
|
let color1 = colors[0].0.cast();
|
||||||
let color2 = colors[1].0.cast();
|
let color2 = colors[1].0.cast();
|
||||||
|
@ -105,7 +105,7 @@ impl RgbaBitmap {
|
||||||
+ simd::f32x4::splat(w2) * color3)
|
+ simd::f32x4::splat(w2) * color3)
|
||||||
/ area)
|
/ area)
|
||||||
.cast();
|
.cast();
|
||||||
*dest_pixels = ARGBu8x4(color)
|
*dest_pixels = ARGB(color)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -113,7 +113,7 @@ impl RgbaBitmap {
|
||||||
pub fn solid_multicolor_blended_triangle_2d(
|
pub fn solid_multicolor_blended_triangle_2d(
|
||||||
&mut self,
|
&mut self,
|
||||||
positions: &[Vector2; 3],
|
positions: &[Vector2; 3],
|
||||||
colors: &[ARGBu8x4; 3],
|
colors: &[ARGB; 3],
|
||||||
blend: BlendFunction,
|
blend: BlendFunction,
|
||||||
) {
|
) {
|
||||||
let area = simd::f32x4::splat(edge_function(positions[0], positions[1], positions[2]));
|
let area = simd::f32x4::splat(edge_function(positions[0], positions[1], positions[2]));
|
||||||
|
@ -131,7 +131,7 @@ impl RgbaBitmap {
|
||||||
+ simd::f32x4::splat(w2) * color3)
|
+ simd::f32x4::splat(w2) * color3)
|
||||||
/ area)
|
/ area)
|
||||||
.cast();
|
.cast();
|
||||||
*dest_pixels = blend.blend(ARGBu8x4(color), *dest_pixels)
|
*dest_pixels = blend.blend(ARGB(color), *dest_pixels)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -160,7 +160,7 @@ impl RgbaBitmap {
|
||||||
&mut self,
|
&mut self,
|
||||||
positions: &[Vector2; 3],
|
positions: &[Vector2; 3],
|
||||||
texcoords: &[Vector2; 3],
|
texcoords: &[Vector2; 3],
|
||||||
color: ARGBu8x4,
|
color: ARGB,
|
||||||
bitmap: &Self,
|
bitmap: &Self,
|
||||||
) {
|
) {
|
||||||
let area = simd::f32x2::splat(edge_function(positions[0], positions[1], positions[2]));
|
let area = simd::f32x2::splat(edge_function(positions[0], positions[1], positions[2]));
|
||||||
|
@ -187,7 +187,7 @@ impl RgbaBitmap {
|
||||||
&mut self,
|
&mut self,
|
||||||
positions: &[Vector2; 3],
|
positions: &[Vector2; 3],
|
||||||
texcoords: &[Vector2; 3],
|
texcoords: &[Vector2; 3],
|
||||||
color: ARGBu8x4,
|
color: ARGB,
|
||||||
bitmap: &Self,
|
bitmap: &Self,
|
||||||
blend: BlendFunction,
|
blend: BlendFunction,
|
||||||
) {
|
) {
|
||||||
|
@ -216,7 +216,7 @@ impl RgbaBitmap {
|
||||||
&mut self,
|
&mut self,
|
||||||
positions: &[Vector2; 3],
|
positions: &[Vector2; 3],
|
||||||
texcoords: &[Vector2; 3],
|
texcoords: &[Vector2; 3],
|
||||||
colors: &[ARGBu8x4; 3],
|
colors: &[ARGB; 3],
|
||||||
bitmap: &Self,
|
bitmap: &Self,
|
||||||
) {
|
) {
|
||||||
let area = simd::f32x4::splat(edge_function(positions[0], positions[1], positions[2]));
|
let area = simd::f32x4::splat(edge_function(positions[0], positions[1], positions[2]));
|
||||||
|
@ -241,7 +241,7 @@ impl RgbaBitmap {
|
||||||
let color = ((w0 * color1 + w1 * color2 + w2 * color3) / area).cast::<u8>();
|
let color = ((w0 * color1 + w1 * color2 + w2 * color3) / area).cast::<u8>();
|
||||||
let texcoord = (w0 * texcoord1 + w1 * texcoord2 + w2 * texcoord3) / area;
|
let texcoord = (w0 * texcoord1 + w1 * texcoord2 + w2 * texcoord3) / area;
|
||||||
let texel = bitmap.sample_at(texcoord[0], texcoord[1]);
|
let texel = bitmap.sample_at(texcoord[0], texcoord[1]);
|
||||||
*dest_pixels = texel * ARGBu8x4(color)
|
*dest_pixels = texel * ARGB(color)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -250,7 +250,7 @@ impl RgbaBitmap {
|
||||||
&mut self,
|
&mut self,
|
||||||
positions: &[Vector2; 3],
|
positions: &[Vector2; 3],
|
||||||
texcoords: &[Vector2; 3],
|
texcoords: &[Vector2; 3],
|
||||||
colors: &[ARGBu8x4; 3],
|
colors: &[ARGB; 3],
|
||||||
bitmap: &Self,
|
bitmap: &Self,
|
||||||
blend: BlendFunction,
|
blend: BlendFunction,
|
||||||
) {
|
) {
|
||||||
|
@ -276,7 +276,7 @@ impl RgbaBitmap {
|
||||||
let color = ((w0 * color1 + w1 * color2 + w2 * color3) / area).cast::<u8>();
|
let color = ((w0 * color1 + w1 * color2 + w2 * color3) / area).cast::<u8>();
|
||||||
let texcoord = (w0 * texcoord1 + w1 * texcoord2 + w2 * texcoord3) / area;
|
let texcoord = (w0 * texcoord1 + w1 * texcoord2 + w2 * texcoord3) / area;
|
||||||
let texel = bitmap.sample_at(texcoord[0], texcoord[1]);
|
let texel = bitmap.sample_at(texcoord[0], texcoord[1]);
|
||||||
let src = texel * ARGBu8x4(color);
|
let src = texel * ARGB(color);
|
||||||
*dest_pixels = blend.blend(src, *dest_pixels)
|
*dest_pixels = blend.blend(src, *dest_pixels)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -287,7 +287,7 @@ impl RgbaBitmap {
|
||||||
positions: &[Vector2; 3],
|
positions: &[Vector2; 3],
|
||||||
texcoords: &[Vector2; 3],
|
texcoords: &[Vector2; 3],
|
||||||
bitmap: &Self,
|
bitmap: &Self,
|
||||||
tint: ARGBu8x4,
|
tint: ARGB,
|
||||||
) {
|
) {
|
||||||
let area = simd::f32x2::splat(edge_function(positions[0], positions[1], positions[2]));
|
let area = simd::f32x2::splat(edge_function(positions[0], positions[1], positions[2]));
|
||||||
let texcoord1 = simd::f32x2::from_array([texcoords[0].x, texcoords[0].y]);
|
let texcoord1 = simd::f32x2::from_array([texcoords[0].x, texcoords[0].y]);
|
||||||
|
|
|
@ -7,30 +7,30 @@ use crate::utils::{ReadType, WriteType};
|
||||||
|
|
||||||
// these colours are taken from the default VGA palette
|
// these colours are taken from the default VGA palette
|
||||||
|
|
||||||
pub const COLOR_BLACK: ARGBu8x4 = ARGBu8x4::from_rgb([0, 0, 0]);
|
pub const COLOR_BLACK: ARGB = ARGB::from_rgb([0, 0, 0]);
|
||||||
pub const COLOR_BLUE: ARGBu8x4 = ARGBu8x4::from_rgb([0, 0, 170]);
|
pub const COLOR_BLUE: ARGB = ARGB::from_rgb([0, 0, 170]);
|
||||||
pub const COLOR_GREEN: ARGBu8x4 = ARGBu8x4::from_rgb([0, 170, 0]);
|
pub const COLOR_GREEN: ARGB = ARGB::from_rgb([0, 170, 0]);
|
||||||
pub const COLOR_CYAN: ARGBu8x4 = ARGBu8x4::from_rgb([0, 170, 170]);
|
pub const COLOR_CYAN: ARGB = ARGB::from_rgb([0, 170, 170]);
|
||||||
pub const COLOR_RED: ARGBu8x4 = ARGBu8x4::from_rgb([170, 0, 0]);
|
pub const COLOR_RED: ARGB = ARGB::from_rgb([170, 0, 0]);
|
||||||
pub const COLOR_MAGENTA: ARGBu8x4 = ARGBu8x4::from_rgb([170, 0, 170]);
|
pub const COLOR_MAGENTA: ARGB = ARGB::from_rgb([170, 0, 170]);
|
||||||
pub const COLOR_BROWN: ARGBu8x4 = ARGBu8x4::from_rgb([170, 85, 0]);
|
pub const COLOR_BROWN: ARGB = ARGB::from_rgb([170, 85, 0]);
|
||||||
pub const COLOR_LIGHT_GRAY: ARGBu8x4 = ARGBu8x4::from_rgb([170, 170, 170]);
|
pub const COLOR_LIGHT_GRAY: ARGB = ARGB::from_rgb([170, 170, 170]);
|
||||||
pub const COLOR_DARK_GRAY: ARGBu8x4 = ARGBu8x4::from_rgb([85, 85, 85]);
|
pub const COLOR_DARK_GRAY: ARGB = ARGB::from_rgb([85, 85, 85]);
|
||||||
pub const COLOR_BRIGHT_BLUE: ARGBu8x4 = ARGBu8x4::from_rgb([85, 85, 255]);
|
pub const COLOR_BRIGHT_BLUE: ARGB = ARGB::from_rgb([85, 85, 255]);
|
||||||
pub const COLOR_BRIGHT_GREEN: ARGBu8x4 = ARGBu8x4::from_rgb([85, 255, 85]);
|
pub const COLOR_BRIGHT_GREEN: ARGB = ARGB::from_rgb([85, 255, 85]);
|
||||||
pub const COLOR_BRIGHT_CYAN: ARGBu8x4 = ARGBu8x4::from_rgb([85, 255, 255]);
|
pub const COLOR_BRIGHT_CYAN: ARGB = ARGB::from_rgb([85, 255, 255]);
|
||||||
pub const COLOR_BRIGHT_RED: ARGBu8x4 = ARGBu8x4::from_rgb([255, 85, 85]);
|
pub const COLOR_BRIGHT_RED: ARGB = ARGB::from_rgb([255, 85, 85]);
|
||||||
pub const COLOR_BRIGHT_MAGENTA: ARGBu8x4 = ARGBu8x4::from_rgb([255, 85, 255]);
|
pub const COLOR_BRIGHT_MAGENTA: ARGB = ARGB::from_rgb([255, 85, 255]);
|
||||||
pub const COLOR_BRIGHT_YELLOW: ARGBu8x4 = ARGBu8x4::from_rgb([255, 255, 85]);
|
pub const COLOR_BRIGHT_YELLOW: ARGB = ARGB::from_rgb([255, 255, 85]);
|
||||||
pub const COLOR_BRIGHT_WHITE: ARGBu8x4 = ARGBu8x4::from_rgb([255, 255, 255]);
|
pub const COLOR_BRIGHT_WHITE: ARGB = ARGB::from_rgb([255, 255, 255]);
|
||||||
|
|
||||||
// TODO: probably should name these better, after i do much more reading on the subject :-)
|
// TODO: probably should name these better, after i do much more reading on the subject :-)
|
||||||
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
|
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
|
||||||
pub enum BlendFunction {
|
pub enum BlendFunction {
|
||||||
Blend,
|
Blend,
|
||||||
BlendSourceWithAlpha(u8),
|
BlendSourceWithAlpha(u8),
|
||||||
TintedBlend(ARGBu8x4),
|
TintedBlend(ARGB),
|
||||||
MultipliedBlend(ARGBu8x4),
|
MultipliedBlend(ARGB),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BlendFunction {
|
impl BlendFunction {
|
||||||
|
@ -44,7 +44,7 @@ impl BlendFunction {
|
||||||
/// * `dest`: the destination color to blend the source color over
|
/// * `dest`: the destination color to blend the source color over
|
||||||
///
|
///
|
||||||
/// returns: the blended color
|
/// returns: the blended color
|
||||||
pub fn blend(&self, src: ARGBu8x4, dest: ARGBu8x4) -> ARGBu8x4 {
|
pub fn blend(&self, src: ARGB, dest: ARGB) -> ARGB {
|
||||||
use BlendFunction::*;
|
use BlendFunction::*;
|
||||||
match self {
|
match self {
|
||||||
Blend => src.blend(dest),
|
Blend => src.blend(dest),
|
||||||
|
@ -89,9 +89,9 @@ pub trait ColorsAsBytes {
|
||||||
/// order alpha, red, green, blue.
|
/// order alpha, red, green, blue.
|
||||||
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Default)]
|
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Default)]
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
pub struct ARGBu8x4(pub simd::u8x4);
|
pub struct ARGB(pub simd::u8x4);
|
||||||
|
|
||||||
impl ARGBu8x4 {
|
impl ARGB {
|
||||||
pub const SIZE: usize = std::mem::size_of::<Self>();
|
pub const SIZE: usize = std::mem::size_of::<Self>();
|
||||||
|
|
||||||
/// Returns a color value composed of the provided ARGB color components.
|
/// Returns a color value composed of the provided ARGB color components.
|
||||||
|
@ -103,7 +103,7 @@ impl ARGBu8x4 {
|
||||||
/// returns: the composed color value
|
/// returns: the composed color value
|
||||||
#[inline]
|
#[inline]
|
||||||
pub const fn from_argb(argb: [u8; 4]) -> Self {
|
pub const fn from_argb(argb: [u8; 4]) -> Self {
|
||||||
ARGBu8x4(simd::u8x4::from_array(argb))
|
ARGB(simd::u8x4::from_array(argb))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns a color value composed of the provided RGB color components. Substitutes a value of 255 for the
|
/// Returns a color value composed of the provided RGB color components. Substitutes a value of 255 for the
|
||||||
|
@ -116,7 +116,7 @@ impl ARGBu8x4 {
|
||||||
/// returns: the composed color value
|
/// returns: the composed color value
|
||||||
#[inline]
|
#[inline]
|
||||||
pub const fn from_rgb(rgb: [u8; 3]) -> Self {
|
pub const fn from_rgb(rgb: [u8; 3]) -> Self {
|
||||||
ARGBu8x4(simd::u8x4::from_array([255, rgb[0], rgb[1], rgb[2]]))
|
ARGB(simd::u8x4::from_array([255, rgb[0], rgb[1], rgb[2]]))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the current alpha component value (0-255) of this color.
|
/// Returns the current alpha component value (0-255) of this color.
|
||||||
|
@ -193,7 +193,7 @@ impl ARGBu8x4 {
|
||||||
fn blend_components(strength: u8, src: Self, dest: Self) -> Self {
|
fn blend_components(strength: u8, src: Self, dest: Self) -> Self {
|
||||||
let strength = simd::u16x4::splat(strength as u16);
|
let strength = simd::u16x4::splat(strength as u16);
|
||||||
let max = simd::u16x4::splat(255);
|
let max = simd::u16x4::splat(255);
|
||||||
ARGBu8x4((((src.0.cast() * strength) + (dest.0.cast() * (max - strength))) / max).cast())
|
ARGB((((src.0.cast() * strength) + (dest.0.cast() * (max - strength))) / max).cast())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Alpha blends two colors together, using this color as the source color and the other provided color as the
|
/// Alpha blends two colors together, using this color as the source color and the other provided color as the
|
||||||
|
@ -206,12 +206,12 @@ impl ARGBu8x4 {
|
||||||
/// returns: the blended color result
|
/// returns: the blended color result
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn blend(&self, dest: Self) -> Self {
|
pub fn blend(&self, dest: Self) -> Self {
|
||||||
ARGBu8x4::blend_components(self.a(), *self, dest)
|
ARGB::blend_components(self.a(), *self, dest)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Alpha blends two colors together, where the alpha value used to blend the colors is derived from the given
|
/// Alpha blends two colors together, where the alpha value used to blend the colors is derived from the given
|
||||||
/// alpha value multiplied with the source color's alpha component. This allows for more flexibility versus the
|
/// alpha value multiplied with the source color's alpha component. This allows for more flexibility versus the
|
||||||
/// [`ARGBu8x4::blend`] method allowing direct control over how transparent the source color is when blended over
|
/// [`ARGB::blend`] method allowing direct control over how transparent the source color is when blended over
|
||||||
/// top of the destination. The blend is performed using this color as the source color and the other provided
|
/// top of the destination. The blend is performed using this color as the source color and the other provided
|
||||||
/// color as the destination color.
|
/// color as the destination color.
|
||||||
///
|
///
|
||||||
|
@ -227,7 +227,7 @@ impl ARGBu8x4 {
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn blend_with_alpha(&self, dest: Self, alpha: u8) -> Self {
|
pub fn blend_with_alpha(&self, dest: Self, alpha: u8) -> Self {
|
||||||
let alpha = ((alpha as u16 * self.a() as u16) / 255) as u8;
|
let alpha = ((alpha as u16 * self.a() as u16) / 255) as u8;
|
||||||
let mut blended = ARGBu8x4::blend_components(alpha, *self, dest);
|
let mut blended = ARGB::blend_components(alpha, *self, dest);
|
||||||
blended.set_a(alpha);
|
blended.set_a(alpha);
|
||||||
blended
|
blended
|
||||||
}
|
}
|
||||||
|
@ -245,7 +245,7 @@ impl ARGBu8x4 {
|
||||||
pub fn tint(&self, mut tint: Self) -> Self {
|
pub fn tint(&self, mut tint: Self) -> Self {
|
||||||
let strength = tint.a();
|
let strength = tint.a();
|
||||||
tint.set_a(self.a());
|
tint.set_a(self.a());
|
||||||
ARGBu8x4::blend_components(strength, tint, *self)
|
ARGB::blend_components(strength, tint, *self)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Linearly interpolates between this color and another color.
|
/// Linearly interpolates between this color and another color.
|
||||||
|
@ -258,7 +258,7 @@ impl ARGBu8x4 {
|
||||||
/// returns: the interpolated color result
|
/// returns: the interpolated color result
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn lerp(&self, other: Self, t: f32) -> Self {
|
pub fn lerp(&self, other: Self, t: f32) -> Self {
|
||||||
ARGBu8x4((self.0.cast() + (other.0 - self.0).cast() * simd::f32x4::splat(t)).cast())
|
ARGB((self.0.cast() + (other.0 - self.0).cast() * simd::f32x4::splat(t)).cast())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Calculates this color's luminance, returned as a value between 0.0 and 1.0.
|
/// Calculates this color's luminance, returned as a value between 0.0 and 1.0.
|
||||||
|
@ -277,18 +277,18 @@ impl ARGBu8x4 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Mul for ARGBu8x4 {
|
impl Mul for ARGB {
|
||||||
type Output = ARGBu8x4;
|
type Output = ARGB;
|
||||||
|
|
||||||
/// Multiplies two colors together, returning the result. The multiplication is performed by individually
|
/// Multiplies two colors together, returning the result. The multiplication is performed by individually
|
||||||
/// multiplying each color component using the formula `(component * component) / 255`.
|
/// multiplying each color component using the formula `(component * component) / 255`.
|
||||||
#[inline]
|
#[inline]
|
||||||
fn mul(self, rhs: Self) -> Self::Output {
|
fn mul(self, rhs: Self) -> Self::Output {
|
||||||
ARGBu8x4(((self.0.cast::<u32>() * rhs.0.cast::<u32>()) / simd::u32x4::splat(255)).cast())
|
ARGB(((self.0.cast::<u32>() * rhs.0.cast::<u32>()) / simd::u32x4::splat(255)).cast())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MulAssign for ARGBu8x4 {
|
impl MulAssign for ARGB {
|
||||||
/// Multiplies two colors together, assigning the result of the multiplication to this color. The multiplication is
|
/// Multiplies two colors together, assigning the result of the multiplication to this color. The multiplication is
|
||||||
/// performed by individually multiplying each color component using the formula `(component * component) / 255`.
|
/// performed by individually multiplying each color component using the formula `(component * component) / 255`.
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -297,12 +297,12 @@ impl MulAssign for ARGBu8x4 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<u32> for ARGBu8x4 {
|
impl From<u32> for ARGB {
|
||||||
/// Returns a color value constructed by unpacking ARGB color components from the given u32 value. The u32 value
|
/// Returns a color value constructed by unpacking ARGB color components from the given u32 value. The u32 value
|
||||||
/// provided is parsed assuming the following locations of each color component: 0xAARRGGBB.
|
/// provided is parsed assuming the following locations of each color component: 0xAARRGGBB.
|
||||||
#[inline]
|
#[inline]
|
||||||
fn from(value: u32) -> Self {
|
fn from(value: u32) -> Self {
|
||||||
ARGBu8x4::from_argb([
|
ARGB::from_argb([
|
||||||
((value & 0xff000000) >> 24) as u8, // a
|
((value & 0xff000000) >> 24) as u8, // a
|
||||||
((value & 0x00ff0000) >> 16) as u8, // r
|
((value & 0x00ff0000) >> 16) as u8, // r
|
||||||
((value & 0x0000ff00) >> 8) as u8, // g
|
((value & 0x0000ff00) >> 8) as u8, // g
|
||||||
|
@ -311,11 +311,11 @@ impl From<u32> for ARGBu8x4 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<ARGBu8x4> for u32 {
|
impl From<ARGB> for u32 {
|
||||||
/// Returns a u32 containing packed ARGB color components from this color. The returned u32 value contains the
|
/// Returns a u32 containing packed ARGB color components from this color. The returned u32 value contains the
|
||||||
/// color components packed in format 0xAARRGGBB.
|
/// color components packed in format 0xAARRGGBB.
|
||||||
#[inline]
|
#[inline]
|
||||||
fn from(value: ARGBu8x4) -> Self {
|
fn from(value: ARGB) -> Self {
|
||||||
(value.b() as u32) // b
|
(value.b() as u32) // b
|
||||||
+ ((value.g() as u32) << 8) // g
|
+ ((value.g() as u32) << 8) // g
|
||||||
+ ((value.r() as u32) << 16) // r
|
+ ((value.r() as u32) << 16) // r
|
||||||
|
@ -323,11 +323,11 @@ impl From<ARGBu8x4> for u32 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<ARGBf32x4> for ARGBu8x4 {
|
impl From<ARGBf> for ARGB {
|
||||||
/// Converts a [`ARGBf32x4`] color to an equivalent [`ARGBu8x4`] color value.
|
/// Converts a [`ARGBf`] color to an equivalent [`ARGB`] color value.
|
||||||
#[inline]
|
#[inline]
|
||||||
fn from(value: ARGBf32x4) -> Self {
|
fn from(value: ARGBf) -> Self {
|
||||||
ARGBu8x4::from_argb([
|
ARGB::from_argb([
|
||||||
(value.a() * 255.0) as u8,
|
(value.a() * 255.0) as u8,
|
||||||
(value.r() * 255.0) as u8,
|
(value.r() * 255.0) as u8,
|
||||||
(value.g() * 255.0) as u8,
|
(value.g() * 255.0) as u8,
|
||||||
|
@ -336,25 +336,25 @@ impl From<ARGBf32x4> for ARGBu8x4 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BytesAsColors<ARGBu8x4> for [u8] {
|
impl BytesAsColors<ARGB> for [u8] {
|
||||||
#[inline]
|
#[inline]
|
||||||
unsafe fn as_colors(&self) -> &[ARGBu8x4] {
|
unsafe fn as_colors(&self) -> &[ARGB] {
|
||||||
std::slice::from_raw_parts(
|
std::slice::from_raw_parts(
|
||||||
self.as_ptr() as *const ARGBu8x4, //
|
self.as_ptr() as *const ARGB, //
|
||||||
self.len() / std::mem::size_of::<ARGBu8x4>(),
|
self.len() / std::mem::size_of::<ARGB>(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
unsafe fn as_colors_mut(&mut self) -> &mut [ARGBu8x4] {
|
unsafe fn as_colors_mut(&mut self) -> &mut [ARGB] {
|
||||||
std::slice::from_raw_parts_mut(
|
std::slice::from_raw_parts_mut(
|
||||||
self.as_mut_ptr() as *mut ARGBu8x4, //
|
self.as_mut_ptr() as *mut ARGB, //
|
||||||
self.len() / std::mem::size_of::<ARGBu8x4>(),
|
self.len() / std::mem::size_of::<ARGB>(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ColorsAsBytes for [ARGBu8x4] {
|
impl ColorsAsBytes for [ARGB] {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn as_bytes(&self) -> &[u8] {
|
fn as_bytes(&self) -> &[u8] {
|
||||||
unsafe {
|
unsafe {
|
||||||
|
@ -376,19 +376,19 @@ impl ColorsAsBytes for [ARGBu8x4] {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl std::fmt::Debug for ARGBu8x4 {
|
impl std::fmt::Debug for ARGB {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
write!(f, "0x{:02x}{:02x}{:02x}{:02x}", self.a(), self.r(), self.g(), self.b())
|
write!(f, "0x{:02x}{:02x}{:02x}{:02x}", self.a(), self.r(), self.g(), self.b())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl std::fmt::Display for ARGBu8x4 {
|
impl std::fmt::Display for ARGB {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
write!(f, "0x{:02x}{:02x}{:02x}{:02x}", self.a(), self.r(), self.g(), self.b())
|
write!(f, "0x{:02x}{:02x}{:02x}{:02x}", self.a(), self.r(), self.g(), self.b())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WriteType for ARGBu8x4 {
|
impl WriteType for ARGB {
|
||||||
type ErrorType = std::io::Error;
|
type ErrorType = std::io::Error;
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -398,13 +398,13 @@ impl WriteType for ARGBu8x4 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ReadType for ARGBu8x4 {
|
impl ReadType for ARGB {
|
||||||
type OutputType = Self;
|
type OutputType = Self;
|
||||||
type ErrorType = std::io::Error;
|
type ErrorType = std::io::Error;
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn read<T: ReadBytesExt>(reader: &mut T) -> Result<Self::OutputType, Self::ErrorType> {
|
fn read<T: ReadBytesExt>(reader: &mut T) -> Result<Self::OutputType, Self::ErrorType> {
|
||||||
Ok(ARGBu8x4::from_argb([reader.read_u8()?, reader.read_u8()?, reader.read_u8()?, reader.read_u8()?]))
|
Ok(ARGB::from_argb([reader.read_u8()?, reader.read_u8()?, reader.read_u8()?, reader.read_u8()?]))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -412,9 +412,9 @@ impl ReadType for ARGBu8x4 {
|
||||||
/// components are in the order alpha, red, green, blue.
|
/// components are in the order alpha, red, green, blue.
|
||||||
#[derive(Copy, Clone, PartialEq, PartialOrd, Default)]
|
#[derive(Copy, Clone, PartialEq, PartialOrd, Default)]
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
pub struct ARGBf32x4(pub simd::f32x4);
|
pub struct ARGBf(pub simd::f32x4);
|
||||||
|
|
||||||
impl ARGBf32x4 {
|
impl ARGBf {
|
||||||
/// Returns a color value composed of the provided ARGB color components.
|
/// Returns a color value composed of the provided ARGB color components.
|
||||||
///
|
///
|
||||||
/// # Arguments
|
/// # Arguments
|
||||||
|
@ -424,7 +424,7 @@ impl ARGBf32x4 {
|
||||||
/// returns: the composed color value
|
/// returns: the composed color value
|
||||||
#[inline]
|
#[inline]
|
||||||
pub const fn from_argb(argb: [f32; 4]) -> Self {
|
pub const fn from_argb(argb: [f32; 4]) -> Self {
|
||||||
ARGBf32x4(simd::f32x4::from_array(argb))
|
ARGBf(simd::f32x4::from_array(argb))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns a color value composed of the provided RGB color components. Substitutes a value of 1.0 for the
|
/// Returns a color value composed of the provided RGB color components. Substitutes a value of 1.0 for the
|
||||||
|
@ -437,7 +437,7 @@ impl ARGBf32x4 {
|
||||||
/// returns: the composed color value
|
/// returns: the composed color value
|
||||||
#[inline]
|
#[inline]
|
||||||
pub const fn from_rgb(rgb: [f32; 3]) -> Self {
|
pub const fn from_rgb(rgb: [f32; 3]) -> Self {
|
||||||
ARGBf32x4(simd::f32x4::from_array([1.0, rgb[0], rgb[1], rgb[2]]))
|
ARGBf(simd::f32x4::from_array([1.0, rgb[0], rgb[1], rgb[2]]))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the current alpha component value (0.0 to 1.0) of this color.
|
/// Returns the current alpha component value (0.0 to 1.0) of this color.
|
||||||
|
@ -511,12 +511,12 @@ impl ARGBf32x4 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<u32> for ARGBf32x4 {
|
impl From<u32> for ARGBf {
|
||||||
/// Returns a color value constructed by unpacking ARGB color components from the given u32 value. The u32 value
|
/// Returns a color value constructed by unpacking ARGB color components from the given u32 value. The u32 value
|
||||||
/// provided is parsed assuming the following locations of each color component: 0xAARRGGBB.
|
/// provided is parsed assuming the following locations of each color component: 0xAARRGGBB.
|
||||||
#[inline]
|
#[inline]
|
||||||
fn from(value: u32) -> Self {
|
fn from(value: u32) -> Self {
|
||||||
ARGBf32x4::from_argb([
|
ARGBf::from_argb([
|
||||||
((value & 0xff000000) >> 24) as f32 / 255.0, // a
|
((value & 0xff000000) >> 24) as f32 / 255.0, // a
|
||||||
((value & 0x00ff0000) >> 16) as f32 / 255.0, // r
|
((value & 0x00ff0000) >> 16) as f32 / 255.0, // r
|
||||||
((value & 0x0000ff00) >> 8) as f32 / 255.0, // g
|
((value & 0x0000ff00) >> 8) as f32 / 255.0, // g
|
||||||
|
@ -525,11 +525,11 @@ impl From<u32> for ARGBf32x4 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<ARGBu8x4> for ARGBf32x4 {
|
impl From<ARGB> for ARGBf {
|
||||||
/// Converts a [`ARGBf32x4`] color to an equivalent [`ARGBu8x4`] color value.
|
/// Converts a [`ARGBf`] color to an equivalent [`ARGB`] color value.
|
||||||
#[inline]
|
#[inline]
|
||||||
fn from(value: ARGBu8x4) -> Self {
|
fn from(value: ARGB) -> Self {
|
||||||
ARGBf32x4::from_argb([
|
ARGBf::from_argb([
|
||||||
value.a() as f32 / 255.0,
|
value.a() as f32 / 255.0,
|
||||||
value.r() as f32 / 255.0,
|
value.r() as f32 / 255.0,
|
||||||
value.g() as f32 / 255.0,
|
value.g() as f32 / 255.0,
|
||||||
|
@ -538,13 +538,13 @@ impl From<ARGBu8x4> for ARGBf32x4 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl std::fmt::Debug for ARGBf32x4 {
|
impl std::fmt::Debug for ARGBf {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
write!(f, "ARGBf32x4({}, {}, {}, {})", self.a(), self.r(), self.g(), self.b())
|
write!(f, "ARGBf32x4({}, {}, {}, {})", self.a(), self.r(), self.g(), self.b())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl std::fmt::Display for ARGBf32x4 {
|
impl std::fmt::Display for ARGBf {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
write!(f, "{{A={}, R={}, G={}, B={}}}", self.a(), self.r(), self.g(), self.b())
|
write!(f, "{{A={}, R={}, G={}, B={}}}", self.a(), self.r(), self.g(), self.b())
|
||||||
}
|
}
|
||||||
|
@ -593,8 +593,8 @@ mod tests {
|
||||||
use crate::math::NearlyEqual;
|
use crate::math::NearlyEqual;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn argbu8x4() {
|
fn argb() {
|
||||||
let mut color = ARGBu8x4(simd::u8x4::from_array([0x11, 0x22, 0x33, 0x44]));
|
let mut color = ARGB(simd::u8x4::from_array([0x11, 0x22, 0x33, 0x44]));
|
||||||
assert_eq!(color.a(), 0x11);
|
assert_eq!(color.a(), 0x11);
|
||||||
assert_eq!(color.r(), 0x22);
|
assert_eq!(color.r(), 0x22);
|
||||||
assert_eq!(color.g(), 0x33);
|
assert_eq!(color.g(), 0x33);
|
||||||
|
@ -610,103 +610,94 @@ mod tests {
|
||||||
color.set_b(0x88);
|
color.set_b(0x88);
|
||||||
assert_eq!(color.to_array(), [0x55, 0x66, 0x77, 0x88]);
|
assert_eq!(color.to_array(), [0x55, 0x66, 0x77, 0x88]);
|
||||||
|
|
||||||
let color = ARGBu8x4::from_argb([0x11, 0x22, 0x33, 0x44]);
|
let color = ARGB::from_argb([0x11, 0x22, 0x33, 0x44]);
|
||||||
assert_eq!(color.to_array(), [0x11, 0x22, 0x33, 0x44]);
|
assert_eq!(color.to_array(), [0x11, 0x22, 0x33, 0x44]);
|
||||||
|
|
||||||
let color = ARGBu8x4::from_rgb([0x11, 0x22, 0x33]);
|
let color = ARGB::from_rgb([0x11, 0x22, 0x33]);
|
||||||
assert_eq!(color.to_array(), [0xff, 0x11, 0x22, 0x33]);
|
assert_eq!(color.to_array(), [0xff, 0x11, 0x22, 0x33]);
|
||||||
|
|
||||||
let color: ARGBu8x4 = 0x11223344.into();
|
let color: ARGB = 0x11223344.into();
|
||||||
assert_eq!(color.to_array(), [0x11, 0x22, 0x33, 0x44]);
|
assert_eq!(color.to_array(), [0x11, 0x22, 0x33, 0x44]);
|
||||||
|
|
||||||
let other = ARGBf32x4::from_argb([0.5, 0.1, 0.2, 0.3]);
|
let other = ARGBf::from_argb([0.5, 0.1, 0.2, 0.3]);
|
||||||
let color: ARGBu8x4 = other.into();
|
let color: ARGB = other.into();
|
||||||
assert_eq!(color.to_array(), [0x7f, 0x19, 0x33, 0x4c]);
|
assert_eq!(color.to_array(), [0x7f, 0x19, 0x33, 0x4c]);
|
||||||
|
|
||||||
let color = ARGBu8x4::from_argb([0x11, 0x22, 0x33, 0x44]);
|
let color = ARGB::from_argb([0x11, 0x22, 0x33, 0x44]);
|
||||||
assert_eq!(0x11223344u32, color.into())
|
assert_eq!(0x11223344u32, color.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn argbu8x4_multiplication() {
|
fn argb_multiplication() {
|
||||||
assert_eq!([0xff, 0x11, 0x22, 0x33], (ARGBu8x4::from(0xffffffff) * ARGBu8x4::from(0xff112233)).to_array());
|
assert_eq!([0xff, 0x11, 0x22, 0x33], (ARGB::from(0xffffffff) * ARGB::from(0xff112233)).to_array());
|
||||||
assert_eq!([0xff, 0x11, 0x22, 0x33], (ARGBu8x4::from(0xff112233) * ARGBu8x4::from(0xffffffff)).to_array());
|
assert_eq!([0xff, 0x11, 0x22, 0x33], (ARGB::from(0xff112233) * ARGB::from(0xffffffff)).to_array());
|
||||||
assert_eq!([0x7f, 0x03, 0x00, 0x14], (ARGBu8x4::from(0x7f330066) * ARGBu8x4::from(0xff112233)).to_array());
|
assert_eq!([0x7f, 0x03, 0x00, 0x14], (ARGB::from(0x7f330066) * ARGB::from(0xff112233)).to_array());
|
||||||
assert_eq!([0x7f, 0x03, 0x00, 0x14], (ARGBu8x4::from(0xff112233) * ARGBu8x4::from(0x7f330066)).to_array());
|
assert_eq!([0x7f, 0x03, 0x00, 0x14], (ARGB::from(0xff112233) * ARGB::from(0x7f330066)).to_array());
|
||||||
|
|
||||||
let mut color = ARGBu8x4::from(0xffffffff);
|
let mut color = ARGB::from(0xffffffff);
|
||||||
color *= ARGBu8x4::from(0xff112233);
|
color *= ARGB::from(0xff112233);
|
||||||
assert_eq!([0xff, 0x11, 0x22, 0x33], color.to_array());
|
assert_eq!([0xff, 0x11, 0x22, 0x33], color.to_array());
|
||||||
let mut color = ARGBu8x4::from(0xff112233);
|
let mut color = ARGB::from(0xff112233);
|
||||||
color *= ARGBu8x4::from(0xffffffff);
|
color *= ARGB::from(0xffffffff);
|
||||||
assert_eq!([0xff, 0x11, 0x22, 0x33], color.to_array());
|
assert_eq!([0xff, 0x11, 0x22, 0x33], color.to_array());
|
||||||
let mut color = ARGBu8x4::from(0x7f330066);
|
let mut color = ARGB::from(0x7f330066);
|
||||||
color *= ARGBu8x4::from(0xff112233);
|
color *= ARGB::from(0xff112233);
|
||||||
assert_eq!([0x7f, 0x03, 0x00, 0x14], color.to_array());
|
assert_eq!([0x7f, 0x03, 0x00, 0x14], color.to_array());
|
||||||
let mut color = ARGBu8x4::from(0xff112233);
|
let mut color = ARGB::from(0xff112233);
|
||||||
color *= ARGBu8x4::from(0x7f330066);
|
color *= ARGB::from(0x7f330066);
|
||||||
assert_eq!([0x7f, 0x03, 0x00, 0x14], color.to_array());
|
assert_eq!([0x7f, 0x03, 0x00, 0x14], color.to_array());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn argbu8x4_lerping() {
|
fn argb_lerping() {
|
||||||
assert_eq!(
|
assert_eq!([0x7f, 0x11, 0x22, 0x33], (ARGB::from(0x7f112233).lerp(ARGB::from(0xffaabbcc), 0.0).to_array()));
|
||||||
[0x7f, 0x11, 0x22, 0x33],
|
assert_eq!([0xbf, 0x5d, 0x6e, 0x7f], (ARGB::from(0x7f112233).lerp(ARGB::from(0xffaabbcc), 0.5).to_array()));
|
||||||
(ARGBu8x4::from(0x7f112233).lerp(ARGBu8x4::from(0xffaabbcc), 0.0).to_array())
|
assert_eq!([0xff, 0xaa, 0xbb, 0xcc], (ARGB::from(0x7f112233).lerp(ARGB::from(0xffaabbcc), 1.0).to_array()));
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
[0xbf, 0x5d, 0x6e, 0x7f],
|
|
||||||
(ARGBu8x4::from(0x7f112233).lerp(ARGBu8x4::from(0xffaabbcc), 0.5).to_array())
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
[0xff, 0xaa, 0xbb, 0xcc],
|
|
||||||
(ARGBu8x4::from(0x7f112233).lerp(ARGBu8x4::from(0xffaabbcc), 1.0).to_array())
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
fn argbu8x4_blending() {
|
fn argb_blending() {
|
||||||
// TODO: for .blend(), is this really the behaviour we want? the output value's alpha
|
// TODO: for .blend(), is this really the behaviour we want? the output value's alpha
|
||||||
// is blended, but the source color's alpha is what is ultimately used to control
|
// is blended, but the source color's alpha is what is ultimately used to control
|
||||||
// the blend operation. what is best here? the output RGB color looks correct at
|
// the blend operation. what is best here? the output RGB color looks correct at
|
||||||
// any rate, just not sure what the proper output alpha component *should* be in
|
// any rate, just not sure what the proper output alpha component *should* be in
|
||||||
// all cases.
|
// all cases.
|
||||||
|
|
||||||
assert_eq!([0xff, 0x11, 0x22, 0x33], ARGBu8x4::from(0xff112233).blend(ARGBu8x4::from(0xff555555)).to_array());
|
assert_eq!([0xff, 0x11, 0x22, 0x33], ARGB::from(0xff112233).blend(ARGB::from(0xff555555)).to_array());
|
||||||
assert_eq!([0xbf, 0x33, 0x3b, 0x44], ARGBu8x4::from(0x7f112233).blend(ARGBu8x4::from(0xff555555)).to_array());
|
assert_eq!([0xbf, 0x33, 0x3b, 0x44], ARGB::from(0x7f112233).blend(ARGB::from(0xff555555)).to_array());
|
||||||
assert_eq!([0xff, 0x55, 0x55, 0x55], ARGBu8x4::from(0x00112233).blend(ARGBu8x4::from(0xff555555)).to_array());
|
assert_eq!([0xff, 0x55, 0x55, 0x55], ARGB::from(0x00112233).blend(ARGB::from(0xff555555)).to_array());
|
||||||
|
|
||||||
assert_eq!([0xff, 0x11, 0x22, 0x33], ARGBu8x4::from(0xff112233).blend(ARGBu8x4::from(0x7f555555)).to_array());
|
assert_eq!([0xff, 0x11, 0x22, 0x33], ARGB::from(0xff112233).blend(ARGB::from(0x7f555555)).to_array());
|
||||||
assert_eq!([0x7f, 0x33, 0x3b, 0x44], ARGBu8x4::from(0x7f112233).blend(ARGBu8x4::from(0x7f555555)).to_array());
|
assert_eq!([0x7f, 0x33, 0x3b, 0x44], ARGB::from(0x7f112233).blend(ARGB::from(0x7f555555)).to_array());
|
||||||
assert_eq!([0x7f, 0x55, 0x55, 0x55], ARGBu8x4::from(0x00112233).blend(ARGBu8x4::from(0x7f555555)).to_array());
|
assert_eq!([0x7f, 0x55, 0x55, 0x55], ARGB::from(0x00112233).blend(ARGB::from(0x7f555555)).to_array());
|
||||||
|
|
||||||
assert_eq!([0xff, 0x11, 0x22, 0x33], ARGBu8x4::from(0xff112233).blend_with_alpha(ARGBu8x4::from(0xff555555), 255).to_array());
|
assert_eq!([0xff, 0x11, 0x22, 0x33], ARGB::from(0xff112233).blend_with_alpha(ARGB::from(0xff555555), 255).to_array());
|
||||||
assert_eq!([0x7f, 0x33, 0x3b, 0x44], ARGBu8x4::from(0x7f112233).blend_with_alpha(ARGBu8x4::from(0xff555555), 255).to_array());
|
assert_eq!([0x7f, 0x33, 0x3b, 0x44], ARGB::from(0x7f112233).blend_with_alpha(ARGB::from(0xff555555), 255).to_array());
|
||||||
assert_eq!([0x00, 0x55, 0x55, 0x55], ARGBu8x4::from(0x00112233).blend_with_alpha(ARGBu8x4::from(0xff555555), 255).to_array());
|
assert_eq!([0x00, 0x55, 0x55, 0x55], ARGB::from(0x00112233).blend_with_alpha(ARGB::from(0xff555555), 255).to_array());
|
||||||
|
|
||||||
assert_eq!([0xff, 0x11, 0x22, 0x33], ARGBu8x4::from(0xff112233).blend_with_alpha(ARGBu8x4::from(0x7f555555), 255).to_array());
|
assert_eq!([0xff, 0x11, 0x22, 0x33], ARGB::from(0xff112233).blend_with_alpha(ARGB::from(0x7f555555), 255).to_array());
|
||||||
assert_eq!([0x7f, 0x33, 0x3b, 0x44], ARGBu8x4::from(0x7f112233).blend_with_alpha(ARGBu8x4::from(0x7f555555), 255).to_array());
|
assert_eq!([0x7f, 0x33, 0x3b, 0x44], ARGB::from(0x7f112233).blend_with_alpha(ARGB::from(0x7f555555), 255).to_array());
|
||||||
assert_eq!([0x00, 0x55, 0x55, 0x55], ARGBu8x4::from(0x00112233).blend_with_alpha(ARGBu8x4::from(0x7f555555), 255).to_array());
|
assert_eq!([0x00, 0x55, 0x55, 0x55], ARGB::from(0x00112233).blend_with_alpha(ARGB::from(0x7f555555), 255).to_array());
|
||||||
|
|
||||||
assert_eq!([0x80, 0x32, 0x3b, 0x43], ARGBu8x4::from(0xff112233).blend_with_alpha(ARGBu8x4::from(0xff555555), 128).to_array());
|
assert_eq!([0x80, 0x32, 0x3b, 0x43], ARGB::from(0xff112233).blend_with_alpha(ARGB::from(0xff555555), 128).to_array());
|
||||||
assert_eq!([0x3f, 0x44, 0x48, 0x4c], ARGBu8x4::from(0x7f112233).blend_with_alpha(ARGBu8x4::from(0xff555555), 128).to_array());
|
assert_eq!([0x3f, 0x44, 0x48, 0x4c], ARGB::from(0x7f112233).blend_with_alpha(ARGB::from(0xff555555), 128).to_array());
|
||||||
assert_eq!([0x00, 0x55, 0x55, 0x55], ARGBu8x4::from(0x00112233).blend_with_alpha(ARGBu8x4::from(0xff555555), 128).to_array());
|
assert_eq!([0x00, 0x55, 0x55, 0x55], ARGB::from(0x00112233).blend_with_alpha(ARGB::from(0xff555555), 128).to_array());
|
||||||
|
|
||||||
assert_eq!([0x00, 0x55, 0x55, 0x55], ARGBu8x4::from(0xff112233).blend_with_alpha(ARGBu8x4::from(0xff555555), 0).to_array());
|
assert_eq!([0x00, 0x55, 0x55, 0x55], ARGB::from(0xff112233).blend_with_alpha(ARGB::from(0xff555555), 0).to_array());
|
||||||
assert_eq!([0x00, 0x55, 0x55, 0x55], ARGBu8x4::from(0x7f112233).blend_with_alpha(ARGBu8x4::from(0xff555555), 0).to_array());
|
assert_eq!([0x00, 0x55, 0x55, 0x55], ARGB::from(0x7f112233).blend_with_alpha(ARGB::from(0xff555555), 0).to_array());
|
||||||
assert_eq!([0x00, 0x55, 0x55, 0x55], ARGBu8x4::from(0x00112233).blend_with_alpha(ARGBu8x4::from(0xff555555), 0).to_array());
|
assert_eq!([0x00, 0x55, 0x55, 0x55], ARGB::from(0x00112233).blend_with_alpha(ARGB::from(0xff555555), 0).to_array());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn argbu8x4_tinting() {
|
fn argb_tinting() {
|
||||||
assert_eq!([0xff, 0x11, 0x22, 0x33], ARGBu8x4::from(0xffffffff).tint(ARGBu8x4::from(0xff112233)).to_array());
|
assert_eq!([0xff, 0x11, 0x22, 0x33], ARGB::from(0xffffffff).tint(ARGB::from(0xff112233)).to_array());
|
||||||
assert_eq!([0xff, 0x88, 0x90, 0x99], ARGBu8x4::from(0xffffffff).tint(ARGBu8x4::from(0x7f112233)).to_array());
|
assert_eq!([0xff, 0x88, 0x90, 0x99], ARGB::from(0xffffffff).tint(ARGB::from(0x7f112233)).to_array());
|
||||||
assert_eq!([0xff, 0xff, 0xff, 0xff], ARGBu8x4::from(0xffffffff).tint(ARGBu8x4::from(0x00112233)).to_array());
|
assert_eq!([0xff, 0xff, 0xff, 0xff], ARGB::from(0xffffffff).tint(ARGB::from(0x00112233)).to_array());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn argbu8x4_bytes_to_colors_casting() {
|
fn argb_bytes_to_colors_casting() {
|
||||||
let mut bytes =
|
let mut bytes =
|
||||||
[0xff, 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff];
|
[0xff, 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff];
|
||||||
|
|
||||||
|
@ -714,10 +705,10 @@ mod tests {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
colors,
|
colors,
|
||||||
[
|
[
|
||||||
ARGBu8x4::from_argb([0xff, 0xff, 0x00, 0x00]),
|
ARGB::from_argb([0xff, 0xff, 0x00, 0x00]),
|
||||||
ARGBu8x4::from_argb([0xff, 0x00, 0xff, 0x00]),
|
ARGB::from_argb([0xff, 0x00, 0xff, 0x00]),
|
||||||
ARGBu8x4::from_argb([0xff, 0x00, 0x00, 0xff]),
|
ARGB::from_argb([0xff, 0x00, 0x00, 0xff]),
|
||||||
ARGBu8x4::from_argb([0xff, 0xff, 0x00, 0xff]),
|
ARGB::from_argb([0xff, 0xff, 0x00, 0xff]),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -725,10 +716,10 @@ mod tests {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
colors,
|
colors,
|
||||||
[
|
[
|
||||||
ARGBu8x4::from_argb([0xff, 0xff, 0x00, 0x00]),
|
ARGB::from_argb([0xff, 0xff, 0x00, 0x00]),
|
||||||
ARGBu8x4::from_argb([0xff, 0x00, 0xff, 0x00]),
|
ARGB::from_argb([0xff, 0x00, 0xff, 0x00]),
|
||||||
ARGBu8x4::from_argb([0xff, 0x00, 0x00, 0xff]),
|
ARGB::from_argb([0xff, 0x00, 0x00, 0xff]),
|
||||||
ARGBu8x4::from_argb([0xff, 0xff, 0x00, 0xff]),
|
ARGB::from_argb([0xff, 0xff, 0x00, 0xff]),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -741,10 +732,10 @@ mod tests {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
colors,
|
colors,
|
||||||
[
|
[
|
||||||
ARGBu8x4::from_argb([0xff, 0xff, 0x00, 0x00]),
|
ARGB::from_argb([0xff, 0xff, 0x00, 0x00]),
|
||||||
ARGBu8x4::from_argb([0xff, 0x00, 0xff, 0x00]),
|
ARGB::from_argb([0xff, 0x00, 0xff, 0x00]),
|
||||||
ARGBu8x4::from_argb([0xff, 0x00, 0x00, 0xff]),
|
ARGB::from_argb([0xff, 0x00, 0x00, 0xff]),
|
||||||
ARGBu8x4::from_argb([0xff, 0xff, 0x00, 0xff]),
|
ARGB::from_argb([0xff, 0xff, 0x00, 0xff]),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -752,21 +743,21 @@ mod tests {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
colors,
|
colors,
|
||||||
[
|
[
|
||||||
ARGBu8x4::from_argb([0xff, 0xff, 0x00, 0x00]),
|
ARGB::from_argb([0xff, 0xff, 0x00, 0x00]),
|
||||||
ARGBu8x4::from_argb([0xff, 0x00, 0xff, 0x00]),
|
ARGB::from_argb([0xff, 0x00, 0xff, 0x00]),
|
||||||
ARGBu8x4::from_argb([0xff, 0x00, 0x00, 0xff]),
|
ARGB::from_argb([0xff, 0x00, 0x00, 0xff]),
|
||||||
ARGBu8x4::from_argb([0xff, 0xff, 0x00, 0xff]),
|
ARGB::from_argb([0xff, 0xff, 0x00, 0xff]),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn argbu8x4_colors_to_bytes_casting() {
|
fn argb_colors_to_bytes_casting() {
|
||||||
let mut colors = [
|
let mut colors = [
|
||||||
ARGBu8x4::from_argb([0xff, 0xff, 0x00, 0x00]),
|
ARGB::from_argb([0xff, 0xff, 0x00, 0x00]),
|
||||||
ARGBu8x4::from_argb([0xff, 0x00, 0xff, 0x00]),
|
ARGB::from_argb([0xff, 0x00, 0xff, 0x00]),
|
||||||
ARGBu8x4::from_argb([0xff, 0x00, 0x00, 0xff]),
|
ARGB::from_argb([0xff, 0x00, 0x00, 0xff]),
|
||||||
ARGBu8x4::from_argb([0xff, 0xff, 0x00, 0xff]),
|
ARGB::from_argb([0xff, 0xff, 0x00, 0xff]),
|
||||||
];
|
];
|
||||||
|
|
||||||
let bytes = colors.as_bytes();
|
let bytes = colors.as_bytes();
|
||||||
|
@ -783,8 +774,8 @@ mod tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn argbf32x4() {
|
fn argbf() {
|
||||||
let mut color = ARGBf32x4(simd::f32x4::from_array([0.5, 0.1, 0.2, 0.3]));
|
let mut color = ARGBf(simd::f32x4::from_array([0.5, 0.1, 0.2, 0.3]));
|
||||||
assert_eq!(color.a(), 0.5);
|
assert_eq!(color.a(), 0.5);
|
||||||
assert_eq!(color.r(), 0.1);
|
assert_eq!(color.r(), 0.1);
|
||||||
assert_eq!(color.g(), 0.2);
|
assert_eq!(color.g(), 0.2);
|
||||||
|
@ -800,20 +791,20 @@ mod tests {
|
||||||
color.set_b(0.6);
|
color.set_b(0.6);
|
||||||
assert_eq!(color.to_array(), [1.0, 0.4, 0.5, 0.6]);
|
assert_eq!(color.to_array(), [1.0, 0.4, 0.5, 0.6]);
|
||||||
|
|
||||||
let color = ARGBf32x4::from_argb([0.5, 0.1, 0.2, 0.3]);
|
let color = ARGBf::from_argb([0.5, 0.1, 0.2, 0.3]);
|
||||||
assert_eq!(color.to_array(), [0.5, 0.1, 0.2, 0.3]);
|
assert_eq!(color.to_array(), [0.5, 0.1, 0.2, 0.3]);
|
||||||
|
|
||||||
let color = ARGBf32x4::from_rgb([0.1, 0.2, 0.3]);
|
let color = ARGBf::from_rgb([0.1, 0.2, 0.3]);
|
||||||
assert_eq!(color.to_array(), [1.0, 0.1, 0.2, 0.3]);
|
assert_eq!(color.to_array(), [1.0, 0.1, 0.2, 0.3]);
|
||||||
|
|
||||||
let color: ARGBf32x4 = 0x7f19334c.into();
|
let color: ARGBf = 0x7f19334c.into();
|
||||||
assert!(color.a().nearly_equal(0.5, 0.01));
|
assert!(color.a().nearly_equal(0.5, 0.01));
|
||||||
assert!(color.r().nearly_equal(0.1, 0.01));
|
assert!(color.r().nearly_equal(0.1, 0.01));
|
||||||
assert!(color.g().nearly_equal(0.2, 0.01));
|
assert!(color.g().nearly_equal(0.2, 0.01));
|
||||||
assert!(color.b().nearly_equal(0.3, 0.01));
|
assert!(color.b().nearly_equal(0.3, 0.01));
|
||||||
|
|
||||||
let other = ARGBu8x4::from_argb([0x7f, 0x19, 0x33, 0x4c]);
|
let other = ARGB::from_argb([0x7f, 0x19, 0x33, 0x4c]);
|
||||||
let color: ARGBf32x4 = other.into();
|
let color: ARGBf = other.into();
|
||||||
assert!(color.a().nearly_equal(0.5, 0.01));
|
assert!(color.a().nearly_equal(0.5, 0.01));
|
||||||
assert!(color.r().nearly_equal(0.1, 0.01));
|
assert!(color.r().nearly_equal(0.1, 0.01));
|
||||||
assert!(color.g().nearly_equal(0.2, 0.01));
|
assert!(color.g().nearly_equal(0.2, 0.01));
|
||||||
|
|
|
@ -7,7 +7,7 @@ use std::path::Path;
|
||||||
use byteorder::{ReadBytesExt, WriteBytesExt};
|
use byteorder::{ReadBytesExt, WriteBytesExt};
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
use crate::graphics::{ARGBu8x4, IndexedBitmap};
|
use crate::graphics::{IndexedBitmap, ARGB};
|
||||||
use crate::utils::abs_diff;
|
use crate::utils::abs_diff;
|
||||||
|
|
||||||
const NUM_COLORS: usize = 256;
|
const NUM_COLORS: usize = 256;
|
||||||
|
@ -29,19 +29,16 @@ fn to_6bit(value: u8) -> u8 {
|
||||||
}
|
}
|
||||||
|
|
||||||
// vga bios (0-63) format
|
// vga bios (0-63) format
|
||||||
fn read_palette_6bit<T: ReadBytesExt>(
|
fn read_palette_6bit<T: ReadBytesExt>(reader: &mut T, num_colors: usize) -> Result<[ARGB; NUM_COLORS], PaletteError> {
|
||||||
reader: &mut T,
|
|
||||||
num_colors: usize,
|
|
||||||
) -> Result<[ARGBu8x4; NUM_COLORS], PaletteError> {
|
|
||||||
if num_colors > NUM_COLORS {
|
if num_colors > NUM_COLORS {
|
||||||
return Err(PaletteError::OutOfRange(num_colors));
|
return Err(PaletteError::OutOfRange(num_colors));
|
||||||
}
|
}
|
||||||
let mut colors = [ARGBu8x4::from_argb([255, 0, 0, 0]); NUM_COLORS];
|
let mut colors = [ARGB::from_argb([255, 0, 0, 0]); NUM_COLORS];
|
||||||
for i in 0..num_colors {
|
for i in 0..num_colors {
|
||||||
let r = reader.read_u8()?;
|
let r = reader.read_u8()?;
|
||||||
let g = reader.read_u8()?;
|
let g = reader.read_u8()?;
|
||||||
let b = reader.read_u8()?;
|
let b = reader.read_u8()?;
|
||||||
let color = ARGBu8x4::from_rgb([from_6bit(r), from_6bit(g), from_6bit(b)]);
|
let color = ARGB::from_rgb([from_6bit(r), from_6bit(g), from_6bit(b)]);
|
||||||
colors[i] = color;
|
colors[i] = color;
|
||||||
}
|
}
|
||||||
Ok(colors)
|
Ok(colors)
|
||||||
|
@ -49,7 +46,7 @@ fn read_palette_6bit<T: ReadBytesExt>(
|
||||||
|
|
||||||
fn write_palette_6bit<T: WriteBytesExt>(
|
fn write_palette_6bit<T: WriteBytesExt>(
|
||||||
writer: &mut T,
|
writer: &mut T,
|
||||||
colors: &[ARGBu8x4; NUM_COLORS],
|
colors: &[ARGB; NUM_COLORS],
|
||||||
num_colors: usize,
|
num_colors: usize,
|
||||||
) -> Result<(), PaletteError> {
|
) -> Result<(), PaletteError> {
|
||||||
if num_colors > NUM_COLORS {
|
if num_colors > NUM_COLORS {
|
||||||
|
@ -64,19 +61,16 @@ fn write_palette_6bit<T: WriteBytesExt>(
|
||||||
}
|
}
|
||||||
|
|
||||||
// normal (0-255) format
|
// normal (0-255) format
|
||||||
fn read_palette_8bit<T: ReadBytesExt>(
|
fn read_palette_8bit<T: ReadBytesExt>(reader: &mut T, num_colors: usize) -> Result<[ARGB; NUM_COLORS], PaletteError> {
|
||||||
reader: &mut T,
|
|
||||||
num_colors: usize,
|
|
||||||
) -> Result<[ARGBu8x4; NUM_COLORS], PaletteError> {
|
|
||||||
if num_colors > NUM_COLORS {
|
if num_colors > NUM_COLORS {
|
||||||
return Err(PaletteError::OutOfRange(num_colors));
|
return Err(PaletteError::OutOfRange(num_colors));
|
||||||
}
|
}
|
||||||
let mut colors = [ARGBu8x4::from_argb([255, 0, 0, 0]); NUM_COLORS];
|
let mut colors = [ARGB::from_argb([255, 0, 0, 0]); NUM_COLORS];
|
||||||
for i in 0..num_colors {
|
for i in 0..num_colors {
|
||||||
let r = reader.read_u8()?;
|
let r = reader.read_u8()?;
|
||||||
let g = reader.read_u8()?;
|
let g = reader.read_u8()?;
|
||||||
let b = reader.read_u8()?;
|
let b = reader.read_u8()?;
|
||||||
let color = ARGBu8x4::from_rgb([r, g, b]);
|
let color = ARGB::from_rgb([r, g, b]);
|
||||||
colors[i] = color;
|
colors[i] = color;
|
||||||
}
|
}
|
||||||
Ok(colors)
|
Ok(colors)
|
||||||
|
@ -84,7 +78,7 @@ fn read_palette_8bit<T: ReadBytesExt>(
|
||||||
|
|
||||||
fn write_palette_8bit<T: WriteBytesExt>(
|
fn write_palette_8bit<T: WriteBytesExt>(
|
||||||
writer: &mut T,
|
writer: &mut T,
|
||||||
colors: &[ARGBu8x4; NUM_COLORS],
|
colors: &[ARGB; NUM_COLORS],
|
||||||
num_colors: usize,
|
num_colors: usize,
|
||||||
) -> Result<(), PaletteError> {
|
) -> Result<(), PaletteError> {
|
||||||
if num_colors > NUM_COLORS {
|
if num_colors > NUM_COLORS {
|
||||||
|
@ -118,18 +112,18 @@ pub enum PaletteFormat {
|
||||||
/// colors are all stored individually as 32-bit packed values in the format 0xAARRGGBB.
|
/// colors are all stored individually as 32-bit packed values in the format 0xAARRGGBB.
|
||||||
#[derive(Debug, Clone, Eq, PartialEq)]
|
#[derive(Debug, Clone, Eq, PartialEq)]
|
||||||
pub struct Palette {
|
pub struct Palette {
|
||||||
colors: [ARGBu8x4; NUM_COLORS],
|
colors: [ARGB; NUM_COLORS],
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Palette {
|
impl Palette {
|
||||||
/// Creates a new Palette with all black colors.
|
/// Creates a new Palette with all black colors.
|
||||||
pub fn new() -> Palette {
|
pub fn new() -> Palette {
|
||||||
Palette { colors: [ARGBu8x4::from_rgb([0, 0, 0]); NUM_COLORS] }
|
Palette { colors: [ARGB::from_rgb([0, 0, 0]); NUM_COLORS] }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a new Palette with all initial colors having the RGB values specified.
|
/// Creates a new Palette with all initial colors having the RGB values specified.
|
||||||
pub fn new_with_default(r: u8, g: u8, b: u8) -> Palette {
|
pub fn new_with_default(r: u8, g: u8, b: u8) -> Palette {
|
||||||
Palette { colors: [ARGBu8x4::from_rgb([r, g, b]); NUM_COLORS] }
|
Palette { colors: [ARGB::from_rgb([r, g, b]); NUM_COLORS] }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a new Palette, pre-loaded with the default VGA BIOS colors.
|
/// Creates a new Palette, pre-loaded with the default VGA BIOS colors.
|
||||||
|
@ -333,7 +327,7 @@ impl Palette {
|
||||||
}
|
}
|
||||||
|
|
||||||
if modified {
|
if modified {
|
||||||
self.colors[color as usize] = ARGBu8x4::from_rgb([r, g, b]);
|
self.colors[color as usize] = ARGB::from_rgb([r, g, b]);
|
||||||
}
|
}
|
||||||
|
|
||||||
(target_r == r) && (target_g == g) && (target_b == b)
|
(target_r == r) && (target_g == g) && (target_b == b)
|
||||||
|
@ -478,7 +472,7 @@ impl Palette {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Index<u8> for Palette {
|
impl Index<u8> for Palette {
|
||||||
type Output = ARGBu8x4;
|
type Output = ARGB;
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn index(&self, index: u8) -> &Self::Output {
|
fn index(&self, index: u8) -> &Self::Output {
|
||||||
|
@ -512,11 +506,11 @@ mod tests {
|
||||||
#[test]
|
#[test]
|
||||||
fn get_and_set_colors() {
|
fn get_and_set_colors() {
|
||||||
let mut palette = Palette::new();
|
let mut palette = Palette::new();
|
||||||
assert_eq!(ARGBu8x4::from_rgb([0, 0, 0]), palette[0]);
|
assert_eq!(ARGB::from_rgb([0, 0, 0]), palette[0]);
|
||||||
assert_eq!(ARGBu8x4::from_rgb([0, 0, 0]), palette[1]);
|
assert_eq!(ARGB::from_rgb([0, 0, 0]), palette[1]);
|
||||||
palette[0] = 0x11223344.into();
|
palette[0] = 0x11223344.into();
|
||||||
assert_eq!(ARGBu8x4::from(0x11223344), palette[0]);
|
assert_eq!(ARGB::from(0x11223344), palette[0]);
|
||||||
assert_eq!(ARGBu8x4::from_rgb([0, 0, 0]), palette[1]);
|
assert_eq!(ARGB::from_rgb([0, 0, 0]), palette[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn assert_ega_colors(palette: &Palette) {
|
fn assert_ega_colors(palette: &Palette) {
|
||||||
|
|
|
@ -21,7 +21,7 @@ mod tests {
|
||||||
use std::io::{BufReader, Read};
|
use std::io::{BufReader, Read};
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
use crate::graphics::ARGBu8x4;
|
use crate::graphics::ARGB;
|
||||||
use crate::utils::ReadType;
|
use crate::utils::ReadType;
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
|
@ -46,12 +46,12 @@ mod tests {
|
||||||
Ok(buffer.into_boxed_slice())
|
Ok(buffer.into_boxed_slice())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn load_raw_argb(bin_file: &Path) -> Result<Box<[ARGBu8x4]>, io::Error> {
|
pub fn load_raw_argb(bin_file: &Path) -> Result<Box<[ARGB]>, io::Error> {
|
||||||
let f = File::open(bin_file)?;
|
let f = File::open(bin_file)?;
|
||||||
let mut reader = BufReader::new(f);
|
let mut reader = BufReader::new(f);
|
||||||
let mut buffer = Vec::new();
|
let mut buffer = Vec::new();
|
||||||
loop {
|
loop {
|
||||||
buffer.push(match ARGBu8x4::read(&mut reader) {
|
buffer.push(match ARGB::read(&mut reader) {
|
||||||
Ok(value) => value,
|
Ok(value) => value,
|
||||||
Err(err) if err.kind() == io::ErrorKind::UnexpectedEof => break,
|
Err(err) if err.kind() == io::ErrorKind::UnexpectedEof => break,
|
||||||
Err(err) => return Err(err),
|
Err(err) => return Err(err),
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
use crate::graphics::{ARGBu8x4, ColorsAsBytes, IndexedBitmap, Palette, RgbaBitmap};
|
use crate::graphics::{ColorsAsBytes, IndexedBitmap, Palette, RgbaBitmap, ARGB};
|
||||||
|
|
||||||
pub fn calculate_logical_screen_size(window_width: u32, window_height: u32, scale_factor: u32) -> (u32, u32) {
|
pub fn calculate_logical_screen_size(window_width: u32, window_height: u32, scale_factor: u32) -> (u32, u32) {
|
||||||
let logical_width = (window_width as f32 / scale_factor as f32).ceil() as u32;
|
let logical_width = (window_width as f32 / scale_factor as f32).ceil() as u32;
|
||||||
|
@ -23,7 +23,7 @@ pub enum SdlFramebufferError {
|
||||||
pub struct SdlFramebuffer {
|
pub struct SdlFramebuffer {
|
||||||
sdl_texture: sdl2::render::Texture,
|
sdl_texture: sdl2::render::Texture,
|
||||||
sdl_texture_pitch: usize,
|
sdl_texture_pitch: usize,
|
||||||
intermediate_texture: Option<Box<[ARGBu8x4]>>,
|
intermediate_texture: Option<Box<[ARGB]>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: i'm not totally happy with this implementation. i don't like the two display methods and how the caller
|
// TODO: i'm not totally happy with this implementation. i don't like the two display methods and how the caller
|
||||||
|
@ -60,7 +60,7 @@ impl SdlFramebuffer {
|
||||||
// bitmaps, not 32-bit RGBA pixels, so this temporary buffer is where we convert the final
|
// bitmaps, not 32-bit RGBA pixels, so this temporary buffer is where we convert the final
|
||||||
// application framebuffer to 32-bit RGBA pixels before it is uploaded to the SDL texture
|
// application framebuffer to 32-bit RGBA pixels before it is uploaded to the SDL texture
|
||||||
let texture_pixels_size = (logical_screen_width * logical_screen_height) as usize;
|
let texture_pixels_size = (logical_screen_width * logical_screen_height) as usize;
|
||||||
Some(vec![ARGBu8x4::default(); texture_pixels_size].into_boxed_slice())
|
Some(vec![ARGB::default(); texture_pixels_size].into_boxed_slice())
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::graphics::{ARGBu8x4, ColorsAsBytes, GeneralBitmap, GeneralBlitMethod, IndexedBitmap, RgbaBitmap};
|
use crate::graphics::{ColorsAsBytes, GeneralBitmap, GeneralBlitMethod, IndexedBitmap, RgbaBitmap, ARGB};
|
||||||
use crate::math::Rect;
|
use crate::math::Rect;
|
||||||
use crate::system::Mouse;
|
use crate::system::Mouse;
|
||||||
|
|
||||||
|
@ -267,7 +267,7 @@ impl DefaultMouseCursorBitmaps<RgbaBitmap> for CustomMouseCursor<RgbaBitmap> {
|
||||||
cursor,
|
cursor,
|
||||||
hotspot_x: DEFAULT_MOUSE_CURSOR_HOTSPOT_X,
|
hotspot_x: DEFAULT_MOUSE_CURSOR_HOTSPOT_X,
|
||||||
hotspot_y: DEFAULT_MOUSE_CURSOR_HOTSPOT_Y,
|
hotspot_y: DEFAULT_MOUSE_CURSOR_HOTSPOT_Y,
|
||||||
transparent_color: ARGBu8x4::from(0xffff00ff),
|
transparent_color: ARGB::from(0xffff00ff),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,24 +5,24 @@ use helpers::test_assets_file;
|
||||||
|
|
||||||
pub mod helpers;
|
pub mod helpers;
|
||||||
|
|
||||||
const LIGHTER_BACKGROUND: ARGBu8x4 = ARGBu8x4::from_rgb([0x2c, 0x30, 0x41]);
|
const LIGHTER_BACKGROUND: ARGB = ARGB::from_rgb([0x2c, 0x30, 0x41]);
|
||||||
|
|
||||||
pub const COLOR_BLACK_HALF_ALPHA: ARGBu8x4 = ARGBu8x4::from_argb([0x7f, 0x00, 0x00, 0x00]);
|
pub const COLOR_BLACK_HALF_ALPHA: ARGB = ARGB::from_argb([0x7f, 0x00, 0x00, 0x00]);
|
||||||
pub const COLOR_BLUE_HALF_ALPHA: ARGBu8x4 = ARGBu8x4::from_argb([0x7f, 0x00, 0x00, 0xaa]);
|
pub const COLOR_BLUE_HALF_ALPHA: ARGB = ARGB::from_argb([0x7f, 0x00, 0x00, 0xaa]);
|
||||||
pub const COLOR_GREEN_HALF_ALPHA: ARGBu8x4 = ARGBu8x4::from_argb([0x7f, 0x00, 0xaa, 0x00]);
|
pub const COLOR_GREEN_HALF_ALPHA: ARGB = ARGB::from_argb([0x7f, 0x00, 0xaa, 0x00]);
|
||||||
pub const COLOR_CYAN_HALF_ALPHA: ARGBu8x4 = ARGBu8x4::from_argb([0x7f, 0x00, 0xaa, 0xaa]);
|
pub const COLOR_CYAN_HALF_ALPHA: ARGB = ARGB::from_argb([0x7f, 0x00, 0xaa, 0xaa]);
|
||||||
pub const COLOR_RED_HALF_ALPHA: ARGBu8x4 = ARGBu8x4::from_argb([0x7f, 0xaa, 0x00, 0x00]);
|
pub const COLOR_RED_HALF_ALPHA: ARGB = ARGB::from_argb([0x7f, 0xaa, 0x00, 0x00]);
|
||||||
pub const COLOR_MAGENTA_HALF_ALPHA: ARGBu8x4 = ARGBu8x4::from_argb([0x7f, 0xaa, 0x00, 0xaa]);
|
pub const COLOR_MAGENTA_HALF_ALPHA: ARGB = ARGB::from_argb([0x7f, 0xaa, 0x00, 0xaa]);
|
||||||
pub const COLOR_BROWN_HALF_ALPHA: ARGBu8x4 = ARGBu8x4::from_argb([0x7f, 0xaa, 0x55, 0x00]);
|
pub const COLOR_BROWN_HALF_ALPHA: ARGB = ARGB::from_argb([0x7f, 0xaa, 0x55, 0x00]);
|
||||||
pub const COLOR_LIGHT_GRAY_HALF_ALPHA: ARGBu8x4 = ARGBu8x4::from_argb([0x7f, 0xaa, 0xaa, 0xaa]);
|
pub const COLOR_LIGHT_GRAY_HALF_ALPHA: ARGB = ARGB::from_argb([0x7f, 0xaa, 0xaa, 0xaa]);
|
||||||
pub const COLOR_DARK_GRAY_HALF_ALPHA: ARGBu8x4 = ARGBu8x4::from_argb([0x7f, 0x55, 0x55, 0x55]);
|
pub const COLOR_DARK_GRAY_HALF_ALPHA: ARGB = ARGB::from_argb([0x7f, 0x55, 0x55, 0x55]);
|
||||||
pub const COLOR_BRIGHT_BLUE_HALF_ALPHA: ARGBu8x4 = ARGBu8x4::from_argb([0x7f, 0x55, 0x55, 0xff]);
|
pub const COLOR_BRIGHT_BLUE_HALF_ALPHA: ARGB = ARGB::from_argb([0x7f, 0x55, 0x55, 0xff]);
|
||||||
pub const COLOR_BRIGHT_GREEN_HALF_ALPHA: ARGBu8x4 = ARGBu8x4::from_argb([0x7f, 0x55, 0xff, 0x55]);
|
pub const COLOR_BRIGHT_GREEN_HALF_ALPHA: ARGB = ARGB::from_argb([0x7f, 0x55, 0xff, 0x55]);
|
||||||
pub const COLOR_BRIGHT_CYAN_HALF_ALPHA: ARGBu8x4 = ARGBu8x4::from_argb([0x7f, 0x55, 0xff, 0xff]);
|
pub const COLOR_BRIGHT_CYAN_HALF_ALPHA: ARGB = ARGB::from_argb([0x7f, 0x55, 0xff, 0xff]);
|
||||||
pub const COLOR_BRIGHT_RED_HALF_ALPHA: ARGBu8x4 = ARGBu8x4::from_argb([0x7f, 0xff, 0x55, 0x55]);
|
pub const COLOR_BRIGHT_RED_HALF_ALPHA: ARGB = ARGB::from_argb([0x7f, 0xff, 0x55, 0x55]);
|
||||||
pub const COLOR_BRIGHT_MAGENTA_HALF_ALPHA: ARGBu8x4 = ARGBu8x4::from_argb([0x7f, 0xff, 0x55, 0xff]);
|
pub const COLOR_BRIGHT_MAGENTA_HALF_ALPHA: ARGB = ARGB::from_argb([0x7f, 0xff, 0x55, 0xff]);
|
||||||
pub const COLOR_BRIGHT_YELLOW_HALF_ALPHA: ARGBu8x4 = ARGBu8x4::from_argb([0x7f, 0xff, 0xff, 0x55]);
|
pub const COLOR_BRIGHT_YELLOW_HALF_ALPHA: ARGB = ARGB::from_argb([0x7f, 0xff, 0xff, 0x55]);
|
||||||
pub const COLOR_BRIGHT_WHITE_HALF_ALPHA: ARGBu8x4 = ARGBu8x4::from_argb([0x7f, 0xff, 0xff, 0xff]);
|
pub const COLOR_BRIGHT_WHITE_HALF_ALPHA: ARGB = ARGB::from_argb([0x7f, 0xff, 0xff, 0xff]);
|
||||||
|
|
||||||
const SCREEN_WIDTH: u32 = 320;
|
const SCREEN_WIDTH: u32 = 320;
|
||||||
const SCREEN_HEIGHT: u32 = 240;
|
const SCREEN_HEIGHT: u32 = 240;
|
||||||
|
@ -83,7 +83,7 @@ fn pixel_addressing() {
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
for _y in 0..16 {
|
for _y in 0..16 {
|
||||||
for _x in 0..16 {
|
for _x in 0..16 {
|
||||||
*pixels = ARGBu8x4::from_rgb([i, i, i]);
|
*pixels = ARGB::from_rgb([i, i, i]);
|
||||||
i = i.wrapping_add(1);
|
i = i.wrapping_add(1);
|
||||||
pixels = pixels.offset(1);
|
pixels = pixels.offset(1);
|
||||||
}
|
}
|
||||||
|
@ -636,10 +636,10 @@ fn generate_bitmap_with_varied_alpha(width: i32, height: i32) -> RgbaBitmap {
|
||||||
let mut bitmap = RgbaBitmap::new(width as u32, height as u32).unwrap();
|
let mut bitmap = RgbaBitmap::new(width as u32, height as u32).unwrap();
|
||||||
bitmap.clear(0.into()); // alpha=0
|
bitmap.clear(0.into()); // alpha=0
|
||||||
|
|
||||||
let color1 = ARGBu8x4::from_argb([0x33, 0x00, 0x00, 0xaa]);
|
let color1 = ARGB::from_argb([0x33, 0x00, 0x00, 0xaa]);
|
||||||
let color2 = ARGBu8x4::from_argb([0x66, 0x00, 0xaa, 0x00]);
|
let color2 = ARGB::from_argb([0x66, 0x00, 0xaa, 0x00]);
|
||||||
let color3 = ARGBu8x4::from_argb([0x99, 0x00, 0xaa, 0xaa]);
|
let color3 = ARGB::from_argb([0x99, 0x00, 0xaa, 0xaa]);
|
||||||
let color4 = ARGBu8x4::from_argb([0xcc, 0xaa, 0x00, 0x00]);
|
let color4 = ARGB::from_argb([0xcc, 0xaa, 0x00, 0x00]);
|
||||||
|
|
||||||
bitmap.filled_rect(0, 0, x_third, y_third, color1);
|
bitmap.filled_rect(0, 0, x_third, y_third, color1);
|
||||||
bitmap.filled_rect(x_third * 2 + 1, y_third * 2 + 1, width - 1, height - 1, color2);
|
bitmap.filled_rect(x_third * 2 + 1, y_third * 2 + 1, width - 1, height - 1, color2);
|
||||||
|
@ -656,12 +656,12 @@ fn generate_solid_bitmap_with_varied_alpha(width: i32, height: i32) -> RgbaBitma
|
||||||
let y_third = height / 3;
|
let y_third = height / 3;
|
||||||
|
|
||||||
let mut bitmap = RgbaBitmap::new(width as u32, height as u32).unwrap();
|
let mut bitmap = RgbaBitmap::new(width as u32, height as u32).unwrap();
|
||||||
bitmap.clear(ARGBu8x4::from_argb([255, 0, 0, 0]));
|
bitmap.clear(ARGB::from_argb([255, 0, 0, 0]));
|
||||||
|
|
||||||
let color1 = ARGBu8x4::from_argb([0x33, 0x00, 0x00, 0xaa]);
|
let color1 = ARGB::from_argb([0x33, 0x00, 0x00, 0xaa]);
|
||||||
let color2 = ARGBu8x4::from_argb([0x66, 0x00, 0xaa, 0x00]);
|
let color2 = ARGB::from_argb([0x66, 0x00, 0xaa, 0x00]);
|
||||||
let color3 = ARGBu8x4::from_argb([0x99, 0x00, 0xaa, 0xaa]);
|
let color3 = ARGB::from_argb([0x99, 0x00, 0xaa, 0xaa]);
|
||||||
let color4 = ARGBu8x4::from_argb([0xcc, 0xaa, 0x00, 0x00]);
|
let color4 = ARGB::from_argb([0xcc, 0xaa, 0x00, 0x00]);
|
||||||
|
|
||||||
bitmap.filled_rect(0, 0, x_third, y_third, color1);
|
bitmap.filled_rect(0, 0, x_third, y_third, color1);
|
||||||
bitmap.filled_rect(x_third * 2 + 1, y_third * 2 + 1, width - 1, height - 1, color2);
|
bitmap.filled_rect(x_third * 2 + 1, y_third * 2 + 1, width - 1, height - 1, color2);
|
||||||
|
@ -756,7 +756,7 @@ fn solid_tinted_blits() {
|
||||||
let bmp21 = generate_bitmap(21, 21);
|
let bmp21 = generate_bitmap(21, 21);
|
||||||
let bmp3 = generate_bitmap(3, 3);
|
let bmp3 = generate_bitmap(3, 3);
|
||||||
|
|
||||||
let method = SolidTinted(ARGBu8x4::from_argb([127, 155, 242, 21]));
|
let method = SolidTinted(ARGB::from_argb([127, 155, 242, 21]));
|
||||||
|
|
||||||
let x = 40;
|
let x = 40;
|
||||||
let y = 20;
|
let y = 20;
|
||||||
|
@ -961,7 +961,7 @@ fn solid_flipped_tinted_blits() {
|
||||||
|
|
||||||
let bmp = generate_bitmap(16, 16);
|
let bmp = generate_bitmap(16, 16);
|
||||||
|
|
||||||
let tint_color = ARGBu8x4::from_argb([127, 155, 242, 21]);
|
let tint_color = ARGB::from_argb([127, 155, 242, 21]);
|
||||||
|
|
||||||
let x = 40;
|
let x = 40;
|
||||||
let y = 20;
|
let y = 20;
|
||||||
|
@ -1100,7 +1100,7 @@ fn transparent_blits() {
|
||||||
let bmp21 = generate_bitmap(21, 21);
|
let bmp21 = generate_bitmap(21, 21);
|
||||||
let bmp3 = generate_bitmap(3, 3);
|
let bmp3 = generate_bitmap(3, 3);
|
||||||
|
|
||||||
let method = Transparent(ARGBu8x4::from_rgb([0, 0, 0]));
|
let method = Transparent(ARGB::from_rgb([0, 0, 0]));
|
||||||
|
|
||||||
let x = 40;
|
let x = 40;
|
||||||
let y = 20;
|
let y = 20;
|
||||||
|
@ -1172,8 +1172,8 @@ fn transparent_tinted_blits() {
|
||||||
let bmp3 = generate_bitmap(3, 3);
|
let bmp3 = generate_bitmap(3, 3);
|
||||||
|
|
||||||
let method = TransparentTinted {
|
let method = TransparentTinted {
|
||||||
transparent_color: ARGBu8x4::from_rgb([0, 0, 0]),
|
transparent_color: ARGB::from_rgb([0, 0, 0]),
|
||||||
tint_color: ARGBu8x4::from_argb([127, 155, 242, 21]),
|
tint_color: ARGB::from_argb([127, 155, 242, 21]),
|
||||||
};
|
};
|
||||||
|
|
||||||
let x = 40;
|
let x = 40;
|
||||||
|
@ -1244,8 +1244,7 @@ fn blended_transparent_blits() {
|
||||||
let bmp21 = generate_solid_bitmap_with_varied_alpha(21, 21);
|
let bmp21 = generate_solid_bitmap_with_varied_alpha(21, 21);
|
||||||
let bmp3 = generate_solid_bitmap_with_varied_alpha(3, 3);
|
let bmp3 = generate_solid_bitmap_with_varied_alpha(3, 3);
|
||||||
|
|
||||||
let method =
|
let method = TransparentBlended { transparent_color: ARGB::from_argb([255, 0, 0, 0]), blend: BlendFunction::Blend };
|
||||||
TransparentBlended { transparent_color: ARGBu8x4::from_argb([255, 0, 0, 0]), blend: BlendFunction::Blend };
|
|
||||||
|
|
||||||
let x = 40;
|
let x = 40;
|
||||||
let y = 20;
|
let y = 20;
|
||||||
|
@ -1312,7 +1311,7 @@ fn transparent_flipped_blits() {
|
||||||
let mut screen = setup();
|
let mut screen = setup();
|
||||||
screen.clear(LIGHTER_BACKGROUND);
|
screen.clear(LIGHTER_BACKGROUND);
|
||||||
|
|
||||||
let transparent_color = ARGBu8x4::from_rgb([0, 0, 0]);
|
let transparent_color = ARGB::from_rgb([0, 0, 0]);
|
||||||
|
|
||||||
let bmp = generate_bitmap(16, 16);
|
let bmp = generate_bitmap(16, 16);
|
||||||
|
|
||||||
|
@ -1381,8 +1380,8 @@ fn transparent_flipped_tinted_blits() {
|
||||||
let mut screen = setup();
|
let mut screen = setup();
|
||||||
screen.clear(LIGHTER_BACKGROUND);
|
screen.clear(LIGHTER_BACKGROUND);
|
||||||
|
|
||||||
let transparent_color = ARGBu8x4::from_rgb([0, 0, 0]);
|
let transparent_color = ARGB::from_rgb([0, 0, 0]);
|
||||||
let tint_color = ARGBu8x4::from_argb([127, 155, 242, 21]);
|
let tint_color = ARGB::from_argb([127, 155, 242, 21]);
|
||||||
|
|
||||||
let bmp = generate_bitmap(16, 16);
|
let bmp = generate_bitmap(16, 16);
|
||||||
|
|
||||||
|
@ -1452,7 +1451,7 @@ fn blended_transparent_flipped_blits() {
|
||||||
|
|
||||||
let bmp = generate_solid_bitmap_with_varied_alpha(16, 16);
|
let bmp = generate_solid_bitmap_with_varied_alpha(16, 16);
|
||||||
|
|
||||||
let transparent_color = ARGBu8x4::from_argb([255, 0, 0, 0]);
|
let transparent_color = ARGB::from_argb([255, 0, 0, 0]);
|
||||||
let blend = BlendFunction::Blend;
|
let blend = BlendFunction::Blend;
|
||||||
|
|
||||||
let x = 40;
|
let x = 40;
|
||||||
|
@ -1520,7 +1519,7 @@ fn transparent_single_blits() {
|
||||||
let mut screen = setup();
|
let mut screen = setup();
|
||||||
screen.clear(LIGHTER_BACKGROUND);
|
screen.clear(LIGHTER_BACKGROUND);
|
||||||
|
|
||||||
let transparent_color = ARGBu8x4::from_rgb([0, 0, 0]);
|
let transparent_color = ARGB::from_rgb([0, 0, 0]);
|
||||||
|
|
||||||
let bmp = generate_bitmap(16, 16);
|
let bmp = generate_bitmap(16, 16);
|
||||||
|
|
||||||
|
@ -1593,7 +1592,7 @@ fn transparent_flipped_single_blits() {
|
||||||
let mut screen = setup();
|
let mut screen = setup();
|
||||||
screen.clear(LIGHTER_BACKGROUND);
|
screen.clear(LIGHTER_BACKGROUND);
|
||||||
|
|
||||||
let transparent_color = ARGBu8x4::from_rgb([0, 0, 0]);
|
let transparent_color = ARGB::from_rgb([0, 0, 0]);
|
||||||
|
|
||||||
let bmp = generate_bitmap(16, 16);
|
let bmp = generate_bitmap(16, 16);
|
||||||
|
|
||||||
|
@ -1732,7 +1731,7 @@ fn rotozoom_tinted_blits() {
|
||||||
|
|
||||||
let bmp = generate_bitmap(16, 16);
|
let bmp = generate_bitmap(16, 16);
|
||||||
|
|
||||||
let tint_color = ARGBu8x4::from_argb([127, 155, 242, 21]);
|
let tint_color = ARGB::from_argb([127, 155, 242, 21]);
|
||||||
|
|
||||||
let x = 40;
|
let x = 40;
|
||||||
let y = 20;
|
let y = 20;
|
||||||
|
@ -1870,7 +1869,7 @@ fn rotozoom_transparent_blits() {
|
||||||
let mut screen = setup();
|
let mut screen = setup();
|
||||||
screen.clear(LIGHTER_BACKGROUND);
|
screen.clear(LIGHTER_BACKGROUND);
|
||||||
|
|
||||||
let transparent_color = ARGBu8x4::from_rgb([0, 0, 0]);
|
let transparent_color = ARGB::from_rgb([0, 0, 0]);
|
||||||
|
|
||||||
let bmp = generate_bitmap(16, 16);
|
let bmp = generate_bitmap(16, 16);
|
||||||
|
|
||||||
|
@ -1941,8 +1940,8 @@ fn rotozoom_transparent_tinted_blits() {
|
||||||
let mut screen = setup();
|
let mut screen = setup();
|
||||||
screen.clear(LIGHTER_BACKGROUND);
|
screen.clear(LIGHTER_BACKGROUND);
|
||||||
|
|
||||||
let transparent_color = ARGBu8x4::from_rgb([0, 0, 0]);
|
let transparent_color = ARGB::from_rgb([0, 0, 0]);
|
||||||
let tint_color = ARGBu8x4::from_argb([127, 155, 242, 21]);
|
let tint_color = ARGB::from_argb([127, 155, 242, 21]);
|
||||||
|
|
||||||
let bmp = generate_bitmap(16, 16);
|
let bmp = generate_bitmap(16, 16);
|
||||||
|
|
||||||
|
@ -2014,7 +2013,7 @@ fn blended_rotozoom_transparent_blits() {
|
||||||
|
|
||||||
let bmp = generate_solid_bitmap_with_varied_alpha(16, 16);
|
let bmp = generate_solid_bitmap_with_varied_alpha(16, 16);
|
||||||
|
|
||||||
let transparent_color = ARGBu8x4::from_argb([255, 0, 0, 0]);
|
let transparent_color = ARGB::from_argb([255, 0, 0, 0]);
|
||||||
let blend = BlendFunction::Blend;
|
let blend = BlendFunction::Blend;
|
||||||
|
|
||||||
let x = 40;
|
let x = 40;
|
||||||
|
@ -2111,34 +2110,34 @@ fn blend_function_tinted_blend() {
|
||||||
let bmp_solid_with_varied_alpha = generate_solid_bitmap_with_varied_alpha(32, 32);
|
let bmp_solid_with_varied_alpha = generate_solid_bitmap_with_varied_alpha(32, 32);
|
||||||
let bmp_with_varied_alpha = generate_bitmap_with_varied_alpha(32, 32);
|
let bmp_with_varied_alpha = generate_bitmap_with_varied_alpha(32, 32);
|
||||||
|
|
||||||
let method = RgbaBlitMethod::SolidBlended(BlendFunction::TintedBlend(ARGBu8x4::from_argb([255, 155, 242, 21])));
|
let method = RgbaBlitMethod::SolidBlended(BlendFunction::TintedBlend(ARGB::from_argb([255, 155, 242, 21])));
|
||||||
screen.blit(method.clone(), &bmp_solid, 10, 5);
|
screen.blit(method.clone(), &bmp_solid, 10, 5);
|
||||||
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 5);
|
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 5);
|
||||||
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 5);
|
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 5);
|
||||||
|
|
||||||
let method = RgbaBlitMethod::SolidBlended(BlendFunction::TintedBlend(ARGBu8x4::from_argb([127, 155, 242, 21])));
|
let method = RgbaBlitMethod::SolidBlended(BlendFunction::TintedBlend(ARGB::from_argb([127, 155, 242, 21])));
|
||||||
screen.blit(method.clone(), &bmp_solid, 10, 40);
|
screen.blit(method.clone(), &bmp_solid, 10, 40);
|
||||||
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 40);
|
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 40);
|
||||||
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 40);
|
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 40);
|
||||||
|
|
||||||
let method = RgbaBlitMethod::SolidBlended(BlendFunction::TintedBlend(ARGBu8x4::from_argb([0, 155, 242, 21])));
|
let method = RgbaBlitMethod::SolidBlended(BlendFunction::TintedBlend(ARGB::from_argb([0, 155, 242, 21])));
|
||||||
screen.blit(method.clone(), &bmp_solid, 10, 75);
|
screen.blit(method.clone(), &bmp_solid, 10, 75);
|
||||||
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 75);
|
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 75);
|
||||||
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 75);
|
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 75);
|
||||||
|
|
||||||
//////
|
//////
|
||||||
|
|
||||||
let method = RgbaBlitMethod::SolidBlended(BlendFunction::TintedBlend(ARGBu8x4::from_argb([255, 155, 242, 21])));
|
let method = RgbaBlitMethod::SolidBlended(BlendFunction::TintedBlend(ARGB::from_argb([255, 155, 242, 21])));
|
||||||
screen.blit(method.clone(), &bmp_solid, 10, 125);
|
screen.blit(method.clone(), &bmp_solid, 10, 125);
|
||||||
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 125);
|
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 125);
|
||||||
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 125);
|
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 125);
|
||||||
|
|
||||||
let method = RgbaBlitMethod::SolidBlended(BlendFunction::TintedBlend(ARGBu8x4::from_argb([127, 155, 242, 21])));
|
let method = RgbaBlitMethod::SolidBlended(BlendFunction::TintedBlend(ARGB::from_argb([127, 155, 242, 21])));
|
||||||
screen.blit(method.clone(), &bmp_solid, 10, 160);
|
screen.blit(method.clone(), &bmp_solid, 10, 160);
|
||||||
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 160);
|
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 160);
|
||||||
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 160);
|
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 160);
|
||||||
|
|
||||||
let method = RgbaBlitMethod::SolidBlended(BlendFunction::TintedBlend(ARGBu8x4::from_argb([0, 155, 242, 21])));
|
let method = RgbaBlitMethod::SolidBlended(BlendFunction::TintedBlend(ARGB::from_argb([0, 155, 242, 21])));
|
||||||
screen.blit(method.clone(), &bmp_solid, 10, 195);
|
screen.blit(method.clone(), &bmp_solid, 10, 195);
|
||||||
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 195);
|
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 195);
|
||||||
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 195);
|
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 195);
|
||||||
|
@ -2205,34 +2204,34 @@ fn blend_function_multiplied_blend() {
|
||||||
let bmp_solid_with_varied_alpha = generate_solid_bitmap_with_varied_alpha(32, 32);
|
let bmp_solid_with_varied_alpha = generate_solid_bitmap_with_varied_alpha(32, 32);
|
||||||
let bmp_with_varied_alpha = generate_bitmap_with_varied_alpha(32, 32);
|
let bmp_with_varied_alpha = generate_bitmap_with_varied_alpha(32, 32);
|
||||||
|
|
||||||
let method = RgbaBlitMethod::SolidBlended(BlendFunction::MultipliedBlend(ARGBu8x4::from_argb([255, 242, 29, 81])));
|
let method = RgbaBlitMethod::SolidBlended(BlendFunction::MultipliedBlend(ARGB::from_argb([255, 242, 29, 81])));
|
||||||
screen.blit(method.clone(), &bmp_solid, 10, 5);
|
screen.blit(method.clone(), &bmp_solid, 10, 5);
|
||||||
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 5);
|
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 5);
|
||||||
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 5);
|
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 5);
|
||||||
|
|
||||||
let method = RgbaBlitMethod::SolidBlended(BlendFunction::MultipliedBlend(ARGBu8x4::from_argb([127, 242, 29, 81])));
|
let method = RgbaBlitMethod::SolidBlended(BlendFunction::MultipliedBlend(ARGB::from_argb([127, 242, 29, 81])));
|
||||||
screen.blit(method.clone(), &bmp_solid, 10, 40);
|
screen.blit(method.clone(), &bmp_solid, 10, 40);
|
||||||
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 40);
|
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 40);
|
||||||
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 40);
|
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 40);
|
||||||
|
|
||||||
let method = RgbaBlitMethod::SolidBlended(BlendFunction::MultipliedBlend(ARGBu8x4::from_argb([0, 242, 29, 81])));
|
let method = RgbaBlitMethod::SolidBlended(BlendFunction::MultipliedBlend(ARGB::from_argb([0, 242, 29, 81])));
|
||||||
screen.blit(method.clone(), &bmp_solid, 10, 75);
|
screen.blit(method.clone(), &bmp_solid, 10, 75);
|
||||||
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 75);
|
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 75);
|
||||||
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 75);
|
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 75);
|
||||||
|
|
||||||
//////
|
//////
|
||||||
|
|
||||||
let method = RgbaBlitMethod::SolidBlended(BlendFunction::MultipliedBlend(ARGBu8x4::from_argb([255, 242, 29, 81])));
|
let method = RgbaBlitMethod::SolidBlended(BlendFunction::MultipliedBlend(ARGB::from_argb([255, 242, 29, 81])));
|
||||||
screen.blit(method.clone(), &bmp_solid, 10, 125);
|
screen.blit(method.clone(), &bmp_solid, 10, 125);
|
||||||
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 125);
|
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 125);
|
||||||
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 125);
|
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 125);
|
||||||
|
|
||||||
let method = RgbaBlitMethod::SolidBlended(BlendFunction::MultipliedBlend(ARGBu8x4::from_argb([127, 242, 29, 81])));
|
let method = RgbaBlitMethod::SolidBlended(BlendFunction::MultipliedBlend(ARGB::from_argb([127, 242, 29, 81])));
|
||||||
screen.blit(method.clone(), &bmp_solid, 10, 160);
|
screen.blit(method.clone(), &bmp_solid, 10, 160);
|
||||||
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 160);
|
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 160);
|
||||||
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 160);
|
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 160);
|
||||||
|
|
||||||
let method = RgbaBlitMethod::SolidBlended(BlendFunction::MultipliedBlend(ARGBu8x4::from_argb([0, 242, 29, 81])));
|
let method = RgbaBlitMethod::SolidBlended(BlendFunction::MultipliedBlend(ARGB::from_argb([0, 242, 29, 81])));
|
||||||
screen.blit(method.clone(), &bmp_solid, 10, 195);
|
screen.blit(method.clone(), &bmp_solid, 10, 195);
|
||||||
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 195);
|
screen.blit(method.clone(), &bmp_solid_with_varied_alpha, 100, 195);
|
||||||
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 195);
|
screen.blit(method.clone(), &bmp_with_varied_alpha, 200, 195);
|
||||||
|
@ -2491,16 +2490,15 @@ fn get_quad(
|
||||||
let positions_2 = [top_left, bottom_right, top_right];
|
let positions_2 = [top_left, bottom_right, top_right];
|
||||||
let texcoords_1 = [Vector2::new(0.0, 0.0), Vector2::new(0.0, 1.0), Vector2::new(1.0, 1.0)];
|
let texcoords_1 = [Vector2::new(0.0, 0.0), Vector2::new(0.0, 1.0), Vector2::new(1.0, 1.0)];
|
||||||
let texcoords_2 = [Vector2::new(0.0, 0.0), Vector2::new(1.0, 1.0), Vector2::new(1.0, 0.0)];
|
let texcoords_2 = [Vector2::new(0.0, 0.0), Vector2::new(1.0, 1.0), Vector2::new(1.0, 0.0)];
|
||||||
let single_color = ARGBu8x4::from_argb([128, 255, 0, 255]);
|
let single_color = ARGB::from_argb([128, 255, 0, 255]);
|
||||||
let colors_1 = [ARGBu8x4::from_rgb([255, 0, 0]), ARGBu8x4::from_rgb([0, 255, 0]), ARGBu8x4::from_rgb([0, 0, 255])];
|
let colors_1 = [ARGB::from_rgb([255, 0, 0]), ARGB::from_rgb([0, 255, 0]), ARGB::from_rgb([0, 0, 255])];
|
||||||
let colors_2 =
|
let colors_2 = [ARGB::from_rgb([255, 0, 0]), ARGB::from_rgb([0, 0, 255]), ARGB::from_rgb([255, 255, 255])];
|
||||||
[ARGBu8x4::from_rgb([255, 0, 0]), ARGBu8x4::from_rgb([0, 0, 255]), ARGBu8x4::from_rgb([255, 255, 255])];
|
let tint_color = ARGB::from_argb([128, 192, 47, 160]);
|
||||||
let tint_color = ARGBu8x4::from_argb([128, 192, 47, 160]);
|
|
||||||
|
|
||||||
match mode {
|
match mode {
|
||||||
TriangleType::Solid => [
|
TriangleType::Solid => [
|
||||||
RgbaTriangle2d::Solid { position: positions_1, color: ARGBu8x4::from_rgb([255, 0, 255]) },
|
RgbaTriangle2d::Solid { position: positions_1, color: ARGB::from_rgb([255, 0, 255]) },
|
||||||
RgbaTriangle2d::Solid { position: positions_2, color: ARGBu8x4::from_rgb([255, 0, 255]) },
|
RgbaTriangle2d::Solid { position: positions_2, color: ARGB::from_rgb([255, 0, 255]) },
|
||||||
],
|
],
|
||||||
TriangleType::SolidBlended => [
|
TriangleType::SolidBlended => [
|
||||||
RgbaTriangle2d::SolidBlended { position: positions_1, color: single_color, blend: BlendFunction::Blend },
|
RgbaTriangle2d::SolidBlended { position: positions_1, color: single_color, blend: BlendFunction::Blend },
|
||||||
|
|
|
@ -22,7 +22,7 @@ mod system_resources_standard;
|
||||||
|
|
||||||
use ggdt::prelude::*;
|
use ggdt::prelude::*;
|
||||||
|
|
||||||
const BACKGROUND_COLOR: ARGBu8x4 = ARGBu8x4::from_rgb([0x2c, 0x30, 0x41]);
|
const BACKGROUND_COLOR: ARGB = ARGB::from_rgb([0x2c, 0x30, 0x41]);
|
||||||
|
|
||||||
fn draw_base_screen<BitmapType>(
|
fn draw_base_screen<BitmapType>(
|
||||||
dest: &mut BitmapType,
|
dest: &mut BitmapType,
|
||||||
|
|
|
@ -27,8 +27,8 @@ fn simple_main_loop(mut system: System<Standard>) {
|
||||||
|
|
||||||
draw_base_screen(
|
draw_base_screen(
|
||||||
&mut system.res.video,
|
&mut system.res.video,
|
||||||
ARGBu8x4::from_rgb([32, 32, 32]),
|
ARGB::from_rgb([32, 32, 32]),
|
||||||
ARGBu8x4::from_rgb([44, 44, 44]),
|
ARGB::from_rgb([44, 44, 44]),
|
||||||
COLOR_BRIGHT_WHITE,
|
COLOR_BRIGHT_WHITE,
|
||||||
COLOR_BRIGHT_RED,
|
COLOR_BRIGHT_RED,
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use ggdt::graphics::{ARGBu8x4, BlendFunction, RgbaBitmap, RgbaPixelFormat};
|
use ggdt::graphics::{BlendFunction, RgbaBitmap, RgbaPixelFormat, ARGB};
|
||||||
use ggdt::math::{Rect, Vector2};
|
use ggdt::math::{Rect, Vector2};
|
||||||
use imgui::internal::RawWrapper;
|
use imgui::internal::RawWrapper;
|
||||||
|
|
||||||
|
@ -67,9 +67,9 @@ impl Renderer {
|
||||||
Vector2::new(v3.uv[0], v3.uv[1]),
|
Vector2::new(v3.uv[0], v3.uv[1]),
|
||||||
],
|
],
|
||||||
&[
|
&[
|
||||||
ARGBu8x4::from_argb([v2.col[3], v2.col[0], v2.col[1], v2.col[2]]),
|
ARGB::from_argb([v2.col[3], v2.col[0], v2.col[1], v2.col[2]]),
|
||||||
ARGBu8x4::from_argb([v1.col[3], v1.col[0], v1.col[1], v1.col[2]]),
|
ARGB::from_argb([v1.col[3], v1.col[0], v1.col[1], v1.col[2]]),
|
||||||
ARGBu8x4::from_argb([v3.col[3], v3.col[0], v3.col[1], v3.col[2]]),
|
ARGB::from_argb([v3.col[3], v3.col[0], v3.col[1], v3.col[2]]),
|
||||||
],
|
],
|
||||||
bitmap,
|
bitmap,
|
||||||
BlendFunction::Blend,
|
BlendFunction::Blend,
|
||||||
|
|
Loading…
Reference in a new issue