#include "src/gpu/ganesh/ops/AtlasTextOp.h"
#include "include/core/SkSamplingOptions.h"
#include "include/core/SkTypes.h"
#include "include/private/base/SkDebug.h"
#include "include/private/base/SkTArray.h"
#include "src/base/SkArenaAlloc.h"
#include "src/core/SkMatrixPriv.h"
#include "src/core/SkTraceEvent.h"
#include "src/gpu/ganesh/GrBufferAllocPool.h"
#include "src/gpu/ganesh/GrCaps.h"
#include "src/gpu/ganesh/GrColorSpaceXform.h"
#include "src/gpu/ganesh/GrGeometryProcessor.h"
#include "src/gpu/ganesh/GrMeshDrawTarget.h"
#include "src/gpu/ganesh/GrOpFlushState.h"
#include "src/gpu/ganesh/GrPaint.h"
#include "src/gpu/ganesh/GrPipeline.h"
#include "src/gpu/ganesh/GrProcessorAnalysis.h"
#include "src/gpu/ganesh/GrResourceProvider.h"
#include "src/gpu/ganesh/GrSamplerState.h"
#include "src/gpu/ganesh/GrSimpleMesh.h"
#include "src/gpu/ganesh/GrSurfaceProxy.h"
#include "src/gpu/ganesh/GrSurfaceProxyView.h"
#include "src/gpu/ganesh/GrUserStencilSettings.h"
#include "src/gpu/ganesh/effects/GrBitmapTextGeoProc.h"
#include "src/gpu/ganesh/effects/GrDistanceFieldGeoProc.h"
#include "src/gpu/ganesh/ops/GrDrawOp.h"
#include "src/gpu/ganesh/ops/GrSimpleMeshDrawOpHelper.h"
#include "src/gpu/ganesh/text/GrAtlasManager.h"
#include "src/text/gpu/DistanceFieldAdjustTable.h"
#include "src/text/gpu/GlyphVector.h"
#include "src/text/gpu/SubRunContainer.h"
#if defined(SK_GAMMA_APPLY_TO_A8)
#include "include/private/base/SkCPUTypes.h"
#include "src/core/SkMaskGamma.h"
#endif
#include <algorithm>
#include <functional>
#include <new>
#include <tuple>
#include <utility>
struct GrShaderCaps;
MaskFormat;
namespace skgpu::ganesh {
inline static constexpr int kVerticesPerGlyph = …;
inline static constexpr int kIndicesPerGlyph = …;
static thread_local void* gCache = …;
void* AtlasTextOp::operator new(size_t s) { … }
void AtlasTextOp::operator delete(void* bytes) noexcept { … }
void AtlasTextOp::ClearCache() { … }
AtlasTextOp::AtlasTextOp(MaskType maskType,
bool needsTransform,
int glyphCount,
SkRect deviceRect,
Geometry* geo,
const GrColorInfo& dstColorInfo,
GrPaint&& paint)
: … { … }
AtlasTextOp::AtlasTextOp(MaskType maskType,
bool needsTransform,
int glyphCount,
SkRect deviceRect,
SkColor luminanceColor,
bool useGammaCorrectDistanceTable,
uint32_t DFGPFlags,
Geometry* geo,
GrPaint&& paint)
: … { … }
auto AtlasTextOp::Geometry::Make(const sktext::gpu::AtlasSubRun& subRun,
const SkMatrix& drawMatrix,
SkPoint drawOrigin,
SkIRect clipRect,
sk_sp<SkRefCnt>&& supportData,
const SkPMColor4f& color,
SkArenaAlloc* alloc) -> Geometry* { … }
void AtlasTextOp::Geometry::fillVertexData(void *dst, int offset, int count) const { … }
void AtlasTextOp::visitProxies(const GrVisitProxyFunc& func) const { … }
#if defined(GPU_TEST_UTILS)
SkString AtlasTextOp::onDumpInfo() const {
SkString str;
int i = 0;
for(Geometry* geom = fHead; geom != nullptr; geom = geom->fNext) {
str.appendf("%d: Color: 0x%08x Trans: %.2f,%.2f\n",
i++,
geom->fColor.toBytes_RGBA(),
geom->fDrawOrigin.x(),
geom->fDrawOrigin.y());
}
str += fProcessors.dumpProcessors();
return str;
}
#endif
GrDrawOp::FixedFunctionFlags AtlasTextOp::fixedFunctionFlags() const { … }
GrProcessorSet::Analysis AtlasTextOp::finalize(const GrCaps& caps,
const GrAppliedClip* clip,
GrClampType clampType) { … }
void AtlasTextOp::onPrepareDraws(GrMeshDrawTarget* target) { … }
void AtlasTextOp::onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) { … }
void AtlasTextOp::createDrawForGeneratedGlyphs(GrMeshDrawTarget* target,
FlushInfo* flushInfo) const { … }
GrOp::CombineResult AtlasTextOp::onCombineIfPossible(GrOp* t, SkArenaAlloc*, const GrCaps& caps) { … }
#if !defined(SK_DISABLE_SDF_TEXT)
GrGeometryProcessor* AtlasTextOp::setupDfProcessor(SkArenaAlloc* arena,
const GrShaderCaps& caps,
const SkMatrix& localMatrix,
const GrSurfaceProxyView* views,
unsigned int numActiveViews) const { … }
#endif
}