|
|
Name
|
|
|
|
|
|
ANGLE_get_image
|
|
|
|
|
|
Name Strings
|
|
|
|
|
|
GL_ANGLE_get_image
|
|
|
|
|
|
Contributors
|
|
|
|
|
|
Jamie Madill
|
|
|
|
|
|
Contact
|
|
|
|
|
|
Jamie Madill (jmadill 'at' google.com)
|
|
|
|
|
|
Notice
|
|
|
|
|
|
Copyright (c) 2019 The Khronos Group Inc. Copyright terms at
|
|
|
http://www.khronos.org/registry/speccopyright.html
|
|
|
|
|
|
Status
|
|
|
|
|
|
Draft
|
|
|
|
|
|
Version
|
|
|
|
|
|
Version 1, October 21, 2019
|
|
|
|
|
|
Number
|
|
|
|
|
|
OpenGL ES Extension #??
|
|
|
|
|
|
Dependencies
|
|
|
|
|
|
Requires OpenGL ES 2.0
|
|
|
|
|
|
Written against the OpenGL ES 3.2 specification.
|
|
|
|
|
|
Overview
|
|
|
|
|
|
This extension allows the OpenGL application to query and read back Texture
|
|
|
and Renderbuffer pixel data. The OpenGL context exposes new queries for the
|
|
|
implementation pixel format and type similar to glReadPixels. The context
|
|
|
also exposes new commands to read back pixel data with these parameters.
|
|
|
|
|
|
New Procedures and Functions
|
|
|
|
|
|
void GetTexImageANGLE(GLenum target, GLint level, GLenum format, GLenum type,
|
|
|
void *pixels);
|
|
|
|
|
|
void GetRenderbufferImageANGLE(GLenum target, GLint level, GLenum format,
|
|
|
GLenum type, void *pixels);
|
|
|
|
|
|
New Tokens
|
|
|
|
|
|
None
|
|
|
|
|
|
Additions to the OpenGL ES Specification
|
|
|
|
|
|
Update section 8.11.2 "Texture Parameter Queries":
|
|
|
|
|
|
Change "<pname> must be one of IMAGE_FORMAT_COMPATIBILITY_TYPE, TEXTURE_-
|
|
|
IMMUTABLE_FORMAT, TEXTURE_IMMUTABLE_LEVELS, or one of the symbolic
|
|
|
values in table 8.19." to "<pname> must be one of IMAGE_FORMAT_COMPATIBILITY_-
|
|
|
TYPE, TEXTURE_IMMUTABLE_FORMAT, TEXTURE_IMMUTABLE_LEVELS, IMPLEMENTATION_-
|
|
|
COLOR_READ_TYPE, IMPLEMENTATION_COLOR_READ_FORMAT or one of the symbolic
|
|
|
values in table 8.19.".
|
|
|
|
|
|
Add a paragrah: "Querying <pname> with IMPLEMENTATION_COLOR_READ_TYPE or
|
|
|
IMPLEMENTATION_COLOR_READ_FORMAT returns the implementation-dependent read
|
|
|
format and type for use with GetTexImageANGLE."
|
|
|
|
|
|
Update section 9.2.6 "Renderbuffer Object Queries":
|
|
|
|
|
|
Add a paragraph: "If <pname> is IMPLEMENTATION_COLOR_READ_TYPE or
|
|
|
IMPLEMENTATION_COLOR_READ_FORMAT then <params> will contain the
|
|
|
implementation-dependent read format and type for use with
|
|
|
GetRenderbufferImageANGLE."
|
|
|
|
|
|
Add a section "Texture and Renderbuffer Image Queries":
|
|
|
|
|
|
Texture and Renderbuffer images may be obtained from a Texture or
|
|
|
Renderbuffer with the commands
|
|
|
|
|
|
void GetTexImageANGLE(GLenum target, GLint level, GLenum format, GLenum type,
|
|
|
void *pixels);
|
|
|
|
|
|
void GetRenderbufferImageANGLE(GLenum target, GLenum format, GLenum type,
|
|
|
void *pixels);
|
|
|
|
|
|
For GetTexImageANGLE, <target> specifies the target to which the texture
|
|
|
object is bound. target must be one of TEXTURE_2D, TEXTURE_3D,
|
|
|
TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY, indicating a two- or three-
|
|
|
dimensional, two-dimensional array, cube map array respectively. <target>
|
|
|
may also be one of the targets from table 8.20, indicating the
|
|
|
corresponding face of a cube map texture.
|
|
|
|
|
|
For GetRenderbufferImageANGLE, <target> must be RENDERBUFFER.
|
|
|
|
|
|
<level> is a level-of-detail number, <format> is a pixel format from table 8.5,
|
|
|
and <type> is a pixel type from table 8.4.
|
|
|
|
|
|
These commands obtain component groups from a texture or renderbuffer image
|
|
|
with the indicated level-of-detail. If <format> is a color format then the
|
|
|
components are assigned among R, G, B, and A, starting with the first group
|
|
|
in the first row, and continuing by obtaining groups in order from each row
|
|
|
and proceeding from the first row to the last, and from the first image to
|
|
|
the last for three-dimensional textures. Two-dimensional array and cube map
|
|
|
array textures are treated as three-dimensional images, where the layers are
|
|
|
treated as rows or images. Cube map textures are treated as three-dimensional
|
|
|
images with a depth of 6, where the cube map faces are ordered as image layers
|
|
|
as shown in table 8.24.
|
|
|
|
|
|
If <format> is DEPTH_COMPONENT, DEPTH_STENCIL, or STENCIL_INDEX, then
|
|
|
each depth component and/or stencil index is assigned with the same ordering of
|
|
|
rows and images.
|
|
|
|
|
|
These groups are then packed and placed in client or pixel buffer object memory.
|
|
|
If a pixel pack buffer is bound (as indicated by a non-zero value of PIXEL_-
|
|
|
PACK_BUFFER_BINDING), <pixels> is an offset into the pixel pack buffer;
|
|
|
otherwise, <pixels> is a pointer to client memory. Pixel storage modes that are
|
|
|
applicable to ReadPixels are applied, as described in table 16.1 and section
|
|
|
16.1.2.
|
|
|
|
|
|
For three-dimensional, two-dimensional array, cube map array, and cube map
|
|
|
textures pixel storage operations are applied as if the image were two-
|
|
|
dimensional, except that the additional pixel storage state values
|
|
|
PACK_IMAGE_HEIGHT and PACK_SKIP_IMAGES are applied. The correspondence of texels
|
|
|
to memory locations is as defined for TexImage3D in section 8.5.
|
|
|
|
|
|
The row length, number of rows, image depth, and number of images are determined
|
|
|
by the size of the texture or renderbuffer image (including any borders).
|
|
|
|
|
|
Errors:
|
|
|
|
|
|
An INVALID_ENUM error is generated by GetTexImage if <target> is
|
|
|
not one of TEXTURE_2D, TEXTURE_3D, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY,
|
|
|
or one of the targets from table 8.20.
|
|
|
|
|
|
An INVALID_ENUM error is generated by GetRenderbufferImage is <target> is not
|
|
|
RENDERBUFFER.
|
|
|
|
|
|
An INVALID_VALUE error is generated if <level> is negative or larger than
|
|
|
the maximum allowable level.
|
|
|
|
|
|
An INVALID_OPERATION error is generated if any of the following mismatches
|
|
|
between <format> and the internal format of the texture or renderbuffer image
|
|
|
exist:
|
|
|
|
|
|
* <format> is a color format (one of the formats in table 8.3 whose target is
|
|
|
the color buffer) and the base internal format of the texture or renderbuffer
|
|
|
image is not a color format.
|
|
|
|
|
|
* <format> is DEPTH_COMPONENT and the base internal format is not
|
|
|
DEPTH_COMPONENT or DEPTH_STENCIL.
|
|
|
|
|
|
* <format> is DEPTH_STENCIL and the base internal format is not DEPTH_-
|
|
|
STENCIL.
|
|
|
|
|
|
* <format> is STENCIL_INDEX and the base internal format is not
|
|
|
STENCIL_INDEX or DEPTH_STENCIL.
|
|
|
|
|
|
* <format> is one of the integer formats in table 8.5 and the internal format
|
|
|
of the texture or renderbuffer image is not integer, or <format> is not one
|
|
|
of the integer formats in table 8.5 and the internal format is integer.
|
|
|
|
|
|
An INVALID_OPERATION error is generated if a pixel pack buffer object
|
|
|
is bound and packing the texture or renderbuffer image into the buffer’s
|
|
|
memory would exceed the size of the buffer.
|
|
|
|
|
|
An INVALID_OPERATION error is generated if a pixel pack buffer object
|
|
|
is bound and <pixels> is not evenly divisible by the number of basic machine
|
|
|
units needed to store in memory the GL data type corresponding to type (see
|
|
|
table 8.4).
|
|
|
|
|
|
Dependencies on ARB_texture_rectangle
|
|
|
|
|
|
TEXTURE_RECTANGLE is accepted by GetTexImageANGLE and GetRenderbufferImageANGLE.
|
|
|
|
|
|
An INVALID_VALUE error is generated if <level> is non-zero and the effective
|
|
|
<target> is TEXTURE_RECTANGLE.
|
|
|
|
|
|
New State
|
|
|
|
|
|
Add to table 21.10 "Textures (state per texture object)":
|
|
|
|
|
|
Get Value Type Get Command Initial Value Description Section
|
|
|
-------------------------------- ---- ----------- ------------- --------------------------- -------
|
|
|
IMPLEMENTATION_COLOR_READ_FORMAT E GetTextureParameteriv empty Implementation pixel format 8.11.2
|
|
|
IMPLEMENTATION_COLOR_READ_TYPE E GetTextureParameteriv empty Implementation pixel type 8.11.2
|
|
|
|
|
|
Add to table 21.17 "Renderbuffer (state per renderbuffer object)":
|
|
|
|
|
|
Get Value Type Get Command Initial Value Description Section
|
|
|
-------------------------------- ---- ----------- ------------- --------------------------- -------
|
|
|
IMPLEMENTATION_COLOR_READ_FORMAT E GetRenderbufferParameteriv empty Implementation pixel format 9.2.6
|
|
|
IMPLEMENTATION_COLOR_READ_TYPE E GetRenderbufferParameteriv empty Implementation pixel type 9.2.6
|
|
|
|
|
|
Issues
|
|
|
|
|
|
1) Should GetTexImageANGLE/GetRenderbufferImageANGLE only accept IMPLEMENTATION-
|
|
|
_COLOR_READ_FORMAT/TYPE or should they behave the same as GetTexImage in GL?
|
|
|
|
|
|
Resolved: Keep the spec wording closer to the desktop GL version. It should
|
|
|
not involve much additional implementation work except for validation.
|
|
|
|
|
|
Revision History
|
|
|
|
|
|
Rev. Date Author Changes
|
|
|
---- ------------- --------- ----------------------------------------
|
|
|
1 Oct 24, 2019 jmadill Initial version
|