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