Struct Attribute

Source
pub struct Attribute(/* private fields */);

Implementations§

Source§

impl Attribute

Source

pub fn new( attribute_buffer: &AttributeBuffer, name: &str, stride: usize, offset: usize, components: i32, type_: AttributeType, ) -> Attribute

Describes the layout for a list of vertex attribute values (For example, a list of texture coordinates or colors).

The name is used to access the attribute inside a GLSL vertex shader and there are some special names you should use if they are applicable: <itemizedlist> <listitem>“cogl_position_in” (used for vertex positions)</listitem> <listitem>“cogl_color_in” (used for vertex colors)</listitem> <listitem>“cogl_tex_coord0_in”, “cogl_tex_coord1”, … (used for vertex texture coordinates)</listitem> <listitem>“cogl_normal_in” (used for vertex normals)</listitem> <listitem>“cogl_point_size_in” (used to set the size of points per-vertex. Note this can only be used if COGL_FEATURE_ID_POINT_SIZE_ATTRIBUTE is advertised and Pipeline::set_per_vertex_point_size is called on the pipeline. </listitem> </itemizedlist>

The attribute values corresponding to different vertices can either be tightly packed or interleaved with other attribute values. For example it’s common to define a structure for a single vertex like:

typedef struct
{
  float x, y, z; /<!-- -->* position attribute *<!-- -->/
  float s, t; /<!-- -->* texture coordinate attribute *<!-- -->/
} MyVertex;

And then create an array of vertex data something like:

MyVertex vertices[100] = { .... }

In this case, to describe either the position or texture coordinate attribute you have to move <literal>sizeof (MyVertex)</literal> bytes to move from one vertex to the next. This is called the attribute stride. If you weren’t interleving attributes and you instead had a packed array of float x, y pairs then the attribute stride would be <literal>(2 * sizeof (float))</literal>. So the stride is the number of bytes to move to find the attribute value of the next vertex.

Normally a list of attributes starts at the beginning of an array. So for the <literal>MyVertex</literal> example above the offset is the offset inside the <literal>MyVertex</literal> structure to the first component of the attribute. For the texture coordinate attribute the offset would be <literal>offsetof (MyVertex, s)</literal> or instead of using the offsetof macro you could use <literal>sizeof (float) * 3</literal>. If you’ve divided your array into blocks of non-interleved attributes then you will need to calculate the offset as the number of bytes in blocks preceding the attribute you’re describing.

An attribute often has more than one component. For example a color is often comprised of 4 red, green, blue and alpha components, and a position may be comprised of 2 x and y components. You should aim to keep the number of components to a minimum as more components means more data needs to be mapped into the GPU which can be a bottlneck when dealing with a large number of vertices.

Finally you need to specify the component data type. Here you should aim to use the smallest type that meets your precision requirements. Again the larger the type then more data needs to be mapped into the GPU which can be a bottlneck when dealing with a large number of vertices.

§attribute_buffer

The AttributeBuffer containing the actual attribute data

§name

The name of the attribute (used to reference it from GLSL)

§stride

The number of bytes to jump to get to the next attribute value for the next vertex. (Usually <literal>sizeof (MyVertex)</literal>)

§offset

The byte offset from the start of attribute_buffer for the first attribute value. (Usually <literal>offsetof (MyVertex, component0)</literal>

§components

The number of components (e.g. 4 for an rgba color or 3 for and (x,y,z) position)

§type_

FIXME

§Returns

A newly allocated Attribute describing the layout for a list of attribute values stored in array.

Source

pub fn new_const_1f(context: &Context, name: &str, value: f32) -> Attribute

Creates a new, single component, attribute whose value remains constant across all the vertices of a primitive without needing to duplicate the value for each vertex.

The constant value is a single precision floating point scalar which should have a corresponding declaration in GLSL code like:

[| attribute float name; |]

§context

A Context

§name

The name of the attribute (used to reference it from GLSL)

§value

The constant value for the attribute

§Returns

A newly allocated Attribute representing the given constant value.

Source

pub fn new_const_2f( context: &Context, name: &str, component0: f32, component1: f32, ) -> Attribute

Creates a new, 2 component, attribute whose value remains constant across all the vertices of a primitive without needing to duplicate the value for each vertex.

The constants (component0, component1) represent a 2 component float vector which should have a corresponding declaration in GLSL code like:

[| attribute vec2 name; |]

§context

A Context

§name

The name of the attribute (used to reference it from GLSL)

§component0

The first component of a 2 component vector

§component1

The second component of a 2 component vector

§Returns

A newly allocated Attribute representing the given constant vector.

Source

pub fn new_const_2fv( context: &Context, name: &str, value: &[f32; 2], ) -> Attribute

Creates a new, 2 component, attribute whose value remains constant across all the vertices of a primitive without needing to duplicate the value for each vertex.

The constants (value[0], value[1]) represent a 2 component float vector which should have a corresponding declaration in GLSL code like:

[| attribute vec2 name; |]

§context

A Context

§name

The name of the attribute (used to reference it from GLSL)

§value

A pointer to a 2 component float vector

§Returns

A newly allocated Attribute representing the given constant vector.

Source

pub fn new_const_2x2fv( context: &Context, name: &str, matrix2x2: &[f32; 4], transpose: bool, ) -> Attribute

Creates a new matrix attribute whose value remains constant across all the vertices of a primitive without needing to duplicate the value for each vertex.

matrix2x2 represent a square 2 by 2 matrix specified in column-major order (each pair of consecutive numbers represents a column) which should have a corresponding declaration in GLSL code like:

[| attribute mat2 name; |]

If transpose is true then all matrix components are rotated around the diagonal of the matrix such that the first column becomes the first row and the second column becomes the second row.

§context

A Context

§name

The name of the attribute (used to reference it from GLSL)

§matrix2x2

A pointer to a 2 by 2 matrix

§transpose

Whether the matrix should be transposed on upload or not

§Returns

A newly allocated Attribute representing the given constant matrix.

Source

pub fn new_const_3f( context: &Context, name: &str, component0: f32, component1: f32, component2: f32, ) -> Attribute

Creates a new, 3 component, attribute whose value remains constant across all the vertices of a primitive without needing to duplicate the value for each vertex.

The constants (component0, component1, component2) represent a 3 component float vector which should have a corresponding declaration in GLSL code like:

[| attribute vec3 name; |]

unless the built in name “cogl_normal_in” is being used where no explicit GLSL declaration need be made.

§context

A Context

§name

The name of the attribute (used to reference it from GLSL)

§component0

The first component of a 3 component vector

§component1

The second component of a 3 component vector

§component2

The third component of a 3 component vector

§Returns

A newly allocated Attribute representing the given constant vector.

Source

pub fn new_const_3fv( context: &Context, name: &str, value: &[f32; 3], ) -> Attribute

Creates a new, 3 component, attribute whose value remains constant across all the vertices of a primitive without needing to duplicate the value for each vertex.

The constants (value[0], value[1], value[2]) represent a 3 component float vector which should have a corresponding declaration in GLSL code like:

[| attribute vec3 name; |]

unless the built in name “cogl_normal_in” is being used where no explicit GLSL declaration need be made.

§context

A Context

§name

The name of the attribute (used to reference it from GLSL)

§value

A pointer to a 3 component float vector

§Returns

A newly allocated Attribute representing the given constant vector.

Source

pub fn new_const_3x3fv( context: &Context, name: &str, matrix3x3: &[f32; 9], transpose: bool, ) -> Attribute

Creates a new matrix attribute whose value remains constant across all the vertices of a primitive without needing to duplicate the value for each vertex.

matrix3x3 represent a square 3 by 3 matrix specified in column-major order (each triple of consecutive numbers represents a column) which should have a corresponding declaration in GLSL code like:

[| attribute mat3 name; |]

If transpose is true then all matrix components are rotated around the diagonal of the matrix such that the first column becomes the first row and the second column becomes the second row etc.

§context

A Context

§name

The name of the attribute (used to reference it from GLSL)

§matrix3x3

A pointer to a 3 by 3 matrix

§transpose

Whether the matrix should be transposed on upload or not

§Returns

A newly allocated Attribute representing the given constant matrix.

Source

pub fn new_const_4f( context: &Context, name: &str, component0: f32, component1: f32, component2: f32, component3: f32, ) -> Attribute

Creates a new, 4 component, attribute whose value remains constant across all the vertices of a primitive without needing to duplicate the value for each vertex.

The constants (component0, component1, component2, constant3) represent a 4 component float vector which should have a corresponding declaration in GLSL code like:

[| attribute vec4 name; |]

unless one of the built in names “cogl_color_in”, “cogl_tex_coord0_in or “cogl_tex_coord1_in” etc is being used where no explicit GLSL declaration need be made.

§context

A Context

§name

The name of the attribute (used to reference it from GLSL)

§component0

The first component of a 4 component vector

§component1

The second component of a 4 component vector

§component2

The third component of a 4 component vector

§component3

The fourth component of a 4 component vector

§Returns

A newly allocated Attribute representing the given constant vector.

Source

pub fn new_const_4fv( context: &Context, name: &str, value: &[f32; 4], ) -> Attribute

Creates a new, 4 component, attribute whose value remains constant across all the vertices of a primitive without needing to duplicate the value for each vertex.

The constants (value[0], value[1], value[2], value[3]) represent a 4 component float vector which should have a corresponding declaration in GLSL code like:

[| attribute vec4 name; |]

unless one of the built in names “cogl_color_in”, “cogl_tex_coord0_in or “cogl_tex_coord1_in” etc is being used where no explicit GLSL declaration need be made.

§context

A Context

§name

The name of the attribute (used to reference it from GLSL)

§value

A pointer to a 4 component float vector

§Returns

A newly allocated Attribute representing the given constant vector.

Source

pub fn new_const_4x4fv( context: &Context, name: &str, matrix4x4: &[f32; 16], transpose: bool, ) -> Attribute

Creates a new matrix attribute whose value remains constant across all the vertices of a primitive without needing to duplicate the value for each vertex.

matrix4x4 represent a square 4 by 4 matrix specified in column-major order (each 4-tuple of consecutive numbers represents a column) which should have a corresponding declaration in GLSL code like:

[| attribute mat4 name; |]

If transpose is true then all matrix components are rotated around the diagonal of the matrix such that the first column becomes the first row and the second column becomes the second row etc.

§context

A Context

§name

The name of the attribute (used to reference it from GLSL)

§matrix4x4

A pointer to a 4 by 4 matrix

§transpose

Whether the matrix should be transposed on upload or not

§Returns

A newly allocated Attribute representing the given constant matrix.

Source

pub fn get_buffer(&self) -> Option<AttributeBuffer>

§Returns

the AttributeBuffer that was set with Attribute::set_buffer or Attribute::new.

Source

pub fn get_normalized(&self) -> bool

§Returns

the value of the normalized property set with Attribute::set_normalized.

Source

pub fn set_buffer(&self, attribute_buffer: &AttributeBuffer)

Sets a new AttributeBuffer for the attribute.

§attribute_buffer

A AttributeBuffer

Source

pub fn set_normalized(&self, normalized: bool)

Sets whether fixed point attribute types are mapped to the range 0→1. For example when this property is TRUE and a AttributeType::UnsignedByte type is used then the value 255 will be mapped to 1.0.

The default value of this property depends on the name of the attribute. For the builtin properties cogl_color_in and cogl_normal_in it will default to TRUE and for all other names it will default to FALSE.

§normalized

The new value for the normalized property.

Trait Implementations§

Source§

impl Clone for Attribute

Source§

fn clone(&self) -> Attribute

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Attribute

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for Attribute

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Hash for Attribute

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for Attribute

Source§

fn cmp(&self, other: &Attribute) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl<T: ObjectType> PartialEq<T> for Attribute

Source§

fn eq(&self, other: &T) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T: ObjectType> PartialOrd<T> for Attribute

Source§

fn partial_cmp(&self, other: &T) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl StaticType for Attribute

Source§

fn static_type() -> Type

Returns the type identifier of Self.
Source§

impl Eq for Attribute

Source§

impl IsA<Object> for Attribute

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Cast for T
where T: ObjectType,

Source§

fn upcast<T>(self) -> T
where T: ObjectType, Self: IsA<T>,

Upcasts an object to a superclass or interface T. Read more
Source§

fn upcast_ref<T>(&self) -> &T
where T: ObjectType, Self: IsA<T>,

Upcasts an object to a reference of its superclass or interface T. Read more
Source§

fn downcast<T>(self) -> Result<T, Self>
where T: ObjectType, Self: CanDowncast<T>,

Tries to downcast to a subclass or interface implementor T. Read more
Source§

fn downcast_ref<T>(&self) -> Option<&T>
where T: ObjectType, Self: CanDowncast<T>,

Tries to downcast to a reference of its subclass or interface implementor T. Read more
Source§

fn dynamic_cast<T>(self) -> Result<T, Self>
where T: ObjectType,

Tries to cast to an object of type T. This handles upcasting, downcasting and casting between interface and interface implementors. All checks are performed at runtime, while downcast and upcast will do many checks at compile-time already. Read more
Source§

fn dynamic_cast_ref<T>(&self) -> Option<&T>
where T: ObjectType,

Tries to cast to reference to an object of type T. This handles upcasting, downcasting and casting between interface and interface implementors. All checks are performed at runtime, while downcast and upcast will do many checks at compile-time already. Read more
Source§

unsafe fn unsafe_cast<T>(self) -> T
where T: ObjectType,

Casts to T unconditionally. Read more
Source§

unsafe fn unsafe_cast_ref<T>(&self) -> &T
where T: ObjectType,

Casts to &T unconditionally. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GList> for T

Source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GPtrArray> for T

Source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GSList> for T

Source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GList> for T

Source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for T

Source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for T

Source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GList> for T

Source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GPtrArray> for T

Source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GSList> for T

Source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GList> for T

Source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for T

Source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for T

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ObjectExt for T
where T: ObjectType,

Source§

fn is<U>(&self) -> bool
where U: StaticType,

Returns true if the object is an instance of (can be cast to) T.
Source§

fn get_type(&self) -> Type

Source§

fn get_object_class(&self) -> &ObjectClass

Source§

fn set_properties( &self, property_values: &[(&str, &dyn ToValue)], ) -> Result<(), BoolError>

Source§

fn set_property<'a, N>( &self, property_name: N, value: &dyn ToValue, ) -> Result<(), BoolError>
where N: Into<&'a str>,

Source§

fn get_property<'a, N>(&self, property_name: N) -> Result<Value, BoolError>
where N: Into<&'a str>,

Source§

unsafe fn set_qdata<QD>(&self, key: Quark, value: QD)
where QD: 'static,

Safety Read more
Source§

unsafe fn get_qdata<QD>(&self, key: Quark) -> Option<&QD>
where QD: 'static,

Safety Read more
Source§

unsafe fn steal_qdata<QD>(&self, key: Quark) -> Option<QD>
where QD: 'static,

Safety Read more
Source§

unsafe fn set_data<QD>(&self, key: &str, value: QD)
where QD: 'static,

Safety Read more
Source§

unsafe fn get_data<QD>(&self, key: &str) -> Option<&QD>
where QD: 'static,

Safety Read more
Source§

unsafe fn steal_data<QD>(&self, key: &str) -> Option<QD>
where QD: 'static,

Safety Read more
Source§

fn block_signal(&self, handler_id: &SignalHandlerId)

Source§

fn unblock_signal(&self, handler_id: &SignalHandlerId)

Source§

fn stop_signal_emission(&self, signal_name: &str)

Source§

fn disconnect(&self, handler_id: SignalHandlerId)

Source§

fn connect_notify<F>(&self, name: Option<&str>, f: F) -> SignalHandlerId
where F: Fn(&T, &ParamSpec) + Send + Sync + 'static,

Source§

unsafe fn connect_notify_unsafe<F>( &self, name: Option<&str>, f: F, ) -> SignalHandlerId
where F: Fn(&T, &ParamSpec),

Source§

fn notify<'a, N>(&self, property_name: N)
where N: Into<&'a str>,

Source§

fn notify_by_pspec(&self, pspec: &ParamSpec)

Source§

fn has_property<'a, N>(&self, property_name: N, type_: Option<Type>) -> bool
where N: Into<&'a str>,

Source§

fn get_property_type<'a, N>(&self, property_name: N) -> Option<Type>
where N: Into<&'a str>,

Source§

fn find_property<'a, N>(&self, property_name: N) -> Option<ParamSpec>
where N: Into<&'a str>,

Source§

fn list_properties(&self) -> Vec<ParamSpec>

Source§

fn connect<'a, N, F>( &self, signal_name: N, after: bool, callback: F, ) -> Result<SignalHandlerId, BoolError>
where N: Into<&'a str>, F: Fn(&[Value]) -> Option<Value> + Send + Sync + 'static,

Source§

fn connect_local<'a, N, F>( &self, signal_name: N, after: bool, callback: F, ) -> Result<SignalHandlerId, BoolError>
where N: Into<&'a str>, F: Fn(&[Value]) -> Option<Value> + 'static,

Source§

unsafe fn connect_unsafe<'a, N, F>( &self, signal_name: N, after: bool, callback: F, ) -> Result<SignalHandlerId, BoolError>
where N: Into<&'a str>, F: Fn(&[Value]) -> Option<Value>,

Source§

fn emit<'a, N>( &self, signal_name: N, args: &[&dyn ToValue], ) -> Result<Option<Value>, BoolError>
where N: Into<&'a str>,

Source§

fn downgrade(&self) -> WeakRef<T>

Source§

fn bind_property<'a, O, N, M>( &'a self, source_property: N, target: &'a O, target_property: M, ) -> BindingBuilder<'a>
where O: ObjectType, N: Into<&'a str>, M: Into<&'a str>,

Source§

fn ref_count(&self) -> u32

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T> ToValue for T
where T: SetValue + ?Sized,

Source§

fn to_value(&self) -> Value

Returns a Value clone of self.
Source§

fn to_value_type(&self) -> Type

Returns the type identifer of self. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<Super, Sub> CanDowncast<Sub> for Super
where Super: IsA<Super>, Sub: IsA<Super>,

Source§

impl<O> ObjectExt for O
where O: IsA<Object>,