Program#

class moderngl.Program#

Create#

Context.program(*, vertex_shader: str, fragment_shader: Optional[str] = None, geometry_shader: Optional[str] = None, tess_control_shader: Optional[str] = None, tess_evaluation_shader: Optional[str] = None, varyings: Tuple[str, ...] = (), fragment_outputs: Optional[Dict[str, int]] = None, varyings_capture_mode: str = 'interleaved') Program

Methods#

Program.get(key: str, default: Any) Union[Uniform, UniformBlock, Subroutine, Attribute, Varying]#
Program.__getitem__(key: str) Union[Uniform, UniformBlock, Subroutine, Attribute, Varying]#
Program.__setitem__(key: str, value: Any) None#
Program.__iter__() Generator[str, None, None]#
Program.__eq__(value, /)#

Return self==value.

Program.release() None#

Attributes#

Program.geometry_input#
Program.geometry_output#
Program.geometry_vertices#
Program.subroutines#
Program.glo#
Program.mglo#
Program.extra#
Program.is_transform#
Program.ctx#

Examples#

A simple program designed for rendering

 1my_render_program = ctx.program(
 2    vertex_shader='''
 3        #version 330
 4
 5        in vec2 vert;
 6
 7        void main() {
 8            gl_Position = vec4(vert, 0.0, 1.0);
 9        }
10    ''',
11    fragment_shader='''
12        #version 330
13
14        out vec4 color;
15
16        void main() {
17            color = vec4(0.3, 0.5, 1.0, 1.0);
18        }
19    ''',
20)

A simple program designed for transforming

 1my_transform_program = ctx.program(
 2    vertex_shader='''
 3        #version 330
 4
 5        in vec4 vert;
 6        out float vert_length;
 7
 8        void main() {
 9            vert_length = length(vert);
10        }
11    ''',
12    varyings=['vert_length']
13)

Program Members#