NAME
OpenGL::Sandbox::Program - Wrapper object for OpenGL shader program pipeline
VERSION
version 0.120
DESCRIPTION
OpenGL shaders get combined into a pipeline. In older versions of OpenGL, there was only one program composed of a vertex shader and fragment shader, and attaching one of those shaders was a global change. In newer OpenGL, you may assemble multiple program pipelines and switch between them.
This class tries to support both APIs, by holding a set of shaders which you can then "bind". On newer OpenGL, this calls glUseProgram
. On older OpenGL, this changes the global vertex and fragment shaders to the ones referenced by this object.
ATTRIBUTES
name
Human-readable name of this program (not GL's integer "name")
prepared
Boolean; whether the program is ready to run. This is always 'true' for older global-program OpenGL.
shaders
A hashref of shaders, each of which will be attached to the program when it is activated. The keys of the hashref are up to you, and simply to help diagnostics or merging shader configurations together with defaults.
shader_list
A convenient accessor for listing out the values of the "shader" hash.
id
The OpenGL integer 'name' of this program. On older OpenGL with the global program, this will always be undef
. On newer OpenGL, this should always return a value because accessing it will call glCreateProgram
.
- has_id
-
True if the id attribute has been lazy-loaded already.
uniforms
Lazy-built hashref listing all uniforms of the compiled program.
- has_uniforms
-
Whether this has been lazy-built yet
- clear_uniforms
-
Remove the cache, to be rebuilt on next use
METHODS
bind
$program->bind;
Begin using this program as the active GL pipeline.
Returns $self
for convenient chaining.
prepare
For relevant implementations, this attaches the shaders and links the program. If it fails, this throws an exception. For OpenGL 4 implementation, this only happens once, and any changes to "shaders" afterward are ignored. Use "unprepare" to remove the compiled state and be able to rearrange the shaders.
Returns $self
for convenient chaining.
unprepare
Release resources allocated by "prepare".
attr_by_name
Return the attribute ID of the given name, for the prepared program.
uniform_location
Return the uniform ID of the given name, for the prepared program.
set_uniform
$prog->set_uniform( $name, \@values );
$prog->set_uniform( $name, $opengl_array );
Set the value of a uniform. This attempts to guess at the size/geometry of the uniform based on the number or type of values given.
set
Alias for set_uniform
.
AUTHOR
Michael Conrad <mike@nrdvana.net>
COPYRIGHT AND LICENSE
This software is copyright (c) 2019 by Michael Conrad.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.