Support KTX_UNCOMPRESSED_ALPHA8 format 45/146945/3
authorHeeyong Song <heeyong.song@samsung.com>
Thu, 31 Aug 2017 08:26:30 +0000 (17:26 +0900)
committerHeeyong Song <heeyong.song@samsung.com>
Wed, 6 Sep 2017 00:06:28 +0000 (00:06 +0000)
Change-Id: Ia9ed3eef2a7fcaa7184a11b9b187d9d1e02d909a

platform-abstractions/tizen/image-loaders/loader-ktx.cpp

index fe474f5..d39c361 100755 (executable)
@@ -108,6 +108,9 @@ enum KtxInternalFormat
   KTX_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR      = 0x93DC,
   KTX_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR      = 0x93DD,
 
+  // Uncompressed Alpha format
+  KTX_UNCOMPRESSED_ALPHA8                         = 0x1906,
+
   KTX_SENTINEL = ~0u
 };
 
@@ -159,6 +162,9 @@ const unsigned KtxInternalFormats[] =
   KTX_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,
   KTX_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,
 
+  // Uncompressed Alpha format
+  KTX_UNCOMPRESSED_ALPHA8,
+
   KTX_SENTINEL
 };
 
@@ -445,6 +451,13 @@ bool ConvertPixelFormat(const uint32_t ktxPixelFormat, Dali::Pixel::Format& form
       break;
     }
 
+    // Uncompressed Alpha format
+    case KTX_UNCOMPRESSED_ALPHA8:
+    {
+      format = A8;
+      break;
+    }
+
     default:
     {
        return false;
@@ -482,10 +495,21 @@ bool LoadKtxHeader( FILE * const fp, unsigned int& width, unsigned int& height,
   const bool textureHasNoMipmapLevels                 = fileHeader.numberOfMipmapLevels == 0 || fileHeader.numberOfMipmapLevels == 1;
   const bool keyValueDataNotTooLarge                  = fileHeader.bytesOfKeyValueData <= MAX_BYTES_OF_KEYVALUE_DATA;
 
-  const bool headerIsValid = signatureGood && fileEndiannessMatchesSystemEndianness && glTypeIsCompressed &&
-                           glTypeSizeCompatibleWithCompressedTex && glFormatCompatibleWithCompressedTex &&
-                           textureIsNot3D && textureIsNotAnArray && textureIsNotACubemap && textureHasNoMipmapLevels &&
-                           glInternalFormatIsSupportedCompressedTex & keyValueDataNotTooLarge;
+  bool headerIsValid = signatureGood && fileEndiannessMatchesSystemEndianness &&
+                     glTypeSizeCompatibleWithCompressedTex && textureIsNot3D && textureIsNotAnArray &&
+                     textureIsNotACubemap && textureHasNoMipmapLevels && keyValueDataNotTooLarge;
+
+  if( !glTypeIsCompressed )  // check for uncompressed Alpha
+  {
+    const bool isAlpha = ( ( fileHeader.glBaseInternalFormat == KTX_UNCOMPRESSED_ALPHA8 ) && ( fileHeader.glFormat == KTX_UNCOMPRESSED_ALPHA8 ) &&
+                         ( fileHeader.glInternalFormat == KTX_UNCOMPRESSED_ALPHA8 ) );
+    headerIsValid = headerIsValid && isAlpha;
+  }
+  else
+  {
+    headerIsValid = headerIsValid && glFormatCompatibleWithCompressedTex && glInternalFormatIsSupportedCompressedTex;
+  }
+
   if( !headerIsValid )
   {
      DALI_LOG_ERROR( "KTX file invalid or using unsupported features. Header tests: sig: %d, endian: %d, gl_type: %d, gl_type_size: %d, gl_format: %d, internal_format: %d, depth: %d, array: %d, faces: %d, mipmap: %d, vey-vals: %d.\n", 0+signatureGood, 0+fileEndiannessMatchesSystemEndianness, 0+glTypeIsCompressed, 0+glTypeSizeCompatibleWithCompressedTex, 0+glFormatCompatibleWithCompressedTex, 0+glInternalFormatIsSupportedCompressedTex, 0+textureIsNot3D, 0+textureIsNotAnArray, 0+textureIsNotACubemap, 0+textureHasNoMipmapLevels, 0+keyValueDataNotTooLarge);