glium::program

Struct Program

source
pub struct Program { /* private fields */ }
Expand description

A combination of shaders linked together.

Implementations§

source§

impl Program

source

pub fn new<'a, F, I>( facade: &F, input: I, ) -> Result<Program, ProgramCreationError>
where I: Into<ProgramCreationInput<'a>>, F: Facade + ?Sized,

Builds a new program.

source

pub fn from_source<'a, F>( facade: &F, vertex_shader: &'a str, fragment_shader: &'a str, geometry_shader: Option<&'a str>, ) -> Result<Program, ProgramCreationError>
where F: Facade + ?Sized,

Builds a new program from GLSL source code.

A program is a group of shaders linked together.

§Parameters
  • vertex_shader: Source code of the vertex shader.
  • fragment_shader: Source code of the fragment shader.
  • geometry_shader: Source code of the geometry shader.
§Example
let program = glium::Program::from_source(&display, vertex_source, fragment_source,
    Some(geometry_source));
source

pub fn get_binary(&self) -> Result<Binary, GetBinaryError>

Returns the program’s compiled binary.

You can store the result in a file, then reload it later. This avoids having to compile the source code every time.

source

pub fn get_frag_data_location(&self, name: &str) -> Option<u32>

Returns the location of an output fragment, if it exists.

The location is low-level information that is used internally by glium. You probably don’t need to call this function.

You can declare output fragments in your shaders by writing:

out vec4 foo;
source

pub fn get_uniform(&self, name: &str) -> Option<&Uniform>

Returns informations about a uniform variable, if it exists.

source

pub fn uniforms(&self) -> Iter<'_, String, Uniform>

Returns an iterator to the list of uniforms.

§Example
for (name, uniform) in program.uniforms() {
    println!("Name: {} - Type: {:?}", name, uniform.ty);
}
source

pub fn get_uniform_blocks( &self, ) -> &HashMap<String, UniformBlock, BuildHasherDefault<FnvHasher>>

Returns a list of uniform blocks.

§Example
for (name, uniform) in program.get_uniform_blocks() {
    println!("Name: {}", name);
}
source

pub fn get_transform_feedback_buffers(&self) -> &[TransformFeedbackBuffer]

Returns the list of transform feedback varyings.

source

pub fn transform_feedback_matches( &self, format: &VertexFormat, stride: usize, ) -> bool

True if the transform feedback output of this program matches the specified VertexFormat and stride.

The stride is the number of bytes between two vertices.

source

pub fn get_output_primitives(&self) -> Option<OutputPrimitives>

Returns the type of geometry that transform feedback would generate, or None if it depends on the vertex/index data passed when drawing.

This corresponds to GL_GEOMETRY_OUTPUT_TYPE or GL_TESS_GEN_MODE. If the program doesn’t contain either a geometry shader or a tessellation evaluation shader, returns None.

source

pub fn has_tessellation_shaders(&self) -> bool

Returns true if the program contains a tessellation stage.

source

pub fn has_tessellation_control_shader(&self) -> bool

Returns true if the program contains a tessellation control stage.

source

pub fn has_tessellation_evaluation_shader(&self) -> bool

Returns true if the program contains a tessellation evaluation stage.

source

pub fn has_geometry_shader(&self) -> bool

Returns true if the program contains a geometry shader.

source

pub fn get_attribute(&self, name: &str) -> Option<&Attribute>

Returns informations about an attribute, if it exists.

source

pub fn attributes(&self) -> Iter<'_, String, Attribute>

Returns an iterator to the list of attributes.

§Example
for (name, attribute) in program.attributes() {
    println!("Name: {} - Type: {:?}", name, attribute.ty);
}
source

pub fn has_srgb_output(&self) -> bool

Returns true if the program has been configured to output sRGB instead of RGB.

source

pub fn get_shader_storage_blocks( &self, ) -> &HashMap<String, UniformBlock, BuildHasherDefault<FnvHasher>>

Returns the list of shader storage blocks.

§Example
for (name, uniform) in program.get_shader_storage_blocks() {
    println!("Name: {}", name);
}
source

pub fn get_atomic_counters( &self, ) -> &HashMap<String, UniformBlock, BuildHasherDefault<FnvHasher>>

Returns the list of shader storage blocks.

§Example
for (name, uniform) in program.get_atomic_counters() {
    println!("Name: {}", name);
}
source

pub fn get_subroutine_uniforms( &self, ) -> &HashMap<(String, ShaderStage), SubroutineUniform, BuildHasherDefault<FnvHasher>>

Returns the subroutine uniforms of this program.

Since subroutine uniforms are unique per shader and not per program, the keys of the HashMap are in the format ("subroutine_name", ShaderStage).

§Example
for (&(ref name, shader), uniform) in program.get_subroutine_uniforms() {
    println!("Name: {}", name);
}
source

pub fn uses_point_size(&self) -> bool

Returns true if the program has been configured to use the gl_PointSize variable.

If the program uses gl_PointSize without having been configured appropriately, then setting the value of gl_PointSize will have no effect.

Trait Implementations§

source§

impl Debug for Program

source§

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

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

impl GlObject for Program

source§

type Id = Handle

The type of identifier for this object.
source§

fn get_id(&self) -> Handle

Returns the id of the object.

Auto Trait Implementations§

§

impl !Freeze for Program

§

impl !RefUnwindSafe for Program

§

impl !Send for Program

§

impl !Sync for Program

§

impl Unpin for Program

§

impl !UnwindSafe for Program

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> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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, 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<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

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