Home | History | Annotate | Download | only in shared_impl
      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 
     17 namespace ppapi {
     18 
     19 struct 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