[Tizen] Create Texture by ResourceId + Set Texture size and format internally.
[platform/core/uifw/dali-core.git] / dali / internal / event / rendering / texture-impl.h
index 57b098d..4d3a133 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_INTERNAL_NEW_TEXTURE_H
 
 /*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@
 // INTERNAL INCLUDES
 #include <dali/internal/event/common/event-thread-services.h>
 #include <dali/internal/event/images/pixel-data-impl.h>
+#include <dali/internal/render/renderers/render-texture-key.h>
 #include <dali/public-api/common/dali-common.h>      // DALI_ASSERT_ALWAYS
 #include <dali/public-api/common/intrusive-ptr.h>    // Dali::IntrusivePtr
 #include <dali/public-api/images/image-operations.h> // Dali::ImageDimensions
@@ -32,11 +33,6 @@ namespace Dali
 {
 namespace Internal
 {
-namespace Render
-{
-class Texture;
-}
-
 class Texture;
 using TexturePtr = IntrusivePtr<Texture>;
 
@@ -44,19 +40,6 @@ class Texture : public BaseObject
 {
 public:
   /**
-   * @brief Structure used to pass parameters to the Upload method
-   */
-  struct UploadParams
-  {
-    uint16_t layer;   ///< Specifies the layer of a cube map or array texture
-    uint16_t mipmap;  ///< Specifies the level-of-detail number. Level 0 is the base image level. Level n is the nth mipmap reduction image.
-    uint16_t xOffset; ///< Specifies a texel offset in the x direction within the texture array.
-    uint16_t yOffset; ///< Specifies a texel offset in the y direction within the texture array.
-    uint16_t width;   ///< Specifies the width of the texture subimage
-    uint16_t height;  ///< Specifies the height of the texture subimage.
-  };
-
-  /**
    * @brief Create a new Texture.
    *
    * @param[in] type The type of the texture
@@ -65,7 +48,7 @@ public:
    * @param[in] height The height of the texture
    * @return A smart-pointer to the newly allocated Texture.
    */
-  static TexturePtr New(TextureType::Type type, Pixel::Format format, unsigned int width, unsigned int height);
+  static TexturePtr New(TextureType::Type type, Pixel::Format format, uint32_t width, uint32_t height);
 
   /**
    * @brief Creates a new Texture from a native image
@@ -75,11 +58,20 @@ public:
   static TexturePtr New(NativeImageInterface& nativeImageInterface);
 
   /**
+   * @brief Create a new Texture with resourceId.
+   *
+   * @param[in] type The type of the texture
+   * @param[in] resourceId The unique id of this texture combind with TextureUploadManager
+   * @return A smart-pointer to the newly allocated Texture.
+   */
+  static TexturePtr New(TextureType::Type type, uint32_t resourceId);
+
+  /**
    * @brief Get the texture render object
    *
    * @return the texture render object
    */
-  Render::Texture* GetRenderObject() const;
+  Render::TextureKey GetRenderTextureKey() const;
 
   /**
    * @copydoc Dali::Texture::Upload()
@@ -90,12 +82,36 @@ public:
    * @copydoc Dali::Texture::Upload()
    */
   bool Upload(PixelDataPtr pixelData,
-              unsigned int layer,
-              unsigned int mipmap,
-              unsigned int xOffset,
-              unsigned int yOffset,
-              unsigned int width,
-              unsigned int height);
+              uint32_t     layer,
+              uint32_t     mipmap,
+              uint32_t     xOffset,
+              uint32_t     yOffset,
+              uint32_t     width,
+              uint32_t     height);
+
+  /**
+   * @copydoc Dali::Texture::UploadSubPixelData()
+   */
+  bool UploadSubPixelData(PixelDataPtr pixelData,
+                          uint32_t     dataXOffset,
+                          uint32_t     dataYOffset,
+                          uint32_t     dataWidth,
+                          uint32_t     dataHeight);
+
+  /**
+   * @copydoc Dali::Texture::UploadSubPixelData()
+   */
+  bool UploadSubPixelData(PixelDataPtr pixelData,
+                          uint32_t     dataXOffset,
+                          uint32_t     dataYOffset,
+                          uint32_t     dataWidth,
+                          uint32_t     dataHeight,
+                          uint32_t     layer,
+                          uint32_t     mipmap,
+                          uint32_t     xOffset,
+                          uint32_t     yOffset,
+                          uint32_t     width,
+                          uint32_t     height);
 
   /**
    * @copydoc Dali::Texture::GenerateMipmaps()
@@ -105,12 +121,37 @@ public:
   /**
    * @copydoc Dali::Texture::GetWidth()
    */
-  unsigned int GetWidth() const;
+  uint32_t GetWidth() const;
 
   /**
    * @copydoc Dali::Texture::GetHeight()
    */
-  unsigned int GetHeight() const;
+  uint32_t GetHeight() const;
+
+  /**
+   * @copydoc Dali::Texture::GetPixelFormat()
+   */
+  Pixel::Format GetPixelFormat() const;
+
+  /**
+   * @copydoc Dali::Integration::GetTextureResourceId()
+   */
+  uint32_t GetResourceId() const;
+
+  /**
+   * @copydoc Dali::Integration::GetTextureType()
+   */
+  Dali::TextureType::Type GetTextureType() const;
+
+  /**
+   * @copydoc Dali::Integration::SetTextureSize()
+   */
+  void SetSize(const ImageDimensions& size);
+
+  /**
+   * @copydoc Dali::Integration::SetTexturePixelFormat()
+   */
+  void SetPixelFormat(Pixel::Format format);
 
   /**
    * @brief Determine if the texture is a native image
@@ -143,6 +184,13 @@ private: // implementation
   Texture(NativeImageInterfacePtr nativeImageInterface);
 
   /**
+   * Constructor from resource id
+   * @param[in] type The type of the texture
+   * @param[in] resourceId The resouce id for texture upload manager using
+   */
+  Texture(TextureType::Type type, uint32_t resourceId);
+
+  /**
    * Second stage initialization of the Texture
    */
   void Initialize();
@@ -159,12 +207,16 @@ private: // unimplemented methods
 
 private:                                               // data
   Internal::EventThreadServices& mEventThreadServices; ///<Used to send messages to the render thread via update thread
-  Internal::Render::Texture*     mRenderObject;        ///<The Render::Texture associated to this texture
+  Internal::Render::TextureKey   mTextureKey;          ///<The Render::Texture associated to this texture
 
   NativeImageInterfacePtr mNativeImage; ///< Pointer to native image
   ImageDimensions         mSize;        ///< Size of the texture
   Dali::TextureType::Type mType;        ///< Texture type (cached)
   Pixel::Format           mFormat;      ///< Pixel format
+
+  uint32_t mResourceId;
+
+  bool mUseUploadedParameter : 1; ///< Whether ths texture size and format depend on uploaded image or not.
 };
 
 } // namespace Internal