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 * Temporary way of instantiating new texture through controller
98 virtual void* CreateTextureRGBA32( void* data, size_t sizeInBytes, uint32_t width, uint32_t height )
104 * @brief Create a buffer
107 std::unique_ptr<GenericBuffer<T>> CreateBuffer( size_t numberOfElements );
110 * @brief Submit a render command
112 virtual void SubmitCommand( API::RenderCommand&& command ) = 0;
115 * @brief Mark the beginning of a frame
117 virtual void BeginFrame() = 0;
120 * @brief Mark the end of a frame
122 virtual void EndFrame() = 0;
126 Controller( const Controller& ) = delete;
127 Controller& operator=( const Controller& ) = delete;
130 // derived types should not be moved direcly to prevent slicing
131 Controller( Controller&& ) = default;
132 Controller& operator=( Controller&& ) = default;
135 * Objects of this type should not directly.
137 Controller() = default;
142 * @brief create an element for the given number of elements and element size
144 virtual std::unique_ptr<char> CreateBuffer( size_t numberOfElements, size_t elementSize ) = 0;
150 std::unique_ptr<GenericBuffer<T>> Controller::CreateBuffer( size_t numberOfElements )
152 return std::make_unique<GenericBuffer<T>>(numberOfElements, std::move(CreateBuffer( numberOfElements, sizeof( T ) )));
156 } // namespace Graphics
159 #endif // DALI_GRAPHICS_API_CONTROLLER_H