21.2. Shader Nodes

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”.

SoShaderProgram and SoShaderObject 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.

With some languages (Cg or ARB_language), only one vertex shader, one geometry shader and one fragment shader can be active at the same time. In this case, only the first vertex shader, the first geometry shader, and the first fragment shader are used.

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:

  • ARB_PROGRAM: The source is an ARB vertex or fragment shader.

  • CG_PROGRAM: The source is a Cg program.

  • GLSL_PROGRAM: The source is a GLSL program.

  • FILENAME: Only the name of the file containing the source is given (default).

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 set toARB_PROGRAM, CG_PROGRAM,or GLSL_PROGRAM).

parameter (SoMFShaderParameter)

Defines a set of uniform parameters for the shader object.

SoShaderParameter Nodes

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 (Cg or GLSL).

identifier (SoSFInt32)

Specifies the parameter’s integer identifier. Used with the ARB_ language, which has no string naming convention. This identifier is declared and used within vertex or fragment shaders.

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 , …).