Difference between revisions of "Program Object"

From OpenGL Wiki
Jump to navigation Jump to search
(General page on program objects.)
 
(Converted to redirect to GLSL Object page.)
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
A '''Program Object''' represents the compiled executable code, in the [[OpenGL Shading Language]], for one or more [[Shader]] stages. A program object is an object in OpenGL, but it does not use the standard [[OpenGL Object|OpenGL Object model.]]
+
#REDIRECT [[GLSL Object#Program objects]]
  
== Creation ==
+
[[Category:Shaders]]
{{main|Shader Compilation}}
 
 
 
Empty program objects are created with this function:
 
 
 
{{funcdef|GLuint {{apifunc|glCreateProgram}}()}}
 
 
 
This will return an empty program object. Programs are deleted with {{apifunc|glDeleteProgram}}.
 
 
 
Once created, program objects must then be filled in with executable code. This is done by [[Shader Compilation|compiling shader objects and linking them into the program]].
 
 
 
=== Pre-link setup ===
 
 
 
Before performing the linking steps for a shader, it is sometimes important to provide certain settings. OpenGL 3.3 or {{extref|explicit_attrib_location}} has replaced the need for most of this, by allowing shaders to provide these settings itself.
 
 
 
== Introspection ==
 
{{main|Program Introspection}}
 
 
 
A successfully linked program object can be queries for its various interfaces, so that the user can set uniforms and perform other upkeep on the object.
 
 
 
== State setting ==
 
 
 
Outside of the state used by the [[#Pre-link setup|pre-link setup]], program objects have the following mutable state:
 
 
 
* The current values of all [[Uniform_(GLSL)#Uniform_management|''active'' uniform variables]].
 
* The current bindings for any [[Interface_Block_(GLSL)#Uniform_blocks|Uniform blocks]].
 
* The current bindings for any [[Interface_Block_(GLSL)#Manual block binding|Shader storage blocks]].
 
 
 
Note that the last two pieces of state only need to be set if you did not [[Interface_Block_(GLSL)#Block_binding|set them directly in the shader]].
 
 
 
[[Category:Shader]]
 
 
[[Category:OpenGL Shading Language]]
 
[[Category:OpenGL Shading Language]]

Latest revision as of 22:40, 27 December 2014