a5842bc903
Change-Id: I674f038600afd6d49316c1ece515941ee5579068 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/406939 Reviewed-by: Herb Derby <herb@google.com> Commit-Queue: Brian Osman <brianosman@google.com>
72 lines
2.2 KiB
C++
72 lines
2.2 KiB
C++
/*
|
|
* 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 SkStrikeInterface_DEFINED
|
|
#define SkStrikeInterface_DEFINED
|
|
|
|
#include "include/core/SkPaint.h"
|
|
#include "include/core/SkPoint.h"
|
|
#include "include/core/SkSpan.h"
|
|
#include "include/core/SkTypes.h"
|
|
#include "src/core/SkGlyph.h"
|
|
|
|
#include <memory>
|
|
|
|
class SkDescriptor;
|
|
class SkDrawableGlyphBuffer;
|
|
class SkGlyph;
|
|
class SkMaskFilter;
|
|
class SkPathEffect;
|
|
class SkSourceGlyphBuffer;
|
|
class SkTypeface;
|
|
struct SkGlyphPositionRoundingSpec;
|
|
struct SkScalerContextEffects;
|
|
|
|
class SkStrikeForGPU {
|
|
public:
|
|
virtual ~SkStrikeForGPU() = default;
|
|
virtual const SkDescriptor& getDescriptor() const = 0;
|
|
|
|
virtual void prepareForMaskDrawing(
|
|
SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) = 0;
|
|
|
|
virtual void prepareForSDFTDrawing(
|
|
SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) = 0;
|
|
|
|
virtual void prepareForPathDrawing(
|
|
SkDrawableGlyphBuffer* drawables, SkSourceGlyphBuffer* rejects) = 0;
|
|
|
|
virtual const SkGlyphPositionRoundingSpec& roundingSpec() const = 0;
|
|
|
|
// Used with SkScopedStrikeForGPU to take action at the end of a scope.
|
|
virtual void onAboutToExitScope() = 0;
|
|
|
|
// Common categories for glyph types used by GPU.
|
|
static bool CanDrawAsMask(const SkGlyph& glyph);
|
|
static bool CanDrawAsSDFT(const SkGlyph& glyph);
|
|
static bool CanDrawAsPath(const SkGlyph& glyph);
|
|
static bool FitsInAtlas(const SkGlyph& glyph);
|
|
|
|
|
|
struct Deleter {
|
|
void operator()(SkStrikeForGPU* ptr) const {
|
|
ptr->onAboutToExitScope();
|
|
}
|
|
};
|
|
};
|
|
|
|
using SkScopedStrikeForGPU = std::unique_ptr<SkStrikeForGPU, SkStrikeForGPU::Deleter>;
|
|
|
|
class SkStrikeForGPUCacheInterface {
|
|
public:
|
|
virtual ~SkStrikeForGPUCacheInterface() = default;
|
|
virtual SkScopedStrikeForGPU findOrCreateScopedStrike(const SkDescriptor& desc,
|
|
const SkScalerContextEffects& effects,
|
|
const SkTypeface& typeface) = 0;
|
|
};
|
|
#endif //SkStrikeInterface_DEFINED
|