Context

class moderngl.Context

Create

moderngl.create_context(require: Optional[int] = None, standalone: bool = False, share: bool = False, **settings: Dict[str, Any]) Context
moderngl.create_standalone_context(require: Optional[int] = None, share: bool = False, **settings) Context

ModernGL Objects

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
Context.simple_vertex_array(program: Program, buffer: Buffer, *attributes: Union[List[str], Tuple[str, ...]], index_buffer: Optional[Buffer] = None, index_element_size: int = 4, mode: Optional[int] = None) VertexArray
Context.vertex_array(*args, **kwargs) VertexArray
Context.buffer(data: Optional[Any] = None, *, reserve: int = 0, dynamic: bool = False) Buffer
Context.texture(size: Tuple[int, int], components: int, data: Optional[Any] = None, *, samples: int = 0, alignment: int = 1, dtype: str = 'f1', internal_format: Optional[int] = None) Texture
Context.depth_texture(size: Tuple[int, int], data: Optional[Any] = None, *, samples: int = 0, alignment: int = 4) Texture
Context.texture3d(size: Tuple[int, int, int], components: int, data: Optional[Any] = None, *, alignment: int = 1, dtype: str = 'f1') Texture3D
Context.texture_array(size: Tuple[int, int, int], components: int, data: Optional[Any] = None, *, alignment: int = 1, dtype: str = 'f1') TextureArray
Context.texture_cube(size: Tuple[int, int], components: int, data: Optional[Any] = None, *, alignment: int = 1, dtype: str = 'f1', internal_format: Optional[int] = None) TextureCube
Context.external_texture(glo: int, size: Tuple[int, int], components: int, samples: int, dtype: str) Texture
Context.simple_framebuffer(size: Tuple[int, int], components: int = 4, *, samples: int = 0, dtype: str = 'f1') Framebuffer
Context.framebuffer(color_attachments: Any = (), depth_attachment: Optional[Union[Texture, Renderbuffer]] = None) Framebuffer
Context.renderbuffer(size: Tuple[int, int], components: int = 4, *, samples: int = 0, dtype: str = 'f1') Renderbuffer
Context.depth_renderbuffer(size: Tuple[int, int], *, samples: int = 0) Renderbuffer
Context.scope(framebuffer: Optional[Framebuffer] = None, enable_only: Optional[int] = None, *, textures: Tuple[Tuple[Texture, int], ...] = (), uniform_buffers: Tuple[Tuple[Buffer, int], ...] = (), storage_buffers: Tuple[Tuple[Buffer, int], ...] = (), samplers: Tuple[Tuple[Sampler, int], ...] = (), enable: Optional[int] = None) Scope
Context.query(*, samples: bool = False, any_samples: bool = False, time: bool = False, primitives: bool = False) Query
Context.compute_shader(source: str) ComputeShader
Context.sampler(repeat_x: bool = True, repeat_y: bool = True, repeat_z: bool = True, filter: Optional[Tuple[int, int]] = None, anisotropy: float = 1.0, compare_func: str = '?', border_color: Optional[Tuple[float, float, float, float]] = None, min_lod: float = -1000.0, max_lod: float = 1000.0, texture: Optional[Texture] = None) Sampler
Context.clear_samplers(start: int = 0, end: int = -1) None
Context.release() None

Methods

Context.clear(red: float = 0.0, green: float = 0.0, blue: float = 0.0, alpha: float = 0.0, depth: float = 1.0, *, viewport: Optional[Union[Tuple[int, int], Tuple[int, int, int, int]]] = None, color: Optional[Tuple[float, float, float, float]] = None) None
Context.enable_only(flags: int) None
Context.enable(flags: int) None
Context.disable(flags: int) None
Context.enable_direct(enum: int) None
Context.disable_direct(enum: int) None
Context.finish() None
Context.copy_buffer(dst: Buffer, src: Buffer, size: int = -1, *, read_offset: int = 0, write_offset: int = 0) None
Context.copy_framebuffer(dst: Union[Framebuffer, Texture], src: Framebuffer) None
Context.detect_framebuffer(glo: Optional[int] = None) Framebuffer
Context.gc() int
Context.__enter__()
Context.__exit__(exc_type, exc_val, exc_tb)

Attributes

Context.gc_mode
Context.objects
Context.line_width
Context.point_size
Context.depth_func
Context.blend_func
Context.blend_equation
Context.viewport
Context.scissor
Context.version_code
Context.screen
Context.fbo
Context.front_face
Context.cull_face
Context.wireframe
Context.max_samples
Context.max_integer_samples
Context.max_texture_units
Context.default_texture_unit
Context.max_anisotropy
Context.multisample
Context.patch_vertices
Context.provoking_vertex
Context.polygon_offset
Context.error
Context.extensions
Context.info
Context.mglo
Context.extra

Context Flags

Context flags are used to enable or disable states in the context. These are not the same enum values as in opengl, but are rather bit flags so we can or them together setting multiple states in a simple way.

These values are available in the Context object and in the moderngl module when you don’t have access to the context.

import moderngl

# From moderngl
ctx.enable_only(moderngl.DEPTH_TEST | moderngl.CULL_FACE)

# From context
ctx.enable_only(ctx.DEPTH_TEST | ctx.CULL_FACE)
Context.NOTHING = 0
Context.BLEND = 1
Context.DEPTH_TEST = 2
Context.CULL_FACE = 4
Context.RASTERIZER_DISCARD = 8
Context.PROGRAM_POINT_SIZE = 16

Primitive Modes

Context.POINTS = 0
Context.LINES = 1
Context.LINE_LOOP = 2
Context.LINE_STRIP = 3
Context.TRIANGLES = 4
Context.TRIANGLE_STRIP = 5
Context.TRIANGLE_FAN = 6
Context.LINES_ADJACENCY = 10
Context.LINE_STRIP_ADJACENCY = 11
Context.TRIANGLES_ADJACENCY = 12
Context.TRIANGLE_STRIP_ADJACENCY = 13
Context.PATCHES = 14

Texture Filters

Also available in the Context instance including mode details.

Context.NEAREST = 9728
Context.LINEAR = 9729
Context.NEAREST_MIPMAP_NEAREST = 9984
Context.LINEAR_MIPMAP_NEAREST = 9985
Context.NEAREST_MIPMAP_LINEAR = 9986
Context.LINEAR_MIPMAP_LINEAR = 9987

Blend Functions

Blend functions are used with Context.blend_func to control blending operations.

# Default value
ctx.blend_func = ctx.SRC_ALPHA, ctx.ONE_MINUS_SRC_ALPHA
Context.ZERO = 0
Context.ONE = 1
Context.SRC_COLOR = 768
Context.ONE_MINUS_SRC_COLOR = 769
Context.SRC_ALPHA = 770
Context.ONE_MINUS_SRC_ALPHA = 771
Context.DST_ALPHA = 772
Context.ONE_MINUS_DST_ALPHA = 773
Context.DST_COLOR = 774
Context.ONE_MINUS_DST_COLOR = 775

Blend Function Shortcuts

Context.DEFAULT_BLENDING = (770, 771)
Context.ADDITIVE_BLENDING = (1, 1)
Context.PREMULTIPLIED_ALPHA = (770, 1)

Blend Equations

Used with Context.blend_equation.

Context.FUNC_ADD = 32774
Context.FUNC_SUBTRACT = 32778
Context.FUNC_REVERSE_SUBTRACT = 32779
Context.MIN = 32775
Context.MAX = 32776

Other Enums

Context.FIRST_VERTEX_CONVENTION = 36429
Context.LAST_VERTEX_CONVENTION = 36430

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

 1import moderngl
 2
 3
 4class ContextManager:
 5    ctx = None
 6
 7    @staticmethod
 8    def get_default_context(allow_fallback_standalone_context=True) -> moderngl.Context:
 9        '''
10            Default context
11        '''
12
13        if ContextManager.ctx is None:
14            try:
15                ContextManager.ctx = moderngl.create_context()
16            except:
17                if allow_fallback_standalone_context:
18                    ContextManager.ctx = moderngl.create_standalone_context()
19                else:
20                    raise
21
22        return ContextManager.ctx

example.py

1from context_manager import ContextManager
2
3ctx = ContextManager.get_default_context()
4print(ctx.version_code)