提交 0359d571 编写于 作者: T Takahiro

GLTFExporter: Fix padding in stringToArrayBuffer for multi-byte strings

上级 ac3b5bec
......@@ -131,38 +131,69 @@ THREE.GLTFExporter.prototype = {
/**
* Converts a string to an ArrayBuffer.
* @param {string} text
* @param {Boolean} padded
* @return {ArrayBuffer}
*/
function stringToArrayBuffer( text, padded ) {
if ( padded ) {
var pad = getPaddedBufferSize( text.length ) - text.length;
var spaceCode = ' '.charCodeAt( 0 );
for ( var i = 0; i < pad; i++ ) {
if ( window.TextEncoder !== undefined ) {
var view = new TextEncoder().encode( text );
if ( ! padded || ( view.length % 4 ) === 0 ) return view.buffer;
var view2 = new Uint8Array( new ArrayBuffer( getPaddedBufferSize( view.length ) ) );
text += ' ';
for ( var i = 0, il = view.length; i < il; i ++ ) {
view2[ i ] = view[ i ];
}
}
// pad with space
for ( var i = view.length, il = view2.length; i < il; i ++ ) {
if ( window.TextEncoder !== undefined ) {
view2[ i ] = spaceCode;
return new TextEncoder().encode( text ).buffer;
}
}
return view2.buffer;
} else {
var buffer = new ArrayBuffer( text.length );
var length = padded ? getPaddedBufferSize( text.length ) : text.length;
var bufferView = new Uint8Array( buffer );
var view = new Uint8Array( new ArrayBuffer( length ) );
for ( var i = 0; i < text.length; ++ i ) {
for ( var i = 0, il = text.length; i < il; i ++ ) {
bufferView[ i ] = text.charCodeAt( i );
var value = text.charCodeAt( i );
}
if ( value > 0xFF ) {
// replace multi-byte string with space
view[ i ] = spaceCode;
return buffer;
} else {
view[ i ] = value;
}
}
// pad with space
for ( var i = text.length; i < length; i ++ ) {
view[ i ] = spaceCode;
}
return view.buffer;
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册