compositor_layer_data.h revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
1// Copyright 2014 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 PPAPI_SHARED_IMPL_COMPOSITOR_LAYER_DATA_H_
6#define PPAPI_SHARED_IMPL_COMPOSITOR_LAYER_DATA_H_
7
8#include <string.h>
9
10#include "base/logging.h"
11#include "base/memory/scoped_ptr.h"
12#include "gpu/command_buffer/common/mailbox.h"
13#include "ppapi/c/ppb_compositor_layer.h"
14#include "ppapi/shared_impl/host_resource.h"
15#include "ppapi/shared_impl/ppapi_shared_export.h"
16
17namespace ppapi {
18
19struct PPAPI_SHARED_EXPORT CompositorLayerData {
20
21  struct Transform {
22    Transform() {
23      matrix[0] = 1.0f;
24      matrix[1] = 0.0f;
25      matrix[2] = 0.0f;
26      matrix[3] = 0.0f;
27      matrix[4] = 0.0f;
28      matrix[5] = 1.0f;
29      matrix[6] = 0.0f;
30      matrix[7] = 0.0f;
31      matrix[8] = 0.0f;
32      matrix[9] = 0.0f;
33      matrix[10] = 1.0f;
34      matrix[11] = 0.0f;
35      matrix[12] = 0.0f;
36      matrix[13] = 0.0f;
37      matrix[14] = 0.0f;
38      matrix[15] = 1.0f;
39    }
40
41    float matrix[16];
42  };
43
44  struct LayerCommon {
45    LayerCommon()
46       : size(PP_MakeSize(0, 0)),
47         clip_rect(PP_MakeRectFromXYWH(0, 0, 0, 0)),
48         blend_mode(PP_BLENDMODE_SRC_OVER),
49         opacity(1.0f),
50         resource_id(0) {
51    }
52
53    PP_Size size;
54    PP_Rect clip_rect;
55    Transform transform;
56    PP_BlendMode blend_mode;
57    float opacity;
58    uint32_t resource_id;
59  };
60
61  struct ColorLayer {
62    ColorLayer() : red(0.0f), green(0.0f), blue(0.0f), alpha(0.0f) {}
63
64    float red;
65    float green;
66    float blue;
67    float alpha;
68  };
69
70  struct ImageLayer {
71    ImageLayer()
72       : resource(0),
73         source_rect(PP_MakeFloatRectFromXYWH(0.0f, 0.0f, 0.0f, 0.0f)) {}
74
75    PP_Resource resource;
76    PP_FloatRect source_rect;
77  };
78
79  struct TextureLayer {
80    TextureLayer()
81       : sync_point(0),
82         source_rect(PP_MakeFloatRectFromXYWH(0.0f, 0.0f, 1.0f, 1.0f)),
83         premult_alpha(true) {}
84
85    gpu::Mailbox mailbox;
86    uint32_t sync_point;
87    PP_FloatRect source_rect;
88    bool premult_alpha;
89  };
90
91  CompositorLayerData() {}
92
93  CompositorLayerData(const CompositorLayerData& other) {
94    *this = other;
95  }
96
97  bool is_null() const {
98    return !(color || texture || image);
99  }
100
101  bool is_valid() const {
102    int i = 0;
103    if (color) ++i;
104    if (texture) ++i;
105    if (image) ++i;
106    return i == 1;
107  }
108
109  const CompositorLayerData& operator=(const CompositorLayerData& other);
110
111  LayerCommon common;
112  scoped_ptr<ColorLayer> color;
113  scoped_ptr<TextureLayer> texture;
114  scoped_ptr<ImageLayer> image;
115};
116
117}  // namespace ppapi
118
119#endif  // PPAPI_SHARED_IMPL_COMPOSITOR_LAYER_DATA_H_
120