@@ -21,6 +21,9 @@ var supportedTranscoderFormats;
21
21
var transcoderModule ;
22
22
var transcoderPromise ;
23
23
24
+ var ImageInfo ;
25
+ var BasisLzEtc1sImageTranscoder ;
26
+
24
27
loadKTX2 . setKTX2SupportedFormats = function ( etc1 , s3tc , pvrtc ) {
25
28
supportedTranscoderFormats = {
26
29
etc1 : etc1 ,
@@ -91,6 +94,11 @@ function loadKTX2(resourceOrUrlOrBuffer) {
91
94
// eslint-disable-next-line new-cap
92
95
MSC_TRANSCODER ( ) . then ( function ( basisModule ) {
93
96
transcoderModule = basisModule ;
97
+ basisModule . initTranscoders ( ) ;
98
+
99
+ ImageInfo = basisModule . ImageInfo ;
100
+ BasisLzEtc1sImageTranscoder = basisModule . BasisLzEtc1sImageTranscoder ;
101
+
94
102
deferred . resolve ( ) ;
95
103
} ) ;
96
104
}
@@ -297,10 +305,8 @@ function parseKTX2(data) {
297
305
parseUncompressed ( data , header , levelIndex , result ) ;
298
306
} else if ( header . vkFormat === 0x0 && dfd . colorModel === colorModelETC1S ) {
299
307
// Compressed, initialize transcoder module
300
- var BasisTranscoder = transcoderModule . BasisTranscoder ;
301
- BasisTranscoder . init ( ) ;
302
- var transcoder = new BasisTranscoder ( ) ;
303
- parseCompressed (
308
+ var transcoder = new BasisLzEtc1sImageTranscoder ( ) ;
309
+ transcodeEtc1s (
304
310
data ,
305
311
view ,
306
312
header ,
@@ -375,7 +381,7 @@ function parseUncompressed(data, header, levelIndex, result) {
375
381
}
376
382
}
377
383
378
- function parseCompressed (
384
+ function transcodeEtc1s (
379
385
data ,
380
386
view ,
381
387
header ,
@@ -411,8 +417,8 @@ function parseCompressed(
411
417
alphaSliceByteOffset : view . getUint32 ( ( byteOffset += sizeOfUint32 ) , true ) ,
412
418
alphaSliceByteLength : view . getUint32 ( ( byteOffset += sizeOfUint32 ) , true ) ,
413
419
} ) ;
420
+ byteOffset += sizeOfUint32 ;
414
421
}
415
- byteOffset += sizeOfUint32 ;
416
422
417
423
var hasAlphaSlices = imageDescs [ 0 ] . alphaSliceByteLength > 0 ;
418
424
@@ -441,7 +447,7 @@ function parseCompressed(
441
447
}
442
448
443
449
var dataBuffer = defined ( data . buffer ) ? data . buffer : data ;
444
- var endpoints = new Uint8Array ( dataBuffer , byteOffset , selectorsByteLength ) ;
450
+ var endpoints = new Uint8Array ( dataBuffer , byteOffset , endpointsByteLength ) ;
445
451
byteOffset += endpointsByteLength ;
446
452
var selectors = new Uint8Array ( dataBuffer , byteOffset , selectorsByteLength ) ;
447
453
byteOffset += selectorsByteLength ;
@@ -457,49 +463,42 @@ function parseCompressed(
457
463
for ( var i = 0 ; i < levelIndex . length ; ++ i ) {
458
464
var level = ( result [ i ] = { } ) ;
459
465
var levelInfo = levelIndex [ i ] ;
460
- var imageInfo = imageDescs [ i ] ;
461
-
462
- // BasisU blocks are 4x4: https://github.com/BinomialLLC/basis_universal/wiki/.basis-File-Format-and-ETC1S-Texture-Video-Specification
463
- var blockWidth = 4 ;
464
- var blockHeight = 4 ;
465
-
466
- // NumBlocks formula: http://github.khronos.org/KTX-Specification/#_supercompression_global_data
467
- var numBlocksX = Math . ceil ( header . pixelWidth / blockWidth ) ;
468
- var numBlocksY = Math . max ( 1 , Math . ceil ( header . pixelHeight / blockHeight ) ) ;
466
+ var imageDesc = imageDescs [ i ] ;
469
467
470
468
for ( var j = 0 ; j < header . faceCount ; ++ j ) {
471
469
var width = header . pixelWidth >> i ;
472
470
var height = header . pixelWidth >> i ;
473
471
var levelOffset = ktx2Offset + levelInfo . byteOffset ;
474
472
475
- var transcoded ;
476
- var rgbData = new Uint8Array (
473
+ var levelData = new Uint8Array (
477
474
dataBuffer ,
478
- levelOffset + imageInfo . rgbSliceByteOffset ,
479
- imageInfo . rgbSliceByteLength
480
- ) ;
481
- var alphaData = new Uint8Array (
482
- dataBuffer ,
483
- levelOffset + imageInfo . alphaSliceByteOffset ,
484
- imageInfo . alphaSliceByteLength
475
+ levelOffset + imageDesc . rgbSliceByteOffset ,
476
+ imageDesc . rgbSliceByteLength + imageDesc . alphaSliceByteLength
485
477
) ;
486
478
487
- transcoded = transcoder . transcodeImage (
488
- imageInfo . imageFlags ,
489
- rgbData ,
490
- alphaData ,
491
- transcoderFormat ,
492
- i ,
479
+ var imageInfo = new ImageInfo (
480
+ transcoderModule . TextureFormat . ETC1S ,
493
481
width ,
494
482
height ,
495
- numBlocksX ,
496
- numBlocksY ,
497
- isVideo ,
498
- false
483
+ i
484
+ ) ;
485
+ imageInfo . flags = imageDesc . imageFlags ;
486
+ imageInfo . rgbByteOffset = 0 ;
487
+ imageInfo . rgbByteLength = imageDesc . rgbSliceByteLength ;
488
+ imageInfo . alphaByteOffset =
489
+ imageDesc . alphaSliceByteOffset > 0 ? imageDesc . rgbSliceByteLength : 0 ;
490
+ imageInfo . alphaByteLength = imageDesc . alphaSliceByteLength ;
491
+
492
+ var transcoded = transcoder . transcodeImage (
493
+ transcoderFormat ,
494
+ levelData ,
495
+ imageInfo ,
496
+ 0 ,
497
+ isVideo
499
498
) ;
500
499
501
500
// Check Error Here
502
- if ( transcoded . error ) {
501
+ if ( transcoded . transcodedImage === undefined ) {
503
502
throw new RuntimeError ( "Error transcoding Image" ) ;
504
503
}
505
504
0 commit comments