/**
 * Inventor Shader API.
 *
 * @defgroup InventorShaders Inventor Shader API
 * @ingroup ShaderAPI
 *
 * @VSGEXT Open Inventor Shader API state accessors.
 *
 * @SEE_ALSO
 *   SoShaderProgram
 *
 */

/**
 * @defgroup InventorShaderState ShaderState API
 * @ingroup InventorShaders
 *
 * @VSGEXT Open Inventor Shader API state accessors.
 *
 * @DESCRIPTION
 *   Open Inventor Shader API state accessors are functions defined to get
 *   information from the state. It covers transformation, lighting,
 *   material and clip plane properties. These properties are accessible
 *   whatever the shader pipeline stage is.
 *
 */

/**
 * @defgroup TransparencyShaders Transparency Shader API
 * @ingroup InventorShaders
 *
 * To properly handle transparency, your fragment shader should contains the following function calls:
 * - You should enclose your code in if ( OivDepthPeel(gl_FragCoord.xyz) ) { } condition
 * - You should output your color using OivDepthPeelingOutputColor() method
 *
 * These methods are accessible by including the <Inventor/oivDepthPeeling_frag.h> header in your shader:
 * Ex:
 * @code
 * //!oiv_include <Inventor/oivDepthPeeling_frag.h>
 * void main()
 * {
 *   if ( OivDepthPeel(gl_FragCoord.xyz) )
 *   {
 *     Vec4 color = vec4(1, 0, 0, 0.5);
 *     OivDepthPeelingOutputColor(color);
 *   }
 * }
 * @endcode
 */

/**
 * @defgroup AlgebraicShapeShaders AlgebraicShape Shader API
 * @ingroup InventorShaders
 *
 * These API are available when defining a custom algebraic shape.
 *
 * @SEE_ALSO
 *   SoAlgebraicShape
 *
 */

/**
 * @defgroup InventorVertexAttributes Vertex attributes
 * @ingroup InventorShaders
 *
 * @VSGEXT Open Inventor Shader API shape attributes accessors.
 *
 * @DESCRIPTION
 *   Access to attribute values such as position are implementation dependant.
 *   Following functions define a generic way to access to these values.
 *   Available only from the vertex shader.
 *
 */

/**
 * @defgroup InventorInstancing Instancing variables
 * @ingroup InventorShaders
 *
 * @VSGEXT Open Inventor Shader API instancing parameters accessors.
 *
 * @DESCRIPTION
 *   The functions in this API are used to get the values of the
 *   instance parameters. Available in all shader stages.
 *
 * @SEE_ALSO
 *   SoMultipleInstance
 *   SoInstanceParameter
 *
 */

/**
 * @defgroup InventorShaderVariables Shader variables
 * @ingroup InventorShaders
 *
 * @VSGEXT Open Inventor Shader API variables accessors.
 *
 * @DESCRIPTION
 *   Since OpenGL 3.2, a number of shader inputs and outputs like
 *   gl_FrontColor or gl_TexCoord are deprecated and not available
 *   anymore in Core Profile.
 *
 *   The aim of the functions in this API is to provide the same
 *   level of functionnality as those deprecated variables, while
 *   ensuring compatibility with Core Profile at the same time.
 *
 *   These methods are accessible by including the
 *   <Inventor/oivShaderVariables.h> header in your shader:
 * @code
 * //!oiv_include <Inventor/oivShaderVariables.h>
 * void main()
 * {
 *   // legacy code: gl_FragColor = gl_Color;
 *   OivFragmentOutput(OivFragmentColor());
 * }
 * @endcode
 *
 *   For each function in this API, the documentation in oivShaderVariables.h
 *   explains in which shader stage it is available and which legacy variable
 *   corresponds to it. Usually, the name of the function is rather transparent
 *   compared to the name of the corresponding deprecated variable. For example,
 *   OivSetFrontColor(vec4 color) sets the value corresponding to the legacy
 *   gl_FrontColor.
 */
