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 @@
/** 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 @@
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);
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 @@
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);
+ return cache->getTexture(format);
+}
- SkAutoTUnref<GrDrawContext> drawContext(this->drawContext(target));
- // TODO: add drawContext method to encapsulate this.
-
+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 @@
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;