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;