Supported Hardware

Series6, Series6XE, Series6XT

Valid APIs

OpenGL ES 3.x


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.


#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];