Move texture drawing utility method to SkGpuDevice

BUG=skia:4542

Review URL: https://codereview.chromium.org/1506203002
This commit is contained in:
jvanverth 2015-12-08 18:53:44 -08:00 committed by Commit bot
parent 55462e5f50
commit 0671b967eb
4 changed files with 22 additions and 19 deletions

View 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;

View File

@ -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);

View 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);

View 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;