| /* |
| * Copyright 2016 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "src/gpu/GrTextureContext.h" |
| |
| #include "src/gpu/GrAuditTrail.h" |
| #include "src/gpu/GrContextPriv.h" |
| #include "src/gpu/GrDrawingManager.h" |
| #include "src/gpu/GrTextureOpList.h" |
| |
| #define ASSERT_SINGLE_OWNER \ |
| SkDEBUGCODE(GrSingleOwner::AutoEnforce debug_SingleOwner(this->singleOwner());) |
| #define RETURN_FALSE_IF_ABANDONED if (this->drawingManager()->wasAbandoned()) { return false; } |
| |
| GrTextureContext::GrTextureContext(GrRecordingContext* context, |
| sk_sp<GrTextureProxy> textureProxy, |
| sk_sp<SkColorSpace> colorSpace) |
| : GrSurfaceContext(context, textureProxy->config(), std::move(colorSpace)) |
| , fTextureProxy(std::move(textureProxy)) |
| , fOpList(sk_ref_sp(fTextureProxy->getLastTextureOpList())) { |
| SkDEBUGCODE(this->validate();) |
| } |
| |
| #ifdef SK_DEBUG |
| void GrTextureContext::validate() const { |
| SkASSERT(fTextureProxy); |
| fTextureProxy->validate(fContext); |
| |
| if (fOpList && !fOpList->isClosed()) { |
| SkASSERT(fTextureProxy->getLastOpList() == fOpList.get()); |
| } |
| } |
| #endif |
| |
| GrTextureContext::~GrTextureContext() { |
| ASSERT_SINGLE_OWNER |
| } |
| |
| GrRenderTargetProxy* GrTextureContext::asRenderTargetProxy() { |
| // If the proxy can return an RTProxy it should've been wrapped in a RTContext |
| SkASSERT(!fTextureProxy->asRenderTargetProxy()); |
| return nullptr; |
| } |
| |
| sk_sp<GrRenderTargetProxy> GrTextureContext::asRenderTargetProxyRef() { |
| // If the proxy can return an RTProxy it should've been wrapped in a RTContext |
| SkASSERT(!fTextureProxy->asRenderTargetProxy()); |
| return nullptr; |
| } |
| |
| GrOpList* GrTextureContext::getOpList() { |
| ASSERT_SINGLE_OWNER |
| SkDEBUGCODE(this->validate();) |
| |
| if (!fOpList || fOpList->isClosed()) { |
| fOpList = this->drawingManager()->newTextureOpList(fTextureProxy); |
| } |
| |
| return fOpList.get(); |
| } |