( buffer )
| 438 | } |
| 439 | |
| 440 | function transcode( buffer ) { |
| 441 | |
| 442 | var basisFile = new _BasisFile( new Uint8Array( buffer ) ); |
| 443 | |
| 444 | var width = basisFile.getImageWidth( 0, 0 ); |
| 445 | var height = basisFile.getImageHeight( 0, 0 ); |
| 446 | var levels = basisFile.getNumLevels( 0 ); |
| 447 | var hasAlpha = basisFile.getHasAlpha(); |
| 448 | |
| 449 | function cleanup() { |
| 450 | |
| 451 | basisFile.close(); |
| 452 | basisFile.delete(); |
| 453 | |
| 454 | } |
| 455 | |
| 456 | if ( ! hasAlpha ) { |
| 457 | |
| 458 | switch ( config.format ) { |
| 459 | |
| 460 | case 9: // Hardcoded: THREE.BasisTextureLoader.BASIS_FORMAT.cTFPVRTC1_4_RGBA |
| 461 | config.format = 8; // Hardcoded: THREE.BasisTextureLoader.BASIS_FORMAT.cTFPVRTC1_4_RGB; |
| 462 | break; |
| 463 | default: |
| 464 | break; |
| 465 | |
| 466 | } |
| 467 | |
| 468 | } |
| 469 | |
| 470 | if ( ! width || ! height || ! levels ) { |
| 471 | |
| 472 | cleanup(); |
| 473 | throw new Error( 'THREE.BasisTextureLoader: Invalid .basis file' ); |
| 474 | |
| 475 | } |
| 476 | |
| 477 | if ( ! basisFile.startTranscoding() ) { |
| 478 | |
| 479 | cleanup(); |
| 480 | throw new Error( 'THREE.BasisTextureLoader: .startTranscoding failed' ); |
| 481 | |
| 482 | } |
| 483 | |
| 484 | var mipmaps = []; |
| 485 | |
| 486 | for ( var mip = 0; mip < levels; mip ++ ) { |
| 487 | |
| 488 | var mipWidth = basisFile.getImageWidth( 0, mip ); |
| 489 | var mipHeight = basisFile.getImageHeight( 0, mip ); |
| 490 | var dst = new Uint8Array( basisFile.getImageTranscodedSizeInBytes( 0, mip, config.format ) ); |
| 491 | |
| 492 | var status = basisFile.transcodeImage( |
| 493 | dst, |
| 494 | 0, |
| 495 | mip, |
| 496 | config.format, |
| 497 | 0, |
no test coverage detected