~raof/mir/blowup-eventhub

« back to all changes in this revision

Viewing changes to src/platform/graphics/android/hwc_layerlist.cpp

  • Committer: Tarmac
  • Author(s): Kevin DuBois
  • Date: 2014-01-29 00:49:23 UTC
  • mfrom: (1329.1.42 renderable)
  • Revision ID: tarmac-20140129004923-a52iu4phmbzmv9ot
android: split out HWC layers into their own file and add a mga::CompositionLayer type that depends on the interface mg::Renderable.

Approved by Andreas Pokorny, Alan Griffiths, PS Jenkins bot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
namespace mga=mir::graphics::android;
27
27
namespace geom=mir::geometry;
28
28
 
29
 
mga::HWCLayer& mga::HWCLayer::operator=(HWCLayer const& layer)
30
 
{
31
 
    memcpy(this, &layer, sizeof(HWCLayer));
32
 
    this->visibleRegionScreen = {1, &this->visible_rect};
33
 
    return *this;
34
 
}
35
 
 
36
 
mga::HWCLayer::HWCLayer(HWCLayer const& layer)
37
 
{
38
 
    memcpy(this, &layer, sizeof(HWCLayer));
39
 
    this->visibleRegionScreen = {1, &this->visible_rect};
40
 
}
41
 
 
42
 
mga::HWCLayer::HWCLayer(int type, buffer_handle_t buffer_handle, int width, int height, int layer_flags)
43
 
{
44
 
    compositionType = type;
45
 
    hints = 0;
46
 
    flags = layer_flags;
47
 
    transform = 0;
48
 
    blending = HWC_BLENDING_NONE;
49
 
    //TODO: acquireFenceFd should be buffer.fence()
50
 
    acquireFenceFd = -1;
51
 
    releaseFenceFd = -1;
52
 
 
53
 
    visible_rect.top = 0;
54
 
    visible_rect.left = 0;
55
 
    visible_rect.bottom = height;
56
 
    visible_rect.right = width;
57
 
    sourceCrop = visible_rect;
58
 
    displayFrame = visible_rect;
59
 
    visibleRegionScreen.numRects=1;
60
 
    visibleRegionScreen.rects= &visible_rect;
61
 
    handle = buffer_handle;
62
 
 
63
 
    memset(&reserved, 0, sizeof(reserved));
64
 
}
65
 
 
66
 
mga::FramebufferLayer::FramebufferLayer()
67
 
    : HWCLayer(HWC_FRAMEBUFFER_TARGET, nullptr, 0, 0, 0)
68
 
{
69
 
}
70
 
 
71
 
mga::FramebufferLayer::FramebufferLayer(mg::NativeBuffer const& buffer)
72
 
    : HWCLayer(HWC_FRAMEBUFFER_TARGET, buffer.handle(),
73
 
               buffer.anwb()->width, buffer.anwb()->height, 0)
74
 
{
75
 
}
76
 
 
77
 
mga::CompositionLayer::CompositionLayer(int layer_flags)
78
 
    : HWCLayer(HWC_FRAMEBUFFER, nullptr, 0, 0, layer_flags)
79
 
{
80
 
}
81
 
 
82
 
mga::CompositionLayer::CompositionLayer(mg::NativeBuffer const& buffer, int layer_flags)
83
 
    : HWCLayer(HWC_FRAMEBUFFER, buffer.handle(),
84
 
               buffer.anwb()->width, buffer.anwb()->height, layer_flags)
85
 
{
86
 
}
87
 
 
88
29
mga::LayerList::LayerList(std::initializer_list<HWCLayer> const& layer_list)
89
30
{
90
31
    auto struct_size = sizeof(hwc_display_contents_1_t) + sizeof(hwc_layer_1_t)*(layer_list.size());
113
54
    {
114
55
        if (hwc_representation->hwLayers[0].flags == HWC_SKIP_LAYER)
115
56
        {
116
 
            hwc_representation->hwLayers[0] = mga::CompositionLayer(*native_buffer, HWC_SKIP_LAYER);
 
57
            hwc_representation->hwLayers[0] = mga::ForceGLLayer(*native_buffer);
117
58
        }
118
59
 
119
60
        if (hwc_representation->hwLayers[1].compositionType == HWC_FRAMEBUFFER_TARGET)