pub enum MaterialProperty {
Show 20 variants
Float(f32),
FloatArray(Vec<f32>),
Int(i32),
IntArray(Vec<i32>),
UInt(u32),
UIntArray(Vec<u32>),
Vector2(Vector2<f32>),
Vector2Array(Vec<Vector2<f32>>),
Vector3(Vector3<f32>),
Vector3Array(Vec<Vector3<f32>>),
Vector4(Vector4<f32>),
Vector4Array(Vec<Vector4<f32>>),
Matrix2(Matrix2<f32>),
Matrix2Array(Vec<Matrix2<f32>>),
Matrix3(Matrix3<f32>),
Matrix3Array(Vec<Matrix3<f32>>),
Matrix4(Matrix4<f32>),
Matrix4Array(Vec<Matrix4<f32>>),
Bool(bool),
Color(Color),
}
Expand description
A set of possible material property types.
Variants§
Float(f32)
Real number.
FloatArray(Vec<f32>)
Real number array.
Int(i32)
Integer number.
IntArray(Vec<i32>)
Integer number array.
UInt(u32)
Natural number.
UIntArray(Vec<u32>)
Natural number array.
Vector2(Vector2<f32>)
Two-dimensional vector.
Vector2Array(Vec<Vector2<f32>>)
Two-dimensional vector array.
Vector3(Vector3<f32>)
Three-dimensional vector.
Vector3Array(Vec<Vector3<f32>>)
Three-dimensional vector array.
Vector4(Vector4<f32>)
Four-dimensional vector.
Vector4Array(Vec<Vector4<f32>>)
Four-dimensional vector array.
Matrix2(Matrix2<f32>)
2x2 Matrix.
Matrix2Array(Vec<Matrix2<f32>>)
2x2 Matrix array.
Matrix3(Matrix3<f32>)
3x3 Matrix.
Matrix3Array(Vec<Matrix3<f32>>)
3x3 Matrix array.
Matrix4(Matrix4<f32>)
4x4 Matrix.
Matrix4Array(Vec<Matrix4<f32>>)
4x4 Matrix array.
Bool(bool)
Boolean value.
Color(Color)
An sRGB color.
§Conversion
The colors you see on your monitor are in sRGB color space, this is fine for simple cases
of rendering, but not for complex things like lighting. Such things require color to be
linear. Value of this variant will be automatically converted to linear color space
before it passed to shader. If you want to pass sRGB color (“as is”), then use
MaterialProperty::Vector4
.
Implementations§
Source§impl MaterialProperty
impl MaterialProperty
pub const FLOAT_F_0: &'static str = "Float@0"
pub const FLOAT_ARRAY_F_0: &'static str = "FloatArray@0"
pub const INT_F_0: &'static str = "Int@0"
pub const INT_ARRAY_F_0: &'static str = "IntArray@0"
pub const U_INT_F_0: &'static str = "UInt@0"
pub const U_INT_ARRAY_F_0: &'static str = "UIntArray@0"
pub const VECTOR_2_F_0: &'static str = "Vector2@0"
pub const VECTOR_2_ARRAY_F_0: &'static str = "Vector2Array@0"
pub const VECTOR_3_F_0: &'static str = "Vector3@0"
pub const VECTOR_3_ARRAY_F_0: &'static str = "Vector3Array@0"
pub const VECTOR_4_F_0: &'static str = "Vector4@0"
pub const VECTOR_4_ARRAY_F_0: &'static str = "Vector4Array@0"
pub const MATRIX_2_F_0: &'static str = "Matrix2@0"
pub const MATRIX_2_ARRAY_F_0: &'static str = "Matrix2Array@0"
pub const MATRIX_3_F_0: &'static str = "Matrix3@0"
pub const MATRIX_3_ARRAY_F_0: &'static str = "Matrix3Array@0"
pub const MATRIX_4_F_0: &'static str = "Matrix4@0"
pub const MATRIX_4_ARRAY_F_0: &'static str = "Matrix4Array@0"
pub const BOOL_F_0: &'static str = "Bool@0"
pub const COLOR_F_0: &'static str = "Color@0"
Source§impl MaterialProperty
impl MaterialProperty
Sourcepub fn as_float_array(&self) -> Option<&[f32]>
pub fn as_float_array(&self) -> Option<&[f32]>
Tries to unwrap property value as float array.
Sourcepub fn as_int_array(&self) -> Option<&[i32]>
pub fn as_int_array(&self) -> Option<&[i32]>
Tries to unwrap property value as integer array.
Sourcepub fn as_uint_array(&self) -> Option<&[u32]>
pub fn as_uint_array(&self) -> Option<&[u32]>
Tries to unwrap property value as unsigned integer array.
Sourcepub fn as_vector2(&self) -> Option<Vector2<f32>>
pub fn as_vector2(&self) -> Option<Vector2<f32>>
Tries to unwrap property value as two-dimensional vector.
Sourcepub fn as_vector2_array(&self) -> Option<&[Vector2<f32>]>
pub fn as_vector2_array(&self) -> Option<&[Vector2<f32>]>
Tries to unwrap property value as two-dimensional vector array.
Sourcepub fn as_vector3(&self) -> Option<Vector3<f32>>
pub fn as_vector3(&self) -> Option<Vector3<f32>>
Tries to unwrap property value as three-dimensional vector.
Sourcepub fn as_vector3_array(&self) -> Option<&[Vector3<f32>]>
pub fn as_vector3_array(&self) -> Option<&[Vector3<f32>]>
Tries to unwrap property value as three-dimensional vector array.
Sourcepub fn as_vector4(&self) -> Option<Vector4<f32>>
pub fn as_vector4(&self) -> Option<Vector4<f32>>
Tries to unwrap property value as four-dimensional vector.
Sourcepub fn as_vector4_array(&self) -> Option<&[Vector4<f32>]>
pub fn as_vector4_array(&self) -> Option<&[Vector4<f32>]>
Tries to unwrap property value as four-dimensional vector array.
Sourcepub fn as_matrix2(&self) -> Option<Matrix2<f32>>
pub fn as_matrix2(&self) -> Option<Matrix2<f32>>
Tries to unwrap property value as 2x2 matrix.
Sourcepub fn as_matrix2_array(&self) -> Option<&[Matrix2<f32>]>
pub fn as_matrix2_array(&self) -> Option<&[Matrix2<f32>]>
Tries to unwrap property value as 2x2 matrix array.
Sourcepub fn as_matrix3(&self) -> Option<Matrix3<f32>>
pub fn as_matrix3(&self) -> Option<Matrix3<f32>>
Tries to unwrap property value as 3x3 matrix.
Sourcepub fn as_matrix3_array(&self) -> Option<&[Matrix3<f32>]>
pub fn as_matrix3_array(&self) -> Option<&[Matrix3<f32>]>
Tries to unwrap property value as 3x3 matrix array.
Sourcepub fn as_matrix4(&self) -> Option<Matrix4<f32>>
pub fn as_matrix4(&self) -> Option<Matrix4<f32>>
Tries to unwrap property value as 4x4 matrix.
Sourcepub fn as_matrix4_array(&self) -> Option<&[Matrix4<f32>]>
pub fn as_matrix4_array(&self) -> Option<&[Matrix4<f32>]>
Tries to unwrap property value as 4x4 matrix array.
Trait Implementations§
Source§impl AsRef<str> for MaterialProperty
impl AsRef<str> for MaterialProperty
Source§impl Clone for MaterialProperty
impl Clone for MaterialProperty
Source§fn clone(&self) -> MaterialProperty
fn clone(&self) -> MaterialProperty
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for MaterialProperty
impl Debug for MaterialProperty
Source§impl Default for MaterialProperty
impl Default for MaterialProperty
Source§impl From<Color> for MaterialProperty
impl From<Color> for MaterialProperty
Source§impl From<Matrix<f32, Const<2>, Const<1>, ArrayStorage<f32, 2, 1>>> for MaterialProperty
impl From<Matrix<f32, Const<2>, Const<1>, ArrayStorage<f32, 2, 1>>> for MaterialProperty
Source§impl From<Matrix<f32, Const<2>, Const<2>, ArrayStorage<f32, 2, 2>>> for MaterialProperty
impl From<Matrix<f32, Const<2>, Const<2>, ArrayStorage<f32, 2, 2>>> for MaterialProperty
Source§impl From<Matrix<f32, Const<3>, Const<1>, ArrayStorage<f32, 3, 1>>> for MaterialProperty
impl From<Matrix<f32, Const<3>, Const<1>, ArrayStorage<f32, 3, 1>>> for MaterialProperty
Source§impl From<Matrix<f32, Const<3>, Const<3>, ArrayStorage<f32, 3, 3>>> for MaterialProperty
impl From<Matrix<f32, Const<3>, Const<3>, ArrayStorage<f32, 3, 3>>> for MaterialProperty
Source§impl From<Matrix<f32, Const<4>, Const<1>, ArrayStorage<f32, 4, 1>>> for MaterialProperty
impl From<Matrix<f32, Const<4>, Const<1>, ArrayStorage<f32, 4, 1>>> for MaterialProperty
Source§impl From<Matrix<f32, Const<4>, Const<4>, ArrayStorage<f32, 4, 4>>> for MaterialProperty
impl From<Matrix<f32, Const<4>, Const<4>, ArrayStorage<f32, 4, 4>>> for MaterialProperty
Source§impl From<Vec<Matrix<f32, Const<2>, Const<1>, ArrayStorage<f32, 2, 1>>>> for MaterialProperty
impl From<Vec<Matrix<f32, Const<2>, Const<1>, ArrayStorage<f32, 2, 1>>>> for MaterialProperty
Source§impl From<Vec<Matrix<f32, Const<2>, Const<2>, ArrayStorage<f32, 2, 2>>>> for MaterialProperty
impl From<Vec<Matrix<f32, Const<2>, Const<2>, ArrayStorage<f32, 2, 2>>>> for MaterialProperty
Source§impl From<Vec<Matrix<f32, Const<3>, Const<1>, ArrayStorage<f32, 3, 1>>>> for MaterialProperty
impl From<Vec<Matrix<f32, Const<3>, Const<1>, ArrayStorage<f32, 3, 1>>>> for MaterialProperty
Source§impl From<Vec<Matrix<f32, Const<3>, Const<3>, ArrayStorage<f32, 3, 3>>>> for MaterialProperty
impl From<Vec<Matrix<f32, Const<3>, Const<3>, ArrayStorage<f32, 3, 3>>>> for MaterialProperty
Source§impl From<Vec<Matrix<f32, Const<4>, Const<1>, ArrayStorage<f32, 4, 1>>>> for MaterialProperty
impl From<Vec<Matrix<f32, Const<4>, Const<1>, ArrayStorage<f32, 4, 1>>>> for MaterialProperty
Source§impl From<Vec<Matrix<f32, Const<4>, Const<4>, ArrayStorage<f32, 4, 4>>>> for MaterialProperty
impl From<Vec<Matrix<f32, Const<4>, Const<4>, ArrayStorage<f32, 4, 4>>>> for MaterialProperty
Source§impl From<bool> for MaterialProperty
impl From<bool> for MaterialProperty
Source§impl From<f32> for MaterialProperty
impl From<f32> for MaterialProperty
Source§impl From<i32> for MaterialProperty
impl From<i32> for MaterialProperty
Source§impl From<u32> for MaterialProperty
impl From<u32> for MaterialProperty
Source§impl FromStr for MaterialProperty
impl FromStr for MaterialProperty
Source§impl Reflect for MaterialPropertywhere
Self: 'static,
f32: Reflect,
Vec<f32>: Reflect,
i32: Reflect,
Vec<i32>: Reflect,
u32: Reflect,
Vec<u32>: Reflect,
Vector2<f32>: Reflect,
Vec<Vector2<f32>>: Reflect,
Vector3<f32>: Reflect,
Vec<Vector3<f32>>: Reflect,
Vector4<f32>: Reflect,
Vec<Vector4<f32>>: Reflect,
Matrix2<f32>: Reflect,
Vec<Matrix2<f32>>: Reflect,
Matrix3<f32>: Reflect,
Vec<Matrix3<f32>>: Reflect,
Matrix4<f32>: Reflect,
Vec<Matrix4<f32>>: Reflect,
bool: Reflect,
Color: Reflect,
impl Reflect for MaterialPropertywhere
Self: 'static,
f32: Reflect,
Vec<f32>: Reflect,
i32: Reflect,
Vec<i32>: Reflect,
u32: Reflect,
Vec<u32>: Reflect,
Vector2<f32>: Reflect,
Vec<Vector2<f32>>: Reflect,
Vector3<f32>: Reflect,
Vec<Vector3<f32>>: Reflect,
Vector4<f32>: Reflect,
Vec<Vector4<f32>>: Reflect,
Matrix2<f32>: Reflect,
Vec<Matrix2<f32>>: Reflect,
Matrix3<f32>: Reflect,
Vec<Matrix3<f32>>: Reflect,
Matrix4<f32>: Reflect,
Vec<Matrix4<f32>>: Reflect,
bool: Reflect,
Color: Reflect,
fn source_path() -> &'static str
fn type_name(&self) -> &'static str
fn doc(&self) -> &'static str
Source§fn assembly_name(&self) -> &'static str
fn assembly_name(&self) -> &'static str
#[derive(Reflect)]
) to ensure that this method will return correct assembly
name. In other words - there’s no guarantee, that any implementation other than proc-macro
will return a correct name of the assembly. Alternatively, you can use env!("CARGO_PKG_NAME")
as an implementation.Source§fn type_assembly_name() -> &'static str
fn type_assembly_name() -> &'static str
#[derive(Reflect)]
) to ensure that this method will return correct assembly
name. In other words - there’s no guarantee, that any implementation other than proc-macro
will return a correct name of the assembly. Alternatively, you can use env!("CARGO_PKG_NAME")
as an implementation.fn fields_info(&self, func: &mut dyn FnMut(&[FieldInfo<'_, '_>]))
fn into_any(self: Box<Self>) -> Box<dyn Any>
fn set( &mut self, value: Box<dyn Reflect>, ) -> Result<Box<dyn Reflect>, Box<dyn Reflect>>
fn as_any(&self, func: &mut dyn FnMut(&dyn Any))
fn as_any_mut(&mut self, func: &mut dyn FnMut(&mut dyn Any))
fn as_reflect(&self, func: &mut dyn FnMut(&dyn Reflect))
fn as_reflect_mut(&mut self, func: &mut dyn FnMut(&mut dyn Reflect))
fn fields(&self, func: &mut dyn FnMut(&[&dyn Reflect]))
fn fields_mut(&mut self, func: &mut dyn FnMut(&mut [&mut dyn Reflect]))
fn field(&self, name: &str, func: &mut dyn FnMut(Option<&dyn Reflect>))
fn field_mut( &mut self, name: &str, func: &mut dyn FnMut(Option<&mut dyn Reflect>), )
Source§fn set_field(
&mut self,
field: &str,
value: Box<dyn Reflect>,
func: &mut dyn FnMut(Result<Box<dyn Reflect>, Box<dyn Reflect>>),
)
fn set_field( &mut self, field: &str, value: Box<dyn Reflect>, func: &mut dyn FnMut(Result<Box<dyn Reflect>, Box<dyn Reflect>>), )
#[reflect(setter = ..)]
or falls back to
Reflect::field_mut
fn as_array(&self, func: &mut dyn FnMut(Option<&(dyn ReflectArray + 'static)>))
fn as_array_mut( &mut self, func: &mut dyn FnMut(Option<&mut (dyn ReflectArray + 'static)>), )
fn as_list(&self, func: &mut dyn FnMut(Option<&(dyn ReflectList + 'static)>))
fn as_list_mut( &mut self, func: &mut dyn FnMut(Option<&mut (dyn ReflectList + 'static)>), )
fn as_inheritable_variable( &self, func: &mut dyn FnMut(Option<&(dyn ReflectInheritableVariable + 'static)>), )
fn as_inheritable_variable_mut( &mut self, func: &mut dyn FnMut(Option<&mut (dyn ReflectInheritableVariable + 'static)>), )
fn as_hash_map( &self, func: &mut dyn FnMut(Option<&(dyn ReflectHashMap + 'static)>), )
fn as_hash_map_mut( &mut self, func: &mut dyn FnMut(Option<&mut (dyn ReflectHashMap + 'static)>), )
Source§impl TryFrom<&str> for MaterialProperty
impl TryFrom<&str> for MaterialProperty
Source§impl TypeUuidProvider for MaterialProperty
impl TypeUuidProvider for MaterialProperty
Source§impl VariantNames for MaterialProperty
impl VariantNames for MaterialProperty
Source§impl Visit for MaterialPropertywhere
f32: Visit,
Vec<f32>: Visit,
i32: Visit,
Vec<i32>: Visit,
u32: Visit,
Vec<u32>: Visit,
Vector2<f32>: Visit,
Vec<Vector2<f32>>: Visit,
Vector3<f32>: Visit,
Vec<Vector3<f32>>: Visit,
Vector4<f32>: Visit,
Vec<Vector4<f32>>: Visit,
Matrix2<f32>: Visit,
Vec<Matrix2<f32>>: Visit,
Matrix3<f32>: Visit,
Vec<Matrix3<f32>>: Visit,
Matrix4<f32>: Visit,
Vec<Matrix4<f32>>: Visit,
bool: Visit,
Color: Visit,
impl Visit for MaterialPropertywhere
f32: Visit,
Vec<f32>: Visit,
i32: Visit,
Vec<i32>: Visit,
u32: Visit,
Vec<u32>: Visit,
Vector2<f32>: Visit,
Vec<Vector2<f32>>: Visit,
Vector3<f32>: Visit,
Vec<Vector3<f32>>: Visit,
Vector4<f32>: Visit,
Vec<Vector4<f32>>: Visit,
Matrix2<f32>: Visit,
Vec<Matrix2<f32>>: Visit,
Matrix3<f32>: Visit,
Vec<Matrix3<f32>>: Visit,
Matrix4<f32>: Visit,
Vec<Matrix4<f32>>: Visit,
bool: Visit,
Color: Visit,
Source§fn visit(&mut self, name: &str, visitor: &mut Visitor) -> VisitResult
fn visit(&mut self, name: &str, visitor: &mut Visitor) -> VisitResult
Auto Trait Implementations§
impl Freeze for MaterialProperty
impl RefUnwindSafe for MaterialProperty
impl Send for MaterialProperty
impl Sync for MaterialProperty
impl Unpin for MaterialProperty
impl UnwindSafe for MaterialProperty
Blanket Implementations§
Source§impl<T> AsyncTaskResult for T
impl<T> AsyncTaskResult for T
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§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
.Source§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
.Source§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.Source§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.Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Any
. Could be used to downcast a trait object
to a particular type.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Any
. Could be used to downcast a trait object
to a particular type.fn into_any(self: Box<T>) -> Box<dyn Any>
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FieldValue for Twhere
T: 'static,
impl<T> FieldValue for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§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 moreSource§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()
.Source§impl<T> ReflectBase for Twhere
T: Reflect,
impl<T> ReflectBase for Twhere
T: Reflect,
fn as_any_raw(&self) -> &(dyn Any + 'static)
fn as_any_raw_mut(&mut self) -> &mut (dyn Any + 'static)
Source§impl<T> ResolvePath for Twhere
T: Reflect,
impl<T> ResolvePath for Twhere
T: Reflect,
fn resolve_path<'p>( &self, path: &'p str, func: &mut dyn FnMut(Result<&(dyn Reflect + 'static), ReflectPathError<'p>>), )
fn resolve_path_mut<'p>( &mut self, path: &'p str, func: &mut dyn FnMut(Result<&mut (dyn Reflect + 'static), ReflectPathError<'p>>), )
fn get_resolve_path<'p, T>(
&self,
path: &'p str,
func: &mut dyn FnMut(Result<&T, ReflectPathError<'p>>),
)where
T: Reflect,
fn get_resolve_path_mut<'p, T>(
&mut self,
path: &'p str,
func: &mut dyn FnMut(Result<&mut T, ReflectPathError<'p>>),
)where
T: Reflect,
Source§impl<T> ScriptMessagePayload for T
impl<T> ScriptMessagePayload for T
Source§fn as_any_ref(&self) -> &(dyn Any + 'static)
fn as_any_ref(&self) -> &(dyn Any + 'static)
self
as &dyn Any
Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
self
as &dyn Any
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.