Struct bevy::color::LinearRgba
#[repr(C)]pub struct LinearRgba {
pub red: f32,
pub green: f32,
pub blue: f32,
pub alpha: f32,
}
Expand description
Linear RGB color with alpha.
§Conversion
Conversion between the various color spaces is achieved using Rust’s native From trait. Because certain color spaces are defined by their transformation to and from another space, these From implementations reflect that set of definitions.
let color = Srgba::rgb(0.5, 0.5, 0.5);
// Using From explicitly
let linear_color = LinearRgba::from(color);
// Using Into
let linear_color: LinearRgba = color.into();
For example, the sRGB space is defined by its relationship with Linear RGB, and HWB by its with sRGB. As such, it is the responsibility of sRGB to provide From implementations for Linear RGB, and HWB for sRGB. To then provide conversion between Linear RGB and HWB directly, HWB is responsible for implementing these conversions, delegating to sRGB as an intermediatory. This ensures that all conversions take the shortest path between any two spaces, and limit the proliferation of domain specific knowledge for each color space to their respective definitions.
Fields§
§red: f32
The red channel. [0.0, 1.0]
green: f32
The green channel. [0.0, 1.0]
blue: f32
The blue channel. [0.0, 1.0]
alpha: f32
The alpha channel. [0.0, 1.0]
Implementations§
§impl LinearRgba
impl LinearRgba
pub const BLACK: LinearRgba = _
pub const BLACK: LinearRgba = _
A fully black color with full alpha.
pub const WHITE: LinearRgba = _
pub const WHITE: LinearRgba = _
A fully white color with full alpha.
pub const NONE: LinearRgba = _
pub const NONE: LinearRgba = _
A fully transparent color.
pub const RED: LinearRgba = _
pub const RED: LinearRgba = _
A fully red color with full alpha.
pub const GREEN: LinearRgba = _
pub const GREEN: LinearRgba = _
A fully green color with full alpha.
pub const BLUE: LinearRgba = _
pub const BLUE: LinearRgba = _
A fully blue color with full alpha.
pub const NAN: LinearRgba = _
pub const NAN: LinearRgba = _
An invalid color.
This type can be used to represent an invalid color value;
in some rendering applications the color will be ignored,
enabling performant hacks like hiding lines by setting their color to INVALID
.
pub const fn new(red: f32, green: f32, blue: f32, alpha: f32) -> LinearRgba
pub const fn new(red: f32, green: f32, blue: f32, alpha: f32) -> LinearRgba
Construct a new LinearRgba
color from components.
pub const fn rgb(red: f32, green: f32, blue: f32) -> LinearRgba
pub const fn rgb(red: f32, green: f32, blue: f32) -> LinearRgba
Construct a new LinearRgba
color from (r, g, b) components, with the default alpha (1.0).
§Arguments
red
- Red channel. [0.0, 1.0]green
- Green channel. [0.0, 1.0]blue
- Blue channel. [0.0, 1.0]
Examples found in repository?
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
fn system(config: Res<Config>, time: Res<Time>, mut draw: Gizmos) {
if !config.fancy {
for _ in 0..(config.line_count / SYSTEM_COUNT) {
draw.line(Vec3::NEG_Y, Vec3::Y, Color::BLACK);
}
} else {
for i in 0..(config.line_count / SYSTEM_COUNT) {
let angle = i as f32 / (config.line_count / SYSTEM_COUNT) as f32 * TAU;
let vector = Vec2::from(angle.sin_cos()).extend(time.elapsed_seconds().sin());
let start_color = LinearRgba::rgb(vector.x, vector.z, 0.5);
let end_color = LinearRgba::rgb(-vector.z, -vector.y, 0.5);
draw.line_gradient(vector, -vector, start_color, end_color);
}
}
}
More examples
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
fn setup(mut commands: Commands) {
commands.spawn(Camera2dBundle::default());
// The color spaces `Oklaba`, `Laba`, `LinearRgba`, `Srgba` and `Xyza` all are either perceptually or physically linear.
// This property allows us to define curves, e.g. bezier curves through these spaces.
// Define the control points for the curve.
// For more information, please see the cubic curve example.
let colors = [
LinearRgba::WHITE,
LinearRgba::rgb(1., 1., 0.), // Yellow
LinearRgba::RED,
LinearRgba::BLACK,
];
// Spawn a sprite using the provided colors as control points.
spawn_curve_sprite(&mut commands, 275., colors);
// Spawn another sprite using the provided colors as control points after converting them to the `Xyza` color space.
spawn_curve_sprite(&mut commands, 175., colors.map(Xyza::from));
spawn_curve_sprite(&mut commands, 75., colors.map(Oklaba::from));
// Other color spaces like `Srgba` or `Hsva` are neither perceptually nor physically linear.
// As such, we cannot use curves in these spaces.
// However, we can still mix these colours and animate that way. In fact, mixing colors works in any color space.
// Spawn a spritre using the provided colors for mixing.
spawn_mixed_sprite(&mut commands, -75., colors.map(Hsla::from));
spawn_mixed_sprite(&mut commands, -175., colors.map(Srgba::from));
spawn_mixed_sprite(&mut commands, -275., colors.map(Oklcha::from));
}
pub const fn gray(value: f32) -> LinearRgba
pub const fn gray(value: f32) -> LinearRgba
Construct a new LinearRgba
color with the same value for all channels and an alpha of 1.0.
A value of 0.0 is black, and a value of 1.0 is white.
Examples found in repository?
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
fn draw_example_collection(
mut gizmos: Gizmos,
mut my_gizmos: Gizmos<MyRoundGizmos>,
time: Res<Time>,
) {
gizmos.grid(
Vec3::ZERO,
Quat::from_rotation_x(PI / 2.),
UVec2::splat(20),
Vec2::new(2., 2.),
// Light gray
LinearRgba::gray(0.65),
);
gizmos.cuboid(
Transform::from_translation(Vec3::Y * 0.5).with_scale(Vec3::splat(1.25)),
BLACK,
);
gizmos.rect(
Vec3::new(time.elapsed_seconds().cos() * 2.5, 1., 0.),
Quat::from_rotation_y(PI / 2.),
Vec2::splat(2.),
LIME,
);
my_gizmos.sphere(Vec3::new(1., 0.5, 0.), Quat::IDENTITY, 0.5, RED);
for y in [0., 0.5, 1.] {
gizmos.ray(
Vec3::new(1., y, 0.),
Vec3::new(-3., (time.elapsed_seconds() * 3.).sin(), 0.),
BLUE,
);
}
my_gizmos
.arc_3d(
180.0_f32.to_radians(),
0.2,
Vec3::ONE,
Quat::from_rotation_arc(Vec3::Y, Vec3::ONE.normalize()),
ORANGE,
)
.segments(10);
// Circles have 32 line-segments by default.
my_gizmos.circle(Vec3::ZERO, Dir3::Y, 3., BLACK);
// You may want to increase this for larger circles or spheres.
my_gizmos
.circle(Vec3::ZERO, Dir3::Y, 3.1, NAVY)
.segments(64);
my_gizmos
.sphere(Vec3::ZERO, Quat::IDENTITY, 3.2, BLACK)
.circle_segments(64);
gizmos.arrow(Vec3::ZERO, Vec3::ONE * 1.5, YELLOW);
// You can create more complex arrows using the arrow builder.
gizmos
.arrow(Vec3::new(2., 0., 2.), Vec3::new(2., 2., 2.), ORANGE_RED)
.with_double_end()
.with_tip_length(0.5);
}
More examples
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
fn draw_example_collection(
mut gizmos: Gizmos,
mut my_gizmos: Gizmos<MyRoundGizmos>,
time: Res<Time>,
) {
let sin = time.elapsed_seconds().sin() * 50.;
gizmos.line_2d(Vec2::Y * -sin, Vec2::splat(-80.), RED);
gizmos.ray_2d(Vec2::Y * sin, Vec2::splat(80.), LIME);
gizmos
.grid_2d(
Vec2::ZERO,
0.0,
UVec2::new(16, 12),
Vec2::new(60., 60.),
// Light gray
LinearRgba::gray(0.65),
)
.outer_edges();
// Triangle
gizmos.linestrip_gradient_2d([
(Vec2::Y * 300., BLUE),
(Vec2::new(-255., -155.), RED),
(Vec2::new(255., -155.), LIME),
(Vec2::Y * 300., BLUE),
]);
gizmos.rect_2d(
Vec2::ZERO,
time.elapsed_seconds() / 3.,
Vec2::splat(300.),
BLACK,
);
// The circles have 32 line-segments by default.
my_gizmos.circle_2d(Vec2::ZERO, 120., BLACK);
my_gizmos.ellipse_2d(
Vec2::ZERO,
time.elapsed_seconds() % TAU,
Vec2::new(100., 200.),
YELLOW_GREEN,
);
// You may want to increase this for larger circles.
my_gizmos.circle_2d(Vec2::ZERO, 300., NAVY).segments(64);
// Arcs default amount of segments is linearly interpolated between
// 1 and 32, using the arc length as scalar.
my_gizmos.arc_2d(Vec2::ZERO, sin / 10., PI / 2., 350., ORANGE_RED);
gizmos.arrow_2d(
Vec2::ZERO,
Vec2::from_angle(sin / -10. + PI / 2.) * 50.,
YELLOW,
);
// You can create more complex arrows using the arrow builder.
gizmos
.arrow_2d(Vec2::ZERO, Vec2::from_angle(sin / -10.) * 50., GREEN)
.with_double_end()
.with_tip_length(10.);
}
pub const fn with_red(self, red: f32) -> LinearRgba
pub const fn with_red(self, red: f32) -> LinearRgba
Return a copy of this color with the red channel set to the given value.
pub const fn with_green(self, green: f32) -> LinearRgba
pub const fn with_green(self, green: f32) -> LinearRgba
Return a copy of this color with the green channel set to the given value.
pub const fn with_blue(self, blue: f32) -> LinearRgba
pub const fn with_blue(self, blue: f32) -> LinearRgba
Return a copy of this color with the blue channel set to the given value.
pub fn to_f32_array(&self) -> [f32; 4]
pub fn to_f32_array(&self) -> [f32; 4]
Converts the color into a [f32; 4] array in RGBA order.
This is useful for passing the color to a shader.
Examples found in repository?
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
fn update(time: Res<Time>, mut ui_materials: ResMut<Assets<CustomUiMaterial>>) {
for (_, material) in ui_materials.iter_mut() {
// rainbow color effect
let new_color = Color::hsl((time.elapsed_seconds() * 60.0) % 360.0, 1., 0.5);
material.color = LinearRgba::from(new_color).to_f32_array().into();
}
}
fn setup(mut commands: Commands, mut ui_materials: ResMut<Assets<CustomUiMaterial>>) {
// Camera so we can see UI
commands.spawn(Camera2dBundle::default());
commands
.spawn(NodeBundle {
style: Style {
width: Val::Percent(100.0),
height: Val::Percent(100.0),
align_items: AlignItems::Center,
justify_content: JustifyContent::Center,
..default()
},
..default()
})
.with_children(|parent| {
parent.spawn(MaterialNodeBundle {
style: Style {
position_type: PositionType::Absolute,
width: Val::Px(250.0),
height: Val::Px(250.0),
..default()
},
material: ui_materials.add(CustomUiMaterial {
color: LinearRgba::WHITE.to_f32_array().into(),
}),
..default()
});
});
}
More examples
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
fn setup(mut commands: Commands, mut meshes: ResMut<Assets<Mesh>>) {
commands.spawn((
meshes.add(Cuboid::new(0.5, 0.5, 0.5)),
SpatialBundle::INHERITED_IDENTITY,
InstanceMaterialData(
(1..=10)
.flat_map(|x| (1..=10).map(move |y| (x as f32 / 10.0, y as f32 / 10.0)))
.map(|(x, y)| InstanceData {
position: Vec3::new(x * 10.0 - 5.0, y * 10.0 - 5.0, 0.0),
scale: 1.0,
color: LinearRgba::from(Color::hsla(x * 360., y, 0.5, 1.0)).to_f32_array(),
})
.collect(),
),
// NOTE: Frustum culling is done based on the Aabb of the Mesh and the GlobalTransform.
// As the cube is at the origin, if its Aabb moves outside the view frustum, all the
// instanced cubes will be culled.
// The InstanceMaterialData contains the 'GlobalTransform' information for this custom
// instancing, and that is not taken into account with the built-in frustum culling.
// We must disable the built-in frustum culling by adding the `NoFrustumCulling` marker
// component to avoid incorrect culling.
NoFrustumCulling,
));
// camera
commands.spawn(Camera3dBundle {
transform: Transform::from_xyz(0.0, 0.0, 15.0).looking_at(Vec3::ZERO, Vec3::Y),
..default()
});
}
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
fn setup(
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<ColorMaterial>>,
asset_server: Res<AssetServer>,
) {
// Load the Bevy logo as a texture
let texture_handle = asset_server.load("branding/banner.png");
// Build a default quad mesh
let mut mesh = Mesh::from(Rectangle::default());
// Build vertex colors for the quad. One entry per vertex (the corners of the quad)
let vertex_colors: Vec<[f32; 4]> = vec![
LinearRgba::RED.to_f32_array(),
LinearRgba::GREEN.to_f32_array(),
LinearRgba::BLUE.to_f32_array(),
LinearRgba::WHITE.to_f32_array(),
];
// Insert the vertex colors as an attribute
mesh.insert_attribute(Mesh::ATTRIBUTE_COLOR, vertex_colors);
let mesh_handle: Mesh2dHandle = meshes.add(mesh).into();
// Spawn camera
commands.spawn(Camera2dBundle::default());
// Spawn the quad with vertex colors
commands.spawn(MaterialMesh2dBundle {
mesh: mesh_handle.clone(),
transform: Transform::from_translation(Vec3::new(-96., 0., 0.))
.with_scale(Vec3::splat(128.)),
material: materials.add(ColorMaterial::default()),
..default()
});
// Spawning the quad with vertex colors and a texture results in tinting
commands.spawn(MaterialMesh2dBundle {
mesh: mesh_handle,
transform: Transform::from_translation(Vec3::new(96., 0., 0.))
.with_scale(Vec3::splat(128.)),
material: materials.add(texture_handle),
..default()
});
}
pub fn as_u32(&self) -> u32
pub fn as_u32(&self) -> u32
Converts this color to a u32.
Maps the RGBA channels in RGBA order to a little-endian byte array (GPUs are little-endian).
A
will be the most significant byte and R
the least significant.
Examples found in repository?
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
fn star(
mut commands: Commands,
// We will add a new Mesh for the star being created
mut meshes: ResMut<Assets<Mesh>>,
) {
// Let's define the mesh for the object we want to draw: a nice star.
// We will specify here what kind of topology is used to define the mesh,
// that is, how triangles are built from the vertices. We will use a
// triangle list, meaning that each vertex of the triangle has to be
// specified. We set `RenderAssetUsages::RENDER_WORLD`, meaning this mesh
// will not be accessible in future frames from the `meshes` resource, in
// order to save on memory once it has been uploaded to the GPU.
let mut star = Mesh::new(
PrimitiveTopology::TriangleList,
RenderAssetUsages::RENDER_WORLD,
);
// Vertices need to have a position attribute. We will use the following
// vertices (I hope you can spot the star in the schema).
//
// 1
//
// 10 2
// 9 0 3
// 8 4
// 6
// 7 5
//
// These vertices are specified in 3D space.
let mut v_pos = vec![[0.0, 0.0, 0.0]];
for i in 0..10 {
// The angle between each vertex is 1/10 of a full rotation.
let a = i as f32 * PI / 5.0;
// The radius of inner vertices (even indices) is 100. For outer vertices (odd indices) it's 200.
let r = (1 - i % 2) as f32 * 100.0 + 100.0;
// Add the vertex position.
v_pos.push([r * a.sin(), r * a.cos(), 0.0]);
}
// Set the position attribute
star.insert_attribute(Mesh::ATTRIBUTE_POSITION, v_pos);
// And a RGB color attribute as well
let mut v_color: Vec<u32> = vec![LinearRgba::BLACK.as_u32()];
v_color.extend_from_slice(&[LinearRgba::from(YELLOW).as_u32(); 10]);
star.insert_attribute(
MeshVertexAttribute::new("Vertex_Color", 1, VertexFormat::Uint32),
v_color,
);
// Now, we specify the indices of the vertex that are going to compose the
// triangles in our star. Vertices in triangles have to be specified in CCW
// winding (that will be the front face, colored). Since we are using
// triangle list, we will specify each triangle as 3 vertices
// First triangle: 0, 2, 1
// Second triangle: 0, 3, 2
// Third triangle: 0, 4, 3
// etc
// Last triangle: 0, 1, 10
let mut indices = vec![0, 1, 10];
for i in 2..=10 {
indices.extend_from_slice(&[0, i, i - 1]);
}
star.insert_indices(Indices::U32(indices));
// We can now spawn the entities for the star and the camera
commands.spawn((
// We use a marker component to identify the custom colored meshes
ColoredMesh2d,
// The `Handle<Mesh>` needs to be wrapped in a `Mesh2dHandle` to use 2d rendering instead of 3d
Mesh2dHandle(meshes.add(star)),
// This bundle's components are needed for something to be rendered
SpatialBundle::INHERITED_IDENTITY,
));
// Spawn the camera
commands.spawn(Camera2dBundle::default());
}
Trait Implementations§
§impl Add for LinearRgba
impl Add for LinearRgba
§type Output = LinearRgba
type Output = LinearRgba
+
operator.§fn add(self, rhs: LinearRgba) -> <LinearRgba as Add>::Output
fn add(self, rhs: LinearRgba) -> <LinearRgba as Add>::Output
+
operation. Read more§impl AddAssign for LinearRgba
impl AddAssign for LinearRgba
§fn add_assign(&mut self, rhs: LinearRgba)
fn add_assign(&mut self, rhs: LinearRgba)
+=
operation. Read more§impl Alpha for LinearRgba
impl Alpha for LinearRgba
§fn with_alpha(&self, alpha: f32) -> LinearRgba
fn with_alpha(&self, alpha: f32) -> LinearRgba
§fn is_fully_transparent(&self) -> bool
fn is_fully_transparent(&self) -> bool
§fn is_fully_opaque(&self) -> bool
fn is_fully_opaque(&self) -> bool
§impl Animatable for LinearRgba
impl Animatable for LinearRgba
§fn interpolate(a: &LinearRgba, b: &LinearRgba, t: f32) -> LinearRgba
fn interpolate(a: &LinearRgba, b: &LinearRgba, t: f32) -> LinearRgba
§fn blend(inputs: impl Iterator<Item = BlendInput<LinearRgba>>) -> LinearRgba
fn blend(inputs: impl Iterator<Item = BlendInput<LinearRgba>>) -> LinearRgba
§fn post_process(&mut self, _world: &World)
fn post_process(&mut self, _world: &World)
World
.
Most animatable types do not need to implement this.§impl ClampColor for LinearRgba
impl ClampColor for LinearRgba
§fn clamped(&self) -> LinearRgba
fn clamped(&self) -> LinearRgba
§fn is_within_bounds(&self) -> bool
fn is_within_bounds(&self) -> bool
§impl Clone for LinearRgba
impl Clone for LinearRgba
§fn clone(&self) -> LinearRgba
fn clone(&self) -> LinearRgba
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl CreateFrom for LinearRgba
impl CreateFrom for LinearRgba
fn create_from<B>(reader: &mut Reader<B>) -> LinearRgbawhere
B: BufferRef,
§impl Debug for LinearRgba
impl Debug for LinearRgba
§impl Default for LinearRgba
impl Default for LinearRgba
§fn default() -> LinearRgba
fn default() -> LinearRgba
Construct a new LinearRgba
color with the default values (white with full alpha).
§impl<'de> Deserialize<'de> for LinearRgba
impl<'de> Deserialize<'de> for LinearRgba
§fn deserialize<__D>(
__deserializer: __D
) -> Result<LinearRgba, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D
) -> Result<LinearRgba, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
§impl Div<f32> for LinearRgba
impl Div<f32> for LinearRgba
§impl DivAssign<f32> for LinearRgba
impl DivAssign<f32> for LinearRgba
§fn div_assign(&mut self, rhs: f32)
fn div_assign(&mut self, rhs: f32)
/=
operation. Read more§impl EuclideanDistance for LinearRgba
impl EuclideanDistance for LinearRgba
§fn distance_squared(&self, other: &LinearRgba) -> f32
fn distance_squared(&self, other: &LinearRgba) -> f32
self
to other
.§impl From<Color> for LinearRgba
impl From<Color> for LinearRgba
§fn from(value: Color) -> LinearRgba
fn from(value: Color) -> LinearRgba
§impl From<Hsla> for LinearRgba
impl From<Hsla> for LinearRgba
§fn from(value: Hsla) -> LinearRgba
fn from(value: Hsla) -> LinearRgba
§impl From<Hsva> for LinearRgba
impl From<Hsva> for LinearRgba
§fn from(value: Hsva) -> LinearRgba
fn from(value: Hsva) -> LinearRgba
§impl From<Hwba> for LinearRgba
impl From<Hwba> for LinearRgba
§fn from(value: Hwba) -> LinearRgba
fn from(value: Hwba) -> LinearRgba
§impl From<Laba> for LinearRgba
impl From<Laba> for LinearRgba
§fn from(value: Laba) -> LinearRgba
fn from(value: Laba) -> LinearRgba
§impl From<Lcha> for LinearRgba
impl From<Lcha> for LinearRgba
§fn from(value: Lcha) -> LinearRgba
fn from(value: Lcha) -> LinearRgba
§impl From<LinearRgba> for [f32; 4]
impl From<LinearRgba> for [f32; 4]
§fn from(color: LinearRgba) -> [f32; 4]
fn from(color: LinearRgba) -> [f32; 4]
§impl From<LinearRgba> for Color
Available on crate feature wgpu-types
only.
impl From<LinearRgba> for Color
wgpu-types
only.§fn from(color: LinearRgba) -> Color
fn from(color: LinearRgba) -> Color
§impl From<LinearRgba> for Color
impl From<LinearRgba> for Color
§fn from(value: LinearRgba) -> Color
fn from(value: LinearRgba) -> Color
§impl From<LinearRgba> for Hsla
impl From<LinearRgba> for Hsla
§fn from(value: LinearRgba) -> Hsla
fn from(value: LinearRgba) -> Hsla
§impl From<LinearRgba> for Hsva
impl From<LinearRgba> for Hsva
§fn from(value: LinearRgba) -> Hsva
fn from(value: LinearRgba) -> Hsva
§impl From<LinearRgba> for Hwba
impl From<LinearRgba> for Hwba
§fn from(value: LinearRgba) -> Hwba
fn from(value: LinearRgba) -> Hwba
§impl From<LinearRgba> for Laba
impl From<LinearRgba> for Laba
§fn from(value: LinearRgba) -> Laba
fn from(value: LinearRgba) -> Laba
§impl From<LinearRgba> for Lcha
impl From<LinearRgba> for Lcha
§fn from(value: LinearRgba) -> Lcha
fn from(value: LinearRgba) -> Lcha
§impl From<LinearRgba> for Oklaba
impl From<LinearRgba> for Oklaba
§fn from(value: LinearRgba) -> Oklaba
fn from(value: LinearRgba) -> Oklaba
§impl From<LinearRgba> for Oklcha
impl From<LinearRgba> for Oklcha
§fn from(value: LinearRgba) -> Oklcha
fn from(value: LinearRgba) -> Oklcha
§impl From<LinearRgba> for Srgba
impl From<LinearRgba> for Srgba
§fn from(value: LinearRgba) -> Srgba
fn from(value: LinearRgba) -> Srgba
§impl From<LinearRgba> for Vec4
impl From<LinearRgba> for Vec4
§fn from(color: LinearRgba) -> Vec4
fn from(color: LinearRgba) -> Vec4
§impl From<LinearRgba> for Xyza
impl From<LinearRgba> for Xyza
§fn from(_: LinearRgba) -> Xyza
fn from(_: LinearRgba) -> Xyza
§impl From<Oklaba> for LinearRgba
impl From<Oklaba> for LinearRgba
§fn from(value: Oklaba) -> LinearRgba
fn from(value: Oklaba) -> LinearRgba
§impl From<Oklcha> for LinearRgba
impl From<Oklcha> for LinearRgba
§fn from(value: Oklcha) -> LinearRgba
fn from(value: Oklcha) -> LinearRgba
§impl From<Srgba> for LinearRgba
impl From<Srgba> for LinearRgba
§fn from(value: Srgba) -> LinearRgba
fn from(value: Srgba) -> LinearRgba
§impl From<Xyza> for LinearRgba
impl From<Xyza> for LinearRgba
§fn from(_: Xyza) -> LinearRgba
fn from(_: Xyza) -> LinearRgba
§impl FromReflect for LinearRgba
impl FromReflect for LinearRgba
§fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<LinearRgba>
fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<LinearRgba>
Self
from a reflected value.§fn take_from_reflect(
reflect: Box<dyn Reflect>
) -> Result<Self, Box<dyn Reflect>>
fn take_from_reflect( reflect: Box<dyn Reflect> ) -> Result<Self, Box<dyn Reflect>>
Self
using,
constructing the value using from_reflect
if that fails. Read more§impl GetTypeRegistration for LinearRgba
impl GetTypeRegistration for LinearRgba
§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
TypeRegistration
for this type.§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
§impl Luminance for LinearRgba
impl Luminance for LinearRgba
§fn luminance(&self) -> f32
fn luminance(&self) -> f32
Luminance calculated using the CIE XYZ formula.
§fn with_luminance(&self, luminance: f32) -> LinearRgba
fn with_luminance(&self, luminance: f32) -> LinearRgba
§fn darker(&self, amount: f32) -> LinearRgba
fn darker(&self, amount: f32) -> LinearRgba
amount
should be between 0.0 and 1.0.
The amount represents an absolute decrease in luminance, and is distributive:
color.darker(a).darker(b) == color.darker(a + b)
. Colors are clamped to black
if the amount would cause them to go below black. Read more§fn lighter(&self, amount: f32) -> LinearRgba
fn lighter(&self, amount: f32) -> LinearRgba
amount
should be between 0.0 and 1.0.
The amount represents an absolute increase in luminance, and is distributive:
color.lighter(a).lighter(b) == color.lighter(a + b)
. Colors are clamped to white
if the amount would cause them to go above white. Read more§impl Mix for LinearRgba
impl Mix for LinearRgba
§fn mix(&self, other: &LinearRgba, factor: f32) -> LinearRgba
fn mix(&self, other: &LinearRgba, factor: f32) -> LinearRgba
§fn mix_assign(&mut self, other: Self, factor: f32)
fn mix_assign(&mut self, other: Self, factor: f32)
§impl Mul<LinearRgba> for f32
impl Mul<LinearRgba> for f32
§type Output = LinearRgba
type Output = LinearRgba
*
operator.§fn mul(self, rhs: LinearRgba) -> <f32 as Mul<LinearRgba>>::Output
fn mul(self, rhs: LinearRgba) -> <f32 as Mul<LinearRgba>>::Output
*
operation. Read more§impl Mul<f32> for LinearRgba
impl Mul<f32> for LinearRgba
§impl MulAssign<f32> for LinearRgba
impl MulAssign<f32> for LinearRgba
§fn mul_assign(&mut self, rhs: f32)
fn mul_assign(&mut self, rhs: f32)
*=
operation. Read more§impl Neg for LinearRgba
impl Neg for LinearRgba
§type Output = LinearRgba
type Output = LinearRgba
-
operator.§impl PartialEq for LinearRgba
impl PartialEq for LinearRgba
§fn eq(&self, other: &LinearRgba) -> bool
fn eq(&self, other: &LinearRgba) -> bool
self
and other
values to be equal, and is used
by ==
.§impl Reflect for LinearRgba
impl Reflect for LinearRgba
§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
§fn into_any(self: Box<LinearRgba>) -> Box<dyn Any>
fn into_any(self: Box<LinearRgba>) -> Box<dyn Any>
Box<dyn Any>
.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut dyn Any
.§fn into_reflect(self: Box<LinearRgba>) -> Box<dyn Reflect>
fn into_reflect(self: Box<LinearRgba>) -> Box<dyn Reflect>
§fn as_reflect(&self) -> &(dyn Reflect + 'static)
fn as_reflect(&self) -> &(dyn Reflect + 'static)
§fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
§fn clone_value(&self) -> Box<dyn Reflect>
fn clone_value(&self) -> Box<dyn Reflect>
Reflect
trait object. Read more§fn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>
fn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>
§fn apply(&mut self, value: &(dyn Reflect + 'static))
fn apply(&mut self, value: &(dyn Reflect + 'static))
§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
§fn reflect_owned(self: Box<LinearRgba>) -> ReflectOwned
fn reflect_owned(self: Box<LinearRgba>) -> ReflectOwned
§fn reflect_partial_eq(&self, value: &(dyn Reflect + 'static)) -> Option<bool>
fn reflect_partial_eq(&self, value: &(dyn Reflect + 'static)) -> Option<bool>
§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
§fn serializable(&self) -> Option<Serializable<'_>>
fn serializable(&self) -> Option<Serializable<'_>>
§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
§impl Serialize for LinearRgba
impl Serialize for LinearRgba
§fn serialize<__S>(
&self,
__serializer: __S
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
§impl ShaderSize for LinearRgba
impl ShaderSize for LinearRgba
§const SHADER_SIZE: NonZero<u64> = _
const SHADER_SIZE: NonZero<u64> = _
ShaderType::min_size
)§impl ShaderType for LinearRgba
impl ShaderType for LinearRgba
§fn assert_uniform_compat()
fn assert_uniform_compat()
Self
meets the requirements of the
uniform address space restrictions on stored values and the
uniform address space layout constraints Read more§impl Struct for LinearRgba
impl Struct for LinearRgba
§fn field(&self, name: &str) -> Option<&(dyn Reflect + 'static)>
fn field(&self, name: &str) -> Option<&(dyn Reflect + 'static)>
name
as a &dyn Reflect
.§fn field_mut(&mut self, name: &str) -> Option<&mut (dyn Reflect + 'static)>
fn field_mut(&mut self, name: &str) -> Option<&mut (dyn Reflect + 'static)>
name
as a
&mut dyn Reflect
.§fn field_at(&self, index: usize) -> Option<&(dyn Reflect + 'static)>
fn field_at(&self, index: usize) -> Option<&(dyn Reflect + 'static)>
index
as a
&dyn Reflect
.§fn field_at_mut(&mut self, index: usize) -> Option<&mut (dyn Reflect + 'static)>
fn field_at_mut(&mut self, index: usize) -> Option<&mut (dyn Reflect + 'static)>
index
as a &mut dyn Reflect
.§fn iter_fields(&self) -> FieldIter<'_> ⓘ
fn iter_fields(&self) -> FieldIter<'_> ⓘ
§fn clone_dynamic(&self) -> DynamicStruct
fn clone_dynamic(&self) -> DynamicStruct
DynamicStruct
.§impl Sub for LinearRgba
impl Sub for LinearRgba
§type Output = LinearRgba
type Output = LinearRgba
-
operator.§fn sub(self, rhs: LinearRgba) -> <LinearRgba as Sub>::Output
fn sub(self, rhs: LinearRgba) -> <LinearRgba as Sub>::Output
-
operation. Read more§impl SubAssign for LinearRgba
impl SubAssign for LinearRgba
§fn sub_assign(&mut self, rhs: LinearRgba)
fn sub_assign(&mut self, rhs: LinearRgba)
-=
operation. Read more§impl TypePath for LinearRgba
impl TypePath for LinearRgba
§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
§impl Typed for LinearRgba
impl Typed for LinearRgba
§impl VectorSpace for LinearRgba
impl VectorSpace for LinearRgba
§const ZERO: LinearRgba = _
const ZERO: LinearRgba = _
§impl WriteInto for LinearRgba
impl WriteInto for LinearRgba
fn write_into<B>(&self, writer: &mut Writer<B>)where
B: BufferMut,
impl Copy for LinearRgba
impl Pod for LinearRgba
impl StructuralPartialEq for LinearRgba
Auto Trait Implementations§
impl Freeze for LinearRgba
impl RefUnwindSafe for LinearRgba
impl Send for LinearRgba
impl Sync for LinearRgba
impl Unpin for LinearRgba
impl UnwindSafe for LinearRgba
Blanket Implementations§
§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CheckedBitPattern for Twhere
T: AnyBitPattern,
impl<T> CheckedBitPattern for Twhere
T: AnyBitPattern,
§type Bits = T
type Bits = T
Self
must have the same layout as the specified Bits
except for
the possible invalid bit patterns being checked during
is_valid_bit_pattern
.§fn is_valid_bit_pattern(_bits: &T) -> bool
fn is_valid_bit_pattern(_bits: &T) -> bool
bits
as &Self
.§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path
.§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident
.§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name
.§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Self
using data from the given World
.§impl<T> GetPath for T
impl<T> GetPath for T
§fn reflect_path<'p>(
&self,
path: impl ReflectPath<'p>
) -> Result<&(dyn Reflect + 'static), ReflectPathError<'p>>
fn reflect_path<'p>( &self, path: impl ReflectPath<'p> ) -> Result<&(dyn Reflect + 'static), ReflectPathError<'p>>
path
. Read more§fn reflect_path_mut<'p>(
&mut self,
path: impl ReflectPath<'p>
) -> Result<&mut (dyn Reflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'p>( &mut self, path: impl ReflectPath<'p> ) -> Result<&mut (dyn Reflect + 'static), ReflectPathError<'p>>
path
. Read more§fn path<'p, T>(
&self,
path: impl ReflectPath<'p>
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
fn path<'p, T>(
&self,
path: impl ReflectPath<'p>
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
path
. Read more§fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
path
. Read more§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
§impl<T> NoneValue for Twhere
T: Default,
impl<T> NoneValue for Twhere
T: Default,
type NoneType = T
§fn null_value() -> T
fn null_value() -> T
§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian()
.