Move texture drawing utility method to SkGpuDevice
authorjvanverth <jvanverth@google.com>
Wed, 9 Dec 2015 02:53:44 +0000 (18:53 -0800)
committerCommit bot <commit-bot@chromium.org>
Wed, 9 Dec 2015 02:53:44 +0000 (18:53 -0800)
BUG=skia:4542

Review URL: https://codereview.chromium.org/1506203002

include/gpu/GrContext.h
samplecode/SampleAnimatedText.cpp
src/gpu/GrTest.cpp
src/gpu/SkGpuDevice.h

index 70e7b9f..fdc6167 100644 (file)
@@ -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;
index 19a8672..8ca9d87 100755 (executable)
@@ -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<SkGpuDevice*>(device)->accessRenderTarget());
+            GrTexture* tex = grContext->getFontAtlasTexture(GrMaskFormat::kA8_GrMaskFormat);
+            reinterpret_cast<SkGpuDevice*>(device)->drawTexture(tex,
+                                                       SkRect::MakeXYWH(512, 10, 512, 512), paint);
         }
 #endif
         canvas->translate(180, 180);
index e7b2ae7..755fabc 100644 (file)
@@ -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<GrDrawContext> 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);
index 5bf074d..219b765 100644 (file)
@@ -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;