void ImageVk::onDestroy(const egl::Display *display) { DisplayVk *displayVk = vk::GetImpl(display); RendererVk *renderer = displayVk->getRenderer(); std::vector<vk::GarbageObjectBase> garbage; if (mImage != nullptr && mOwnsImage) { mImage->releaseImage(displayVk, &garbage); mImage->releaseStagingBuffer(displayVk, &garbage); delete mImage; } else if (egl::IsExternalImageTarget(mState.target)) { ASSERT(mState.source != nullptr); ExternalImageSiblingVk *externalImageSibling = GetImplAs<ExternalImageSiblingVk>(GetAs<egl::ExternalImageSibling>(mState.source)); externalImageSibling->release(displayVk, &garbage); } mImage = nullptr; if (!garbage.empty()) { renderer->addGarbage(std::move(mImageLastUseFences), std::move(garbage)); } else { for (vk::Shared<vk::Fence> &fence : mImageLastUseFences) { fence.reset(displayVk->getDevice()); } } }