Figure 21.4. Shader node classes
Shaders are managed by the node class SoShaderProgram SoShaderProgram SoShaderProgram , a property node that defines the current shader program for all subsequent shapes.
SoShaderObject SoShaderObject SoShaderObject is the abstract class defining the different types of shaders which may be a vertex shader (SoVertexShader SoVertexShader SoVertexShader ), a geometry shader (SoGeometryShader), or a fragment shader (SoFragmentShader SoFragmentShader SoFragmentShader ).
SoShaderParameter SoShaderParameter SoShaderParameter and its derived classes are discussed in the section called “SoShaderParameter Nodes”.
The SoShaderProgram SoShaderProgram SoShaderProgram node has the following field:
shaderObject (SoMFNode) | Specifies the list of shader objects (i.e., vertex shaders, geometry shader, or fragment shaders) which form the shader program. |
The SoShaderObject SoShaderObject SoShaderObject node has the following fields:
isActive (SoSFBool) | Specifies if the shader is active or not. |
sourceType (SoSFEnum) | Specifies the source type defined within the sourceProgram field. Possible values as follows:
|
sourceProgram (SoSFString) | Contains the shader object’s source program, specified by a filename (sourceType set to FILENAME) or by the string containing the program (sourceType GLSL_PROGRAM). |
parameter (SoMFShaderParameter) | Defines a set of uniform parameters for the shader object. |
These nodes allow you to provide uniform parameters (SoUniformShaderParameter SoUniformShaderParameter SoUniformShaderParameter ) or varying parameters (SoVertexShaderParameter SoVertexShaderParameter SoVertexShaderParameter ) to a shader object and thus to the corresponding vertex and/or geometry and/or fragment shader.
The SoShaderParameter SoShaderParameter SoShaderParameter node has the following fields:
name (SoSFString) | Specifies the parameter’s string name. This name is declared and used within high-level shading programs (GLSL). |
identifier (SoSFInt32) | Specifies the parameter’s integer identifier. |
SoShaderParameter SoShaderParameter SoShaderParameter is a base class and its derived classes are actually used to set parameter values. The fields inherited from SoShaderParameter SoShaderParameter SoShaderParameter specify the name/identifier of the parameter, and the fields of the derived class specify the value of the parameter. For example, SoShaderParameter2f SoShaderParameter2f SoShaderParameter2f and SoVertexShaderParameter2f SoVertexShaderParameter2f SoVertexShaderParameter2f store a two-dimensional (float) vector and SoShaderParameterArray3f SoShaderParameterArray3f SoShaderParameterArray3f stores an array of three-dimensional (float) vectors.
Uniform shader parameter nodes (SoUniformShaderParameter SoUniformShaderParameter SoUniformShaderParameter ) can be added directly to the scene graph or added to the parameter field of an SoVertexShader, SoGeometryShader, or SoFragmentShader node, whereas varying parameters (SoVertexShaderParameter SoVertexShaderParameter SoVertexShaderParameter ) should be inserted directly into the scene graph (like other property nodes, such as SoNormal SoNormal SoNormal , …).