зеркало из https://github.com/AvaloniaUI/angle.git
228 строки
9.4 KiB
Plaintext
228 строки
9.4 KiB
Plaintext
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 2, Sept 15, 2021
|
||
|
||
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 GetCompressedTexImageANGLE(enum target, int level, 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 GetCompressedTexImageANGLE(GLenum target, GLint level, void *pixels);
|
||
|
||
void GetRenderbufferImageANGLE(GLenum target, GLenum format, GLenum type,
|
||
void *pixels);
|
||
|
||
For GetTexImageANGLE and GetCompressedTexImageANGLE, <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.
|
||
|
||
GetTexImageANGLE and GetRenderbufferImageANGLE 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.
|
||
|
||
When called, GetCompressedTexImageANGLE writes n ubytes of compressed
|
||
image data to the pixel pack buffer or client memory pointed to by pixels.
|
||
n is the value of TEXTURE_COMPRESSED_IMAGE_SIZE for the texture image. The
|
||
compressed image data is formatted according to the definition of the texture's
|
||
internal format.
|
||
|
||
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).
|
||
|
||
An INVALID_OPERATION error is generated by GetCompressedTexImageANGLE if the
|
||
texture image is stored with an uncompressed internal format.
|
||
|
||
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
|
||
---- ------------- --------- ----------------------------------------
|
||
2 Sept 15, 2021 jmadill Add GetCompressedTexImageANGLE
|
||
1 Oct 24, 2019 jmadill Initial version
|