| 2347 | } |
| 2348 | |
| 2349 | bool Image::initWithATITCData(uint8_t* data, ssize_t dataLen, bool ownData) |
| 2350 | { |
| 2351 | /* load the .ktx file */ |
| 2352 | KTXv1Header* header = (KTXv1Header*)data; |
| 2353 | _width = header->pixelWidth; |
| 2354 | _height = header->pixelHeight; |
| 2355 | _numberOfMipmaps = header->numberOfMipmapLevels; |
| 2356 | |
| 2357 | int blockSize = 0; |
| 2358 | switch (header->glInternalFormat) |
| 2359 | { |
| 2360 | case KTXv1Header::InternalFormat::ATC_RGB_AMD: |
| 2361 | blockSize = 8; |
| 2362 | break; |
| 2363 | case KTXv1Header::InternalFormat::ATC_RGBA_EXPLICIT_ALPHA_AMD: |
| 2364 | blockSize = 16; |
| 2365 | break; |
| 2366 | case KTXv1Header::InternalFormat::ATC_RGBA_INTERPOLATED_ALPHA_AMD: |
| 2367 | blockSize = 16; |
| 2368 | break; |
| 2369 | default: |
| 2370 | break; |
| 2371 | } |
| 2372 | |
| 2373 | /* pixelData point to the compressed data address */ |
| 2374 | int pixelOffset = KTX_V1_HEADER_SIZE + header->bytesOfKeyValueData + 4; |
| 2375 | uint8_t* pixelData = (uint8_t*)data + pixelOffset; |
| 2376 | |
| 2377 | /* calculate the dataLen */ |
| 2378 | int width = _width; |
| 2379 | int height = _height; |
| 2380 | |
| 2381 | bool hardware = Configuration::getInstance()->supportsATITC(); |
| 2382 | if (hardware) // compressed data length |
| 2383 | { |
| 2384 | AXLOGD("this is atitc H decode"); |
| 2385 | |
| 2386 | switch (header->glInternalFormat) |
| 2387 | { |
| 2388 | case KTXv1Header::InternalFormat::ATC_RGB_AMD: |
| 2389 | _pixelFormat = backend::PixelFormat::ATC_RGB; |
| 2390 | break; |
| 2391 | case KTXv1Header::InternalFormat::ATC_RGBA_EXPLICIT_ALPHA_AMD: |
| 2392 | _pixelFormat = backend::PixelFormat::ATC_EXPLICIT_ALPHA; |
| 2393 | break; |
| 2394 | case KTXv1Header::InternalFormat::ATC_RGBA_INTERPOLATED_ALPHA_AMD: |
| 2395 | _pixelFormat = backend::PixelFormat::ATC_INTERPOLATED_ALPHA; |
| 2396 | break; |
| 2397 | default: |
| 2398 | break; |
| 2399 | } |
| 2400 | } |
| 2401 | else // decompressed data length |
| 2402 | { /* if it is not gles or device do not support ATITC, decode texture by software */ |
| 2403 | |
| 2404 | AXLOGW("Hardware ATITC decoder not present. Using software decoder"); |
| 2405 | |
| 2406 | _pixelFormat = backend::PixelFormat::RGBA8; |
nothing calls this directly
no test coverage detected