// INTERNAL INCLUDES
#include <dali/graphics-api/graphics-api-accessor.h>
#include <dali/graphics-api/graphics-api-base-factory.h>
-#include <dali/graphics-api/graphics-api-dynamic-buffer.h>
-#include <dali/graphics-api/graphics-api-frame.h>
#include <dali/graphics-api/graphics-api-framebuffer.h>
-#include <dali/graphics-api/graphics-api-generic-buffer.h>
#include <dali/graphics-api/graphics-api-render-command.h>
#include <dali/graphics-api/graphics-api-sampler.h>
#include <dali/graphics-api/graphics-api-shader.h>
-#include <dali/graphics-api/graphics-api-static-buffer.h>
+#include <dali/graphics-api/graphics-api-shader-details.h>
+#include <dali/graphics-api/graphics-api-shader-factory.h>
#include <dali/graphics-api/graphics-api-texture-factory.h>
-#include <dali/graphics-api/graphics-api-texture-set.h>
#include <dali/graphics-api/graphics-api-texture.h>
+#include <dali/graphics-api/graphics-api-buffer.h>
+#include <dali/graphics-api/graphics-api-buffer-factory.h>
#include <dali/graphics-api/utility/utility-builder.h>
namespace Dali
{
namespace API
{
+class ShaderFactory;
/**
* @brief Interface class for Manager types in the graphics API.
*/
class Controller
{
public:
+
+ virtual ~Controller() = default;
+
/**
* @brief Create a new object
*/
/**
* @brief Create a new object
*/
- virtual Accessor<TextureSet> CreateTextureSet( const BaseFactory<TextureSet>& factory ) = 0;
+ virtual Accessor<Buffer> CreateBuffer( const BaseFactory<Buffer>& factory ) = 0;
/**
* @brief Create a new object
*/
- virtual Accessor<DynamicBuffer> CreateDynamicBuffer( const BaseFactory<DynamicBuffer>& factory ) = 0;
+ virtual Accessor<Sampler> CreateSampler( const BaseFactory<Sampler>& factory ) = 0;
/**
* @brief Create a new object
*/
- virtual Accessor<StaticBuffer> CreateStaticBuffer( const BaseFactory<StaticBuffer>& factory ) = 0;
+ virtual Accessor<Framebuffer> CreateFramebuffer( const BaseFactory<Framebuffer>& factory ) = 0;
/**
- * @brief Create a new object
+ * @brief Get a render list
*/
- virtual Accessor<Sampler> CreateSampler( const BaseFactory<Sampler>& factory ) = 0;
+ virtual void GetRenderItemList() = 0;
/**
- * @brief Create a new object
+ * @brief Returns texture factory
+ * @return
*/
- virtual Accessor<Framebuffer> CreateFramebuffer( const BaseFactory<Framebuffer>& factory ) = 0;
+ virtual TextureFactory& GetTextureFactory() const = 0;
/**
- * @brief Get a render list
+ * @brief Returns shader factory
+ * @return
*/
- virtual void GetRenderItemList() = 0;
+ virtual ShaderFactory& GetShaderFactory() const = 0;
+
+ /**
+ * @brief Returns shader factory
+ * @return
+ */
+ virtual BufferFactory& GetBufferFactory() const = 0;
/**
- * @brief Create a buffer
+ * @brief alAllocates render command ( depends on implementation );
+ * @return
*/
- template<typename T>
- std::unique_ptr<GenericBuffer<T>> CreateBuffer( size_t numberOfElements );
+ virtual std::unique_ptr<API::RenderCommand> AllocateRenderCommand() = 0;
/**
- * @brief Submit a render command
+ * @brief Submits a list of commands
+ * @param commands
*/
- virtual void SubmitCommand( API::RenderCommand&& command ) = 0;
+ virtual void SubmitCommands( std::vector<API::RenderCommand*> commands ) = 0;
/**
* @brief Mark the beginning of a frame
Controller( const Controller& ) = delete;
Controller& operator=( const Controller& ) = delete;
- virtual ~Controller() = default;
-
protected:
// derived types should not be moved direcly to prevent slicing
Controller( Controller&& ) = default;
private:
};
-template<typename T>
-std::unique_ptr<GenericBuffer<T>> Controller::CreateBuffer( size_t numberOfElements )
-{
- return std::make_unique<GenericBuffer<T>>(numberOfElements, std::move(CreateBuffer( numberOfElements, sizeof( T ) )));
-}
-
} // namespace API
} // namespace Graphics
} // namespace Dali