1 #ifndef DALI_GRAPHICS_API_CONTROLLER_H
2 #define DALI_GRAPHICS_API_CONTROLLER_H
5 * Copyright (c) 2018 Samsung Electronics Co., Ltd.
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
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>
44 * @brief Interface class for Manager types in the graphics API.
50 virtual ~Controller() = default;
53 * @brief Create a new object
55 virtual Accessor<Shader> CreateShader( const BaseFactory<Shader>& factory ) = 0;
58 * @brief Create a new object
60 virtual Accessor<Texture> CreateTexture( const BaseFactory<Texture>& factory ) = 0;
63 * @brief Create a new object
65 virtual Accessor<TextureSet> CreateTextureSet( const BaseFactory<TextureSet>& factory ) = 0;
68 * @brief Create a new object
70 virtual Accessor<DynamicBuffer> CreateDynamicBuffer( const BaseFactory<DynamicBuffer>& factory ) = 0;
73 * @brief Create a new object
75 virtual Accessor<StaticBuffer> CreateStaticBuffer( const BaseFactory<StaticBuffer>& factory ) = 0;
78 * @brief Create a new object
80 virtual Accessor<Sampler> CreateSampler( const BaseFactory<Sampler>& factory ) = 0;
83 * @brief Create a new object
85 virtual Accessor<Framebuffer> CreateFramebuffer( const BaseFactory<Framebuffer>& factory ) = 0;
88 * @brief Get a render list
90 virtual void GetRenderItemList() = 0;
93 * @brief Create a buffer
96 std::unique_ptr<GenericBuffer<T>> CreateBuffer( size_t numberOfElements );
99 * @brief Submit a render command
101 virtual void SubmitCommand( API::RenderCommand&& command ) = 0;
104 * @brief Mark the beginning of a frame
106 virtual void BeginFrame() = 0;
109 * @brief Mark the end of a frame
111 virtual void EndFrame() = 0;
115 Controller( const Controller& ) = delete;
116 Controller& operator=( const Controller& ) = delete;
119 // derived types should not be moved direcly to prevent slicing
120 Controller( Controller&& ) = default;
121 Controller& operator=( Controller&& ) = default;
124 * Objects of this type should not directly.
126 Controller() = default;
131 * @brief create an element for the given number of elements and element size
133 virtual std::unique_ptr<char> CreateBuffer( size_t numberOfElements, size_t elementSize ) = 0;
139 std::unique_ptr<GenericBuffer<T>> Controller::CreateBuffer( size_t numberOfElements )
141 return std::make_unique<GenericBuffer<T>>(numberOfElements, std::move(CreateBuffer( numberOfElements, sizeof( T ) )));
145 } // namespace Graphics
148 #endif // DALI_GRAPHICS_API_CONTROLLER_H