| 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. |