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