Program#

Program#

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

Bases:

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 – The context this program belongs to

  • vertex_shader – vertex shader source

  • fragment_shader – fragment shader source

  • geometry_shader – geometry shader source

  • tess_control_shader – tessellation control shader source

  • tess_evaluation_shader – tessellation evaluation shader source

  • varyings – List of out attributes used in transform feedback.

  • varyings_capture_mode – 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

ctx#

The context this program belongs to

Type:

arcade.gl.Context

glo#

The OpenGL resource id for this program

Type:

int

attributes#

List of attribute information

varyings#

Out attributes names used in transform feedback

Type:

list of str

out_attributes#

Out attributes names used in transform feedback.

Warning

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

Type:

list of str

varyings_capture_mode#

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.

geometry_input#

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

geometry_output#

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

geometry_vertices#

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]#

Deletes a program. This is normally called automatically when the program is garbage collected.

Parameters:
  • ctx – The context

  • prog_id – The OpenGL resource id

🧙 self[item] Uniform | UniformBlock[source]#

Get a uniform or uniform block

🧙 self[key] = value[source]#

Set a uniform value

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

Safely set a uniform catching KeyError.

Parameters:
  • name – The uniform name

  • value – 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 – Name of uniform

  • value – List of values

use()[source]#

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

static compile_shader(source: str, shader_type: int) 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(ctx, program_id, location, name, data_type, array_length)[source]#

Bases:

A Program uniform

Parameters:
  • ctx – The context

  • program_id – The program id to which this uniform belongs

  • location – The uniform location

  • name – The uniform name

  • data_type – The data type of the uniform

  • array_length – The array length of the uniform

location#

The location of the uniform in the program

name#

Name of the uniform

array_length#

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

components#

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:

Wrapper for a uniform block in shaders.

glo#

The OpenGL object handle

index#

The index of the uniform block

size#

The size of the uniform block

name#

The name of the uniform block

binding#

Get or set the binding index for this uniform block

getter()[source]#

The getter function for this uniform block. Returns self.

setter(value: int)[source]#

The setter function for this uniform block.

Parameters:

value – The binding index to set.