Write utf-8 encoded json in binary gltf.

This commit is contained in:
Viktor Kovacs 2021-03-29 15:23:09 +02:00
parent 66ad5c0d37
commit 41d1d58eb9
3 changed files with 19 additions and 5 deletions

View File

@ -137,8 +137,9 @@ OV.ExporterGltf = class extends OV.ExporterBase
});
let mainJsonString = JSON.stringify (mainJson);
let mainJsonBufferLength = mainJsonString.length;
let mainJsonBufferAlignedLength = AlignToBoundary (mainJsonString.length);
let mainJsonBuffer = OV.Utf8StringToArrayBuffer (mainJsonString);
let mainJsonBufferLength = mainJsonBuffer.byteLength;
let mainJsonBufferAlignedLength = AlignToBoundary (mainJsonBufferLength);
let glbSize = 12 + 8 + mainJsonBufferAlignedLength + 8 + mainBinaryBufferAlignedLength;
let glbWriter = new OV.BinaryWriter (glbSize, true);
@ -149,9 +150,7 @@ OV.ExporterGltf = class extends OV.ExporterBase
glbWriter.WriteUnsignedInteger32 (mainJsonBufferAlignedLength);
glbWriter.WriteUnsignedInteger32 (0x4E4F534A);
for (let i = 0; i < mainJsonBufferLength; i++) {
glbWriter.WriteUnsignedCharacter8 (mainJsonString.charCodeAt (i));
}
glbWriter.WriteArrayBuffer (mainJsonBuffer);
WriteCharacters (glbWriter, 32, mainJsonBufferAlignedLength - mainJsonBufferLength);
glbWriter.WriteUnsignedInteger32 (mainBinaryBufferAlignedLength);

View File

@ -24,6 +24,12 @@ OV.AsciiStringToArrayBuffer = function (str)
return buffer;
};
OV.Utf8StringToArrayBuffer = function (str)
{
let encoder = new TextEncoder ();
return encoder.encode (str);
};
OV.Base64DataURIToArrayBuffer = function (uri)
{
let dataPrefix = 'data:';

View File

@ -89,4 +89,13 @@ describe ('IO Test', function () {
assert.strictEqual (reader.ReadFloat32 (), 7.5);
assert.strictEqual (reader.ReadDouble64 (), 8.5);
});
it ('Utf8 Conversion', function () {
let str = 'example-\u2764-example';
let buffer = OV.Utf8StringToArrayBuffer (str);
assert.strictEqual (buffer.byteLength, 19);
let str2 = OV.ArrayBufferToUtf8String (buffer);
assert.strictEqual (str, str2);
assert.strictEqual (str.length, str2.length);
});
});