Program¶
-
class
moderngl.
Program
¶ A Program object represents fully processed executable code in the OpenGL Shading Language, for one or more Shader stages.
In ModernGL, a Program object can be assigned to
VertexArray
objects. The VertexArray object is capable of binding the Program object once theVertexArray.render()
orVertexArray.transform()
is called.Program objects has no method called
use()
, VertexArrays encapsulate this mechanism.A Program object cannot be instantiated directly, it requires a context. Use
Context.program()
to create one.
Create¶
-
Context.
program
(vertex_shader, fragment_shader=None, geometry_shader=None, tess_control_shader=None, tess_evaluation_shader=None, varyings=()) → Program Create a
Program
object.Only linked programs will be returned.
A single shader in the shaders parameter is also accepted. The varyings are only used when a transform program is created.
Parameters: - shaders (list) – A list of
Shader
objects. - varyings (list) – A list of varying names.
Returns: Program
object- shaders (list) – A list of
Methods¶
-
Program.
get
(key, default) → Union[Uniform, UniformBlock, Subroutine, Attribute, Varying]¶ Returns a Uniform, UniformBlock, Subroutine, Attribute or Varying.
Parameters: default – This is the value to be returned in case key does not exist. Returns: Uniform
,UniformBlock
,Subroutine
,Attribute
orVarying
Attributes¶
-
Program.
geometry_input
¶ int – The geometry input primitive. The GeometryShader’s input primitive if the GeometryShader exists. The geometry input primitive will be used for validation.
-
Program.
geometry_output
¶ int – The geometry output primitive. The GeometryShader’s output primitive if the GeometryShader exists.
-
Program.
geometry_vertices
¶ int – The maximum number of vertices that the geometry shader will output.
-
Program.
subroutines
¶ tuple – The subroutine uniforms.
-
Program.
glo
¶ int – The internal OpenGL object. This values is provided for debug purposes only.
Examples¶
A simple program designed for rendering
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | my_render_program = ctx.program(
vertex_shader='''
#version 330
in vec2 vert;
void main() {
gl_Position = vec4(vert, 0.0, 1.0);
}
''',
fragment_shader='''
#version 330
out vec4 color;
void main() {
color = vec4(0.3, 0.5, 1.0, 1.0);
}
''',
)
|
A simple program designed for transforming
1 2 3 4 5 6 7 8 9 10 11 12 13 | my_transform_program = ctx.program(
vertex_shader='''
#version 330
in vec4 vert;
out float vert_length;
void main() {
vert_length = length(vert);
}
''',
varyings=['vert_length']
)
|