OSDN Git Service

Merge cherrypicks of [5745882, 5746123, 5746124, 5746125, 5745544, 5745819, 5746700...
[android-x86/frameworks-base.git] / libs / hwui / VkLayer.h
1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #pragma once
18
19 #include "Layer.h"
20
21 #include <SkImage.h>
22
23 namespace android {
24 namespace uirenderer {
25 /**
26  * A layer has dimensions and is backed by a VkImage.
27  */
28 class VkLayer : public Layer {
29 public:
30     VkLayer(RenderState& renderState, uint32_t layerWidth, uint32_t layerHeight,
31             SkColorFilter* colorFilter, int alpha, SkBlendMode mode, bool blend)
32             : Layer(renderState, Api::Vulkan, colorFilter, alpha, mode)
33             , mWidth(layerWidth)
34             , mHeight(layerHeight)
35             , mBlend(blend) {}
36
37     virtual ~VkLayer() {}
38
39     uint32_t getWidth() const override {
40         return mWidth;
41     }
42
43     uint32_t getHeight() const override {
44         return mHeight;
45     }
46
47     void setSize(uint32_t width, uint32_t height) override {
48         mWidth = width;
49         mHeight = height;
50     }
51
52     void setBlend(bool blend) override {
53         mBlend = blend;
54     }
55
56     bool isBlend() const override {
57         return mBlend;
58     }
59
60     sk_sp<SkImage> getImage() {
61         return mImage;
62     }
63
64     void updateTexture();
65
66     // If we've destroyed the vulkan context (VkInstance, VkDevice, etc.), we must make sure to
67     // destroy any VkImages that were made with that context.
68     void onVkContextDestroyed();
69
70 private:
71     int mWidth;
72     int mHeight;
73     bool mBlend;
74
75    sk_sp<SkImage> mImage;
76
77 }; // struct VkLayer
78
79 }; // namespace uirenderer
80 }; // namespace android