From 9c2202ffc22b4293b48a4edeafa1b5d2bab8bb83 Mon Sep 17 00:00:00 2001 From: Greg Daniel Date: Sat, 18 Nov 2017 13:31:59 +0000 Subject: Revert "Add Atlas Text interface for rendering SDF glyphs." This reverts commit 39631f3df172feb385527a5d125bc53b0bded7e6. Reason for revert: break google3 rool Original change's description: > Add Atlas Text interface for rendering SDF glyphs. > > This new API is built upon SDF text atlas code from the GPU backend. Unlike using the GPU > backend to draw text, this set of interfaces allows the client to render the SDF glyphs. The > client issues text draws to potentially multiple targets and then the client flushes. The > client then gets commands from Skia with data to put into a texture atlas and vertices to > draw that reference the texture. The client is responsible for creating the texture, uploading > the SDF data to the texture, and drawing the vertices provided by Skia. > > Change-Id: Ie9447e19b85f0ce1c2b942e5216c787a74f335d3 > Reviewed-on: https://skia-review.googlesource.com/59360 > Commit-Queue: Brian Salomon > Reviewed-by: Robert Phillips TBR=jvanverth@google.com,bsalomon@google.com,robertphillips@google.com Change-Id: I4aad0c99e645b476fd8ba25731f2a10e8802bb25 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://skia-review.googlesource.com/73420 Reviewed-by: Greg Daniel Commit-Queue: Greg Daniel --- src/atlastext/SkInternalAtlasTextContext.cpp | 117 --------------------------- 1 file changed, 117 deletions(-) delete mode 100644 src/atlastext/SkInternalAtlasTextContext.cpp (limited to 'src/atlastext/SkInternalAtlasTextContext.cpp') diff --git a/src/atlastext/SkInternalAtlasTextContext.cpp b/src/atlastext/SkInternalAtlasTextContext.cpp deleted file mode 100644 index 8be7e1fb67..0000000000 --- a/src/atlastext/SkInternalAtlasTextContext.cpp +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2017 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "SkInternalAtlasTextContext.h" -#include "GrContext.h" -#include "SkAtlasTextContext.h" -#include "SkAtlasTextRenderer.h" -#include "text/GrAtlasGlyphCache.h" - -SkAtlasTextRenderer* SkGetAtlasTextRendererFromInternalContext( - class SkInternalAtlasTextContext& internal) { - return internal.renderer(); -} - -////////////////////////////////////////////////////////////////////////////// - -std::unique_ptr SkInternalAtlasTextContext::Make( - sk_sp renderer) { - return std::unique_ptr( - new SkInternalAtlasTextContext(std::move(renderer))); -} - -SkInternalAtlasTextContext::SkInternalAtlasTextContext(sk_sp renderer) - : fRenderer(std::move(renderer)) { - GrContextOptions options; - options.fAllowMultipleGlyphCacheTextures = GrContextOptions::Enable::kNo; - options.fMinDistanceFieldFontSize = 0.f; - options.fGlyphsAsPathsFontSize = SK_ScalarInfinity; - fGrContext = GrContext::MakeMock(nullptr, options); -} - -SkInternalAtlasTextContext::~SkInternalAtlasTextContext() { - if (fDistanceFieldAtlas.fProxy) { - SkASSERT(1 == fGrContext->getAtlasGlyphCache()->getAtlasPageCount(kA8_GrMaskFormat)); - fRenderer->deleteTexture(fDistanceFieldAtlas.fTextureHandle); - } -} - -GrAtlasGlyphCache* SkInternalAtlasTextContext::atlasGlyphCache() { - return fGrContext->getAtlasGlyphCache(); -} - -GrTextBlobCache* SkInternalAtlasTextContext::textBlobCache() { - return fGrContext->getTextBlobCache(); -} - -GrDeferredUploadToken SkInternalAtlasTextContext::addInlineUpload( - GrDeferredTextureUploadFn&& upload) { - auto token = this->nextDrawToken(); - fInlineUploads.append(&fArena, InlineUpload{std::move(upload), token}); - return token; -} - -GrDeferredUploadToken SkInternalAtlasTextContext::addASAPUpload( - GrDeferredTextureUploadFn&& upload) { - fASAPUploads.append(&fArena, std::move(upload)); - return this->nextTokenToFlush(); -} - -void SkInternalAtlasTextContext::recordDraw(const void* srcVertexData, int glyphCnt, - void* targetHandle) { - auto vertexDataSize = sizeof(SkAtlasTextRenderer::SDFVertex) * 4 * glyphCnt; - auto vertexData = fArena.makeArrayDefault(vertexDataSize); - memcpy(vertexData, srcVertexData, vertexDataSize); - for (int i = 0; i < 4 * glyphCnt; ++i) { - auto* vertex = reinterpret_cast(vertexData) + i; - // GrAtlasTextContext encodes a texture index into the lower bit of each texture coord. - // This isn't expected by SkAtlasTextRenderer subclasses. - vertex->fTextureCoord.fX /= 2; - vertex->fTextureCoord.fY /= 2; - } - fDraws.append(&fArena, Draw{glyphCnt, this->issueDrawToken(), targetHandle, vertexData}); -} - -void SkInternalAtlasTextContext::flush() { - auto* atlasGlyphCache = fGrContext->getAtlasGlyphCache(); - if (!fDistanceFieldAtlas.fProxy) { - SkASSERT(1 == atlasGlyphCache->getAtlasPageCount(kA8_GrMaskFormat)); - fDistanceFieldAtlas.fProxy = atlasGlyphCache->getProxies(kA8_GrMaskFormat)->get(); - fDistanceFieldAtlas.fTextureHandle = - fRenderer->createTexture(SkAtlasTextRenderer::AtlasFormat::kA8, - fDistanceFieldAtlas.fProxy->width(), - fDistanceFieldAtlas.fProxy->height()); - } - GrDeferredTextureUploadWritePixelsFn writePixelsFn = - [this](GrTextureProxy* proxy, int left, int top, int width, int height, - GrPixelConfig config, const void* data, size_t rowBytes) -> bool { - SkASSERT(kAlpha_8_GrPixelConfig == config); - SkASSERT(proxy == this->fDistanceFieldAtlas.fProxy); - void* handle = fDistanceFieldAtlas.fTextureHandle; - this->fRenderer->setTextureData(handle, data, left, top, width, height, rowBytes); - return true; - }; - for (const auto& upload : fASAPUploads) { - upload(writePixelsFn); - } - auto draw = fDraws.begin(); - auto inlineUpload = fInlineUploads.begin(); - while (draw != fDraws.end()) { - while (inlineUpload != fInlineUploads.end() && inlineUpload->fToken == draw->fToken) { - inlineUpload->fUpload(writePixelsFn); - ++inlineUpload; - } - auto vertices = reinterpret_cast(draw->fVertexData); - fRenderer->drawSDFGlyphs(draw->fTargetHandle, fDistanceFieldAtlas.fTextureHandle, vertices, - draw->fGlyphCnt); - ++draw; - } - fASAPUploads.reset(); - fInlineUploads.reset(); - fDraws.reset(); - fArena.reset(); -} -- cgit v1.2.3