diff options
Diffstat (limited to 'src/gpu/GrOpList.cpp')
-rw-r--r-- | src/gpu/GrOpList.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/gpu/GrOpList.cpp b/src/gpu/GrOpList.cpp index 65d4e73fd0..59e1cd0f23 100644 --- a/src/gpu/GrOpList.cpp +++ b/src/gpu/GrOpList.cpp @@ -8,8 +8,9 @@ #include "GrOpList.h" #include "GrContext.h" -#include "GrPrepareCallback.h" +#include "GrDeferredProxyUploader.h" #include "GrSurfaceProxy.h" +#include "GrTextureProxyPriv.h" #include "SkAtomics.h" @@ -57,17 +58,19 @@ void GrOpList::reset() { } fTarget.reset(); - fPrepareCallbacks.reset(); + fDeferredProxies.reset(); fAuditTrail = nullptr; } -void GrOpList::addPrepareCallback(std::unique_ptr<GrPrepareCallback> callback) { - fPrepareCallbacks.push_back(std::move(callback)); +void GrOpList::instantiateDeferredProxies(GrResourceProvider* resourceProvider) { + for (int i = 0; i < fDeferredProxies.count(); ++i) { + fDeferredProxies[i]->instantiate(resourceProvider); + } } void GrOpList::prepare(GrOpFlushState* flushState) { - for (int i = 0; i < fPrepareCallbacks.count(); ++i) { - (*fPrepareCallbacks[i])(flushState); + for (int i = 0; i < fDeferredProxies.count(); ++i) { + fDeferredProxies[i]->texPriv().scheduleUpload(flushState); } this->onPrepare(flushState); @@ -100,6 +103,12 @@ void GrOpList::addDependency(GrSurfaceProxy* dependedOn, const GrCaps& caps) { opList->makeClosed(caps); } } + + if (GrTextureProxy* textureProxy = dependedOn->asTextureProxy()) { + if (textureProxy->texPriv().isDeferred()) { + fDeferredProxies.push_back(textureProxy); + } + } } #ifdef SK_DEBUG |