openfl
Version:
A fast, productive library for 2D cross-platform development.
140 lines (123 loc) • 5.51 kB
JavaScript
// Class: openfl.display3D._internal.ATFReader
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
$global.Object.defineProperty(exports, "__esModule", {value: true});
var __map_reserved = {};
// Imports
var $hxClasses = require("./../../../hxClasses_stub").default;
var $hxEnums = require("./../../../hxEnums_stub").default;
var $import = require("./../../../import_stub").default;
function js__$Boot_HaxeError() {return require("./../../../js/_Boot/HaxeError");}
function openfl_errors_IllegalOperationError() {return require("./../../../openfl/errors/IllegalOperationError");}
function lime_utils_Log() {return require("./../../../lime/utils/Log");}
function _$UInt_UInt_$Impl_$() {return require("./../../../_UInt/UInt_Impl_");}
function openfl_utils__$ByteArray_ByteArray_$Impl_$() {return require("./../../../openfl/utils/_ByteArray/ByteArray_Impl_");}
function haxe_io_Bytes() {return require("./../../../haxe/io/Bytes");}
function js_Boot() {return require("./../../../js/Boot");}
// Constructor
var ATFReader = function(data,byteArrayOffset) {
this.version = 0;
data.position = byteArrayOffset;
var signature = data.readUTFBytes(3);
data.position = byteArrayOffset;
if(signature != "ATF") {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_IllegalOperationError().default)("ATF signature not found"));
}
var length = 0;
if(data.get(byteArrayOffset + 6) == 255) {
this.version = data.get(byteArrayOffset + 7);
data.position = byteArrayOffset + 8;
length = this.__readUInt32(data);
} else {
this.version = 0;
data.position = byteArrayOffset + 3;
length = this.__readUInt24(data);
}
if((_$UInt_UInt_$Impl_$().default).gt((js_Boot().default).__cast(byteArrayOffset + length , $hxClasses["Int"]),(openfl_utils__$ByteArray_ByteArray_$Impl_$().default).get_length(data))) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_IllegalOperationError().default)("ATF length exceeds byte array length"));
}
this.data = data;
}
// Meta
ATFReader.__name__ = "openfl.display3D._internal.ATFReader";
ATFReader.__isInterface__ = false;
ATFReader.prototype = {
readHeader: function(__width,__height,cubeMap) {
var tdata = this.data.readUnsignedByte();
var type = tdata >>> 7;
if(!cubeMap && type != 0) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_IllegalOperationError().default)("ATF Cube map not expected"));
}
if(cubeMap && type != 1) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_IllegalOperationError().default)("ATF Cube map expected"));
}
this.cubeMap = cubeMap;
this.atfFormat = tdata & 127;
if(this.atfFormat != 3 && this.atfFormat != 5) {
(lime_utils_Log().default).warn("Only ATF block compressed textures without JPEG-XR+LZMA are supported",{ fileName : "../node_modules/openfl-haxelib/src/openfl/display3D/_internal/ATFReader.hx", lineNumber : 97, className : "openfl.display3D._internal.ATFReader", methodName : "readHeader"});
}
this.width = 1 << this.data.readUnsignedByte();
this.height = 1 << this.data.readUnsignedByte();
if(this.width != __width || this.height != __height) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_IllegalOperationError().default)("ATF width and height dont match"));
}
this.mipCount = this.data.readUnsignedByte();
return this.atfFormat == 5;
},
readTextures: function(uploadCallback) {
var gpuFormats = this.version < 3 ? 3 : 4;
var sideCount = this.cubeMap ? 6 : 1;
var _g = 0;
var _g1 = sideCount;
while(_g < _g1) {
var side = _g++;
var _g2 = 0;
var _g11 = this.mipCount;
while(_g2 < _g11) {
var level = _g2++;
var _g3 = 0;
var _g12 = gpuFormats;
while(_g3 < _g12) {
var gpuFormat = _g3++;
var blockLength = this.version == 0 ? this.__readUInt24(this.data) : this.__readUInt32(this.data);
if((_$UInt_UInt_$Impl_$().default).gt(this.data.position + blockLength,(openfl_utils__$ByteArray_ByteArray_$Impl_$().default).get_length(this.data))) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_IllegalOperationError().default)("Block length exceeds ATF file length"));
}
if((_$UInt_UInt_$Impl_$().default).gt(blockLength,0)) {
var bytes = (haxe_io_Bytes().default).alloc(blockLength);
var this1 = this.data;
var bytes1 = (openfl_utils__$ByteArray_ByteArray_$Impl_$().default).fromBytes(bytes);
var offset = 0;
var length = blockLength;
if(length == null) {
length = 0;
}
if(offset == null) {
offset = 0;
}
this1.readBytes(bytes1,offset,length);
uploadCallback(side,level,gpuFormat,this.width >> level,this.height >> level,blockLength,bytes);
}
}
}
}
},
__readUInt24: function(data) {
var value = data.readUnsignedByte() << 16;
value = value | data.readUnsignedByte() << 8;
value = value | data.readUnsignedByte();
return value;
},
__readUInt32: function(data) {
var value = data.readUnsignedByte() << 24;
value = value | data.readUnsignedByte() << 16;
value = value | data.readUnsignedByte() << 8;
value = value | data.readUnsignedByte();
return value;
}
};
ATFReader.prototype.__class__ = ATFReader.prototype.constructor = $hxClasses["openfl.display3D._internal.ATFReader"] = ATFReader;
// Init
// Statics
ATFReader.__meta__ = { obj : { SuppressWarnings : ["checkstyle:FieldDocComment"]}}
// Export
exports.default = ATFReader;