Program#

Program#

class arcade.gl.Program(ctx: Context, *, vertex_shader: str, fragment_shader: str = None, geometry_shader: str = None, tess_control_shader: str = None, tess_evaluation_shader: str = None, varyings: List[str] = None, varyings_capture_mode: str = 'interleaved')[source]#

Bases: object

Compiled and linked shader program.

Currently supports vertex, fragment and geometry shaders. Transform feedback also supported when output attributes names are passed in the varyings parameter.

The best way to create a program instance is through arcade.gl.Context.program()

Access Uniforms via the [] operator. Example:

program['MyUniform'] = value
Parameters
  • ctx (Context) – The context this program belongs to

  • vertex_shader (str) – vertex shader source

  • fragment_shader (str) – fragment shader source

  • geometry_shader (str) – geometry shader source

  • tess_control_shader (str) – tessellation control shader source

  • tess_evaluation_shader (str) – tessellation evaluation shader source

  • varyings (List[str]) – List of out attributes used in transform feedback.

  • varyings_capture_mode (str) – The capture mode for transforms. "interleaved" means all out attribute will be written to a single buffer. "separate" means each out attribute will be written separate buffers. Based on these settings the transform() method will accept a single buffer or a list of buffer.

attribute_key: str#

Internal cache key used with vertex arrays

property ctx: Context#

The context this program belongs to

Type

arcade.gl.Context

property glo: int#

The OpenGL resource id for this program

Type

int

property attributes: Iterable[arcade.gl.types.AttribFormat]#

List of attribute information

property varyings: List[str]#

Out attributes names used in transform feedback

Type

list of str

property out_attributes: List[str]#

Out attributes names used in transform feedback.

Warning

Old alias for varyings. May be removed in the future.

Type

list of str

property varyings_capture_mode: str#

Get the capture more for transform feedback (single, multiple).

This is a read only property since capture mode can only be set before the program is linked.

property geometry_input: int#

The geometry shader’s input primitive type. This an be compared with GL_TRIANGLES, GL_POINTS etc. and is queried when the program is created.

Type

int

property geometry_output: int#

The geometry shader’s output primitive type. This an be compared with GL_TRIANGLES, GL_POINTS etc. and is queried when the program is created.

Type

int

property geometry_vertices: int#

The maximum number of vertices that can be emitted. This is queried when the program is created.

Type

int

delete()[source]#

Destroy the underlying OpenGL resource. Don’t use this unless you know exactly what you are doing.

static delete_glo(ctx, prog_id)[source]#
set_uniform_safe(name: str, value: Any)[source]#

Safely set a uniform catching KeyError.

Parameters
  • name (str) – The uniform name

  • value (Any) – The uniform value

set_uniform_array_safe(name: str, value: List[Any])[source]#

Safely set a uniform array. Arrays can be shortened by the glsl compiler not all elements are determined to be in use. This function checks the length of the actual array and sets a subset of the values if needed. If the uniform don’t exist no action will be done.

Parameters
  • name (str) – Name of uniform

  • value (List[Any]) – List of values

use()[source]#

Activates the shader. This is normally done for you automatically.

static compile_shader(source: str, shader_type: ctypes.c_uint) ctypes.c_uint[source]#

Compile the shader code of the given type.

shader_type could be GL_VERTEX_SHADER, GL_FRAGMENT_SHADER, …

Returns the shader id as a GLuint

Link a shader program

Program Members#

Uniform#

class arcade.gl.uniform.Uniform(program_id, location, name, data_type, array_length)[source]#

Bases: object

A Program uniform

Parameters
  • location (int) – The location of the uniform in the program

  • name (str) – Name of the uniform in the program

  • data_type (gl.GLenum) – The data type of the uniform (GL_FLOAT

property location: int#

The location of the uniform in the program

property name: str#

Name of the uniform

property array_length: int#

Length of the uniform array. If not an array 1 will be returned

property components: int#

How many components for the uniform. A vec4 will for example have 4 components.

getter#
setter#

UniformBlock#

class arcade.gl.uniform.UniformBlock(glo: int, index: int, size: int, name: str)[source]#

Bases: object

Wrapper for a uniform block in shaders.

glo#
index#
size#
name#
property binding: int#

Get or set the binding index for this uniform block

getter()[source]#
setter(value: int)[source]#