public override IGlPlatformSurfaceRenderingSession BeginDraw() { var contextLock = _egl.PrimaryEglContext.EnsureCurrent(); IUnknown texture = null; EglSurface surface = null; IDisposable transaction = null; var success = false; try { if (_window?.Item == null) { throw new ObjectDisposedException(GetType().FullName); } var size = _info.Size; transaction = _window.Item.BeginTransaction(); _window.Item.ResizeIfNeeded(size); texture = _window.Item.BeginDrawToTexture(out var offset); surface = ((AngleWin32EglDisplay)_egl.Display).WrapDirect3D11Texture(_egl, texture.GetNativeIntPtr(), offset.X, offset.Y, size.Width, size.Height); var res = base.BeginDraw(surface, _info, () => { surface?.Dispose(); texture?.Dispose(); _window.Item.EndDraw(); transaction?.Dispose(); contextLock?.Dispose(); }, true); success = true; return(res); } finally { if (!success) { surface?.Dispose(); texture?.Dispose(); transaction?.Dispose(); contextLock.Dispose(); } } }