/* * Copyright 2019 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "GrContext_Base.h" #include "GrBaseContextPriv.h" #include "GrCaps.h" #include "GrSkSLFPFactoryCache.h" #ifdef SK_DISABLE_EXPLICIT_GPU_RESOURCE_ALLOCATION static const bool kDefaultExplicitlyAllocateGPUResources = false; #else static const bool kDefaultExplicitlyAllocateGPUResources = true; #endif static int32_t next_id() { static std::atomic<int32_t> nextID{1}; int32_t id; do { id = nextID++; } while (id == SK_InvalidGenID); return id; } GrContext_Base::GrContext_Base(GrBackendApi backend, const GrContextOptions& options, uint32_t contextID) : fBackend(backend) , fOptions(options) , fContextID(SK_InvalidGenID == contextID ? next_id() : contextID) { } GrContext_Base::~GrContext_Base() { } bool GrContext_Base::init(sk_sp<const GrCaps> caps, sk_sp<GrSkSLFPFactoryCache> FPFactoryCache) { SkASSERT(caps && FPFactoryCache); fCaps = caps; fFPFactoryCache = FPFactoryCache; return true; } bool GrContext_Base::explicitlyAllocateGPUResources() const { if (GrContextOptions::Enable::kNo == fOptions.fExplicitlyAllocateGPUResources) { return false; } if (GrContextOptions::Enable::kYes == fOptions.fExplicitlyAllocateGPUResources) { return true; } return kDefaultExplicitlyAllocateGPUResources; } const GrCaps* GrContext_Base::caps() const { return fCaps.get(); } sk_sp<const GrCaps> GrContext_Base::refCaps() const { return fCaps; } sk_sp<GrSkSLFPFactoryCache> GrContext_Base::fpFactoryCache() { return fFPFactoryCache; } /////////////////////////////////////////////////////////////////////////////////////////////////// sk_sp<const GrCaps> GrBaseContextPriv::refCaps() const { return fContext->refCaps(); } sk_sp<GrSkSLFPFactoryCache> GrBaseContextPriv::fpFactoryCache() { return fContext->fpFactoryCache(); }