15d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com/* 25d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com * Copyright 2012 Google Inc. 35d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com * 45d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com * Use of this source code is governed by a BSD-style license that can be 55d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com * found in the LICENSE file. 65d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com */ 75d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 85d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com#include "SkImage_Base.h" 95d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com#include "SkImagePriv.h" 105d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com#include "SkBitmap.h" 115d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com#include "SkCanvas.h" 1297b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com#include "GrContext.h" 1397b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com#include "GrTexture.h" 1497b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com#include "SkGrPixelRef.h" 155d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 165d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.comclass SkImage_Gpu : public SkImage_Base { 175d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.compublic: 1897b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com SK_DECLARE_INST_COUNT(SkImage_Gpu) 195d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 204d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.org explicit SkImage_Gpu(const SkBitmap&); 215d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com virtual ~SkImage_Gpu(); 225d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 2397b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y, const SkPaint*) SK_OVERRIDE; 24dfec28d4a9e05d1d525f377b380b4df3c5e07c7bcommit-bot@chromium.org virtual void onDrawRectToRect(SkCanvas*, const SkRect* src, const SkRect& dst, const SkPaint*) SK_OVERRIDE; 25da90474b5fcc019fb0971d12360bd05213ad4dc8junov@chromium.org virtual GrTexture* onGetTexture() SK_OVERRIDE; 26ace135453db02cfe83d7c7bbeaa679f98d18fbe2reed@google.com virtual bool getROPixels(SkBitmap*) const SK_OVERRIDE; 2797b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com 284d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.org GrTexture* getTexture() { return fBitmap.getTexture(); } 295d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 305d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.comprivate: 315d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com SkBitmap fBitmap; 325d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 335d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com typedef SkImage_Base INHERITED; 345d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com}; 355d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 365d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com/////////////////////////////////////////////////////////////////////////////// 375d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 384d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.orgSkImage_Gpu::SkImage_Gpu(const SkBitmap& bitmap) 394d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.org : INHERITED(bitmap.width(), bitmap.height()) 404d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.org , fBitmap(bitmap) { 414d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.org SkASSERT(NULL != fBitmap.getTexture()); 425d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com} 435d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 4497b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.comSkImage_Gpu::~SkImage_Gpu() { 4597b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com} 465d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 4797b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.comvoid SkImage_Gpu::onDraw(SkCanvas* canvas, SkScalar x, SkScalar y, 4897b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com const SkPaint* paint) { 495d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com canvas->drawBitmap(fBitmap, x, y, paint); 505d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com} 515d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 52dfec28d4a9e05d1d525f377b380b4df3c5e07c7bcommit-bot@chromium.orgvoid SkImage_Gpu::onDrawRectToRect(SkCanvas* canvas, const SkRect* src, const SkRect& dst, 53dfec28d4a9e05d1d525f377b380b4df3c5e07c7bcommit-bot@chromium.org const SkPaint* paint) { 54dfec28d4a9e05d1d525f377b380b4df3c5e07c7bcommit-bot@chromium.org canvas->drawBitmapRectToRect(fBitmap, src, dst, paint); 55dfec28d4a9e05d1d525f377b380b4df3c5e07c7bcommit-bot@chromium.org} 56dfec28d4a9e05d1d525f377b380b4df3c5e07c7bcommit-bot@chromium.org 57da90474b5fcc019fb0971d12360bd05213ad4dc8junov@chromium.orgGrTexture* SkImage_Gpu::onGetTexture() { 584d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.org return fBitmap.getTexture(); 5997b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com} 6097b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com 61ace135453db02cfe83d7c7bbeaa679f98d18fbe2reed@google.combool SkImage_Gpu::getROPixels(SkBitmap* dst) const { 6228fcae2ec77eb16a79e155f8d788b20457f1c951commit-bot@chromium.org return fBitmap.copyTo(dst, kN32_SkColorType); 63ace135453db02cfe83d7c7bbeaa679f98d18fbe2reed@google.com} 64ace135453db02cfe83d7c7bbeaa679f98d18fbe2reed@google.com 6597b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com/////////////////////////////////////////////////////////////////////////////// 6697b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com 674d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.orgSkImage* SkImage::NewTexture(const SkBitmap& bitmap) { 684d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.org if (NULL == bitmap.getTexture()) { 695d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com return NULL; 705d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com } 71fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 724d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.org return SkNEW_ARGS(SkImage_Gpu, (bitmap)); 7397b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com} 7497b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com 7597b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.comGrTexture* SkTextureImageGetTexture(SkImage* image) { 7697b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com return ((SkImage_Gpu*)image)->getTexture(); 775d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com} 78