зеркало из https://github.com/AvaloniaUI/angle.git
161 строка
5.5 KiB
Plaintext
161 строка
5.5 KiB
Plaintext
Name
|
|
|
|
ANGLE_window_fixed_size
|
|
|
|
Name Strings
|
|
|
|
EGL_ANGLE_window_fixed_size
|
|
|
|
Contributors
|
|
|
|
John Bauman
|
|
Shannon Woods
|
|
Geoff Lang
|
|
|
|
Contacts
|
|
|
|
John Bauman, Google Inc. (jbauman 'at' google.com)
|
|
|
|
Status
|
|
|
|
Complete
|
|
|
|
Version
|
|
|
|
Version 5, July 23, 2018
|
|
|
|
Number
|
|
|
|
EGL Extension #??
|
|
|
|
Dependencies
|
|
|
|
This extension is written against the wording of the EGL 1.4
|
|
Specification.
|
|
|
|
Overview
|
|
|
|
This extension allows creating a window surface that does not resize
|
|
automatically.
|
|
|
|
New Types
|
|
|
|
None
|
|
|
|
New Procedures and Functions
|
|
|
|
None
|
|
|
|
New Tokens
|
|
|
|
Accepted by the <attribute> parameter of eglQuerySurface and by the
|
|
<attrib_list> parameter of eglCreateWindowSurface:
|
|
|
|
EGL_FIXED_SIZE_ANGLE 0x3201
|
|
|
|
Additions to Chapter 3 of the EGL 1.4 Specification:
|
|
|
|
Modify the third paragraph of Section 3.5.1 (Creating On-Screen Rendering
|
|
Surfaces)
|
|
|
|
"<attrib_list> specifies a list of attributes for the window. The list has
|
|
the same structure as described for eglChooseConfig. Attributes that can
|
|
be specified in <attrib_list> include EGL_RENDER_BUFFER,
|
|
EGL_VG_COLORSPACE, EGL_VG_ALPHA_FORMAT, EGL_FIXED_SIZE_ANGLE, EGL_WIDTH,
|
|
and EGL_HEIGHT."
|
|
|
|
Add before the last paragraph of Section 3.5.1
|
|
|
|
"EGL_FIXED_SIZE_ANGLE specifies whether the surface must be resized by the
|
|
implementation when the native window is resized. The default value is
|
|
EGL_FALSE. Its value can be EGL_TRUE, in which case the size must be
|
|
specified when the window is created, or EGL_FALSE, in which case the size
|
|
is taken from the native window. Its default value is EGL_FALSE.
|
|
|
|
If the value of EGL_FIXED_SIZE_ANGLE is EGL_TRUE, the window surface's
|
|
size in pixels is specified by the EGL_WIDTH and EGL_HEIGHT attributes.
|
|
If its value is EGL_FALSE, then the values of EGL_WIDTH and EGL_HEIGHT
|
|
are ignored and the window surface must be resized by the implementation
|
|
subsequent to the native window being resized, and prior to copying its
|
|
contents to the native window (e.g. in eglSwapBuffers, as described in
|
|
section 3.9.1.1). The default values for EGL_WIDTH and EGL_HEIGHT are zero.
|
|
If the value specified for either of EGL_WIDTH or EGL_HEIGHT is less than
|
|
zero then an EGL_BAD_PARAMETER error is generated."
|
|
|
|
Add the following entry to Table 3.5
|
|
(Queryable surface attributes and types)
|
|
|
|
Attribute Type Description
|
|
-------------------- ------- ---------------------------------------------
|
|
EGL_FIXED_SIZE_ANGLE boolean Surface will not be resized with a native
|
|
window
|
|
|
|
Replace the last paragraph on page 37 in Section 3.5.6 (Surface Attributes)
|
|
|
|
"Querying EGL_WIDTH and EGL_HEIGHT returns respectively the width and
|
|
height, in pixels, of the surface. For a pixmap surface or window surface
|
|
with EGL_FIXED_SIZE_ANGLE set to EGL_FALSE, these values are initially
|
|
equal to the width and height of the native window or pixmap with respect
|
|
to which the surface was created. If the native window is resized and the
|
|
corresponding window surface is not fixed size, the corresponding window
|
|
surface will eventually be resized by the implementation to match (as
|
|
discussed in section 3.9.1). If there is a discrepancy because EGL has not
|
|
yet resized the window surface, the size returned by eglQuerySurface will
|
|
always be that of the EGL surface, not the corresponding native window."
|
|
|
|
Alter the beginning of the first paragraph of Section 3.5.6 (Surface
|
|
Attributes)
|
|
|
|
"The specified attribute of surface is set to value. Attributes that can
|
|
be specified are EGL_MIPMAP_LEVEL, EGL_MULTISAMPLE_RESOLVE,
|
|
EGL_SWAP_BEHAVIOR, EGL_WIDTH, and EGL_HEIGHT."
|
|
|
|
Add the following paragraph to Section 3.5.6 (Surface Attributes)
|
|
|
|
"If attribute is EGL_WIDTH or EGL_HEIGHT then the value specifies the new
|
|
surface width or height respectively. The new width and height are not
|
|
guarenteed to be applied until the next call to eglSwapBuffers or
|
|
eglWaitNative. If the surface does not have EGL_FIXED_SIZE_ANGLE set then
|
|
an EGL_BAD_MATCH error is generated."
|
|
|
|
Add the following paragraph to Section 3.5.6 (Surface Attributes)
|
|
|
|
"Querying EGL_FIXED_SIZE_ANGLE returns EGL_FALSE if the surface will be
|
|
resized to match a native window, and EGL_TRUE if the surface cannot be
|
|
resized."
|
|
|
|
Alter the beginning of the first paragraph of Section 3.9.1.1 (Native
|
|
Window Resizing)
|
|
|
|
"If the surface has EGL_FIXED_SIZE_ANGLE set and EGL_WIDTH or EGL_HEIGHT
|
|
have changed or the surface does not have EGL_FIXED_SIZE_ANGLE set and its
|
|
corresponding native window has been resized prior to the swap, surface
|
|
must be resized to match".
|
|
|
|
Issues
|
|
|
|
1. Should there be a way to resize a window surface that had its size
|
|
specified initially.
|
|
|
|
RESOLVED: No. Surfaces that have their sizes specified initially must have
|
|
EGL_FIXED_SIZE_ANGLE set and can never be resized.
|
|
|
|
RESOLVED(rev 5): Fixed size surfaces can now be resized by setting
|
|
EGL_WIDTH and EGL_HEIGHT surface attributes. This is the best way to give
|
|
users explicit control of the size of window surfaces without re-creating
|
|
them on each resize.
|
|
|
|
Revision History
|
|
|
|
Version 5, 2018/07/23 - Allow reizing fixed size surfaces.
|
|
|
|
Version 4, 2014/02/24 - formatting changes.
|
|
|
|
Version 3, 2014/02/12 - ignore EGL_WIDTH and EGL_HEIGHT if
|
|
EGL_FIXED_SIZE_ANGLE is EGL_FALSE
|
|
|
|
Version 2, 2014/02/07 - rename to EGL_ANGLE_window_fixed_size, and add an
|
|
EGL_FIXED_SIZE_ANGLE token.
|
|
|
|
Version 1, 2014/02/05 - first draft.
|