/* * Copyright 2023 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file.
*/ #ifndef sktext_gpu_VertexFiller_DEFINED #define sktext_gpu_VertexFiller_DEFINED
namespace graphite { class DrawWriter; class Rect; class Transform;
}
}
namespace sktext::gpu { class Glyph; class SubRunAllocator;
enum FillerType {
kIsDirect,
kIsTransformed
};
// -- VertexFiller --------------------------------------------------------------------------------- // The VertexFiller assumes that all points, glyph atlas entries, and bounds are created with // respect to the CreationMatrix. This assumes that mapping any point, mask or bounds through the // CreationMatrix will result in the proper device position. In order to draw using an arbitrary // PositionMatrix, calculate a // // viewDifference = [PositionMatrix] * [CreationMatrix] ^ -1. // // The viewDifference is used to map all points, masks and bounds to position to the device // respecting the PositionMatrix. class VertexFiller { public:
VertexFiller(skgpu::MaskFormat maskFormat, const SkMatrix &creationMatrix,
SkRect creationBounds,
SkSpan<const SkPoint> leftTop, bool canDrawDirect);
// This is only available if the graphite backend is compiled in (see GraphiteVertexFiller.cpp) void fillInstanceData(skgpu::graphite::DrawWriter* dw, int offset, int count, unsignedshort flags,
skvx::uint2 ssboIndex,
SkSpan<const Glyph*> glyphs,
SkScalar depth) const;
// Return true if the positionMatrix represents an integer translation. Return the device // bounding box of all the glyphs. If the bounding box is empty, then something went singular // and this operation should be dropped.
std::tuple<bool, SkRect> deviceRectAndCheckTransform(const SkMatrix &positionMatrix) const;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.