1feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com/*
2feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com * Copyright 2012 Google Inc.
3feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com *
4feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com * Use of this source code is governed by a BSD-style license that can be
5feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com * found in the LICENSE file.
6feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com */
7feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com
8feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com#include "SkImage_Base.h"
9feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com#include "SkImagePriv.h"
10feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com#include "SkBitmap.h"
11feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com#include "SkCanvas.h"
126b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.com#include "GrContext.h"
136b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.com#include "GrTexture.h"
146b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.com#include "SkGrPixelRef.h"
15feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com
16feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.comclass SkImage_Gpu : public SkImage_Base {
17feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.compublic:
186b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.com    SK_DECLARE_INST_COUNT(SkImage_Gpu)
19feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com
2086fcb075ed6d3debcdf9c5cebe265784f4148d5ccommit-bot@chromium.org    explicit SkImage_Gpu(const SkBitmap&);
21feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com    virtual ~SkImage_Gpu();
22feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com
236b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.com    virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y, const SkPaint*) SK_OVERRIDE;
24b71e1b41724c00f4b4b52b371e4254674fb4a027commit-bot@chromium.org    virtual void onDrawRectToRect(SkCanvas*, const SkRect* src, const SkRect& dst, const SkPaint*) SK_OVERRIDE;
25a083d01536107a4a94bfd0a06709bc31ff8d996ejunov@chromium.org    virtual GrTexture* onGetTexture() SK_OVERRIDE;
2642ef50186791b4d75383485dc3a5f5f61751edbbreed@google.com    virtual bool getROPixels(SkBitmap*) const SK_OVERRIDE {
2742ef50186791b4d75383485dc3a5f5f61751edbbreed@google.com        // TODO
2842ef50186791b4d75383485dc3a5f5f61751edbbreed@google.com        return false;
2942ef50186791b4d75383485dc3a5f5f61751edbbreed@google.com    }
306b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.com
3186fcb075ed6d3debcdf9c5cebe265784f4148d5ccommit-bot@chromium.org    GrTexture* getTexture() { return fBitmap.getTexture(); }
32feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com
33feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.comprivate:
34feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com    SkBitmap    fBitmap;
35feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com
36feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com    typedef SkImage_Base INHERITED;
37feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com};
38feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com
39feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com///////////////////////////////////////////////////////////////////////////////
40feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com
4186fcb075ed6d3debcdf9c5cebe265784f4148d5ccommit-bot@chromium.orgSkImage_Gpu::SkImage_Gpu(const SkBitmap& bitmap)
4286fcb075ed6d3debcdf9c5cebe265784f4148d5ccommit-bot@chromium.org    : INHERITED(bitmap.width(), bitmap.height())
4386fcb075ed6d3debcdf9c5cebe265784f4148d5ccommit-bot@chromium.org    , fBitmap(bitmap) {
4486fcb075ed6d3debcdf9c5cebe265784f4148d5ccommit-bot@chromium.org    SkASSERT(NULL != fBitmap.getTexture());
45feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com}
46feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com
476b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.comSkImage_Gpu::~SkImage_Gpu() {
486b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.com}
49feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com
506b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.comvoid SkImage_Gpu::onDraw(SkCanvas* canvas, SkScalar x, SkScalar y,
516b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.com                         const SkPaint* paint) {
52feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com    canvas->drawBitmap(fBitmap, x, y, paint);
53feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com}
54feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com
55b71e1b41724c00f4b4b52b371e4254674fb4a027commit-bot@chromium.orgvoid SkImage_Gpu::onDrawRectToRect(SkCanvas* canvas, const SkRect* src, const SkRect& dst,
56b71e1b41724c00f4b4b52b371e4254674fb4a027commit-bot@chromium.org                         const SkPaint* paint) {
57b71e1b41724c00f4b4b52b371e4254674fb4a027commit-bot@chromium.org    canvas->drawBitmapRectToRect(fBitmap, src, dst, paint);
58b71e1b41724c00f4b4b52b371e4254674fb4a027commit-bot@chromium.org}
59b71e1b41724c00f4b4b52b371e4254674fb4a027commit-bot@chromium.org
60a083d01536107a4a94bfd0a06709bc31ff8d996ejunov@chromium.orgGrTexture* SkImage_Gpu::onGetTexture() {
6186fcb075ed6d3debcdf9c5cebe265784f4148d5ccommit-bot@chromium.org    return fBitmap.getTexture();
626b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.com}
636b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.com
646b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.com///////////////////////////////////////////////////////////////////////////////
656b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.com
6686fcb075ed6d3debcdf9c5cebe265784f4148d5ccommit-bot@chromium.orgSkImage* SkImage::NewTexture(const SkBitmap& bitmap) {
6786fcb075ed6d3debcdf9c5cebe265784f4148d5ccommit-bot@chromium.org    if (NULL == bitmap.getTexture()) {
68feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com        return NULL;
69feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com    }
70935e9f4fafdfc64130e6be9ea2bb30e3bafd852armistry@google.com
7186fcb075ed6d3debcdf9c5cebe265784f4148d5ccommit-bot@chromium.org    return SkNEW_ARGS(SkImage_Gpu, (bitmap));
726b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.com}
736b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.com
746b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.comGrTexture* SkTextureImageGetTexture(SkImage* image) {
756b58631b63fb9de9173e557b3286f6b37f7a46a4robertphillips@google.com    return ((SkImage_Gpu*)image)->getTexture();
76feb64a7186bfbf7bd1a9100b8a24df97e459b6d1reed@google.com}
77