[][src]Struct golem::ShaderProgram

pub struct ShaderProgram { /* fields omitted */ }

Methods

impl ShaderProgram[src]

pub fn new(
    ctx: &Context,
    desc: ShaderDescription
) -> Result<ShaderProgram, GolemError>
[src]

pub fn is_bound(&self) -> bool[src]

pub fn set_uniform(
    &self,
    name: &str,
    uniform: UniformValue
) -> Result<(), GolemError>
[src]

pub fn bind(&mut self)[src]

pub unsafe fn draw(
    &self,
    vb: &VertexBuffer,
    eb: &ElementBuffer,
    range: Range<usize>,
    geometry: GeometryMode
) -> Result<(), GolemError>
[src]

Draw the given elements from the element buffer with this shader

The range should fall within the elements of the buffer (which is checked for via an assert!.) The GeometryMode determines what the set of indices produces: triangles consumes 3 vertices into a filled triangle, lines consumes 2 vertices into a thin line, etc.

Safety

The source of unsafety is the range values in the ElementBuffer: if they are out of bounds of the VertexBuffer, this will result in out-of-bounds reads on the GPU and therefore undefined behavior. The caller is responsible for ensuring all elements are valid and in-bounds.

pub fn prepare_draw(
    &self,
    vb: &VertexBuffer,
    eb: &ElementBuffer
) -> Result<(), GolemError>
[src]

pub unsafe fn draw_prepared(&self, range: Range<usize>, geometry: GeometryMode)[src]

Draw the given elements from the prepared element buffer with this shader

This relies on the caller having a valid prepared state: see prepare_draw.

Safety

The safety concerns to keep in mind:

  1. prepare_draw must be called before this method, and the buffers passed to it must not have their underlying storage changed. Their values can change, but calls to set_data may cause them to expand and move to a new memory location on the GPU, invalidating the cal to preparation. Some calls to set_data are optimized to calls to set_sub_data; do not rely on this implementation detail.
  2. No other buffers may be operated on between prepare_draw and draw_prepared. Any calls to set_data or set_sub_data from a buffer that wasn't passed to prepare_draw will result in the wrong buffer being bound when draw_prepared is called.
  3. The elements in the prepared buffer must correspond to valid locations within the vertex buffer. See draw for details.
  4. This shader must still be bound (see bind)

Trait Implementations

impl Drop for ShaderProgram[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.