#include <dali/public-api/common/intrusive-ptr.h> // Dali::IntrusivePtr
#include <dali/public-api/object/base-object.h>
#include <dali/public-api/images/pixel.h>
-#include <dali/devel-api/rendering/texture.h> // Dali::Internal::Render::Texture
+#include <dali/public-api/images/image-operations.h> // Dali::ImageDimensions
+#include <dali/public-api/rendering/texture.h> // Dali::Internal::Render::Texture
#include <dali/internal/event/common/event-thread-services.h>
+#include <dali/internal/event/images/pixel-data-impl.h>
namespace Dali
{
{
namespace Render
{
-class NewTexture;
+class Texture;
}
-class NewTexture;
-typedef IntrusivePtr<NewTexture> NewTexturePtr;
+class Texture;
+using TexturePtr = IntrusivePtr<Texture>;
-class NewTexture : public BaseObject
+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
* @param[in] height The height of the texture
* @return A smart-pointer to the newly allocated Texture.
*/
- static NewTexturePtr New(TextureType::Type type, Pixel::Format format, unsigned int width, unsigned int height);
+ static TexturePtr New(TextureType::Type type, Pixel::Format format, unsigned int width, unsigned int height);
+
+ /**
+ * @brief Creates a new Texture from a native image
+ * @param[in] nativeImageInterface The native image
+ * @return A smart-pointer to the newly allocated Texture.
+ */
+ static TexturePtr New( NativeImageInterface& nativeImageInterface );
/**
* @brief Get the texture render object
*
* @return the texture render object
*/
- Render::NewTexture* GetRenderObject() const;
+ Render::Texture* GetRenderObject() const;
+
+ /**
+ * @copydoc Dali::Texture::Upload()
+ */
+ bool Upload( PixelDataPtr pixelData );
/**
* @copydoc Dali::Texture::Upload()
*/
- void Upload( Vector<unsigned char>& buffer, const TextureUploadParams& params );
+ bool Upload( PixelDataPtr pixelData,
+ unsigned int layer, unsigned int mipmap,
+ unsigned int xOffset, unsigned int yOffset,
+ unsigned int width, unsigned int height );
/**
* @copydoc Dali::Texture::GenerateMipmaps()
*/
unsigned int GetHeight() const;
-
private: // implementation
/**
* Constructor
+ * @param[in] type The type of the texture
+ * @param[in] format The format of the pixel data
+ * @param[in] size The size of the texture
*/
- NewTexture(TextureType::Type type, Pixel::Format format, unsigned int width, unsigned int height );
+ Texture(TextureType::Type type, Pixel::Format format, ImageDimensions size );
+
+ /**
+ * Constructor from native image
+ * @param[in] nativeImageInterface The native image
+ */
+ Texture( NativeImageInterfacePtr nativeImageInterface );
/**
* Second stage initialization of the Texture
/**
* A reference counted object may only be deleted by calling Unreference()
*/
- virtual ~NewTexture();
+ virtual ~Texture();
private: // unimplemented methods
- NewTexture( const NewTexture& );
- NewTexture& operator=( const NewTexture& );
+ Texture( const Texture& );
+ Texture& operator=( const Texture& );
private: // data
Internal::EventThreadServices& mEventThreadServices; ///<Used to send messages to the render thread via update thread
- Internal::Render::NewTexture* mRenderObject; ///<The Render::Texture associated to this texture
+ Internal::Render::Texture* mRenderObject; ///<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
- Dali::TextureType::Type mType; ///< Texture type (cached)
- Pixel::Format mFormat; ///< Pixel format
- unsigned int mWidth; ///< Width of the texture
- unsigned int mHeight; ///< Height of the texture
};
} // namespace Internal
// Helpers for public-api forwarding methods
-inline Internal::NewTexture& GetImplementation(Dali::Texture& handle)
+inline Internal::Texture& GetImplementation(Dali::Texture& handle)
{
DALI_ASSERT_ALWAYS(handle && "Texture handle is empty");
BaseObject& object = handle.GetBaseObject();
- return static_cast<Internal::NewTexture&>(object);
+ return static_cast<Internal::Texture&>(object);
}
-inline const Internal::NewTexture& GetImplementation(const Dali::Texture& handle)
+inline const Internal::Texture& GetImplementation(const Dali::Texture& handle)
{
DALI_ASSERT_ALWAYS(handle && "Texture handle is empty");
const BaseObject& object = handle.GetBaseObject();
- return static_cast<const Internal::NewTexture&>(object);
+ return static_cast<const Internal::Texture&>(object);
}
} // namespace Dali