MCPcopy Create free account
hub / github.com/axmolengine/axmol / initWithATITCData

Method initWithATITCData

core/platform/Image.cpp:2349–2485  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2347}
2348
2349bool 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;

Callers

nothing calls this directly

Calls 3

getInstanceFunction · 0.85
atitc_decodeFunction · 0.85
supportsATITCMethod · 0.80

Tested by

no test coverage detected