Context¶
-
class
moderngl.
Context
¶ Class exposing OpenGL features. ModernGL objects can be created from this class.
Create¶
-
moderngl.
create_context
(require=None) → Context¶ Create a ModernGL context by loading OpenGL functions from an existing OpenGL context. An OpenGL context must exists. If rendering is done without a window please use the
create_standalone_context()
instead.Example:
# Accept the current context version ctx = moderngl.create_context() # Require at least OpenGL 4.3 ctx = moderngl.create_context(require=430)
Keyword Arguments: require (int) – OpenGL version code. Returns: Context
object
-
moderngl.
create_standalone_context
(require=None) → Context¶ Create a standalone ModernGL context.
Example:
# Create a context with highest possible supported version ctx = moderngl.create_context() # Require at least OpenGL 4.3 ctx = moderngl.create_context(require=430)
Keyword Arguments: require (int) – OpenGL version code. Returns: Context
object
ModernGL Objects¶
-
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
-
Context.
simple_vertex_array
(program, buffer, *attributes, index_buffer=None, index_element_size=4) → VertexArray¶ Create a
VertexArray
object.Parameters: Keyword Arguments: - index_element_size (int) – byte size of each index element, 1, 2 or 4.
- index_buffer (Buffer) – An index buffer.
Returns: VertexArray
object
-
Context.
vertex_array
(program, content, index_buffer=None, index_element_size=4, skip_errors=False) → VertexArray¶ Create a
VertexArray
object.Parameters: Keyword Arguments: - index_element_size (int) – byte size of each index element, 1, 2 or 4.
- skip_errors (bool) – Ignore skip_errors varyings.
Returns: VertexArray
object
-
Context.
buffer
(data=None, reserve=0, dynamic=False) → Buffer¶ Create a
Buffer
object.Parameters: data (bytes) – Content of the new buffer.
Keyword Arguments: - reserve (int) – The number of bytes to reserve.
- dynamic (bool) – Treat buffer as dynamic.
Returns: Buffer
object
-
Context.
texture
(size, components, data=None, samples=0, alignment=1, dtype='f1') → Texture¶ Create a
Texture
object.Parameters: - size (tuple) – The width and height of the texture.
- components (int) – The number of components 1, 2, 3 or 4.
- data (bytes) – Content of the texture.
Keyword Arguments: - samples (int) – The number of samples. Value 0 means no multisample format.
- alignment (int) – The byte alignment 1, 2, 4 or 8.
- dtype (str) – Data type.
Returns: Texture
object
-
Context.
depth_texture
(size, data=None, samples=0, alignment=4) → Texture¶ Create a
Texture
object.Parameters: - size (tuple) – The width and height of the texture.
- data (bytes) – Content of the texture.
Keyword Arguments: - samples (int) – The number of samples. Value 0 means no multisample format.
- alignment (int) – The byte alignment 1, 2, 4 or 8.
Returns: Texture
object
-
Context.
texture3d
(size, components, data=None, alignment=1, dtype='f1') → Texture3D¶ Create a
Texture3D
object.Parameters: - size (tuple) – The width, height and depth of the texture.
- components (int) – The number of components 1, 2, 3 or 4.
- data (bytes) – Content of the texture.
Keyword Arguments: - alignment (int) – The byte alignment 1, 2, 4 or 8.
- dtype (str) – Data type.
Returns: Texture3D
object
-
Context.
texture_array
(size, components, data=None, alignment=1, dtype='f1') → TextureArray¶ Create a
TextureArray
object.Parameters: - size (tuple) – The
(width, height, layers)
of the texture. - components (int) – The number of components 1, 2, 3 or 4.
- data (bytes) – Content of the texture. The size must be
(width, height * layers)
so each layer is stacked vertically.
Keyword Arguments: - alignment (int) – The byte alignment 1, 2, 4 or 8.
- dtype (str) – Data type.
Returns: Texture3D
object- size (tuple) – The
-
Context.
texture_cube
(size, components, data=None, alignment=1, dtype='f1') → TextureCube¶ Create a
TextureCube
object.Parameters: - size (tuple) – The width, height of the texture. Each side of the cube will have this size.
- components (int) – The number of components 1, 2, 3 or 4.
- data (bytes) – Content of the texture.
Keyword Arguments: - alignment (int) – The byte alignment 1, 2, 4 or 8.
- dtype (str) – Data type.
Returns: TextureCube
object
-
Context.
simple_framebuffer
(size, components=4, samples=0, dtype='f1') → Framebuffer¶ A
Framebuffer
is a collection of buffers that can be used as the destination for rendering. The buffers for Framebuffer objects reference images from either Textures or Renderbuffers.Parameters: - size (tuple) – The width and height of the renderbuffer.
- components (int) – The number of components 1, 2, 3 or 4.
Keyword Arguments: - samples (int) – The number of samples. Value 0 means no multisample format.
- dtype (str) – Data type.
Returns: Framebuffer
object
-
Context.
framebuffer
(color_attachments=(), depth_attachment=None) → Framebuffer¶ A
Framebuffer
is a collection of buffers that can be used as the destination for rendering. The buffers for Framebuffer objects reference images from either Textures or Renderbuffers.Parameters: - color_attachments (list) – A list of
Texture
orRenderbuffer
objects. - depth_attachment (Renderbuffer or Texture) – The depth attachment.
Returns: Framebuffer
object- color_attachments (list) – A list of
-
Context.
renderbuffer
(size, components=4, samples=0, dtype='f1') → Renderbuffer¶ Renderbuffer
objects are OpenGL objects that contain images. They are created and used specifically withFramebuffer
objects.Parameters: - size (tuple) – The width and height of the renderbuffer.
- components (int) – The number of components 1, 2, 3 or 4.
Keyword Arguments: - samples (int) – The number of samples. Value 0 means no multisample format.
- dtype (str) – Data type.
Returns: Renderbuffer
object
-
Context.
depth_renderbuffer
(size, samples=0) → Renderbuffer¶ Renderbuffer
objects are OpenGL objects that contain images. They are created and used specifically withFramebuffer
objects.Parameters: size (tuple) – The width and height of the renderbuffer. Keyword Arguments: samples (int) – The number of samples. Value 0 means no multisample format. Returns: Renderbuffer
object
-
Context.
scope
(framebuffer, enable_only=None, textures=(), uniform_buffers=(), storage_buffers=()) → Scope¶ Create a
Scope
object.Parameters: - framebuffer (Framebuffer) – The framebuffer to use when entering.
- enable_only (int) – The enable_only flags to set when entering.
Keyword Arguments: - textures (list) – List of (texture, binding) tuples.
- uniform_buffers (list) – List of (buffer, binding) tuples.
- storage_buffers (list) – List of (buffer, binding) tuples.
-
Context.
query
(samples=False, any_samples=False, time=False, primitives=False) → Query¶ Create a
Query
object.Keyword Arguments: - samples (bool) – Query
GL_SAMPLES_PASSED
or not. - any_samples (bool) – Query
GL_ANY_SAMPLES_PASSED
or not. - time (bool) – Query
GL_TIME_ELAPSED
or not. - primitives (bool) – Query
GL_PRIMITIVES_GENERATED
or not.
- samples (bool) – Query
-
Context.
compute_shader
(source) → ComputeShader¶ A
ComputeShader
is a Shader Stage that is used entirely for computing arbitrary information. While it can do rendering, it is generally used for tasks not directly related to drawing.Parameters: source (str) – The source of the compute shader. Returns: ComputeShader
object
-
Context.
sampler
(repeat_x=True, repeat_y=True, repeat_z=True, filter=None, anisotropy=1.0, compare_func='?', border_color=None, min_lod=-1000.0, max_lod=1000.0) → Sampler¶ Create a
Sampler
object.Keyword Arguments: - repeat_x (bool) – Repeat texture on x
- repeat_y (bool) – Repeat texture on y
- repeat_z (bool) – Repeat texture on z
- filter (tuple) – The min and max filter
- anisotropy (float) – Number of samples for anisotropic filtering. Any value greater than 1.0 counts as a use of anisotropic filtering
- compare_func – Compare function for depth textures
- border_color (tuple) – The (r, g, b, a) color for the texture border.
When this value is set the
repeat_
values are overriden setting the texture wrap to return the border color when outside[0, 1]
range. - min_lod (float) – Minimum level-of-detail parameter (Default
-1000.0
). This floating-point value limits the selection of highest resolution mipmap (lowest mipmap level) - max_lod (float) – Minimum level-of-detail parameter (Default
1000.0
). This floating-point value limits the selection of the lowest resolution mipmap (highest mipmap level)
-
Context.
clear_samplers
(start=0, end=-1)¶ Unbinds samplers from texture units. Sampler bindings do clear automatically between every frame, but lingering samplers can still be a source of weird bugs during the frame rendering. This methods provides a fairly brute force and efficient way to ensure texture units are clear.
Keyword Arguments: - start (int) – The texture unit index to start the clearing samplers
- stop (int) – The texture unit index to stop clearing samplers
Example:
# Clear texture unit 0, 1, 2, 3, 4 ctx.clear_samplers(start=0, end=5) # Clear texture unit 4, 5, 6, 7 ctx.clear_samplers(start=4, end=8)
Methods¶
-
Context.
clear
(red=0.0, green=0.0, blue=0.0, alpha=0.0, depth=1.0, viewport=None)¶ Clear the bound framebuffer. By default clears the
screen
.If the viewport is not
None
then scrissor test will be used to clear the given viewport.If the viewport is a 2-tuple it will clear the
(0, 0, width, height)
where(width, height)
is the 2-tuple.If the viewport is a 4-tuple it will clear the given viewport.
Parameters: - red (float) – color component.
- green (float) – color component.
- blue (float) – color component.
- alpha (float) – alpha component.
- depth (float) – depth value.
Keyword Arguments: viewport (tuple) – The viewport.
-
Context.
enable_only
(flags)¶ Enable flags.
moderngl.NOTHING
moderngl.BLEND
moderngl.DEPTH_TEST
moderngl.CULL_FACE
moderngl.RASTERIZER_DISCARD
Parameters: flags (EnableFlag) – The flags to enable. Unset flags will be disabled.
-
Context.
enable
(flags)¶ Enable flags.
For valid flags, please see
enable_only()
.Parameters: flag (int) – The flags to enable.
-
Context.
disable
(flags)¶ Disable flags.
For valid flags, please see
enable_only()
.Parameters: flag (int) – The flags to disable.
-
Context.
finish
()¶ Wait for all drawing commands to finish.
-
Context.
copy_buffer
(dst, src, size=-1, read_offset=0, write_offset=0)¶ Copy buffer content.
Parameters: Keyword Arguments: - read_offset (int) – The read offset.
- write_offset (int) – The write offset.
-
Context.
copy_framebuffer
(dst, src)¶ Copy framebuffer content.
Use this method to:
- blit framebuffers.
- copy framebuffer content into a texture.
- downsample framebuffers. (it will allow to read the framebuffer’s content)
- downsample a framebuffer directly to a texture.
Parameters: - dst (Framebuffer or Texture) – Destination framebuffer or texture.
- src (Framebuffer) – Source framebuffer.
-
Context.
detect_framebuffer
(glo=None) → Framebuffer¶ Detect framebuffer.
Parameters: glo (int) – Framebuffer object. Returns: Framebuffer
object
Attributes¶
-
Context.
line_width
¶ float – Set the default line width.
-
Context.
point_size
¶ float – Set/get the default point size.
-
Context.
depth_func
¶ int – Set the default depth func. The depth function is set using a string.
Example:
ctx.depth_func = '<=' # GL_LEQUAL ctx.depth_func = '<' # GL_LESS ctx.depth_func = '>=' # GL_GEQUAL ctx.depth_func = '>' # GL_GREATER ctx.depth_func = '==' # GL_EQUAL ctx.depth_func = '!=' # GL_NOTEQUAL ctx.depth_func = '0' # GL_NEVER ctx.depth_func = '1' # GL_ALWAYS
-
Context.
blend_func
¶ tuple – Set the blend depth func.
Example:
ctx.enable(moderngl.BLEND) ctx.blend_func = moderngl.SRC_ALPHA, moderngl.ONE_MINUS_SRC_ALPHA
-
Context.
viewport
¶ tuple – The viewport of the active framebuffer. Modifies or gets the viewport.
Example:
>>> ctx.viewport (0, 0, 1280, 720) >>> ctx.viewport = (0, 0, 640, 360) >>> ctx.viewport (0, 0, 640, 360)
If no framebuffer is bound
(0, 0, 0, 0)
will be returned.
-
Context.
version_code
¶ int – The OpenGL version code. Reports
410
for OpenGL 4.1
-
Context.
screen
¶ Framebuffer – A Framebuffer instance representing the screen usually set when creating a context with
create_context()
attaching to an existing context. This is the special system framebuffer represented by framebufferid=0
.When creating a standalone context this property is not set.
-
Context.
fbo
¶ Framebuffer – The active framebuffer. Set every time
Framebuffer.use()
is called.
-
Context.
front_face
¶ str – The front_face. Acceptable values are
'ccw'
(default) or'cw'
.Face culling must be enabled for this to have any effect:
ctx.enable(moderngl.CULL_FACE)
.Example:
# Triangles winded counter-clockwise considerd front facing ctx.front_face = 'ccw' # Triangles winded clockwise considerd front facing ctx.front_face = 'cw'
-
Context.
wireframe
¶ bool – Wireframe settings for debugging.
-
Context.
max_samples
¶ int – The maximum supported number of samples for multisampling
-
Context.
max_integer_samples
¶ int – The max integer samples.
-
Context.
max_texture_units
¶ int – The max texture units.
-
Context.
default_texture_unit
¶ int – The default texture unit.
-
Context.
max_anisotropy
¶ float – The maximum value supported for anisotropic filtering.
-
Context.
multisample
¶ bool – Enable/disable multisample mode (
GL_MULTISAMPLE
). This property is write only.Example:
# Enable ctx.multisample = True # Disable ctx.multisample = False
-
Context.
patch_vertices
¶ int – The number of vertices that will be used to make up a single patch primitive.
-
Context.
error
¶ str – The result of
glGetError()
but human readable. This values is provided for debug purposes only and is likely to reduce performace when used in a draw loop.
-
Context.
info
¶ dict – Information about the context
Example:
{ 'GL_VENDOR': 'NVIDIA Corporation', 'GL_RENDERER': 'NVIDIA GeForce GT 650M OpenGL Engine', 'GL_VERSION': '4.1 NVIDIA-10.32.0 355.11.10.10.40.102', 'GL_POINT_SIZE_RANGE': (1.0, 2047.0), 'GL_SMOOTH_LINE_WIDTH_RANGE': (0.5, 1.0), 'GL_ALIASED_LINE_WIDTH_RANGE': (1.0, 1.0), 'GL_POINT_FADE_THRESHOLD_SIZE': 1.0, 'GL_POINT_SIZE_GRANULARITY': 0.125, 'GL_SMOOTH_LINE_WIDTH_GRANULARITY': 0.125, 'GL_MIN_PROGRAM_TEXEL_OFFSET': -8.0, 'GL_MAX_PROGRAM_TEXEL_OFFSET': 7.0, 'GL_MINOR_VERSION': 1, 'GL_MAJOR_VERSION': 4, 'GL_SAMPLE_BUFFERS': 0, 'GL_SUBPIXEL_BITS': 8, 'GL_CONTEXT_PROFILE_MASK': 1, 'GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT': 256, 'GL_DOUBLEBUFFER': False, 'GL_STEREO': False, 'GL_MAX_VIEWPORT_DIMS': (16384, 16384), 'GL_MAX_3D_TEXTURE_SIZE': 2048, 'GL_MAX_ARRAY_TEXTURE_LAYERS': 2048, 'GL_MAX_CLIP_DISTANCES': 8, 'GL_MAX_COLOR_ATTACHMENTS': 8, 'GL_MAX_COLOR_TEXTURE_SAMPLES': 8, 'GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS': 233472, 'GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS': 231424, 'GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS': 80, 'GL_MAX_COMBINED_UNIFORM_BLOCKS': 70, 'GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS': 233472, 'GL_MAX_CUBE_MAP_TEXTURE_SIZE': 16384, 'GL_MAX_DEPTH_TEXTURE_SAMPLES': 8, 'GL_MAX_DRAW_BUFFERS': 8, 'GL_MAX_DUAL_SOURCE_DRAW_BUFFERS': 1, 'GL_MAX_ELEMENTS_INDICES': 150000, 'GL_MAX_ELEMENTS_VERTICES': 1048575, 'GL_MAX_FRAGMENT_INPUT_COMPONENTS': 128, 'GL_MAX_FRAGMENT_UNIFORM_COMPONENTS': 4096, 'GL_MAX_FRAGMENT_UNIFORM_VECTORS': 1024, 'GL_MAX_FRAGMENT_UNIFORM_BLOCKS': 14, 'GL_MAX_GEOMETRY_INPUT_COMPONENTS': 128, 'GL_MAX_GEOMETRY_OUTPUT_COMPONENTS': 128, 'GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS': 16, 'GL_MAX_GEOMETRY_UNIFORM_BLOCKS': 14, 'GL_MAX_GEOMETRY_UNIFORM_COMPONENTS': 2048, 'GL_MAX_INTEGER_SAMPLES': 1, 'GL_MAX_SAMPLES': 8, 'GL_MAX_RECTANGLE_TEXTURE_SIZE': 16384, 'GL_MAX_RENDERBUFFER_SIZE': 16384, 'GL_MAX_SAMPLE_MASK_WORDS': 1, 'GL_MAX_SERVER_WAIT_TIMEOUT': -1, 'GL_MAX_TEXTURE_BUFFER_SIZE': 134217728, 'GL_MAX_TEXTURE_IMAGE_UNITS': 16, 'GL_MAX_TEXTURE_LOD_BIAS': 15, 'GL_MAX_TEXTURE_SIZE': 16384, 'GL_MAX_UNIFORM_BUFFER_BINDINGS': 70, 'GL_MAX_UNIFORM_BLOCK_SIZE': 65536, 'GL_MAX_VARYING_COMPONENTS': 0, 'GL_MAX_VARYING_VECTORS': 31, 'GL_MAX_VARYING_FLOATS': 0, 'GL_MAX_VERTEX_ATTRIBS': 16, 'GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS': 16, 'GL_MAX_VERTEX_UNIFORM_COMPONENTS': 4096, 'GL_MAX_VERTEX_UNIFORM_VECTORS': 1024, 'GL_MAX_VERTEX_OUTPUT_COMPONENTS': 128, 'GL_MAX_VERTEX_UNIFORM_BLOCKS': 14, 'GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET': 0, 'GL_MAX_VERTEX_ATTRIB_BINDINGS': 0, 'GL_VIEWPORT_BOUNDS_RANGE': (-32768, 32768), 'GL_VIEWPORT_SUBPIXEL_BITS': 0, 'GL_MAX_VIEWPORTS': 16 }
Examples¶
ModernGL Context¶
import moderngl
# create a window
ctx = moderngl.create_context()
print(ctx.version_code)
Standalone ModernGL Context¶
import moderngl
ctx = moderngl.create_standalone_context()
print(ctx.version_code)
ContextManager¶
context_manager.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import moderngl
class ContextManager:
ctx = None
@staticmethod
def get_default_context(allow_fallback_standalone_context=True) -> moderngl.Context:
'''
Default context
'''
if ContextManager.ctx is None:
try:
ContextManager.ctx = moderngl.create_context()
except moderngl.Error:
if allow_fallback_standalone_context:
ContextManager.ctx = moderngl.create_standalone_context()
else:
raise
return ContextManager.ctx
|
example.py
1 2 3 4 | from context_manager import ContextManager
ctx = ContextManager.get_default_context()
print(ctx.version_code)
|