X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Fintegration-api%2Fbitmap.cpp;h=373af9cca100f7aa255cc0b8151955ec463dcb41;hb=c2605260e4a76ab1fda23bea51002f5228d8c88b;hp=bd60e43200703a33cb48fb004fef3f7d26e28311;hpb=27619bbc4c1d443e89a6cdd116e544f6d9657fa4;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/integration-api/bitmap.cpp b/dali/integration-api/bitmap.cpp index bd60e43..373af9c 100644 --- a/dali/integration-api/bitmap.cpp +++ b/dali/integration-api/bitmap.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2017 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. @@ -18,14 +18,14 @@ // CLASS HEADER #include -// EXTERNAL INCLUDES - // INTERNAL INCLUDES #include +#include +#include #include #include -#include #include +#include namespace Dali { @@ -162,86 +162,279 @@ void ConvertToGlFormat( Format pixelformat, unsigned& pixelDataType, unsigned& i break; } + // GLES 2 extension compressed formats: + case COMPRESSED_RGB8_ETC1: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using non-standard GLES 2.0 extension compressed pixel format COMPRESSED_RGB8_ETC1.\n" ); + internalFormat = 0x8D64; ///! < Hardcoded so we can test before we move to GLES 3.0 or greater. + break; + } + case COMPRESSED_RGB_PVRTC_4BPPV1: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using non-standard GLES 2.0 extension compressed pixel format COMPRESSED_RGB_PVRTC_4BPPV1.\n" ); + internalFormat = 0x8C00; ///! < Hardcoded so we can test before we move to GLES 3.0 or greater. + break; + } + // GLES 3.0 standard compressed formats: case COMPRESSED_R11_EAC: { DALI_LOG_INFO(Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.0 standard compressed pixel format COMPRESSED_R11_EAC.\n"); - internalFormat = 0x9270; ///! < Hardcoded until we move to GLES 3.0 or greater. + internalFormat = GL_COMPRESSED_R11_EAC; break; } case COMPRESSED_SIGNED_R11_EAC: { DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.0 standard compressed pixel format COMPRESSED_SIGNED_R11_EAC.\n" ); - internalFormat = 0x9271; ///! < Hardcoded until we move to GLES 3.0 or greater. - ; + internalFormat = GL_COMPRESSED_SIGNED_R11_EAC; break; } case COMPRESSED_RG11_EAC: { DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.0 standard compressed pixel format COMPRESSED_RG11_EAC.\n" ); - internalFormat = 0x9272; ///! < Hardcoded until we move to GLES 3.0 or greater. + internalFormat = GL_COMPRESSED_RG11_EAC; break; } case COMPRESSED_SIGNED_RG11_EAC: { DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.0 standard compressed pixel format COMPRESSED_SIGNED_RG11_EAC.\n" ); - internalFormat = 0x9273; ///! < Hardcoded until we move to GLES 3.0 or greater. + internalFormat = GL_COMPRESSED_SIGNED_RG11_EAC; break; } case COMPRESSED_RGB8_ETC2: { DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.0 standard compressed pixel format COMPRESSED_RGB8_ETC2.\n" ); - internalFormat = 0x9274; ///! < Hardcoded until we move to GLES 3.0 or greater. + internalFormat = GL_COMPRESSED_RGB8_ETC2; break; } case COMPRESSED_SRGB8_ETC2: { DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.0 standard compressed pixel format COMPRESSED_SRGB8_ETC2.\n" ); - internalFormat = 0x9275; ///! < Hardcoded until we move to GLES 3.0 or greater. + internalFormat = GL_COMPRESSED_SRGB8_ETC2; break; } case COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: { DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.0 standard compressed pixel format COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2.\n" ); - internalFormat = 0x9276; ///! < Hardcoded until we move to GLES 3.0 or greater. + internalFormat = GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2; break; } case COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: { DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.0 standard compressed pixel format COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2.\n" ); - internalFormat = 0x9277; ///! < Hardcoded until we move to GLES 3.0 or greater. + internalFormat = GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2; break; } case COMPRESSED_RGBA8_ETC2_EAC: { DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.0 standard compressed pixel format COMPRESSED_RGBA8_ETC2_EAC.\n" ); - internalFormat = 0x9278; ///! < Hardcoded until we move to GLES 3.0 or greater. + internalFormat = GL_COMPRESSED_RGBA8_ETC2_EAC; break; } case COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: { DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.0 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ETC2_EAC.\n" ); - internalFormat = 0x9279; ///! < Hardcoded until we move to GLES 3.0 or greater. + internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC; break; } - // GLES 2 extension compressed formats: - case COMPRESSED_RGB8_ETC1: + // GLES 3.1 extension compressed formats: + case COMPRESSED_RGBA_ASTC_4x4_KHR: { - DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using non-standard GLES 2.0 extension compressed pixel format COMPRESSED_RGB8_ETC1.\n" ); - internalFormat = 0x8D64; ///! < Hardcoded so we can test before we move to GLES 3.0 or greater. + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_4x4_KHR.\n" ); + internalFormat = GL_COMPRESSED_RGBA_ASTC_4x4_KHR; break; } - case COMPRESSED_RGB_PVRTC_4BPPV1: + case COMPRESSED_RGBA_ASTC_5x4_KHR: { - DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using non-standard GLES 2.0 extension compressed pixel format COMPRESSED_RGB_PVRTC_4BPPV1.\n" ); - internalFormat = 0x8C00; ///! < Hardcoded so we can test before we move to GLES 3.0 or greater. + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_5x4_KHR.\n" ); + internalFormat = GL_COMPRESSED_RGBA_ASTC_5x4_KHR; + break; + } + case COMPRESSED_RGBA_ASTC_5x5_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_5x5_KHR.\n" ); + internalFormat = GL_COMPRESSED_RGBA_ASTC_5x5_KHR; + break; + } + case COMPRESSED_RGBA_ASTC_6x5_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_6x5_KHR.\n" ); + internalFormat = GL_COMPRESSED_RGBA_ASTC_6x5_KHR; + break; + } + case COMPRESSED_RGBA_ASTC_6x6_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_6x6_KHR.\n" ); + internalFormat = GL_COMPRESSED_RGBA_ASTC_6x6_KHR; + break; + } + case COMPRESSED_RGBA_ASTC_8x5_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_8x5_KHR.\n" ); + internalFormat = GL_COMPRESSED_RGBA_ASTC_8x5_KHR; + break; + } + case COMPRESSED_RGBA_ASTC_8x6_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_8x6_KHR.\n" ); + internalFormat = GL_COMPRESSED_RGBA_ASTC_8x6_KHR; + break; + } + case COMPRESSED_RGBA_ASTC_8x8_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_8x8_KHR.\n" ); + internalFormat = GL_COMPRESSED_RGBA_ASTC_8x8_KHR; + break; + } + case COMPRESSED_RGBA_ASTC_10x5_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_10x5_KHR.\n" ); + internalFormat = GL_COMPRESSED_RGBA_ASTC_10x5_KHR; + break; + } + case COMPRESSED_RGBA_ASTC_10x6_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_10x6_KHR.\n" ); + internalFormat = GL_COMPRESSED_RGBA_ASTC_10x6_KHR; + break; + } + case COMPRESSED_RGBA_ASTC_10x8_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_10x8_KHR.\n" ); + internalFormat = GL_COMPRESSED_RGBA_ASTC_10x8_KHR; + break; + } + case COMPRESSED_RGBA_ASTC_10x10_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_10x10_KHR.\n" ); + internalFormat = GL_COMPRESSED_RGBA_ASTC_10x10_KHR; + break; + } + case COMPRESSED_RGBA_ASTC_12x10_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_12x10_KHR.\n" ); + internalFormat = GL_COMPRESSED_RGBA_ASTC_12x10_KHR; + break; + } + case COMPRESSED_RGBA_ASTC_12x12_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_RGBA_ASTC_12x12_KHR.\n" ); + internalFormat = GL_COMPRESSED_RGBA_ASTC_12x12_KHR; + break; + } + case COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR.\n" ); + internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR; + break; + } + case COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR.\n" ); + internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR; + break; + } + case COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR.\n" ); + internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR; + break; + } + case COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR.\n" ); + internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR; + break; + } + case COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR.\n" ); + internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR; + break; + } + case COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR.\n" ); + internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR; + break; + } + case COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR.\n" ); + internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR; + break; + } + case COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR.\n" ); + internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR; + break; + } + case COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR.\n" ); + internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR; + break; + } + case COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR.\n" ); + internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR; + break; + } + case COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR.\n" ); + internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR; + break; + } + case COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR.\n" ); + internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR; + break; + } + case COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR.\n" ); + internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR; + break; + } + case COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.1 standard compressed pixel format COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR.\n" ); + internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR; + break; + } + + // GLES 3.0 floating point formats. + case RGB16F: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.0 GLES 3.0 floating point format.\n" ); + pixelDataType = GL_HALF_FLOAT; + internalFormat= GL_RGB; + break; + } + case RGB32F: + { + DALI_LOG_INFO( Debug::Filter::gImage, Debug::Verbose, "Using GLES 3.0 GLES 3.0 floating point format.\n" ); + pixelDataType = GL_FLOAT; + internalFormat= GL_RGB; + break; + } + + case INVALID: + { + DALI_LOG_ERROR( "Invalid pixel format for bitmap\n" ); + internalFormat = 0; break; } } } -Bitmap* Bitmap::New(const Profile profile = BITMAP_2D_PACKED_PIXELS, const bool managePixelBuffer = true) +Bitmap* Bitmap::New( const Profile profile = BITMAP_2D_PACKED_PIXELS, + ResourcePolicy::Discardable discardable = ResourcePolicy::OWNED_DISCARD ) { DALI_ASSERT_DEBUG(profile == BITMAP_2D_PACKED_PIXELS || profile == BITMAP_COMPRESSED); @@ -253,20 +446,21 @@ Bitmap* Bitmap::New(const Profile profile = BITMAP_2D_PACKED_PIXELS, const bool * scanlines past the bottom of the image in the buffer if requested.*/ case BITMAP_2D_PACKED_PIXELS: { - Bitmap * const bitmap = new Dali::Internal::BitmapPackedPixel(managePixelBuffer); + Bitmap * const bitmap = new Dali::Internal::BitmapPackedPixel( discardable ); return bitmap; } /** The data for the bitmap is buffered in an opaque form.*/ case BITMAP_COMPRESSED: { - return new Dali::Internal::BitmapCompressed(managePixelBuffer); + return new Dali::Internal::BitmapCompressed( discardable ); } } return 0; } -Bitmap::Bitmap( bool discardable, Dali::Integration::PixelBuffer* pixBuf) + +Bitmap::Bitmap( ResourcePolicy::Discardable discardable, Dali::Integration::PixelBuffer* pixBuf) : mImageWidth(0), mImageHeight(0), mPixelFormat(Pixel::RGBA8888), @@ -277,24 +471,21 @@ Bitmap::Bitmap( bool discardable, Dali::Integration::PixelBuffer* pixBuf) { } +PixelBuffer* Bitmap::GetBufferOwnership() +{ + PixelBuffer* buffer = mData; + mData = NULL; + return buffer; +} + void Bitmap::DiscardBuffer() { - if ( mDiscardable ) + if( mDiscardable == ResourcePolicy::OWNED_DISCARD ) { DeletePixelBuffer(); } } -PixelBuffer* Bitmap::ReleaseBuffer() -{ - PixelBuffer* const data = mData; - - // Ownership of mData has been transferred, so indicate that mData pointer is no longer valid: - mData = NULL; - - return data; -} - Bitmap::~Bitmap() { DALI_LOG_TRACE_METHOD(Debug::Filter::gImage); @@ -309,7 +500,7 @@ void Bitmap::DeletePixelBuffer() { return; } - delete [] mData; + free ( mData ); mData = NULL; } @@ -329,4 +520,3 @@ void Bitmap::Initialize( Pixel::Format pixelFormat, } //namespace Integration } //namespace Dali -