[][src]Macro processing::program

macro_rules! program {
    ( $ facade : expr , ) => { ... };
    (
$ facade : expr , , $ ( $ rest : tt ) * ) => { ... };
    (
$ facade : expr , $ num : tt => $ ( $ rest : tt ) * ) => { ... };
    (
$ facade : expr , $ num : tt es => $ ( $ rest : tt ) * ) => { ... };
    (
_inner , $ context : ident , $ vers : ident , {
$ ( $ ty : ident : $ src : expr ) , + } $ ( $ rest : tt ) * ) => { ... };
    (
_inner , $ context : ident , $ vers : ident , {
$ ( $ ty : ident : $ src : expr ) , + , } $ ( $ rest : tt ) * ) => { ... };
    (
_program_ty vertex , $ src : expr , $ vs : ident , $ tcs : ident , $ tes :
ident , $ gs : ident , $ fs : ident , $ srgb : ident , $ ps : ident ) => { ... };
    (
_program_ty tessellation_control , $ src : expr , $ vs : ident , $ tcs : ident
, $ tes : ident , $ gs : ident , $ fs : ident , $ srgb : ident , $ ps : ident
) => { ... };
    (
_program_ty tessellation_evaluation , $ src : expr , $ vs : ident , $ tcs :
ident , $ tes : ident , $ gs : ident , $ fs : ident , $ srgb : ident , $ ps :
ident ) => { ... };
    (
_program_ty geometry , $ src : expr , $ vs : ident , $ tcs : ident , $ tes :
ident , $ gs : ident , $ fs : ident , $ srgb : ident , $ ps : ident ) => { ... };
    (
_program_ty fragment , $ src : expr , $ vs : ident , $ tcs : ident , $ tes :
ident , $ gs : ident , $ fs : ident , $ srgb : ident , $ ps : ident ) => { ... };
    (
_program_ty point_size , $ src : expr , $ vs : ident , $ tcs : ident , $ tes :
ident , $ gs : ident , $ fs : ident , $ srgb : ident , $ ps : ident ) => { ... };
    (
_program_ty outputs_srgb , $ src : expr , $ vs : ident , $ tcs : ident , $ tes
: ident , $ gs : ident , $ fs : ident , $ srgb : ident , $ ps : ident ) => { ... };
    ( _parse_num_gl $ num : expr ) => { ... };
    ( _parse_num_gles $ num : expr ) => { ... };
}

Builds a program depending on the GLSL version supported by the backend.

This is implemented with successive calls to is_glsl_version_supported().

Returns a glium::program::ProgramChooserCreationError.

Example

# #[macro_use]
# extern crate glium;
# fn main() {
# let display: glium::Display = unsafe { std::mem::uninitialized() };
let program = program!(&display,
    300 => {
        vertex: r#"
            #version 300

            fn main() {
                gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
            }
        "#,
        fragment: r#"
            #version 300

            out vec4 color;
            fn main() {
                color = vec4(1.0, 1.0, 0.0, 1.0);
            }
        "#,
    },
    110 => {
        vertex: r#"
            #version 110

            fn main() {
                gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
            }
        "#,
        fragment: r#"
            #version 110

            fn main() {
                gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);
            }
        "#,
    },
    300 es => {
        vertex: r#"
            #version 110

            fn main() {
                gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
            }
        "#,
        fragment: r#"
            #version 110

            fn main() {
                gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);
            }
        "#,
    },
);
# }