1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CC_RESOURCES_UI_RESOURCE_BITMAP_H_ 6#define CC_RESOURCES_UI_RESOURCE_BITMAP_H_ 7 8#include "base/memory/ref_counted.h" 9#include "base/memory/scoped_ptr.h" 10#include "cc/base/cc_export.h" 11#include "skia/ext/refptr.h" 12#include "third_party/skia/include/core/SkPixelRef.h" 13#include "third_party/skia/include/core/SkTypes.h" 14#include "ui/gfx/size.h" 15 16class SkBitmap; 17 18namespace cc { 19 20class ETC1PixelRef; 21 22// A bitmap class that contains a ref-counted reference to a SkPixelRef that 23// holds the content of the bitmap (cannot use SkBitmap because of ETC1). 24// Thread-safety (by ways of SkPixelRef) ensures that both main and impl threads 25// can hold references to the bitmap and that asynchronous uploads are allowed. 26class CC_EXPORT UIResourceBitmap { 27 public: 28 enum UIResourceFormat { 29 RGBA8, 30 ETC1 31 }; 32 enum UIResourceWrapMode { 33 CLAMP_TO_EDGE, 34 REPEAT 35 }; 36 37 gfx::Size GetSize() const { return size_; } 38 UIResourceFormat GetFormat() const { return format_; } 39 UIResourceWrapMode GetWrapMode() const { return wrap_mode_; } 40 void SetWrapMode(UIResourceWrapMode wrap_mode) { wrap_mode_ = wrap_mode; } 41 bool GetOpaque() const { return opaque_; } 42 void SetOpaque(bool opaque) { opaque_ = opaque; } 43 44 // User must ensure that |skbitmap| is immutable. The SkBitmap Format should 45 // be 32-bit RGBA. 46 explicit UIResourceBitmap(const SkBitmap& skbitmap); 47 48 UIResourceBitmap(const skia::RefPtr<ETC1PixelRef>& etc1_pixel_ref, 49 gfx::Size size); 50 51 ~UIResourceBitmap(); 52 53 private: 54 friend class AutoLockUIResourceBitmap; 55 void Create(const skia::RefPtr<SkPixelRef>& pixel_ref, 56 UIResourceFormat format, 57 gfx::Size size); 58 59 skia::RefPtr<SkPixelRef> pixel_ref_; 60 UIResourceFormat format_; 61 UIResourceWrapMode wrap_mode_; 62 gfx::Size size_; 63 bool opaque_; 64}; 65 66class CC_EXPORT AutoLockUIResourceBitmap { 67 public: 68 explicit AutoLockUIResourceBitmap(const UIResourceBitmap& bitmap); 69 ~AutoLockUIResourceBitmap(); 70 const uint8_t* GetPixels() const; 71 72 private: 73 const UIResourceBitmap& bitmap_; 74}; 75 76} // namespace cc 77 78#endif // CC_RESOURCES_UI_RESOURCE_BITMAP_H_ 79