/* * Copyright 2019 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef sktext_StrikeForGPU_DEFINED #define sktext_StrikeForGPU_DEFINED #include "include/core/SkPath.h" #include "include/core/SkRefCnt.h" #include "include/core/SkTypes.h" #include "src/core/SkGlyph.h" #include <memory> #include <optional> #include <variant> class SkDescriptor; class SkDrawable; class SkReadBuffer; class SkStrike; class SkStrikeCache; class SkStrikeClient; class SkStrikeSpec; class SkWriteBuffer; namespace sktext { // -- SkStrikePromise ------------------------------------------------------------------------------ // SkStrikePromise produces an SkStrike when needed by GPU glyph rendering. In ordinary // operation, it just wraps an SkStrike. When used for remote glyph cache operation, the promise is // serialized to an SkDescriptor. When SkStrikePromise is deserialized, it uses the descriptor to // look up the SkStrike. // // When deserializing some care must be taken; if the needed SkStrike is removed from the cache, // then looking up using the descriptor will fail resulting in a deserialization failure. The // Renderer/GPU system solves this problem by pinning all the strikes needed into the cache. class SkStrikePromise { … }; // -- StrikeForGPU --------------------------------------------------------------------------------- class StrikeForGPU : public SkRefCnt { … }; // prepareForPathDrawing uses this union to convert glyph ids to paths. IDOrPath; // prepareForDrawableDrawing uses this union to convert glyph ids to drawables. IDOrDrawable; // -- StrikeMutationMonitor ------------------------------------------------------------------------ class StrikeMutationMonitor { … }; // -- StrikeForGPUCacheInterface ------------------------------------------------------------------- class StrikeForGPUCacheInterface { … }; } // namespace sktext #endif // sktext_StrikeForGPU_DEFINED