[Vulkan] Sampler and texture support - something is rendering
[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    * Temporary way of instantiating new texture through controller
94    * @param width
95    * @param height
96    * @return
97    */
98   virtual void* CreateTextureRGBA32( void* data, size_t sizeInBytes, uint32_t width, uint32_t height )
99   {
100     return 0;
101   }
102
103   /**
104    * @brief Create a buffer
105    */
106   template<typename T>
107   std::unique_ptr<GenericBuffer<T>> CreateBuffer( size_t numberOfElements );
108
109   /**
110    * @brief Submit a render command
111    */
112   virtual void SubmitCommand( API::RenderCommand&& command ) = 0;
113
114   /**
115    * @brief Mark the beginning of a frame
116    */
117   virtual void BeginFrame() = 0;
118
119   /**
120    * @brief Mark the end of a frame
121    */
122   virtual void EndFrame() = 0;
123
124 public:
125   // not copyable
126   Controller( const Controller& ) = delete;
127   Controller& operator=( const Controller& ) = delete;
128
129 protected:
130   // derived types should not be moved direcly to prevent slicing
131   Controller( Controller&& ) = default;
132   Controller& operator=( Controller&& ) = default;
133
134   /**
135    * Objects of this type should not directly.
136    */
137   Controller() = default;
138
139
140
141   /**
142    * @brief create an element for the given number of elements and element size
143    */
144   virtual std::unique_ptr<char> CreateBuffer( size_t numberOfElements, size_t elementSize ) = 0;
145
146 private:
147 };
148
149 template<typename T>
150 std::unique_ptr<GenericBuffer<T>> Controller::CreateBuffer( size_t numberOfElements )
151 {
152     return std::make_unique<GenericBuffer<T>>(numberOfElements, std::move(CreateBuffer( numberOfElements, sizeof( T ) )));
153 }
154
155 } // namespace API
156 } // namespace Graphics
157 } // namespace Dali
158
159 #endif // DALI_GRAPHICS_API_CONTROLLER_H