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" 145d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 155d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.comclass SkImage_Gpu : public SkImage_Base { 165d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.compublic: 1797b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com SK_DECLARE_INST_COUNT(SkImage_Gpu) 185d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 194d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.org explicit SkImage_Gpu(const SkBitmap&); 205d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com virtual ~SkImage_Gpu(); 215d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 228572fc01ac4f6bdcf173b05417776abc55f729c1reed virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y, const SkPaint*) const SK_OVERRIDE; 238572fc01ac4f6bdcf173b05417776abc55f729c1reed virtual void onDrawRectToRect(SkCanvas*, const SkRect* src, const SkRect& dst, 248572fc01ac4f6bdcf173b05417776abc55f729c1reed const SkPaint*) const SK_OVERRIDE; 258572fc01ac4f6bdcf173b05417776abc55f729c1reed virtual GrTexture* onGetTexture() const SK_OVERRIDE; 26ace135453db02cfe83d7c7bbeaa679f98d18fbe2reed@google.com virtual bool getROPixels(SkBitmap*) const SK_OVERRIDE; 2797b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com 288572fc01ac4f6bdcf173b05417776abc55f729c1reed GrTexture* getTexture() const { return fBitmap.getTexture(); } 295d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 3076d5b477c92ef076374fc7ea9d551c798656bebdpiotaixr virtual SkShader* onNewShader(SkShader::TileMode, 3176d5b477c92ef076374fc7ea9d551c798656bebdpiotaixr SkShader::TileMode, 3276d5b477c92ef076374fc7ea9d551c798656bebdpiotaixr const SkMatrix* localMatrix) const SK_OVERRIDE; 33d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr 34d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr virtual bool isOpaque() const SK_OVERRIDE; 35d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr 365d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.comprivate: 375d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com SkBitmap fBitmap; 385d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 395d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com typedef SkImage_Base INHERITED; 405d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com}; 415d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 425d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com/////////////////////////////////////////////////////////////////////////////// 435d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 444d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.orgSkImage_Gpu::SkImage_Gpu(const SkBitmap& bitmap) 454d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.org : INHERITED(bitmap.width(), bitmap.height()) 464d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.org , fBitmap(bitmap) { 4749f085dddff10473b6ebf832a974288300224e60bsalomon SkASSERT(fBitmap.getTexture()); 485d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com} 495d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 5097b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.comSkImage_Gpu::~SkImage_Gpu() { 5197b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com} 525d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 5376d5b477c92ef076374fc7ea9d551c798656bebdpiotaixrSkShader* SkImage_Gpu::onNewShader(SkShader::TileMode tileX, 5476d5b477c92ef076374fc7ea9d551c798656bebdpiotaixr SkShader::TileMode tileY, 5576d5b477c92ef076374fc7ea9d551c798656bebdpiotaixr const SkMatrix* localMatrix) const 5676d5b477c92ef076374fc7ea9d551c798656bebdpiotaixr{ 5776d5b477c92ef076374fc7ea9d551c798656bebdpiotaixr return SkShader::CreateBitmapShader(fBitmap, tileX, tileY, localMatrix); 58cef04f818820e59fb534eb226f967f72497845d3piotaixr} 59cef04f818820e59fb534eb226f967f72497845d3piotaixr 608572fc01ac4f6bdcf173b05417776abc55f729c1reedvoid SkImage_Gpu::onDraw(SkCanvas* canvas, SkScalar x, SkScalar y, const SkPaint* paint) const { 615d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com canvas->drawBitmap(fBitmap, x, y, paint); 625d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com} 635d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com 64dfec28d4a9e05d1d525f377b380b4df3c5e07c7bcommit-bot@chromium.orgvoid SkImage_Gpu::onDrawRectToRect(SkCanvas* canvas, const SkRect* src, const SkRect& dst, 658572fc01ac4f6bdcf173b05417776abc55f729c1reed const SkPaint* paint) const { 66dfec28d4a9e05d1d525f377b380b4df3c5e07c7bcommit-bot@chromium.org canvas->drawBitmapRectToRect(fBitmap, src, dst, paint); 67dfec28d4a9e05d1d525f377b380b4df3c5e07c7bcommit-bot@chromium.org} 68dfec28d4a9e05d1d525f377b380b4df3c5e07c7bcommit-bot@chromium.org 698572fc01ac4f6bdcf173b05417776abc55f729c1reedGrTexture* SkImage_Gpu::onGetTexture() const { 704d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.org return fBitmap.getTexture(); 7197b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com} 7297b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com 73ace135453db02cfe83d7c7bbeaa679f98d18fbe2reed@google.combool SkImage_Gpu::getROPixels(SkBitmap* dst) const { 7428fcae2ec77eb16a79e155f8d788b20457f1c951commit-bot@chromium.org return fBitmap.copyTo(dst, kN32_SkColorType); 75ace135453db02cfe83d7c7bbeaa679f98d18fbe2reed@google.com} 76ace135453db02cfe83d7c7bbeaa679f98d18fbe2reed@google.com 77d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixrbool SkImage_Gpu::isOpaque() const { 78d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr return fBitmap.isOpaque(); 79d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr} 80d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr 8197b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com/////////////////////////////////////////////////////////////////////////////// 8297b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com 834d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.orgSkImage* SkImage::NewTexture(const SkBitmap& bitmap) { 844d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.org if (NULL == bitmap.getTexture()) { 855d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com return NULL; 865d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com } 87fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 884d24b747e272355395f456e088a2d0177c00ddb5commit-bot@chromium.org return SkNEW_ARGS(SkImage_Gpu, (bitmap)); 8997b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com} 9097b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com 9197b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.comGrTexture* SkTextureImageGetTexture(SkImage* image) { 9297b6b0730dcb0feee9224ff04eb3985ca4bd0216robertphillips@google.com return ((SkImage_Gpu*)image)->getTexture(); 935d4ba8869476831ee73b15a052af8003d0a1fa2ereed@google.com} 94