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 * @brief Create a new object
52 virtual Accessor<Shader> CreateShader( const BaseFactory<Shader>& factory ) = 0;
55 * @brief Create a new object
57 virtual Accessor<Texture> CreateTexture( const BaseFactory<Texture>& factory ) = 0;
60 * @brief Create a new object
62 virtual Accessor<TextureSet> CreateTextureSet( const BaseFactory<TextureSet>& factory ) = 0;
65 * @brief Create a new object
67 virtual Accessor<DynamicBuffer> CreateDynamicBuffer( const BaseFactory<DynamicBuffer>& factory ) = 0;
70 * @brief Create a new object
72 virtual Accessor<StaticBuffer> CreateStaticBuffer( const BaseFactory<StaticBuffer>& factory ) = 0;
75 * @brief Create a new object
77 virtual Accessor<Sampler> CreateSampler( const BaseFactory<Sampler>& factory ) = 0;
80 * @brief Create a new object
82 virtual Accessor<Framebuffer> CreateFramebuffer( const BaseFactory<Framebuffer>& factory ) = 0;
85 * @brief Get a render list
87 virtual void GetRenderItemList() = 0;
90 * @brief Create a buffer
93 std::unique_ptr<GenericBuffer<T>> CreateBuffer( size_t numberOfElements );
96 * @brief Submit a render command
98 virtual void SubmitCommand( API::RenderCommand&& command ) = 0;
101 * @brief Mark the beginning of a frame
103 virtual void BeginFrame() = 0;
106 * @brief Mark the end of a frame
108 virtual void EndFrame() = 0;
112 Controller( const Controller& ) = delete;
113 Controller& operator=( const Controller& ) = delete;
115 virtual ~Controller() = default;
118 // derived types should not be moved direcly to prevent slicing
119 Controller( Controller&& ) = default;
120 Controller& operator=( Controller&& ) = default;
123 * Objects of this type should not directly.
125 Controller() = default;
128 * @brief create an element for the given number of elements and element size
130 virtual std::unique_ptr<char> CreateBuffer( size_t numberOfElements, size_t elementSize ) = 0;
136 std::unique_ptr<GenericBuffer<T>> Controller::CreateBuffer( size_t numberOfElements )
138 return std::make_unique<GenericBuffer<T>>(numberOfElements, std::move(CreateBuffer( numberOfElements, sizeof( T ) )));
142 } // namespace Graphics
145 #endif // DALI_GRAPHICS_API_CONTROLLER_H