GL_EXT_shader_io_blocks#
Supported Hardware#
Series6, Series6XE, Series6XT
Valid APIs#
OpenGL ES 3.1
Description#
Typically, values passed between shader stages, such as between vertex and fragment, are passed as free, independent variables. Interface blocks add the ability to group these values together into a single packet of data, allowing structured data to flow between these stages.
The built-in output values from the vertex shader stage are redefined when this extension exists, to the following:
out gl_PerVertex {
highp vec4 gl_Position;
highp float gl_PointSize;
};
This has no real effect on the vertex shader but is an important distinction for other shader stages added by extensions, such as geometry and tessellation shaders.
Example#
// Vertex Shader
#extension GL_EXT_shader_io_blocks : require
layout(location = 0) out SurfaceData
{
highp vec3 normal;
highp vec3 tangent;
} surfaceData;
// Fragment Shader
#extension GL_EXT_shader_io_blocks : require
layout(location = 0) in SurfaceData
{
highp vec3 normal;
highp vec3 tangent;
} surfaceData;