2e6a608c5dafd1796a8d548c9a2537c2fe0af362
[platform/core/uifw/dali-core.git] / dali / internal / render / renderers / uniform-buffer-view.h
1 #ifndef DALI_INTERNAL_UNIFORM_BUFFER_VIEW_H
2 #define DALI_INTERNAL_UNIFORM_BUFFER_VIEW_H
3
4 /*
5  * Copyright (c) 2021 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <stdint.h>
23 #include <stdlib.h>
24
25 namespace Dali
26 {
27 namespace Graphics
28 {
29 class Buffer;
30 }
31 namespace Internal::Render
32 {
33
34 class UniformBuffer;
35
36 /**
37  * Class UniformBufferView
38  *
39  * The class is responsible for providing view into the UniformBuffer object
40  * giving access to part or all of its memory. UniformBufferView doesn't own
41  * memory.
42  *
43  * The memory accessed through the UniformBufferView should be addressed at
44  * the offset of 0 and up to specified size. The memory beyond the view may be
45  * invalid.
46  *
47  */
48 class UniformBufferView
49 {
50 public:
51
52   UniformBufferView(UniformBuffer &ubo, uint32_t offset, size_t size);
53
54   ~UniformBufferView();
55
56   void Write(const void *data, uint32_t size, uint32_t offset);
57
58   /**
59    * Returns the size of the view
60    *
61    * @return size of view
62    */
63   [[nodiscard]] uint32_t GetSize() const
64   {
65     return mSize;
66   }
67
68   /**
69    * Returns the offset within the UBO
70    * @return Offset
71    */
72   [[nodiscard]] uint32_t GetOffset() const
73   {
74     return mOffset;
75   }
76
77   /**
78    * Returns Graphics buffer associated with this View
79    *
80    * If 'relativeOffset' isn't nullptr then the offset into the individual
81    * Graphics::Buffer is written.
82    *
83    * @param[out] relativeOffset the offset into individual Graphics::Buffer
84    *
85    * @return Pointer to a valid Graphics::Buffer object
86    */
87   [[nodiscard]] Graphics::Buffer *GetBuffer(uint32_t *relativeOffset = nullptr);
88
89 private:
90
91   UniformBuffer *mUniformBuffer{nullptr}; ///< UniformBuffer that the view views
92   uint32_t mOffset{0u}; ///< Offset within the buffer
93   size_t   mSize{0u}; ///< Size of view
94 };
95 } // Namespace Internal::Render
96 } // Namespace Dali
97 #endif //DALI_INTERNAL_UNIFORM_BUFFER_VIEW_H