+ /* The native surface is lost. The EGL spec requires certain functions
+ * to generate EGL_BAD_NATIVE_WINDOW when given this surface.
+ */
+ EGLBoolean Lost;
+
+ /* attributes set by attribute list */
+ EGLint Width, Height;
+ EGLenum TextureFormat;
+ EGLenum TextureTarget;
+ EGLBoolean MipmapTexture;
+ EGLBoolean LargestPbuffer;
+
+ /**
+ * Value of EGL_RENDER_BUFFER selected at creation.
+ *
+ * The user may select, for window surfaces, the EGL_RENDER_BUFFER through
+ * the attribute list of eglCreateWindowSurface(). The EGL spec allows the
+ * implementation to ignore request, though; hence why we maintain both
+ * RequestedRenderBuffer and ActiveRenderBuffer. For pbuffer and pixmap
+ * surfaces, the EGL spec hard-codes the EGL_RENDER_BUFFER value and the
+ * user must not provide it in the attribute list.
+ *
+ * Normally, the attribute is immutable and after surface creation.
+ * However, EGL_KHR_mutable_render_buffer allows the user to change it in
+ * window surfaces via eglSurfaceAttrib, in which case
+ * eglQuerySurface(EGL_RENDER_BUFFER) will immediately afterwards return
+ * the requested value but the actual render buffer used by the context
+ * does not change until completion of the next eglSwapBuffers call.
+ *
+ * From the EGL_KHR_mutable_render_buffer spec (v12):
+ *
+ * Querying EGL_RENDER_BUFFER returns the buffer which client API
+ * rendering is requested to use. For a window surface, this is the
+ * attribute value specified when the surface was created or last set
+ * via eglSurfaceAttrib.
+ *
+ * eglQueryContext(EGL_RENDER_BUFFER) ignores this.
+ */
+ EGLenum RequestedRenderBuffer;
+
+ /**
+ * The EGL_RENDER_BUFFER in use by the context.
+ *
+ * This is valid only when bound as the draw surface. This may differ from
+ * the RequestedRenderBuffer.
+ *
+ * Refer to eglQueryContext(EGL_RENDER_BUFFER) in the EGL spec.
+ * eglQuerySurface(EGL_RENDER_BUFFER) ignores this.
+ *
+ * If a window surface is bound as the draw surface and has a pending,
+ * user-requested change to EGL_RENDER_BUFFER, then the next eglSwapBuffers
+ * will flush the pending change. (The flush of EGL_RENDER_BUFFER state may
+ * occur without the implicit glFlush induced by eglSwapBuffers). The spec
+ * requires that the flush occur at that time and nowhere else. During the
+ * state-flush, we copy RequestedRenderBuffer to ActiveRenderBuffer.
+ *
+ * From the EGL_KHR_mutable_render_buffer spec (v12):
+ *
+ * If [...] there is a pending change to the EGL_RENDER_BUFFER
+ * attribute, eglSwapBuffers performs an implicit flush operation on the
+ * context and effects the attribute change.
+ */
+ EGLenum ActiveRenderBuffer;
+
+ EGLenum VGAlphaFormat;
+ EGLenum VGColorspace;
+ EGLenum GLColorspace;
+
+ /* attributes set by eglSurfaceAttrib */
+ EGLint MipmapLevel;
+ EGLenum MultisampleResolve;
+ EGLenum SwapBehavior;