|
@@ -40,10 +40,7 @@ class Library {
|
|
|
public function getData() {
|
|
|
var entry = resource.entry;
|
|
|
var b = haxe.io.Bytes.alloc(entry.size - header.dataPosition);
|
|
|
- entry.open();
|
|
|
- entry.skip(header.dataPosition);
|
|
|
- entry.read(b, 0, b.length);
|
|
|
- entry.close();
|
|
|
+ entry.readFull(b, header.dataPosition, b.length);
|
|
|
return b;
|
|
|
}
|
|
|
|
|
@@ -142,12 +139,10 @@ class Library {
|
|
|
var vsize = geom.vertexCount * geom.vertexStride * 4;
|
|
|
var vbuf = haxe.io.Bytes.alloc(vsize);
|
|
|
var entry = resource.entry;
|
|
|
- entry.open();
|
|
|
- entry.skip(header.dataPosition + geom.vertexPosition);
|
|
|
- entry.read(vbuf, 0, vsize);
|
|
|
|
|
|
- entry.skip(geom.indexPosition - (geom.vertexPosition + vsize));
|
|
|
+ entry.readFull(vbuf, header.dataPosition + geom.vertexPosition, vsize);
|
|
|
|
|
|
+ var dataPos = header.dataPosition + geom.indexPosition;
|
|
|
var isSmall = geom.vertexCount <= 0x10000;
|
|
|
var imult = isSmall ? 2 : 4;
|
|
|
|
|
@@ -158,11 +153,11 @@ class Library {
|
|
|
var ipos = 0;
|
|
|
for( i in 0...material )
|
|
|
ipos += geom.indexCounts[i];
|
|
|
- entry.skip(ipos * imult);
|
|
|
+ dataPos += ipos * imult;
|
|
|
isize = geom.indexCounts[material] * imult;
|
|
|
}
|
|
|
var ibuf = haxe.io.Bytes.alloc(isize);
|
|
|
- entry.read(ibuf, 0, isize);
|
|
|
+ entry.readFull(ibuf, dataPos, isize);
|
|
|
|
|
|
var buf = new GeometryBuffer();
|
|
|
if( material == null ) {
|
|
@@ -253,7 +248,6 @@ class Library {
|
|
|
#end
|
|
|
}
|
|
|
|
|
|
- entry.close();
|
|
|
return buf;
|
|
|
}
|
|
|
|
|
@@ -465,12 +459,9 @@ class Library {
|
|
|
}
|
|
|
|
|
|
var entry = resource.entry;
|
|
|
- entry.open();
|
|
|
- entry.skip(header.dataPosition + a.dataPosition);
|
|
|
var count = stride * a.frames + singleStride;
|
|
|
var data = haxe.io.Bytes.alloc(count * 4);
|
|
|
- entry.read(data,0,data.length);
|
|
|
- entry.close();
|
|
|
+ entry.readFull(data,header.dataPosition + a.dataPosition,data.length);
|
|
|
|
|
|
#if hl
|
|
|
b.setData(data, stride);
|
|
@@ -490,8 +481,7 @@ class Library {
|
|
|
var l = new h3d.anim.LinearAnimation(a.name, a.frames, a.sampling);
|
|
|
|
|
|
var entry = resource.entry;
|
|
|
- entry.open();
|
|
|
- entry.skip(header.dataPosition + a.dataPosition);
|
|
|
+ var dataPos = header.dataPosition + a.dataPosition;
|
|
|
|
|
|
for( o in a.objects ) {
|
|
|
var pos = o.flags.has(HasPosition), rot = o.flags.has(HasRotation), scale = o.flags.has(HasScale);
|
|
@@ -501,8 +491,8 @@ class Library {
|
|
|
frameCount = 1;
|
|
|
var fl = new haxe.ds.Vector<h3d.anim.LinearAnimation.LinearFrame>(frameCount);
|
|
|
var size = ((pos ? 3 : 0) + (rot ? 3 : 0) + (scale?3:0)) * 4 * frameCount;
|
|
|
- var data = haxe.io.Bytes.alloc(size);
|
|
|
- entry.read(data, 0, size);
|
|
|
+ var data = entry.fetchBytes(dataPos, size);
|
|
|
+ dataPos += size;
|
|
|
var p = 0;
|
|
|
for( i in 0...frameCount ) {
|
|
|
var f = new h3d.anim.LinearAnimation.LinearFrame();
|
|
@@ -543,8 +533,8 @@ class Library {
|
|
|
if( o.flags.has(HasUV) ) {
|
|
|
var fl = new haxe.ds.Vector(a.frames*2);
|
|
|
var size = 2 * 4 * a.frames;
|
|
|
- var data = haxe.io.Bytes.alloc(size);
|
|
|
- entry.read(data, 0, size);
|
|
|
+ var data = entry.fetchBytes(dataPos, size);
|
|
|
+ dataPos += size;
|
|
|
for( i in 0...fl.length )
|
|
|
fl[i] = data.getFloat(i * 4);
|
|
|
l.addUVCurve(o.name, fl);
|
|
@@ -552,8 +542,8 @@ class Library {
|
|
|
if( o.flags.has(HasAlpha) ) {
|
|
|
var fl = new haxe.ds.Vector(a.frames);
|
|
|
var size = 4 * a.frames;
|
|
|
- var data = haxe.io.Bytes.alloc(size);
|
|
|
- entry.read(data, 0, size);
|
|
|
+ var data = entry.fetchBytes(dataPos, size);
|
|
|
+ dataPos += size;
|
|
|
for( i in 0...fl.length )
|
|
|
fl[i] = data.getFloat(i * 4);
|
|
|
l.addAlphaCurve(o.name, fl);
|
|
@@ -562,8 +552,8 @@ class Library {
|
|
|
for( p in o.props ) {
|
|
|
var fl = new haxe.ds.Vector(a.frames);
|
|
|
var size = 4 * a.frames;
|
|
|
- var data = haxe.io.Bytes.alloc(size);
|
|
|
- entry.read(data, 0, size);
|
|
|
+ var data = entry.fetchBytes(dataPos, size);
|
|
|
+ dataPos += size;
|
|
|
for( i in 0...fl.length )
|
|
|
fl[i] = data.getFloat(i * 4);
|
|
|
l.addPropCurve(o.name, p, fl);
|
|
@@ -571,7 +561,6 @@ class Library {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- entry.close();
|
|
|
return l;
|
|
|
}
|
|
|
|