[Vulkan] Working build
[platform/core/uifw/dali-core.git] / dali / graphics-api / graphics-api-controller.h
1 #ifndef DALI_GRAPHICS_API_CONTROLLER_H
2 #define DALI_GRAPHICS_API_CONTROLLER_H
3
4 /*
5  * Copyright (c) 2018 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 // INTERNAL INCLUDES
22 #include <dali/graphics-api/graphics-api-accessor.h>
23 #include <dali/graphics-api/graphics-api-base-factory.h>
24 #include <dali/graphics-api/graphics-api-dynamic-buffer.h>
25 #include <dali/graphics-api/graphics-api-frame.h>
26 #include <dali/graphics-api/graphics-api-framebuffer.h>
27 #include <dali/graphics-api/graphics-api-generic-buffer.h>
28 #include <dali/graphics-api/graphics-api-render-command.h>
29 #include <dali/graphics-api/graphics-api-sampler.h>
30 #include <dali/graphics-api/graphics-api-shader.h>
31 #include <dali/graphics-api/graphics-api-static-buffer.h>
32 #include <dali/graphics-api/graphics-api-texture-factory.h>
33 #include <dali/graphics-api/graphics-api-texture-set.h>
34 #include <dali/graphics-api/graphics-api-texture.h>
35 #include <dali/graphics-api/utility/utility-builder.h>
36
37 namespace Dali
38 {
39 namespace Graphics
40 {
41 namespace API
42 {
43 /**
44  * @brief Interface class for Manager types in the graphics API.
45  */
46 class Controller
47 {
48 public:
49
50   virtual ~Controller() = default;
51
52   /**
53    * @brief Create a new object
54    */
55   virtual Accessor<Shader> CreateShader( const BaseFactory<Shader>& factory ) = 0;
56
57   /**
58    * @brief Create a new object
59    */
60   virtual Accessor<Texture> CreateTexture( const BaseFactory<Texture>& factory ) = 0;
61
62   /**
63    * @brief Create a new object
64    */
65   virtual Accessor<TextureSet> CreateTextureSet( const BaseFactory<TextureSet>& factory ) = 0;
66
67   /**
68    * @brief Create a new object
69    */
70   virtual Accessor<DynamicBuffer> CreateDynamicBuffer( const BaseFactory<DynamicBuffer>& factory ) = 0;
71
72   /**
73    * @brief Create a new object
74    */
75   virtual Accessor<StaticBuffer> CreateStaticBuffer( const BaseFactory<StaticBuffer>& factory ) = 0;
76
77   /**
78    * @brief Create a new object
79    */
80   virtual Accessor<Sampler> CreateSampler( const BaseFactory<Sampler>& factory ) = 0;
81
82   /**
83    * @brief Create a new object
84    */
85   virtual Accessor<Framebuffer> CreateFramebuffer( const BaseFactory<Framebuffer>& factory ) = 0;
86
87   /**
88    * @brief Get a render list
89    */
90   virtual void GetRenderItemList() = 0;
91
92   /**
93    * @brief Create a buffer
94    */
95   template<typename T>
96   std::unique_ptr<GenericBuffer<T>> CreateBuffer( size_t numberOfElements );
97
98   /**
99    * @brief Submit a render command
100    */
101   virtual void SubmitCommand( API::RenderCommand&& command ) = 0;
102
103   /**
104    * @brief Mark the beginning of a frame
105    */
106   virtual void BeginFrame() = 0;
107
108   /**
109    * @brief Mark the end of a frame
110    */
111   virtual void EndFrame() = 0;
112
113 public:
114   // not copyable
115   Controller( const Controller& ) = delete;
116   Controller& operator=( const Controller& ) = delete;
117
118 protected:
119   // derived types should not be moved direcly to prevent slicing
120   Controller( Controller&& ) = default;
121   Controller& operator=( Controller&& ) = default;
122
123   /**
124    * Objects of this type should not directly.
125    */
126   Controller() = default;
127
128
129
130   /**
131    * @brief create an element for the given number of elements and element size
132    */
133   virtual std::unique_ptr<char> CreateBuffer( size_t numberOfElements, size_t elementSize ) = 0;
134
135 private:
136 };
137
138 template<typename T>
139 std::unique_ptr<GenericBuffer<T>> Controller::CreateBuffer( size_t numberOfElements )
140 {
141     return std::make_unique<GenericBuffer<T>>(numberOfElements, std::move(CreateBuffer( numberOfElements, sizeof( T ) )));
142 }
143
144 } // namespace API
145 } // namespace Graphics
146 } // namespace Dali
147
148 #endif // DALI_GRAPHICS_API_CONTROLLER_H