1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2017 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef GrTextureProxyPriv_DEFINED 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define GrTextureProxyPriv_DEFINED 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrTextureProxy.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrDeferredProxyUploader; 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrOpFlushState; 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/** 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * This class hides the more specialized capabilities of GrTextureProxy. 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrTextureProxyPriv { 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // Attach a deferred uploader to the proxy. Holds data being prepared by a worker thread. 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void setDeferredUploader(std::unique_ptr<GrDeferredProxyUploader>); 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool isDeferred() const { return SkToBool(fTextureProxy->fDeferredUploader.get()); } 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // For a deferred proxy (one that has a deferred uploader attached), this schedules an ASAP 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // upload of that data to the instantiated texture. 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void scheduleUpload(GrOpFlushState*); 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // Clears any deferred uploader object on the proxy. Used to free the CPU data after the 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // contents have been uploaded. 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void resetDeferredUploader(); 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot explicit GrTextureProxyPriv(GrTextureProxy* textureProxy) : fTextureProxy(textureProxy) {} 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrTextureProxyPriv(const GrTextureProxyPriv&) {} // unimpl 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrTextureProxyPriv& operator=(const GrTextureProxyPriv&); // unimpl 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // No taking addresses of this type. 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrTextureProxyPriv* operator&() const; 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrTextureProxyPriv* operator&(); 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrTextureProxy* fTextureProxy; 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot friend class GrTextureProxy; // to construct/copy this type. 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotinline GrTextureProxyPriv GrTextureProxy::texPriv() { return GrTextureProxyPriv(this); } 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotinline const GrTextureProxyPriv GrTextureProxy::texPriv() const { 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return GrTextureProxyPriv(const_cast<GrTextureProxy*>(this)); 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 52