GL_OES_sample_variables#

Supported Hardware#

Series6, Series6XE, Series6XT

Valid APIs#

OpenGL ES 3.x

Description#

This extension is one of three extensions which enhances OpenGL ES’s programmability with respect to how multisampling is performed:

  • GL_OES_sample_variables

  • GL_OES_sample_shading

  • GL_OES_shader_multisample_interpolation

GL_OES_sample_variables is required by the other two extensions, and adds a number of variables accessible to a fragment shader that allow control over each individual sample that contributes to the current fragment:

in lowp int gl_SampleID*  // The ID of the current sample being shaded.
in mediump vec2 gl_SamplePosition* // The sub-pixel position of the sample, in the range [0,1], relative to the bottom left of the pixel.
in highp int gl_SampleMaskIn[(gl_MaxSamples+31)/32] // The sample mask generated for the current fragment by the fixed function pipeline.
out highp int gl_SampleMask[(gl_MaxSamples+31)/32]** // Output sample mask, allowing the shader to generate a different mask, programmably.

* Any use of these variables will force the fragment shader to run at sample rate, increasing the amount of fragment work.

** gl_SampleMask will be filled in with the value of gl_SampleMaskIn if it is never written to. If any execution path might write to it, all paths must write to it, or the value will be undefined.

Example#

#extension GL_OES_sample_variables : require
void main()
{
    ...
    // Safely invert the sample mask
    for (uint i = 0; i < ((gl_MaxSamples+31)/32); ++i)
    {
        gl_SampleMask[i] == !gl_SampleMaskIn[i];
    }
    ...
}