CompileShader generates INVALID_OPERATION if shader is not the
name of a valid shader object generated by CreateShader.
Not necessary to test--this behaviour was contradictory and
removed in a later version of GL.
If an active query object is deleted its name immediately
becomes unused, but the underlying object is not deleted until
it is no longer active.
RGB_INTEGER, RGBA_INTEGER, and BGRA_I pixel formats are added to
table 3.5.
The error for setting TEXTURE_BASE_LEVEL to a value other than
zero is changed from INVALID_ENUM to INVALID_VALUE.
I believe Paul's referring to the TEXTURE_RECTANGLE case here, since
zero is the only allowable value for that target.
If drawbuffer zero is not NONE and the buffer it references has
an integer format, the SAMPLE_ALPHA_TO_COVERAGE and
SAMPLE_ALPHA_TO_ONE operations are skipped.
Functions GetQueryObjecti64v and GetQueryObjectui64v are added.
GLSL version 3.30 must be supported.
__VERSION__ should substitute 330.
GLSL 1.40, 1.50, and 3.30 shaders may be linked together.
The "#line x" directive signals line number x.
Previously it signalled line number x+1 (presumably this was a
spec error in GLSL 1.50).
Shaders no longer need to declare "#extension
GL_ARB_explicit_attrib_location..." to take advantage of this
functionality.
Vertex shaders allow location to be specified on input variable
declarations.
For example:
layout(location = 3) in vec4 normal;
is equivalent to:
glBindAttribLocation(prog, 3, "normal");
A link error will occur if an input variable is declared in
multiple vertex shaders with conflicting locations.
A link error will occur if an input variable is assigned a
location greater than or equal to MAX_VERTEX_ATTRIBS.
If an active attribute has a binding explicitly set within the
shader text and a different binding assigned by
BindAttribLocation, the assignment in the shader text is used.
Vertex shaders cannot have output layout qualifiers.
Fragment shaders allow location to be specified on output
variable declarations.
For example:
layout(location = 3, index = 1) out vec4 factor;
establishes that factor is copied out to fragment color 3 as the
second (index one) input to the blend equation.
In a fragment shader output location declaration, if index is
specified, location must also be specified.
In a fragment shader output location declaration, if index is
not specified, it defaults to 0.
A link error will occur if an output variable is declared in
multiple fragment shaders with conflicting locations or index
values.
If a fragment output variable has a binding explicitly set
within the shader text and a different binding assigned by
BindFragDataLocationIndexed or BindFragDataLocation, the
assignment in the shader text is used.
Shaders no longer need to declare "#extension
GL_ARB_shader_bit_encoding..." to take advantage of this
functionality.
Function floatBitsToInt is added.
Function intBitsToFloat is added.
Functions VertexAttribP{1234}ui and VertexAttribP{1234}uiv are
added.
When VertexAttribP{1234}ui and VertexAttribP{1234}uiv are used,
the type parameter must be INT_2_10_10_10_REV or
UNSIGNED_INT_2_10_10_10_REV.
The "normalized" parameter of VertexAttribP{1234}ui and
VertexAttribP{1234}uiv specify whether input data is normalized.
During normalization, the conversion rules specified in
equations 2.1 and 2.2 are followed.
The types INT_2_10_10_10_REV and UNSIGNED_INT_2_10_10_10_REV may
be passed as the type parameter to VertexAttribPointer.
If INT_2_10_10_10_REV or UNSIGNED_INT_2_10_10_10_REV is passed
to VertexAttribPointer, the size must be either 4 or BGRA.
Section 2.8.2 describes the precise format of INT_2_10_10_10_REV
and UNSIGNED_INT_2_10_10_10_REV vertex data formats.
The function VertexAttribDivisor is added. Instanced elements
advance per instance depending on the value of the specified
divisor.
VertextAttribDivisor generates INVALID_VALUE if index is greater
than or equal to MAX_VERTEX_ATTRIBS.
VERTEX_ATTRIB_ARRAY_DIVISOR may be passed to GetVertexAttrib*
functions.
VERTEX_ATTRIB_ARRAY_DIVISOR defaults to 0.
Vertex shader texture access (and by extension, geometry shader
texture access) may be modified by texture swizzle.
Fragment shader texture access may be modified by texture
swizzle.
TexParameter functions now accept TEXTURE_SWIZZLE_R,
TEXTURE_SWIZZLE_G, TEXTURE_SWIZZLE_B, TEXTURE_SWIZZLE_A, or
TEXTURE_SWIZZLE_RGBA.
GetTexParameter now accepts TEXTURE_SWIZZLE_R,
TEXTURE_SWIZZLE_G, TEXTURE_SWIZZLE_B, or TEXTURE_SWIZZLE_A.
Functions GenSamplers and DeleteSamplers are added.
When a sampler object is bound to a texture unit using
BindSampler, its state supersedes that of the texture object
bound to that texture unit.
If the sampler name zero is bound to a texture unit, the
currently bound texture’s sampler state becomes active.
A single sampler object may be bound to multiple texture units
simultaneously.
Section 3.8.2 contains many rules for how sampler objects
behave.
Effects of Sampler Objects on Texture Completeness
If a sampler object and a texture object are simultaneously
bound to the same texture unit, then the sampling state for that
unit is taken from the sampler object (see section 3.8.2). This
can have an effect on the effective completeness of the
texture. In particular, if the texture is not mipmap complete
and the sampler object specifies a TEXTURE_MIN_FILTER requiring
mipmaps, the texture will be considered incomplete for the
purposes of that texture unit. However, if the sampler object
does not require mipmaps, the texture object will be considered
complete. This means that a texture can be considered both
complete and incomplete simultaneously if it is bound to two or
more texture units along with sampler objects with different
states.
IsSampler() may be called to determine whether sampler is the
name of a sampler object.
The current values of a sampler object may be queried using
GetSamplerParameter{if}v and GetSamplerParameterI{i ui}v.
Piglit's sampler-objects.c tests some pnames, but not all of them.
Mesa appears to accept legacy pnames even in core profile.
GetSamplerParameter{if}v and GetSamplerParameterI{i ui}v
generate INVALID_VALUE if the sampler is not the name of a valid
sampler, and INVALID_ENUM if pname is not the name of a valid
property.
Querying TEXTURE_BORDER_COLOR with GetSamplerParameterIiv or
GetSamplerParameterIuiv returns the border color values as
signed integers or unsigned integers, respectively; otherwise
the values are returned as described in section 6.1.2.
The sampler object bound to a texture unit may be queried using
GetIntegerv(SAMPLER_BINDING).
The function BindFragDataLocationIndexed is added.
The function GetFragDataIndex is added.
Linking will fail if if the program has an active output
assigned to a location greater than or equal to the value of
MAX_DUAL_SOURCE_DRAW_BUFFERS and has an active output assigned
an index greater than or equal to one.
The value of MAX_DUAL_SOURCE_DRAW_BUFFERS must be at least 1.
INVALID_OPERATION is generated by drawing functions if any draw
buffers greater than or equal to MAX_DUAL_SOURCE_DRAW_BUFFERS
have values other than NONE while either blend function requires
the second color input for any draw buffer.
Multisample fragment operations are performed using alpha values
from fragment shader output number 0, index 0.
The blending formulas are extended to allow for an additional
source color.
Query type ANY_SAMPLES_PASSED is added.
For occlusion queries with target ANY_SAMPLES_PASSED, if the
number of bits is non-zero, the minimum number of bits is 1.
The QueryCounter function is added.
Timer queries can be used within a BeginQuery/EndQuery block
where the target is TIME_ELAPSED and it does not affect the
result of that query object.
QueryCounter generates INVALID_OPERATION if id is already in use
within a BeginQuery/EndQuery block.
The current time may be queried by calling GetIntegerv or
GetInteger64v with the symbolic constant TIMESTAMP.
Query types TIME_ELAPSED and TIMESTAMP are added.
For timer queries (target TIME_ELAPSED and TIMESTAMP), if the
number of bits is non-zero, the minimum number of bits allowed
is 30.
RGB10_A2UI is added as a required texture and renderbuffer color
format.
RGB10_A2UI is added to table 3.12.