1// Copyright 2012 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_RESOURCE_H_
6#define CC_RESOURCES_RESOURCE_H_
7
8#include "cc/base/cc_export.h"
9#include "cc/resources/resource_provider.h"
10#include "third_party/khronos/GLES2/gl2.h"
11#include "ui/gfx/size.h"
12
13namespace cc {
14
15class CC_EXPORT Resource {
16 public:
17  Resource() : id_(0) {}
18  Resource(unsigned id, const gfx::Size& size, ResourceFormat format)
19      : id_(id),
20        size_(size),
21        format_(format) {}
22
23  ResourceProvider::ResourceId id() const { return id_; }
24  gfx::Size size() const { return size_; }
25  ResourceFormat format() const { return format_; }
26  size_t bytes() const;
27
28  inline static size_t MemorySizeBytes(const gfx::Size& size,
29                                       ResourceFormat format) {
30    DCHECK_EQ(0u, (BitsPerPixel(format) * size.width() * size.height()) % 8);
31    return (BitsPerPixel(format) * size.width() * size.height()) / 8;
32  }
33
34 protected:
35  void set_id(ResourceProvider::ResourceId id) { id_ = id; }
36  void set_dimensions(const gfx::Size& size, ResourceFormat format) {
37    size_ = size;
38    format_ = format;
39  }
40
41 private:
42  ResourceProvider::ResourceId id_;
43  gfx::Size size_;
44  ResourceFormat format_;
45
46  DISALLOW_COPY_AND_ASSIGN(Resource);
47};
48
49}  // namespace cc
50
51#endif  // CC_RESOURCES_RESOURCE_H_
52