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 parameter of eglQuerySurface and by the 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) " specifies a list of attributes for the window. The list has the same structure as described for eglChooseConfig. Attributes that can be specified in 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.