/* * Copyright 2017 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrSemaphore_DEFINED #define GrSemaphore_DEFINED #include "SkRefCnt.h" class GrBackendSemaphore; class GrGpu; class GrSemaphore : public SkRefCnt { private: // This function should only be used in the case of exporting and importing a GrSemaphore object // from one GrContext to another. When exporting, the GrSemaphore should be set to a null GrGpu, // and when importing it should be set to the GrGpu of the current context. Once exported, a // GrSemaphore should not be used with its old context. void resetGpu(const GrGpu* gpu) { fGpu = gpu; } // The derived class will init the GrBackendSemaphore. This is used when flushing with signal // semaphores so we can set the clients GrBackendSemaphore object after we've created the // internal semaphore. virtual void setBackendSemaphore(GrBackendSemaphore*) const = 0; protected: explicit GrSemaphore(const GrGpu* gpu) : fGpu(gpu) {} friend class GrGpu; // setBackendSemaphore friend class GrRenderTargetContext; // setBackendSemaphore friend class GrResourceProvider; // resetGpu const GrGpu* fGpu; }; #endif