зеркало из https://github.com/AvaloniaUI/angle.git
156 строки
5.6 KiB
Plaintext
156 строки
5.6 KiB
Plaintext
Name
|
|
|
|
ANGLE_iosurface_client_buffer
|
|
|
|
Name Strings
|
|
|
|
EGL_ANGLE_iosurface_client_buffer
|
|
|
|
Contributors
|
|
|
|
Corentin Wallez
|
|
Geoff Lang
|
|
James Darpinian
|
|
|
|
Contacts
|
|
|
|
Corentin Wallez, Google Inc. (cwallez 'at' google.com)
|
|
|
|
Status
|
|
|
|
Draft
|
|
|
|
Version
|
|
Version 6, Aug 25, 2020
|
|
|
|
Number
|
|
|
|
EGL Extension #??
|
|
|
|
Dependencies
|
|
|
|
This extension is written against the wording of the EGL 1.4
|
|
Specification.
|
|
|
|
Overview
|
|
|
|
This extension allows creating EGL surfaces from IOSurface objects.
|
|
|
|
New Types
|
|
|
|
None
|
|
|
|
New Procedures and Functions
|
|
|
|
None
|
|
|
|
New Tokens
|
|
|
|
Accepted in the <buftype> parameter of eglCreatePbufferFromClientBuffer:
|
|
|
|
EGL_IOSURFACE_ANGLE 0x3454
|
|
EGL_IOSURFACE_PLANE_ANGLE 0x345A
|
|
EGL_TEXTURE_RECTANGLE_ANGLE 0x345B
|
|
EGL_TEXTURE_TYPE_ANGLE 0x345C
|
|
EGL_TEXTURE_INTERNAL_FORMAT_ANGLE 0x345D
|
|
EGL_IOSURFACE_USAGE_HINT_ANGLE 0x348A
|
|
|
|
Accepted in the <attribute> parameter of
|
|
eglGetConfigAttrib:
|
|
|
|
EGL_BIND_TO_TEXTURE_TARGET_ANGLE 0x348D
|
|
|
|
Additions to Chapter 3 of the EGL 1.4 Specification (EGL Functions and Errors)
|
|
|
|
Replace the last sentence of paragraph 1 of Section 3.5.3 with the
|
|
following text.
|
|
"Currently, the only client API resources which may be bound in this
|
|
fashion are OpenVG VGImage objects and IOSurface objects."
|
|
|
|
Replace the third paragraph of Section 3.5.3 with the following text.
|
|
"<buftype> specifies the type of buffer to be bound. The only allowed values
|
|
of <buftype> are EGL_OPENVG_IMAGE and EGL_IOSURFACE_ANGLE".
|
|
|
|
Append the following text to the fourth paragraph of Section 3.5.3.
|
|
"When <buftype> is EGL_IOSURFACE_ANGLE, <buffer> must be a valid IOSurface
|
|
object case into the type EGLClientBuffer."
|
|
|
|
Append to the end of Section 3.5.3.
|
|
"When <buftype> is EGL_IOSURFACE_ANGLE, <attrib_list> must contain all the
|
|
following attributes otherwise EGL_BAD_PARAMETER is generated. The
|
|
attributes must satisfy the following constraints otherwise
|
|
EGL_BAD_ATTRIBUTE is generated:
|
|
- EGL_TEXTURE_TYPE_ANGLE, and EGL_TEXTURE_INTERNAL_FORMAT_ANGLE followed
|
|
by OpenGL enums for texture types, and texture internal format
|
|
respectively.
|
|
- EGL_TEXTURE_FORMAT with a value of EGL_TEXTURE_RGBA
|
|
- EGL_WIDTH with a value between 1 and the width of <buffer>.
|
|
- EGL_HEIGHT with a value between 1 and the height of <buffer>.
|
|
- EGL_TEXTURE_TARGET with a value that matches the attribute
|
|
EGL_BIND_TO_TEXTURE_TARGET_ANGLE as queried from eglGetConfigAttrib.
|
|
- EGL_IOSURFACE_PLANE_ANGLE with a value between 0 and the number of
|
|
planes of <buffer> (exclusive).
|
|
|
|
In addition the EGL_TEXTURE_TYPE_ANGLE and
|
|
EGL_TEXTURE_INTERNAL_FORMAT_ANGLE attributes must be one of the
|
|
combinations listed in table egl.iosurface.formats or an
|
|
EGL_BAD_PARAMETER is generated. The combination must also be a valid
|
|
combinations for glTexImage2D or EGL_BAD_PARAMETER is generated.
|
|
|
|
The attribute EGL_IOSURFACE_USAGE_HINT_ANGLE may optionally be specified as
|
|
a combination of the bits EGL_IOSURFACE_READ_HINT_ANGLE and
|
|
EGL_IOSURFACE_WRITE_HINT_ANGLE. On the iOS Simulator platform, where
|
|
IOSurface support is incomplete, these hints indicate whether the intent is
|
|
to read from the IOSurface, write to it, or both. Explicitly passing 0 for
|
|
this attribute is equivalent to setting both the read and write usage
|
|
bits. This attribute is ignored on other platforms."
|
|
|
|
---------------------------------------------------------------------------
|
|
Texture Type Texture Internal Format
|
|
---------------------------------------------------------------------------
|
|
GL_UNSIGNED_BYTE GL_RED
|
|
GL_UNSIGNED_SHORT GL_RED
|
|
GL_UNSIGNED_SHORT GL_R16UI
|
|
GL_UNSIGNED_BYTE GL_RG
|
|
GL_UNSIGNED_SHORT GL_RG
|
|
GL_UNSIGNED_BYTE GL_RGB
|
|
GL_UNSIGNED_BYTE GL_BGRA_EXT
|
|
GL_UNSIGNED_INT_2_10_10_10_REV GL_RGB10_A2
|
|
GL_HALF_FLOAT GL_RGBA
|
|
---------------------------------------------------------------------------
|
|
Table egl.iosurface.formats - Valid combinations of format, type and
|
|
internal format for IOSurface-backed pbuffers.
|
|
---------------------------------------------------------------------------
|
|
|
|
Append to the end of Section 3.5.3.
|
|
"When a pbuffer is created with type EGL_IOSURFACE_ANGLE, the contents
|
|
of the associcated IOSurface object are undefined while the pbuffer is
|
|
bound to a client texture."
|
|
|
|
Append to the end of Table 3.1.
|
|
---------------------------------------------------------------------------
|
|
Attribute Type Notes
|
|
---------------------------------------------------------------------------
|
|
EGL_BIND_TO_TEXTURE_TARGET_ANGLE enum Texture target supported by
|
|
IOSurface-backed pbuffers.
|
|
---------------------------------------------------------------------------
|
|
|
|
|
|
Issues
|
|
|
|
1. Can RGB formats be supported?
|
|
|
|
RESOLVED: Support for RGB internal formats is added in version 3. Surfaces
|
|
with an RGB format will ensure that the alpha channel of the IOSurface is
|
|
reset to 1.0 when it is used.
|
|
|
|
Revision History
|
|
|
|
Version 1, 2017/12/06 - first draft.
|
|
Version 2, 2019/04/01 - Allow MakeCurrent.
|
|
Version 3, 2019/08/13 - Allow RGB internal formats
|
|
Version 4, 2019/12/28 - Add usage hint; require TEXTURE_RECTANGLE on macOS
|
|
and TEXTURE_2D on iOS
|
|
Version 5, 2020/06/30 - Allow RGB10_A2 internal formats
|
|
Version 6, 2020/08/25 - Allow R16 and RG16 formats for P010 surfaces
|