@@ -13,9 +13,50 @@ import { XRButton } from 'three/examples/jsm/webxr/XRButton.js';
1313import { XRControllerModelFactory } from 'three/examples/jsm/webxr/XRControllerModelFactory' ;
1414require ( 'ccapture.js' ) ;
1515
16- // We must implement extension types 0x16 and 0x17. The trick to
17- // decoding them is they must be converted from littleEndian.
16+ // We implement several MessagePack extension types for arrays, inspired by the
17+ // conventions for msgpack-lite:
18+ // https://github.com/kawanet/msgpack-lite/tree/master#extension-types
19+ //
20+ // Specifically, we support:
21+ // - 0x12 Uint8Array
22+ // - 0x15 Int32Array
23+ // - 0x16 Uint32Array
24+ // - 0x17 Float32Array
25+ //
26+ // The trick to decoding them is they must be converted from littleEndian.
1827const extensionCodec = new msgpack . ExtensionCodec ( ) ;
28+ // Uint8Array
29+ extensionCodec . register ( {
30+ type : 0x12 ,
31+ encode : ( obj ) => {
32+ console . error ( "Uint8Array encode not implemented" )
33+ return null ;
34+ } ,
35+ decode : ( data ) => {
36+ const to_return = new Uint8Array ( data . byteLength ) ;
37+ let dataview = new DataView ( data . buffer , data . byteOffset , data . byteLength ) ;
38+ for ( let i = 0 ; i < to_return . length ; i ++ ) {
39+ to_return [ i ] = dataview . getUint8 ( i ) ;
40+ }
41+ return to_return
42+ } ,
43+ } ) ;
44+ // Int32Array
45+ extensionCodec . register ( {
46+ type : 0x15 ,
47+ encode : ( obj ) => {
48+ console . error ( "Int32Array encode not implemented" )
49+ return null ;
50+ } ,
51+ decode : ( data ) => {
52+ const to_return = new Int32Array ( data . byteLength / 4 ) ;
53+ let dataview = new DataView ( data . buffer , data . byteOffset , data . byteLength ) ;
54+ for ( let i = 0 ; i < to_return . length ; i ++ ) {
55+ to_return [ i ] = dataview . getInt32 ( i * 4 , true ) ; // true b.c. littleEndian
56+ }
57+ return to_return
58+ } ,
59+ } ) ;
1960// Uint32Array
2061extensionCodec . register ( {
2162 type : 0x16 ,
@@ -32,7 +73,6 @@ extensionCodec.register({
3273 return to_return
3374 } ,
3475} ) ;
35- +
3676// Float32Array
3777extensionCodec . register ( {
3878 type : 0x17 ,
0 commit comments