1// Copyright 2011 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_PLATFORM_COLOR_H_
6#define CC_RESOURCES_PLATFORM_COLOR_H_
7
8#include "base/basictypes.h"
9#include "base/logging.h"
10#include "cc/resources/resource_format.h"
11#include "third_party/khronos/GLES2/gl2.h"
12#include "third_party/khronos/GLES2/gl2ext.h"
13#include "third_party/skia/include/core/SkTypes.h"
14
15namespace cc {
16
17class PlatformColor {
18 public:
19  enum SourceDataFormat {
20    SOURCE_FORMAT_RGBA8,
21    SOURCE_FORMAT_BGRA8
22  };
23
24  static SourceDataFormat Format() {
25    return SK_B32_SHIFT ? SOURCE_FORMAT_RGBA8 : SOURCE_FORMAT_BGRA8;
26  }
27
28  // Returns the most efficient texture format for this platform.
29  static ResourceFormat BestTextureFormat(bool supports_bgra8888) {
30    switch (Format()) {
31      case SOURCE_FORMAT_BGRA8:
32        return (supports_bgra8888) ? BGRA_8888 : RGBA_8888;
33      case SOURCE_FORMAT_RGBA8:
34        return RGBA_8888;
35    }
36    NOTREACHED();
37    return RGBA_8888;
38  }
39
40  // Return true if the given texture format has the same component order
41  // as the color on this platform.
42  static bool SameComponentOrder(ResourceFormat format) {
43    switch (Format()) {
44      case SOURCE_FORMAT_RGBA8:
45        return format == RGBA_8888 || format == RGBA_4444;
46      case SOURCE_FORMAT_BGRA8:
47        return format == BGRA_8888 || format == RGBA_4444;
48    }
49    NOTREACHED();
50    return false;
51  }
52
53 private:
54  DISALLOW_IMPLICIT_CONSTRUCTORS(PlatformColor);
55};
56
57}  // namespace cc
58
59#endif  // CC_RESOURCES_PLATFORM_COLOR_H_
60