// Values are scaled to the signed short (-32768, 32767) range
// In the shader, vertex data is normalized into (-1, 1) range
toPos[i*4]=Std.int(fromPos[i*3]*32767);
toPos[i*4+1]=Std.int(fromPos[i*3+1]*32767);
toPos[i*4+2]=Std.int(fromPos[i*3+2]*32767);
toNor[i*2]=Std.int(fromNor[i*3]*32767);
toNor[i*2+1]=Std.int(fromNor[i*3+1]*32767);
// normal.z component is packed into position.w component
toPos[i*4+3]=Std.int(fromNor[i*3+2]*32767);
}
}
functiontoU32(to:Uint32Array,from:Array<Int>){
for(iin0...to.length)to[i]=from[i];
}
publicfunctionnew(){
super();
// Raw vertex data for our box
var positions =[1.0,1.0,-1.0,1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,1.0,-1.0,1.0,1.0,1.0,-1.0,1.0,1.0,-1.0,-1.0,1.0,1.0,-1.0,1.0,1.0,1.0,-1.0,1.0,1.0,1.0,1.0,-1.0,1.0,1.0,-1.0,-1.0,1.0,-1.0,-1.0,1.0,-1.0,1.0,-1.0,-1.0,1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,1.0,-1.0,1.0,1.0,-1.0,1.0,-1.0,1.0,1.0,1.0,1.0,1.0,-1.0,-1.0,1.0,-1.0,-1.0,1.0,1.0];
var normals =[0.0,0.0,-1.0,0.0,0.0,-1.0,0.0,0.0,-1.0,0.0,0.0,-1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,-1.0,-0.0,0.0,-1.0,-0.0,0.0,-1.0,-0.0,0.0,-1.0,-0.0,-1.0,0.0,-0.0,-1.0,0.0,-0.0,-1.0,0.0,-0.0,-1.0,0.0,-0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0];
var indices =[0,1,2,0,2,3,4,5,6,4,6,7,8,9,10,8,10,11,12,13,14,12,14,15,16,17,18,16,18,19,20,21,22,20,22,23];
var numVertices =Std.int(positions.length/3);
// Leenkx uses packed 16-bit normalized vertex data to preserve memory
// To prevent padding and ensure 32-bit align,
// normal.z component is packed into position.w component
var posI16 =newInt16Array(numVertices*4);// pos.xyz, nor.z
var norI16 =newInt16Array(numVertices*2);// nor.xy
toI16(posI16,norI16,positions,normals);
var indU32 =newUint32Array(indices.length);
toU32(indU32,indices);
var pos:TVertexArray={attrib:"pos",values:posI16,data:"short4norm"};
var nor:TVertexArray={attrib:"nor",values:norI16,data:"short2norm"};