コード例 #1
0
ファイル: ImageVk.cpp プロジェクト: google/angle
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());
        }
    }
}