[Vulkan] Graphics API cleanup
[platform/core/uifw/dali-core.git] / dali / graphics-api / graphics-api-controller.h
index 0bd9690..7251111 100644 (file)
 // 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
@@ -40,12 +39,16 @@ namespace Graphics
 {
 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
    */
@@ -59,43 +62,52 @@ public:
   /**
    * @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
@@ -112,8 +124,6 @@ public:
   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;
@@ -132,12 +142,6 @@ protected:
 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