From: jvanverth Date: Wed, 9 Dec 2015 02:53:44 +0000 (-0800) Subject: Move texture drawing utility method to SkGpuDevice X-Git-Tag: accepted/tizen/5.0/unified/20181102.025319~184^2~425 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0671b967eb02d44c8951dc4dc39df09fac15b097;p=platform%2Fupstream%2FlibSkiaSharp.git Move texture drawing utility method to SkGpuDevice BUG=skia:4542 Review URL: https://codereview.chromium.org/1506203002 --- diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h index 70e7b9f..fdc6167 100644 --- a/include/gpu/GrContext.h +++ b/include/gpu/GrContext.h @@ -354,9 +354,8 @@ public: /** Enumerates all cached GPU resources and dumps their memory to traceMemoryDump. */ void dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) const; - /** Draw font cache texture to render target */ - void drawFontCache(const SkRect& rect, GrMaskFormat format, const SkPaint& paint, - GrRenderTarget* target); + /** Get pointer to atlas texture for given mask format */ + GrTexture* getFontAtlasTexture(GrMaskFormat format); private: GrGpu* fGpu; diff --git a/samplecode/SampleAnimatedText.cpp b/samplecode/SampleAnimatedText.cpp index 19a8672..8ca9d87 100755 --- a/samplecode/SampleAnimatedText.cpp +++ b/samplecode/SampleAnimatedText.cpp @@ -106,8 +106,9 @@ protected: SkBaseDevice* device = canvas->getDevice_just_for_deprecated_compatibility_testing(); GrContext* grContext = canvas->getGrContext(); if (grContext) { - grContext->drawFontCache(SkRect::MakeXYWH(512, 10, 512, 512), kA8_GrMaskFormat, paint, - reinterpret_cast(device)->accessRenderTarget()); + GrTexture* tex = grContext->getFontAtlasTexture(GrMaskFormat::kA8_GrMaskFormat); + reinterpret_cast(device)->drawTexture(tex, + SkRect::MakeXYWH(512, 10, 512, 512), paint); } #endif canvas->translate(180, 180); diff --git a/src/gpu/GrTest.cpp b/src/gpu/GrTest.cpp index e7b2ae7..755fabc 100644 --- a/src/gpu/GrTest.cpp +++ b/src/gpu/GrTest.cpp @@ -16,6 +16,8 @@ #include "GrGpuResourceCacheAccess.h" #include "GrResourceCache.h" #include "GrTextBlobCache.h" + +#include "SkGpuDevice.h" #include "SkGrPriv.h" #include "SkString.h" @@ -137,35 +139,33 @@ void GrContext::printGpuStats() const { SkDebugf("%s", out.c_str()); } -void GrContext::drawFontCache(const SkRect& rect, GrMaskFormat format, const SkPaint& paint, - GrRenderTarget* target) { +GrTexture* GrContext::getFontAtlasTexture(GrMaskFormat format) { GrBatchFontCache* cache = this->getBatchFontCache(); - GrTexture* atlas = cache->getTexture(format); - - SkAutoTUnref drawContext(this->drawContext(target)); - // TODO: add drawContext method to encapsulate this. + return cache->getTexture(format); +} +void SkGpuDevice::drawTexture(GrTexture* tex, const SkRect& dst, const SkPaint& paint) { GrPaint grPaint; SkMatrix mat; mat.reset(); - if (!SkPaintToGrPaint(this, paint, mat, &grPaint)) { + if (!SkPaintToGrPaint(this->context(), paint, mat, &grPaint)) { return; } SkMatrix textureMat; textureMat.reset(); - // TODO: use setScaleTranslate() - textureMat[SkMatrix::kMScaleX] = 1.0f/rect.width(); - textureMat[SkMatrix::kMScaleY] = 1.0f/rect.height(); - textureMat[SkMatrix::kMTransX] = -rect.fLeft/rect.width(); - textureMat[SkMatrix::kMTransY] = -rect.fTop/rect.height(); + textureMat[SkMatrix::kMScaleX] = 1.0f/dst.width(); + textureMat[SkMatrix::kMScaleY] = 1.0f/dst.height(); + textureMat[SkMatrix::kMTransX] = -dst.fLeft/dst.width(); + textureMat[SkMatrix::kMTransY] = -dst.fTop/dst.height(); - grPaint.addColorTextureProcessor(atlas, textureMat); + grPaint.addColorTextureProcessor(tex, textureMat); GrClip clip; - drawContext->drawRect(clip, grPaint, mat, rect); + fDrawContext->drawRect(clip, grPaint, mat, dst); } + #if GR_GPU_STATS void GrGpu::Stats::dump(SkString* out) { out->appendf("Render Target Binds: %d\n", fRenderTargetBinds); diff --git a/src/gpu/SkGpuDevice.h b/src/gpu/SkGpuDevice.h index 5bf074d..219b765 100644 --- a/src/gpu/SkGpuDevice.h +++ b/src/gpu/SkGpuDevice.h @@ -140,6 +140,9 @@ public: static SkImageFilter::Cache* NewImageFilterCache(); + // for debugging purposes only + void drawTexture(GrTexture*, const SkRect& dst, const SkPaint&); + protected: bool onReadPixels(const SkImageInfo&, void*, size_t, int, int) override; bool onWritePixels(const SkImageInfo&, const void*, size_t, int, int) override;