From 97afccf0187ec3dfa1dfbdc343144bc86e125301 Mon Sep 17 00:00:00 2001 From: Omar Shehata Date: Mon, 21 Jan 2019 16:48:09 -0500 Subject: [PATCH 1/4] Add support for EXT_image_webp --- lib/getImageExtension.js | 6 + .../box-textured-embedded.gltf | 223 ++++++++++++++++++ .../box-textured-separate.bin | Bin 0 -> 840 bytes .../box-textured-separate.gltf | 206 ++++++++++++++++ .../box-textured-with-fallback.gltf | 208 ++++++++++++++++ .../box-textured-separate/cesium logo.png | Bin 0 -> 5383 bytes .../box-textured-separate/cesium logo.webp | Bin 0 -> 2466 bytes specs/lib/processGltfSpec.js | 14 ++ specs/lib/writeResourcesSpec.js | 20 ++ 9 files changed, 677 insertions(+) create mode 100644 specs/data/2.0/extensions/EXT_image_webp/box-textured-embedded/box-textured-embedded.gltf create mode 100644 specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.bin create mode 100644 specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.gltf create mode 100644 specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-with-fallback.gltf create mode 100644 specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/cesium logo.png create mode 100644 specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/cesium logo.webp diff --git a/lib/getImageExtension.js b/lib/getImageExtension.js index 5f4a95a4..8b41527c 100644 --- a/lib/getImageExtension.js +++ b/lib/getImageExtension.js @@ -15,6 +15,9 @@ module.exports = getImageExtension; */ function getImageExtension(data) { const header = data.slice(0, 2); + const webpHeaderRIFFChars = data.slice(0, 4); + const webpHeaderWEBPChars = data.slice(8, 12); + if (header.equals(Buffer.from([0x42, 0x4D]))) { return '.bmp'; } else if (header.equals(Buffer.from([0x47, 0x49]))) { @@ -27,6 +30,9 @@ function getImageExtension(data) { return '.ktx'; } else if (header.equals(Buffer.from([0x48, 0x78]))) { return '.crn'; + } else if (webpHeaderRIFFChars.equals(Buffer.from([0x52, 0x49, 0x46, 0x46])) && webpHeaderWEBPChars.equals(Buffer.from([0x57, 0x45, 0x42, 0x50]))) { + // See https://developers.google.com/speed/webp/docs/riff_container#webp_file_header + return '.webp'; } throw new RuntimeError('Image data does not have valid header'); diff --git a/specs/data/2.0/extensions/EXT_image_webp/box-textured-embedded/box-textured-embedded.gltf b/specs/data/2.0/extensions/EXT_image_webp/box-textured-embedded/box-textured-embedded.gltf new file mode 100644 index 00000000..695e17c6 --- /dev/null +++ b/specs/data/2.0/extensions/EXT_image_webp/box-textured-embedded/box-textured-embedded.gltf @@ -0,0 +1,223 @@ +{ + "asset": { + "generator": "COLLADA2GLTF", + "version": "2.0" + }, + "extensionsUsed": [ + "EXT_image_webp" + ], + "scene": 0, + "scenes": [ + { + "nodes": [ + 0 + ] + } + ], + "nodes": [ + { + "children": [ + 1 + ], + "matrix": [ + 1, + 0, + 0, + 0, + 0, + 0, + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ] + }, + { + "mesh": 0 + } + ], + "meshes": [ + { + "primitives": [ + { + "attributes": { + "NORMAL": 1, + "POSITION": 2, + "TEXCOORD_0": 3 + }, + "indices": 0, + "mode": 4, + "material": 0 + } + ], + "name": "Mesh" + } + ], + "accessors": [ + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5123, + "count": 36, + "max": [ + 23 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5126, + "count": 24, + "max": [ + 1, + 1, + 1 + ], + "min": [ + -1, + -1, + -1 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "byteOffset": 288, + "componentType": 5126, + "count": 24, + "max": [ + 0.5, + 0.5, + 0.5 + ], + "min": [ + -0.5, + -0.5, + -0.5 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 0, + "componentType": 5126, + "count": 24, + "max": [ + 6, + 1 + ], + "min": [ + 0, + 0 + ], + "type": "VEC2" + } + ], + "materials": [ + { + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0, + "texCoord": 0 + }, + "metallicFactor": 0, + "baseColorFactor": [ + 1, + 1, + 1, + 1 + ], + "roughnessFactor": 1 + }, + "name": "Texture", + "emissiveFactor": [ + 0, + 0, + 0 + ], + "alphaMode": "OPAQUE", + "doubleSided": false + } + ], + "textures": [ + { + "sampler": 0, + "source": 0, + "extensions": { + "EXT_image_webp": { + "source": 1, + "sampler": 1 + } + } + } + ], + "images": [ + { + "name": "cesium logo", + "bufferView": 4, + "mimeType": "image/png" + }, + { + "name": "cesium logo", + "bufferView": 3, + "mimeType": "image/webp" + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9986, + "wrapS": 10497, + "wrapT": 10497 + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteOffset": 0, + "byteLength": 72, + "target": 34963 + }, + { + "buffer": 0, + "byteOffset": 72, + "byteLength": 576, + "byteStride": 12, + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 648, + "byteLength": 192, + "byteStride": 8, + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 840, + "byteLength": 2466 + }, + { + "buffer": 0, + "byteOffset": 3308, + "byteLength": 5383 + } + ], + "buffers": [ + { + "name": "box-textured-separate", + "byteLength": 8692, + "uri": "data:application/octet-stream;base64,AAABAAIAAwACAAEABAAFAAYABwAGAAUACAAJAAoACwAKAAkADAANAA4ADwAOAA0AEAARABIAEwASABEAFAAVABYAFwAWABUAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAvwAAAL8AAAA/AAAAPwAAAL8AAAA/AAAAvwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAL8AAAA/AAAAPwAAAD8AAAC/AAAAPwAAAL8AAAC/AAAAvwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAPwAAAL8AAAA/AAAAvwAAAL8AAAA/AAAAPwAAAL8AAAC/AAAAvwAAAL8AAAC/AAAAvwAAAL8AAAA/AAAAvwAAAD8AAAA/AAAAvwAAAL8AAAC/AAAAvwAAAD8AAAC/AAAAvwAAAL8AAAC/AAAAvwAAAD8AAAC/AAAAPwAAAL8AAAC/AAAAPwAAAD8AAAC/AADAQAAAAAAAAKBAAAAAAAAAwED+/38/AACgQP7/fz8AAIBAAAAAAAAAoEAAAAAAAACAQAAAgD8AAKBAAACAPwAAAEAAAAAAAACAPwAAAAAAAABAAACAPwAAgD8AAIA/AABAQAAAAAAAAIBAAAAAAAAAQEAAAIA/AACAQAAAgD8AAEBAAAAAAAAAAEAAAAAAAABAQAAAgD8AAABAAACAPwAAAAAAAAAAAAAAAP7/fz8AAIA/AAAAAAAAgD/+/38/UklGRpoJAABXRUJQVlA4II4JAABQLACdASqAAIAAPikOhUKhhywGAKEsgBmhQC/qv4126WaOzflR+VXy+WF+e/d38jOljNz6j+/f8H+5enD+5ew3zAP0x/WrrG+YD9wv0z94n/M/rB7z/9t6gHSF+hX+oHpq/uN8H37ffst///fR6gD//9Yv0y/svbf/kuVSSK/ZuIFgBfi/8u/035P+drsbQAfVviN7lfiKaAHku/zf/V8oP5h/j//D/mvgI/l39m9LH2T/q17I/7DnWfW8M0/+27BhZXt18GPjWgc9C9VCEsyswDlEOYaHpS8HxbbUFSCN/tT3KOP3wExMhvAJPWvSMGvflozRcc+PkrDRvHLHXtT0T/NIP+c9kgenPD5YRCBbiZjtcvUTS0FToU7m0pMpxwg+UNXSQoApWrqaL3MesEUGinK+0gBu1nsNM9jqJybleQKtM3ngxlWR4wSdTI4L08WSNzZ8DugrzAFh2keBGbDhPzFocHJ3R/5DwZAA/v1xA9dhMXKN3fvddvghiGc9TEB1+hrNbdMOpcGlXmmzll1DL49yPjMPt02BQnWhIXMvDtngHxIrXWYo6FjDkY5NUAY5z9cvYkLtFlBFBU3Squpal3SptcUxo7+8Fub7ACoKhmoyVlmc3Nfi4Ft465JhuehT4g1pD6QcxWv49uvPWZeLfGDGbTST6kaZulE0MZwkKLFDexwU8w/QPY2Gp69x733OsOD5aV/lR3O/G8LmUAdUFA6VA2g2BlCXp2lTOjsWjXbo3DhwxVmQxh7Ja7ropwsGcKzUuA9IuhIsMKrzGkOT3jDetQSWArnlypsGT90XPLkjJsphxW3WIs4Ec/I+gAAe99FftJA1BFY4O2ozSx6phvNEAv0LG9WRJ8t5ojupsdcmXVLNIU9ciSMOSSHNu4QeKiZwOS4DSno39fE/aO8T5r0WBNfvwnHpECTEmEXMQq9K6QJclXBN+5cZi1+UM9OqDPkPNuWGdfAjNkTLusr4zACYpTgxWYMbH4OV6T0x9N2ldsuAtiLfH46sGnmNTYogADTiVc3aq7oAYuhZfdsam1jx8xYt9Ucv+M2bzw/s5nv+Ybi1hYVKBW8dys0yP9iY01FFHRpv+Uh/BCupkhtPA4hDtrgTfy2f54S8lPo8QqU/oc0KAPcvOY64brSM09fuwDkM2WtgWiSFRG0JcawuIcSKal5wBlNvLkgMLiHaSkwSS+RFwT2beaestvHploYnqVoh6op9vS84/qefmUyvIHATKa9t91DwHbeFQG3etcb/Hl+WFJkiJofolVvpcq4VHnFw4FtVOiRfdqIQmlxThIJyfaUEVX2vooEw8s3xYF6UFXrkmrxctCEZWUdb0R0dXEugnR9oTj1x8mZKpCFUxw/ZtHV5LqSVlZL1i9E8P+l9Lw7Tm2vay54jaHA4sP8SA816xJg82rm3S8Y1TV5MKkGsfqbTj9qTJfFpaJDn7cs4AfzsbJv0L0nAfjlzl6+LRwiSRF+5/CX0E3iXqWh76I3B1zlkfqY61/6k8tLhvin3rTB4u4Q9ZP/4ZqrC8+VePsnOTVUNqYasFyAA8h1nI8NOUylrB/xbqy6e6aa6mY9BHeGy9B0yr8me5Vr659zLn1KSTm8U5jW9arVFXIQk6ss3qCH8CcT0TApRAy4aC/z9mKMEFucUfL735VQUZHGlQt34fTufnREytAFXxiiuhq/i//kYUxtz3x+oAKb+qvhS5WZyDVc323bg8jn2V5Oek9yhxt2n/z8XVVQy6zWWJWNuvI/95Y2NveAF27LLDZUKGfdNFtGflNPCiPf8oLInc1EeOIpoVcBxdQz8s3mPJSGref8cP612BnYpVyRczGokvscEbp9JaQbEcKM9hfj+TYe13qer2W4EYaXQW/q9nDKSY4JeIzEkeLySoH2s4hDPYpNhXlmEVL2re2YBZJ3c6GQF1NXTI0Wu7d9R+/d1off57+PH9w9/XNit3RWEwvH36FUPMdwED973pDaCh4YW0D22GlPFd5sG2RgdPPXT57dIJ8YevSM63weHkxodTxtZfzopGcIY/rjyB1cmkXz2/CkxdK7sGtprX+nS3yDD/DJMaXmqzGuWc40lbNCI/Hc49cZppiG5wKwUmcDxlpk0Aa3ovJHcF+uxhAF4EJS6D5Pe2XDnO+U15CDtA+VxdRkfpvyCkonxm7GjVZsacz2JAKgYWV/FLZ8/Bf+HU7Omb3ZaVd/J3Kc8nj4nq/aMVNK4f9KEPdD98ouuxNaG/CD/cce5fv69T+9YmeRMrhibp7StU2xM0xCYy+8TfCKatql0hFre64M1wnWfXtCdyWixNsFU+/30nd1ZR/7UuUlexUJ9k3NEP7PPmXDehUgfmxd6G1NEWXUCwtYgfn+zW3APDpQTmP6gI6iSf/GjmLTaODO4IxHs8hW1a8/RqTzkIeYsgFKuq/+vNQBwnwB7yfcQoINGHRcfiBSvCQoPUO/Whfn3nR2rteyTCCb5FdS/HDnY3OZVwfgSS591r6VGNCa7Iqmsw6A6E8HgVWbUGm+LedC4/nh7n186pL42+IDvw+ay0029+/0o9MVttP76Fx2+CeKCdbi+dceLhvGcZ0ogADe1tWC+4/07Hr3du/GvWy7wVdvBqIv2Lzwy4Bvu5kqoiF0WHkiNI/HfmdYcywvqM5YGkwo505Rg5lnEqzyqdFQyHbonRzh1v/LXSOcBGWnS+3Zsy0JvPE4svWhtQ05GGjg/XR4vdLlyipEFUzCHhs+FXl8EVz9d/+Skkga4r/YelyUxvUvKeOo6itTBtDH2MTdZdB0zIU8pFbeIIlTaZTRcLY1RnW/YxDQoGu83D7iP1N32XNmNS4hYhbsh8kjKBqQdn10UHg66b5UhnQmuNN+G8Zds/tsIS86/Ymf9sDhScCKsmGBSLFeKgADSQ7i6uUt7xzA6ORLaALspfIfrv5DuHKpXBFOOoFTFo/ctnDgiQ+yqodvvNHPAsPfnJCctNZlFAu8NU33xjN3uYJ0rowbbMjRosI9N02bz8bGOtsSfKbJsvA9szniKcZ/40Gnqiive88x5ykquthHQcuS1ZW6/Dd1kt8idbdxa3j3Ex7iXlI3wKKL75Gf0EE4Ck/MJKUXKlURw/T9PydKXB20SFrI1jtisVieiKRYkeOW8MiElhJVvMjtj8KfylgtYrFdMWZJRChNo+uAzHOsJ8zFd9L3mF9PEuNrk8qfAG0r3c1z9BcJTH6rx1aOFzGAD1PDBQfjERRJosf7bvx/OZ+NY+/xT/Xe7MlwSOVgwXCAAAACJUE5HDQoaCgAAAA1JSERSAAAAgAAAAIAIAgAAAExc9pwAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfiBBUVGyptf3KTAAAUlElEQVR42u1deXhURbY/VXfpLd1Ntk5CSDAgCfsOYTOsCiIyoKLiN/JAGHHfnvoGdd48/Vw+x3FF54kD6DjwFDAoiGzijIiC4CDIKoQlAUICWTvpTnffe6vq/RFgIEv1djvpDjl/Jd3V1X3Pr845v3Pq1L3o2LFj0C6tJ7hdBe0AtAPQLq0nYgz9VgSA0IU/Lr0CAOziv/V/MHbFi+0AhCICAgEBYVDuw2VeXOFhTh+r05CPYh8BHwGVAAOmEgAAEQNCIAtIwmAUwChQo8DsBkgy4UQjdRioiIEwIKwdAH8LHAA8BLlVKHShYzVSYbWGEWDEMAJ04X16hQNFAACUATDwUOYBqLk4GQOgjFGGKBM62cRr7bSrVYuTwCgwFE32gaKBhmIEGoU9ldIv56lHA5UCu8zP6CL1E0oYZAEGpIj9430GISpsojUBEDG4VXS4Gh+rxqdcjFEmtAgnIBQYoEwbutZOu8czm0Q1epUBwABqVfTjeXlfGRGAIdQ6F88AVAp9ksURDsUmM3Q1ACBiOFGLt57BVT5GGKDW9wHAADACu4zyOqFsq6K1LBAtB0C96n8swUW1TIrK9EOj0NGKcx0kx0411rYAcKuwpkgucREBQZQLZeCwiNOzVItI2wIAAoK1ReKJaqZFh8MJ0CmJGGXZYWqmxiLMWSMIgIihwIk3nxbcCsWxovsrTUES8ZRraDebplEUYwBQButPS0cqqRCDqr+CszLISZBuzPBG6EL0z4QRgnMe/OVJVOOLee3Xu9CCSrXULU7uzDpZCNXbH2HdtX+oCi87gmsVQLGv/UsX5VLYJ0fRwSpR94vC+i6WzaeljUUIx0wtMqirYxuL2JYSo4BYNAKAEVtxXNxXThG0WUEAe0vV5QUy0s8QsC4/y0fQB4fl0zVMaMPqv2jlJS76wWHJpxOz0wEAhcLSX0WXj6K2rv1LIcHtI4sPCaoe2sNhrn2VwsdHRF8rlhNbSVRClx7C3rCJXlgAeAksOSzVKAyuSqlT2aIDyENw6wAgIrb8mOzVKIKrVxhjHx0Rw9k9ChEAAcGqE1K1h8BVLx6FrDwuhcxNQwEAI9hSLJ1wMoza9Q8IwZlasvGMOTRtBA0AAjhSjfaWUaFd+5etyAPlyhGnhFoAgEof/qqoXflNrMt1haxCFSMLAGXwxQl0ofUphiMnCBjJApJ0XUiIsdXHINhqXRCIiQg2FEvVsZ9wzRma1CXJKGFEGdT6yLpDVXuL60Q9AlqNj20sNk7N9AaeFwWxH3C2Dn9yBAk4hhd+jsP48HWpjd/61yn3x7vLdDFsQtnM7rijSdPZBYkYNp0WYlj7AHaT2KT2AWBwpmVerkMXxypgtKEoCEUFOvDrM2KlJ4brDRjBU2PTOAP6djSn22RdjMDp1b46JesJgI/AoYrYrnQmmkWb0c/FzuifQPRAACMoqKJ1gZUo/A8SMWw6IysxXm2LMwjYH3nISjQIOhEMjbK1RZKI9QDgbB0uqCQxTXwYgBQAyUGAsE5BDgEU12iFLjFcAAQEO0tjmPlcUodL8d8K7fJpin4dcQKCneew6K9GhP3mvYer2kKmWlVHNH8QrD/sFHQtb52oJucUQ1gAbD6NpTZxjKxOpfn7KnlLrU7bdqJW3/KihGFjoZ/UmKddj4bO1UHbKPtgBFuP1/xY5Gqa5mn0/e3nIlHcrfRCnYZDAUBAcKBaUGnb2e0SMVq2u3zRjnMNXv/1nOe5DWdKatRIfKlG2Z4qXicLrxTx9j6Rsba23UgZYASd4w12k6BorKRGKXNrciRzHI3CEwMYhqaJfLM86ViNQGgb3HKpv6KiKh9cJBdyhDNMjOCoU+hup0G4IIzgaBW0b3jpBUCBEzWnzGYBKKzFLeYTVMIUjfk0qhCmEtY24g5h7NJ1/VpBaDMnn8Qm05bjTuxWaUQJKAMQEBhF3DnB0CfNnGaTzBJ2K7SkRj1YWldUpXhUQljscTDGQBKQRcY5DmOPFFOCWTKIyOklqtcpae7AAECwu0IUUQQ7HnwaHZxhubVvot0kNNgJ6ZZszOtq1Sir8mhr9lf967Rbip0qIKVsSu+EUVlxcfIVVaV0OyiKcOqUq3FTaRMAKBRKXSRC216EsqwEwx0DEjPjDXzKmGyR5g1zTMj2rdxbUVSlRHlAUgkbmhl3e/+EOIPQ9BWJoiAIlFL/AHg0FKFOQwYwNDNu9tDkwD9yTYLh6XEdl+4s+7nYHc0Q/G64Y1AnCy8UY9wkALhxAKjwskic4acMZvRLCEr7l+Se3OTpveO9UdmBqhD21Lg0vvbrxWAw+GdBAoKTLglFwPNM7G4f3dUW8gzjs+0z+iVGW15IGXt2QsfMDoZABsfFxTVObHEjS4ET1Uh3z9Mv3TK1V3yY89yQY892GKOHpGqUzRqczA9ml4vFYvEPgI9Aud4dn/Em4d7hDl2meuS61DSrFCV0MzczLrdzXHD1KFH0A0CFV9+SOCCAx/LSUECXFJCLnzfcEQ2OKMEshBDPGoeBhoBUKQjrdwhNJWzeMEeiReS6Ubpm+/sbdi7xqnWyaJoyfN60EQ9wxqdapYdGpbz3w7lW1L6A0eNj0vwEZ833168W7Dy8AQBSEjr/dsIz/brkSZLk8XiuWKANqqG7zgs/nNXnhCljMCjTMmcIb5kcKvrxL2ufrKgpEYULjkUjSrw15bFb3svuNJDzwY92le085RJbIztQCLt/REr/dDNnzJc7Pli59Q1CiYAFAGCMEapdm95//sTXfXWE54KcXt3u3mM3CXztnzp/5KXldzvd5Ze0DwCiINfWVS1YMuVY8V7OZ2cPTU63yy2vfcZgdFcbX/v52xb+fctLAFCvfQBACImCVFh6cNk/XmxwmgM38Nd6NV8JGD3JNdJqV9n/fHw7xk3njWaD7eVPZhHCa/B7cGSK0uKZgd0o3DUwkTNg38ltn333pkEyNU3HmdqgGtHQAlQ9ThwphN09KCnezHP9r66Yq2pe3iSq98lFN2ik2Y2qeLP46Oi0ltQ+RvD0+I6cAZW1pX9eea8oNGuaHtWFOCwIIVDC7gBiDEZ3tQ7K4GWGi9c/d+r8Yf7RKoRwec3ZVd+9xRnTM8XUP91MWiQ1IJT9dlCS3SjwVtWnc/l7iF6llueCAICEfcMumxHfNTCJa6Tf/2PPJxgJgcy2dvv7/9y7kjNgbq4jK8HQAgCM62Yfkslj/e+teby4vMBP7kb8uaAwfaqA0ILx6XwjfW3FXEEINJkSBWnZlpdq63jNSXOHOWgkUwPGIMUq3do3gTNm5+GN2w+uQwj7BcBPIkZoWEY6c1Ci1Y+R3hPsoU5F8/7nouspJc3nROITY9Iih4BBQk+PTeOQw3OVRW+tfrA5QnElAIofFxROc+S4brZcvpGufeKMPyNtMhx4fK6/bX6BM6JrojE3My4SwcCr0nm5DpnbZ/vKp7NFIcQCSRPV0NCMNNki3dqXx892H/1m+4EvA3T9jWX9rqXf7cvnDLh7cFJWolF35zO5Z3yPFBNnzMLPHz1ffTpgdi41uAcdbsy0QhCjhH8/gWukVUV/XnVvIEba7FfIlo82Pe/yVHPG/G5Yso6ZMQOIN4vT+/CKuPtOfLf90DoBB3rUThQl/S3Ao9I5Q5Nlbgv1q5/eE7KRXl5deXLRRE5m0MEkPjk2Ta94bJLwMxN4rL+4/NhrK+8N6rokwdCAp+IGFmfANFgjvalnfK9UrpF+8VhpVVH4GkEIub3OpRv/wBmTGW/I62rTwg4GKmF3D04ycRtD3sx/MHhXYfHjgoyYBWWkdpPAN9L9J3/YEYyR+pVv9ny65ef/4wy4vX9C17CDwbQ+8X3TeAWfVz6ZXVp5MmhCJZoZxwUxAIschA8yifjZ69P5Rvrqint01D4AyKJx2ZaXne5yzpj5I0LPDBiDVKs0qXsHzpjvD6w5WLjDL+tvQmOyleeCAMBuQAGar0rYXYOSzFwjfXv1QygCvVUaVZ/+62SVKM0NsBqEJ8eGWCYyy3gB1/WfKSt45/OHQ7htHANmNSX5cUFJ5kABmNY7fkC6HyM9W3EiEpkRAlTnrVmy/lnOmKwEY14Xa7CxQCFsTm4y/zjfn1bOM0jmEH42pSTZ1skPC0qU/Wcz9an5xB48I/3h4NrQjDRw+faX/HU7F3MGzOif2CMluGBwW9+EHg4Tf1WVO4tD+8GUkpQO1/gBwCZR0d+ZPJOMn52Qjriu/638B1CE7ykhifKqrW+WVhZyxswZ6giw+5wySLPJ1+fYOWO2H1x7sHB7yCGNMC3F5g8Ayti1CSKXjLM5Q5L5uv3TinlGOQ4iL5SS3y+5mbObb5Hxf43rGAgrtRr8uP7jJfsWfvF4ODadEJdqlOz+inEMdbM1e1aTAdzSL6Enl/W/+uncMucZaCnRNOWt1Q9zBjis0m96x6vcZj+fRu8dnsK3lLfzHwonl2TA+maNJn6roZRBmrHpU2WUQZdEw0Sukf54eP3+k9/ryzv9Zmc7Dn759c/LOWMmde+Q2zmuOV7KGDw0KrVLIm9T4YW/31lRUxJmZSMnbRih/gAAAJPUxHEOyqC7w/g4dwvw+Nl973z+CGrx2wkZZPOyLS/zk+3ZQ5N7pZoa+6L6jLdvRx6r2bZ/9dHiPeEUsgBAFKRESyfW6K7aTR/Sw7bULcfdu8+4CWEUILODPCHbPjLLyv+OR98bU1lbCq0kFqPt7Qe3NrcbXi8/n3FvOeosKPMCAEZoUIZlUvcOmfG87oqC4j3PfThdFsNNrY2S5ampywUsBQSA3W5PSkoCgGoPiZOxGACReP7jO48W7w652qyL9O0y6qnbFweS61Z7SLzZ/0+llDz2v+OqasNtAqOMZqcPnjXqZcqIfxcEAE6ns/6PDiYhEO1v3Zd/7Oye1tU+AOw59m3+toUBhA0IRPsA8IcPb6kM0/XXMwWijOk9s0m2hptZI8zr9QY4e0HxnvfWPAFRcJxLwOLq798pLD2oy2zrdy0tKvtVl1zSbknqkjiQNfVYBdwctXC73QHl7prv9VX38T1vSwpGwnMfTq/z1oY5z97j3y7d8N96FbJ6dBreXOWqWXhdLpdfX+pRXI//ZRx/l6oVBKEFS24OZ4KTpYfe/OxBk0GfXJJQrXdGXnPZYrMAKIrC90IllYXPLJlaU1eBouw2lghQRc3Z+98edi6kXaCfjmxesGRK42gZOv+RTdmpuc2abLNvYFxWVtbcuwcKtz/9wY3lzrMQlYIQdnmqH343b/fRLQEeO6gPlR9u+uPrq+ZLgm5tv4zRyYPua3w279/5AefDqqoSQgThCsJw5PS//rb5hcJzh1oy3Q0xQZNMb+Q/0NmRM3vi8/xmdwD4evfytTsWVdaWSKKefXZG2dIj7TqOPYlc9Fh1dXWczVTnrS1zFp8sPbD1l/yCs3uMkjn6tX8xJuPTZQULltzcLX3A2P63Z6X2TrJ3NBtsoiApqrfWU1XuLD5QuH3Lz8tr6ipl0agvk6aMdnb0MslxnIZRP3fOFbH8x88mqZqKAKHYf0YMY4wBu3Dv6/rHpCOEIkagFc3z/J3rJcTLorG/CK5O6DMHobag/Xp6jRHGWMBYwEhACKNIpi8juk8zYD/nh/0AwIAN6XpTq6e4sSgaUUbmzPDLpvynebJgmjHiaU5vbLs06f3H9JmRFJfpP0oFMBfpkTYqPi61Xa2Bi9lgHdtjTuPqfygA1LvOO0Yt4LSBtMsV9J0oo3vdIeKAkolAK02dOvQa2WN6u3IDkZz0QdflzGSBPdE0UAAo08b2nIUQa9evn+Wv+aYMfFgL2FsEUWs1y7b7J73b9m5kqW/snT78kWTrNUGkikGVNRxxXfpnjaWMtuu6SclIzBl8zc2BxN5QAKiX24YtSO3QuV3XjcUkW/5jzCvBbkwFDQAh2t15L4Z/2qLtyazRL8lC0BtToey32UzJD0x8l0G7I/o375wx6qmO8TkhfDYUABhjCZaMyQPvU1RPu/ZVouT1vLVPx/EspNAY8o4zG9ltxpQh97UD0D9rzNRBT4S8gxb6lr9GlZHZd4zo8ZurNkOmlGQ6ut+Wu8Cn1oU8SVg9F4yxm/o9PKTbJO3qw4BSkpXaZ/74dxG00hO1L3pA34yhz47qdcvVBkBWWu/54xeqmi/MeXToOlKJ98a+D9wwYI7v6ojJqubr3Xnk7LzXFM0b/mz6bO0yxvKyZ2IQNvz8QUSPJbW6aEQZ0+fOKQMeCcfvXy5BPE3V/1yAzrsKF216VKNq21Q/QnflPdc9ZaSOXUN6rlYGzGHNevSmxcn2DNbm6kUWk/2BiQtzUkboqH2dLeCyhYJW7Hjp4KltbcMdUUazUvrMyntRQPrfpzEiANRLaW3B+5seBRbb7RQq8c287pne6eMi5dUiBwBCuE5xbt63eFfBV5JgiD3Va76+WXk39r8/3pRGmBZ7ANSLgMXCil9WbX+12n0+VtpbKCNWY/wNA+4Z2HkyiTChiDgAl+Lz/jPf5O94A9XTpWgmmlSdPHj+sC7TMBIBIr7910IAAABGgpe4fyr48p+HlvuUusbH1Vq9tMCAju5154js6VZjMqFay3xvywFwKVeQRMO6Pe/uPfmN21uNEGp1g2CMmgzWnhkjpg15glFoYQLd0gBcis8q8ZXXnlr90+vFZUclUW4VGFSiJNs7Th38SEZCL1k0t0ru0joAXGYNxpLqI/tPbSso3XWidJ8oSJF2TYRqKvFlJOVkpw3t23lMRkIvlSitmDa2JgCXi4hlj+rcXpC/+/jXPtXtUz2M1d9IH+ngYxgghCTRIIumAV3GDs++tYMxVSVKC8TYmAHgkmuqP/vn8lYVVfxysuyXQ6d2eHwujEWMMEY4kNSaAaOUUEYpJaIgZacPzEkf3iVpgNlgM8t2hHBUlUmiC4AGrEnAoiBItd6yUueJavf5qtpSp6fco9SompcwjVBNIwplVBQkjARJMBhEsyyaLAZ7sj0jwZqWZM3oYEpjjGpEo0yLzsuMXgA4haZ6v3RlSsHYBWcD0eBYgvC9MVchYIzVq7httEi25c2TdgDapR2AqJf/B9frnwCCK14NAAAAAElFTkSuQmCCAA==" + } + ] +} diff --git a/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.bin b/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.bin new file mode 100644 index 0000000000000000000000000000000000000000..d2a73551f9456732c7ca85b9d70895f5d9ab8171 GIT binary patch literal 840 zcma)4TMmLS5FAugR8)K(r@fgRg`3F9)Sc2X4N+i|$-K6U9|D@%NdZH8sMCdXhgs?; z>8CE)+Yvq1hwmphbb0bSz9n3Qv{?B+?(fNy1()2HW=AbfwKB4_dS!i9PnJ%1er4>H zi~S!ZIHJM{XG4VxuDIcDxZ(qtxm=$B literal 0 HcmV?d00001 diff --git a/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.gltf b/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.gltf new file mode 100644 index 00000000..ead685d5 --- /dev/null +++ b/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.gltf @@ -0,0 +1,206 @@ +{ + "asset": { + "generator": "COLLADA2GLTF", + "version": "2.0" + }, + "extensionsUsed": [ + "EXT_image_webp" + ], + "extensionsRequired": [ + "EXT_image_webp" + ], + "scene": 0, + "scenes": [ + { + "nodes": [ + 0 + ] + } + ], + "nodes": [ + { + "children": [ + 1 + ], + "matrix": [ + 1, + 0, + 0, + 0, + 0, + 0, + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ] + }, + { + "mesh": 0 + } + ], + "meshes": [ + { + "primitives": [ + { + "attributes": { + "NORMAL": 1, + "POSITION": 2, + "TEXCOORD_0": 3 + }, + "indices": 0, + "mode": 4, + "material": 0 + } + ], + "name": "Mesh" + } + ], + "accessors": [ + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5123, + "count": 36, + "max": [ + 23 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5126, + "count": 24, + "max": [ + 1, + 1, + 1 + ], + "min": [ + -1, + -1, + -1 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "byteOffset": 288, + "componentType": 5126, + "count": 24, + "max": [ + 0.5, + 0.5, + 0.5 + ], + "min": [ + -0.5, + -0.5, + -0.5 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 0, + "componentType": 5126, + "count": 24, + "max": [ + 6, + 1 + ], + "min": [ + 0, + 0 + ], + "type": "VEC2" + } + ], + "materials": [ + { + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0, + "texCoord": 0 + }, + "metallicFactor": 0, + "baseColorFactor": [ + 1, + 1, + 1, + 1 + ], + "roughnessFactor": 1 + }, + "name": "Texture", + "emissiveFactor": [ + 0, + 0, + 0 + ], + "alphaMode": "OPAQUE", + "doubleSided": false + } + ], + "textures": [ + { + "extensions": { + "EXT_image_webp": { + "sampler": 0, + "source": 0 + } + } + } + ], + "images": [ + { + "uri": "cesium%20logo.webp" + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9986, + "wrapS": 10497, + "wrapT": 10497 + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteOffset": 768, + "byteLength": 72, + "target": 34963 + }, + { + "buffer": 0, + "byteOffset": 0, + "byteLength": 576, + "byteStride": 12, + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 576, + "byteLength": 192, + "byteStride": 8, + "target": 34962 + } + ], + "buffers": [ + { + "byteLength": 840, + "uri": "box-textured-separate.bin" + } + ] +} diff --git a/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-with-fallback.gltf b/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-with-fallback.gltf new file mode 100644 index 00000000..d8e442c4 --- /dev/null +++ b/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-with-fallback.gltf @@ -0,0 +1,208 @@ +{ + "asset": { + "generator": "COLLADA2GLTF", + "version": "2.0" + }, + "extensionsUsed": [ + "EXT_image_webp" + ], + "scene": 0, + "scenes": [ + { + "nodes": [ + 0 + ] + } + ], + "nodes": [ + { + "children": [ + 1 + ], + "matrix": [ + 1, + 0, + 0, + 0, + 0, + 0, + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ] + }, + { + "mesh": 0 + } + ], + "meshes": [ + { + "primitives": [ + { + "attributes": { + "NORMAL": 1, + "POSITION": 2, + "TEXCOORD_0": 3 + }, + "indices": 0, + "mode": 4, + "material": 0 + } + ], + "name": "Mesh" + } + ], + "accessors": [ + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5123, + "count": 36, + "max": [ + 23 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5126, + "count": 24, + "max": [ + 1, + 1, + 1 + ], + "min": [ + -1, + -1, + -1 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "byteOffset": 288, + "componentType": 5126, + "count": 24, + "max": [ + 0.5, + 0.5, + 0.5 + ], + "min": [ + -0.5, + -0.5, + -0.5 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 0, + "componentType": 5126, + "count": 24, + "max": [ + 6, + 1 + ], + "min": [ + 0, + 0 + ], + "type": "VEC2" + } + ], + "materials": [ + { + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0, + "texCoord": 0 + }, + "metallicFactor": 0, + "baseColorFactor": [ + 1, + 1, + 1, + 1 + ], + "roughnessFactor": 1 + }, + "name": "Texture", + "emissiveFactor": [ + 0, + 0, + 0 + ], + "alphaMode": "OPAQUE", + "doubleSided": false + } + ], + "textures": [ + { + "sampler": 1, + "source": 1, + "extensions": { + "EXT_image_webp": { + "sampler": 0, + "source": 0 + } + } + } + ], + "images": [ + { + "uri": "cesium%20logo.webp" + }, + { + "uri": "cesium%20logo.png" + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9986, + "wrapS": 10497, + "wrapT": 10497 + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteOffset": 768, + "byteLength": 72, + "target": 34963 + }, + { + "buffer": 0, + "byteOffset": 0, + "byteLength": 576, + "byteStride": 12, + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 576, + "byteLength": 192, + "byteStride": 8, + "target": 34962 + } + ], + "buffers": [ + { + "byteLength": 840, + "uri": "box-textured-separate.bin" + } + ] +} diff --git a/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/cesium logo.png b/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/cesium logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a626a4d7ca0cacd144ddc73b4daff021c88930 GIT binary patch literal 5383 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 literal 0 HcmV?d00001 diff --git a/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/cesium logo.webp b/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/cesium logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..c262af61adc7ebe0409e8e7755a174e17f2bd15f GIT binary patch literal 2466 zcmV;T30?M5Nk&GR2><|BMM6+kP&got2><|4EC8JWDu4ih06r-Wg+if+ECv9fEPxrI zKriaQjdtl~j?MW|`Bn1yVSan}ck(l(jNJN<@89r$xq5K^Kdc_}|J!Hz=$)-Tg9?7g@DlI2oJui3bP zUzhovtE#kSNHAdUXi_bB7{z)Vbr z@CiL@(lBe^mWhiPUg~+ zDaQytP}R~xfGJwKnlE!6utf%na=y|4Zq|DZGuY}UCgphotuuMx##NEy1f5Kd3)97t zH#U3@=qtXmR&H}&y9Xzvr|y%q%5@4|8E5G2Hy zMa)94O6dYzm2ge_ml=y+lrz(+4EYZ><%V_eBQ`|Ky2|*>0GOpXFwT| z>6V5ksahfGihaE=IR2-fnM|)Ba1$x7ZTC>{9k+!*ZQixU{~lkK6qzC>hv=1C>2j_W z9&vEsTU9zFUv{Dpnp{(af^vPO1XX>nqJc2-&GBGflofj9n!H@JAsJamThSdITuY#x zA81ZJaq?zLq#;zt581SJc`l@tm6G*~(L6uteJ>8vn`_$3o+D^*II#Z`1I>EGm^|9K zw@bz~OfO zsc3uXjltJBWPYYP*Z!pP(&4@-_pLB^yM#St|M+IA!t>=`KFQ8aRSl_ztQQ~v@*QU* z!%kBvYX|&Wt1h1Drn;GrK^@_;^c^y<$)4p}`sduspHh-eZxrS=y=t{ZT!bX*%QvVY z{0YSLObSs0E*cB`{g|T!7UvXvzW3!+6l8IwLf!a%JD;5qGPD6##wf0auj2pt7*iW_ z-yf&|rv9qot}oV{W{U{pF2~z2F7g zvdayX3K{oJ7SW%S)53`N{GhTYb5R~RifC29adiy*vw4ptA**@+96zmg26ib|BwWmD zB)-Q4Zl6hM2E=fqJ%#xGO^3DKr>og+1YxDnTl&46GLmD0UL!Fic)XIJeXQaT&tj8d zURi`xy{mg>0c4%r=wt=d)zc$IuI=AZ`}cLB_xbPR$M+9^T-dGM6@A zCXsyh{3$VXuIw7xYhUTo-yp;MGE8ZCs?2MabB!fz(1`qZIQ7P9rXjh&tQ48R@s^o1 z0j=n~k=z&Sv4jD55R|$Plit~I=R4&!<#BZxAEx|*l8Nz~v7=R+8go5~0H_#Q zU&Sq-KL!7XQ?sUTc3M^6$=s(ro<1k5_KZ~0xPQ`wJ<$E~i>}1hhWsG^amTrS{=HA{ zSefKZt{9uAw5?NYOw$mU%kL9>BAT|Tbc9;o>w`7Ib)R0)oylmiHo;W;{q&vPSx5fV zxk+BdLVc5SL_f37nQ-2PNFSRQdK*(jS#<)!)*ya=vs-Wv4wMs^{-7hMl7I1|n6%nB zGq@uW?D7@0YtPZCJmewfEPzt3tN*Vx0C1lGd&&0@po2yo7axceuL%kdQ18}-`S+b2 ztF`Qt2qyUz)V~}#*xcq-!T1tOpLMULMl>e7BB`vypgI%5;8kYS8gGkv(7671d!JuA zq`o%zfbYZRveQky`~4{N#cj0y`WGF(3F3lvxW0AAi-z%>XG$OdH?_53zT^En9=+YW z@vmDh@KxKvsEhV5JTl-L?&eCUh+P&QNR1=$-uuA^4Cb`0U2r1`*v*0LT@}yEWK!LLrz8-I6qw;FLb$bijf6VFo%ZEg~DY9(5 z4{XkOigBO#&}r(5E8g?WdCE$zwh_>B#aQ#0|$h%xZ33Mr@$LZ_j6qR1;SGws`1sMh0I_B)bPPU g_{2pLXtDm=zaP$L<5>IrQ~h_lGF%clSTI~50Ac>$RR910 literal 0 HcmV?d00001 diff --git a/specs/lib/processGltfSpec.js b/specs/lib/processGltfSpec.js index 362cb006..0a2db171 100644 --- a/specs/lib/processGltfSpec.js +++ b/specs/lib/processGltfSpec.js @@ -9,6 +9,7 @@ const RuntimeError = Cesium.RuntimeError; const gltfPath = 'specs/data/2.0/box-techniques-embedded/box-techniques-embedded.gltf'; const gltfSeparatePath = 'specs/data/2.0/box-techniques-separate/box-techniques-separate.gltf'; +const gltfWebpPath = 'specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.gltf'; describe('processGltf', function() { it('processes gltf with default options', function(done) { @@ -149,4 +150,17 @@ describe('processGltf', function() { expect(loggedMessages).toBe(2); }), done).toResolve(); }); + + it('processes gltf with EXT_image_webp extension.', function(done) { + const gltf = fsExtra.readJsonSync(gltfWebpPath); + const options = { + resourceDirectory: path.dirname(gltfWebpPath) + }; + expect(processGltf(gltf, options) + .then(function(results) { + expect(results.gltf).toBeDefined(); + expect(results.gltf.textures[0].extensions.EXT_image_webp).toBeDefined(); + expect(results.gltf.images[0].mimeType).toBe('image/webp'); + }), done).toResolve(); + }); }); diff --git a/specs/lib/writeResourcesSpec.js b/specs/lib/writeResourcesSpec.js index 6e902b18..54c66b0f 100644 --- a/specs/lib/writeResourcesSpec.js +++ b/specs/lib/writeResourcesSpec.js @@ -1,5 +1,6 @@ 'use strict'; const fsExtra = require('fs-extra'); +const path = require('path'); const dataUriToBuffer = require('../../lib/dataUriToBuffer'); const ForEach = require('../../lib/ForEach'); const readResources = require('../../lib/readResources'); @@ -9,14 +10,26 @@ const Cesium = require('cesium'); const CesiumMath = Cesium.Math; const gltfPath = 'specs/data/2.0/box-techniques-embedded/box-techniques-embedded.gltf'; +const gltfWebpPath = 'specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-with-fallback.gltf'; let gltf; +let gltfWebp; describe('writeResources', function() { beforeEach(function(done) { const gltfLoaded = fsExtra.readJsonSync(gltfPath); + const gltfWebpLoaded = fsExtra.readJsonSync(gltfWebpPath); return readResources(gltfLoaded) .then(function() { gltf = gltfLoaded; + }) + .then(function() { + const options = { + resourceDirectory: path.dirname(gltfWebpPath) + }; + return readResources(gltfWebpLoaded, options); + }) + .then(function() { + gltfWebp = gltfWebpLoaded; done(); }); }); @@ -159,4 +172,11 @@ describe('writeResources', function() { expect(gltf.bufferViews.length).toBe(originalBufferViewsLength); expect(CesiumMath.equalsEpsilon(buffer.byteLength, originalByteLength + bufferViewByteLength, 8)).toBe(true); }); + + it('preserves bufferViews for WebP and fallback image', function() { + const originalBufferViewsLength = gltfWebp.bufferViews.length; + writeResources(gltfWebp); + // There should be a new bufferView for the WebP, and one for the fallback image. + expect(gltfWebp.bufferViews.length).toBe(originalBufferViewsLength + 2); + }); }); From c5042e77feaa01f86de5e6868f216ca33a639bc9 Mon Sep 17 00:00:00 2001 From: Omar Shehata Date: Wed, 23 Jan 2019 10:51:04 -0500 Subject: [PATCH 2/4] Clean up webp specs --- .../box-textured-embedded.gltf | 3 +- .../box-textured-separate.gltf | 2 +- .../box-textured-with-fallback.gltf | 3 +- specs/lib/processGltfSpec.js | 24 ++++++++++--- specs/lib/writeResourcesSpec.js | 36 +++++++++++-------- 5 files changed, 45 insertions(+), 23 deletions(-) diff --git a/specs/data/2.0/extensions/EXT_image_webp/box-textured-embedded/box-textured-embedded.gltf b/specs/data/2.0/extensions/EXT_image_webp/box-textured-embedded/box-textured-embedded.gltf index 695e17c6..757b1bcb 100644 --- a/specs/data/2.0/extensions/EXT_image_webp/box-textured-embedded/box-textured-embedded.gltf +++ b/specs/data/2.0/extensions/EXT_image_webp/box-textured-embedded/box-textured-embedded.gltf @@ -155,8 +155,7 @@ "source": 0, "extensions": { "EXT_image_webp": { - "source": 1, - "sampler": 1 + "source": 1 } } } diff --git a/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.gltf b/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.gltf index ead685d5..258f69ec 100644 --- a/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.gltf +++ b/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.gltf @@ -154,9 +154,9 @@ ], "textures": [ { + "sampler": 0, "extensions": { "EXT_image_webp": { - "sampler": 0, "source": 0 } } diff --git a/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-with-fallback.gltf b/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-with-fallback.gltf index d8e442c4..3b7c16d1 100644 --- a/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-with-fallback.gltf +++ b/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-with-fallback.gltf @@ -151,11 +151,10 @@ ], "textures": [ { - "sampler": 1, + "sampler": 0, "source": 1, "extensions": { "EXT_image_webp": { - "sampler": 0, "source": 0 } } diff --git a/specs/lib/processGltfSpec.js b/specs/lib/processGltfSpec.js index 0a2db171..3d754a4d 100644 --- a/specs/lib/processGltfSpec.js +++ b/specs/lib/processGltfSpec.js @@ -9,7 +9,8 @@ const RuntimeError = Cesium.RuntimeError; const gltfPath = 'specs/data/2.0/box-techniques-embedded/box-techniques-embedded.gltf'; const gltfSeparatePath = 'specs/data/2.0/box-techniques-separate/box-techniques-separate.gltf'; -const gltfWebpPath = 'specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.gltf'; +const gltfWebpPath = 'specs/data/2.0/extensions/EXT_image_webp/box-textured-embedded/box-textured-embedded.gltf'; +const gltfWebpSeparatePath = 'specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.gltf'; describe('processGltf', function() { it('processes gltf with default options', function(done) { @@ -152,15 +153,30 @@ describe('processGltf', function() { }); it('processes gltf with EXT_image_webp extension.', function(done) { - const gltf = fsExtra.readJsonSync(gltfWebpPath); + const gltf = fsExtra.readJsonSync(gltfWebpSeparatePath); const options = { - resourceDirectory: path.dirname(gltfWebpPath) + resourceDirectory: path.dirname(gltfWebpSeparatePath) }; expect(processGltf(gltf, options) .then(function(results) { expect(results.gltf).toBeDefined(); expect(results.gltf.textures[0].extensions.EXT_image_webp).toBeDefined(); - expect(results.gltf.images[0].mimeType).toBe('image/webp'); + + const imageId = results.gltf.textures[0].extensions.EXT_image_webp.source; + expect(results.gltf.images[imageId].mimeType).toBe('image/webp'); + }), done).toResolve(); + }); + + it('processes embedded gltf with EXT_image_webp extension.', function(done) { + const gltf = fsExtra.readJsonSync(gltfWebpPath); + + expect(processGltf(gltf) + .then(function(results) { + expect(results.gltf).toBeDefined(); + expect(results.gltf.textures[0].extensions.EXT_image_webp).toBeDefined(); + + const imageId = results.gltf.textures[0].extensions.EXT_image_webp.source; + expect(results.gltf.images[imageId].mimeType).toBe('image/webp'); }), done).toResolve(); }); }); diff --git a/specs/lib/writeResourcesSpec.js b/specs/lib/writeResourcesSpec.js index 54c66b0f..95d5d850 100644 --- a/specs/lib/writeResourcesSpec.js +++ b/specs/lib/writeResourcesSpec.js @@ -1,6 +1,7 @@ 'use strict'; const fsExtra = require('fs-extra'); const path = require('path'); +const Promise = require('bluebird'); const dataUriToBuffer = require('../../lib/dataUriToBuffer'); const ForEach = require('../../lib/ForEach'); const readResources = require('../../lib/readResources'); @@ -10,26 +11,26 @@ const Cesium = require('cesium'); const CesiumMath = Cesium.Math; const gltfPath = 'specs/data/2.0/box-techniques-embedded/box-techniques-embedded.gltf'; -const gltfWebpPath = 'specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-with-fallback.gltf'; +const gltfWebpPath = 'specs/data/2.0/extensions/EXT_image_webp/box-textured-embedded/box-textured-embedded.gltf'; +const gltfWebpSeparatePath = 'specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-with-fallback.gltf'; let gltf; let gltfWebp; +let gltfWebpSeparate; describe('writeResources', function() { beforeEach(function(done) { - const gltfLoaded = fsExtra.readJsonSync(gltfPath); - const gltfWebpLoaded = fsExtra.readJsonSync(gltfWebpPath); - return readResources(gltfLoaded) - .then(function() { - gltf = gltfLoaded; - }) - .then(function() { - const options = { - resourceDirectory: path.dirname(gltfWebpPath) - }; - return readResources(gltfWebpLoaded, options); + gltf = fsExtra.readJsonSync(gltfPath); + gltfWebp = fsExtra.readJsonSync(gltfWebpPath); + gltfWebpSeparate = fsExtra.readJsonSync(gltfWebpSeparatePath); + + Promise.all([ + readResources(gltf), + readResources(gltfWebp), + readResources(gltfWebpSeparate, { + resourceDirectory: path.dirname(gltfWebpSeparatePath) }) + ]) .then(function() { - gltfWebp = gltfWebpLoaded; done(); }); }); @@ -176,7 +177,14 @@ describe('writeResources', function() { it('preserves bufferViews for WebP and fallback image', function() { const originalBufferViewsLength = gltfWebp.bufferViews.length; writeResources(gltfWebp); + // This glTF has all the buffer views already defined for the extension, so no change is expected. + expect(gltfWebp.bufferViews.length).toBe(originalBufferViewsLength); + }); + + it('creates new bufferViews for WebP', function() { + const originalBufferViewsLength = gltfWebpSeparate.bufferViews.length; + writeResources(gltfWebpSeparate); // There should be a new bufferView for the WebP, and one for the fallback image. - expect(gltfWebp.bufferViews.length).toBe(originalBufferViewsLength + 2); + expect(gltfWebpSeparate.bufferViews.length).toBe(originalBufferViewsLength + 2); }); }); From 26c4bb8eaacb99a3bd42f7a153ac5993747aaef2 Mon Sep 17 00:00:00 2001 From: Omar Shehata Date: Wed, 23 Jan 2019 13:19:44 -0500 Subject: [PATCH 3/4] Rename EXT_image -> EXT_texture --- .../box-textured-embedded.gltf | 4 ++-- .../box-textured-separate.bin | Bin .../box-textured-separate.gltf | 6 +++--- .../box-textured-with-fallback.gltf | 4 ++-- .../box-textured-separate/cesium logo.png | Bin .../box-textured-separate/cesium logo.webp | Bin specs/lib/processGltfSpec.js | 16 ++++++++-------- specs/lib/writeResourcesSpec.js | 4 ++-- 8 files changed, 17 insertions(+), 17 deletions(-) rename specs/data/2.0/extensions/{EXT_image_webp => EXT_texture_webp}/box-textured-embedded/box-textured-embedded.gltf (99%) rename specs/data/2.0/extensions/{EXT_image_webp => EXT_texture_webp}/box-textured-separate/box-textured-separate.bin (100%) rename specs/data/2.0/extensions/{EXT_image_webp => EXT_texture_webp}/box-textured-separate/box-textured-separate.gltf (97%) rename specs/data/2.0/extensions/{EXT_image_webp => EXT_texture_webp}/box-textured-separate/box-textured-with-fallback.gltf (98%) rename specs/data/2.0/extensions/{EXT_image_webp => EXT_texture_webp}/box-textured-separate/cesium logo.png (100%) rename specs/data/2.0/extensions/{EXT_image_webp => EXT_texture_webp}/box-textured-separate/cesium logo.webp (100%) diff --git a/specs/data/2.0/extensions/EXT_image_webp/box-textured-embedded/box-textured-embedded.gltf b/specs/data/2.0/extensions/EXT_texture_webp/box-textured-embedded/box-textured-embedded.gltf similarity index 99% rename from specs/data/2.0/extensions/EXT_image_webp/box-textured-embedded/box-textured-embedded.gltf rename to specs/data/2.0/extensions/EXT_texture_webp/box-textured-embedded/box-textured-embedded.gltf index 757b1bcb..c432abef 100644 --- a/specs/data/2.0/extensions/EXT_image_webp/box-textured-embedded/box-textured-embedded.gltf +++ b/specs/data/2.0/extensions/EXT_texture_webp/box-textured-embedded/box-textured-embedded.gltf @@ -4,7 +4,7 @@ "version": "2.0" }, "extensionsUsed": [ - "EXT_image_webp" + "EXT_texture_webp" ], "scene": 0, "scenes": [ @@ -154,7 +154,7 @@ "sampler": 0, "source": 0, "extensions": { - "EXT_image_webp": { + "EXT_texture_webp": { "source": 1 } } diff --git a/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.bin b/specs/data/2.0/extensions/EXT_texture_webp/box-textured-separate/box-textured-separate.bin similarity index 100% rename from specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.bin rename to specs/data/2.0/extensions/EXT_texture_webp/box-textured-separate/box-textured-separate.bin diff --git a/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.gltf b/specs/data/2.0/extensions/EXT_texture_webp/box-textured-separate/box-textured-separate.gltf similarity index 97% rename from specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.gltf rename to specs/data/2.0/extensions/EXT_texture_webp/box-textured-separate/box-textured-separate.gltf index 258f69ec..19230ed3 100644 --- a/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.gltf +++ b/specs/data/2.0/extensions/EXT_texture_webp/box-textured-separate/box-textured-separate.gltf @@ -4,10 +4,10 @@ "version": "2.0" }, "extensionsUsed": [ - "EXT_image_webp" + "EXT_texture_webp" ], "extensionsRequired": [ - "EXT_image_webp" + "EXT_texture_webp" ], "scene": 0, "scenes": [ @@ -156,7 +156,7 @@ { "sampler": 0, "extensions": { - "EXT_image_webp": { + "EXT_texture_webp": { "source": 0 } } diff --git a/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-with-fallback.gltf b/specs/data/2.0/extensions/EXT_texture_webp/box-textured-separate/box-textured-with-fallback.gltf similarity index 98% rename from specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-with-fallback.gltf rename to specs/data/2.0/extensions/EXT_texture_webp/box-textured-separate/box-textured-with-fallback.gltf index 3b7c16d1..2f1e8295 100644 --- a/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-with-fallback.gltf +++ b/specs/data/2.0/extensions/EXT_texture_webp/box-textured-separate/box-textured-with-fallback.gltf @@ -4,7 +4,7 @@ "version": "2.0" }, "extensionsUsed": [ - "EXT_image_webp" + "EXT_texture_webp" ], "scene": 0, "scenes": [ @@ -154,7 +154,7 @@ "sampler": 0, "source": 1, "extensions": { - "EXT_image_webp": { + "EXT_texture_webp": { "source": 0 } } diff --git a/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/cesium logo.png b/specs/data/2.0/extensions/EXT_texture_webp/box-textured-separate/cesium logo.png similarity index 100% rename from specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/cesium logo.png rename to specs/data/2.0/extensions/EXT_texture_webp/box-textured-separate/cesium logo.png diff --git a/specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/cesium logo.webp b/specs/data/2.0/extensions/EXT_texture_webp/box-textured-separate/cesium logo.webp similarity index 100% rename from specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/cesium logo.webp rename to specs/data/2.0/extensions/EXT_texture_webp/box-textured-separate/cesium logo.webp diff --git a/specs/lib/processGltfSpec.js b/specs/lib/processGltfSpec.js index 3d754a4d..80bcc692 100644 --- a/specs/lib/processGltfSpec.js +++ b/specs/lib/processGltfSpec.js @@ -9,8 +9,8 @@ const RuntimeError = Cesium.RuntimeError; const gltfPath = 'specs/data/2.0/box-techniques-embedded/box-techniques-embedded.gltf'; const gltfSeparatePath = 'specs/data/2.0/box-techniques-separate/box-techniques-separate.gltf'; -const gltfWebpPath = 'specs/data/2.0/extensions/EXT_image_webp/box-textured-embedded/box-textured-embedded.gltf'; -const gltfWebpSeparatePath = 'specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-separate.gltf'; +const gltfWebpPath = 'specs/data/2.0/extensions/EXT_texture_webp/box-textured-embedded/box-textured-embedded.gltf'; +const gltfWebpSeparatePath = 'specs/data/2.0/extensions/EXT_texture_webp/box-textured-separate/box-textured-separate.gltf'; describe('processGltf', function() { it('processes gltf with default options', function(done) { @@ -152,7 +152,7 @@ describe('processGltf', function() { }), done).toResolve(); }); - it('processes gltf with EXT_image_webp extension.', function(done) { + it('processes gltf with EXT_texture_webp extension.', function(done) { const gltf = fsExtra.readJsonSync(gltfWebpSeparatePath); const options = { resourceDirectory: path.dirname(gltfWebpSeparatePath) @@ -160,22 +160,22 @@ describe('processGltf', function() { expect(processGltf(gltf, options) .then(function(results) { expect(results.gltf).toBeDefined(); - expect(results.gltf.textures[0].extensions.EXT_image_webp).toBeDefined(); + expect(results.gltf.textures[0].extensions.EXT_texture_webp).toBeDefined(); - const imageId = results.gltf.textures[0].extensions.EXT_image_webp.source; + const imageId = results.gltf.textures[0].extensions.EXT_texture_webp.source; expect(results.gltf.images[imageId].mimeType).toBe('image/webp'); }), done).toResolve(); }); - it('processes embedded gltf with EXT_image_webp extension.', function(done) { + it('processes embedded gltf with EXT_texture_webp extension.', function(done) { const gltf = fsExtra.readJsonSync(gltfWebpPath); expect(processGltf(gltf) .then(function(results) { expect(results.gltf).toBeDefined(); - expect(results.gltf.textures[0].extensions.EXT_image_webp).toBeDefined(); + expect(results.gltf.textures[0].extensions.EXT_texture_webp).toBeDefined(); - const imageId = results.gltf.textures[0].extensions.EXT_image_webp.source; + const imageId = results.gltf.textures[0].extensions.EXT_texture_webp.source; expect(results.gltf.images[imageId].mimeType).toBe('image/webp'); }), done).toResolve(); }); diff --git a/specs/lib/writeResourcesSpec.js b/specs/lib/writeResourcesSpec.js index 95d5d850..cdd1d6d2 100644 --- a/specs/lib/writeResourcesSpec.js +++ b/specs/lib/writeResourcesSpec.js @@ -11,8 +11,8 @@ const Cesium = require('cesium'); const CesiumMath = Cesium.Math; const gltfPath = 'specs/data/2.0/box-techniques-embedded/box-techniques-embedded.gltf'; -const gltfWebpPath = 'specs/data/2.0/extensions/EXT_image_webp/box-textured-embedded/box-textured-embedded.gltf'; -const gltfWebpSeparatePath = 'specs/data/2.0/extensions/EXT_image_webp/box-textured-separate/box-textured-with-fallback.gltf'; +const gltfWebpPath = 'specs/data/2.0/extensions/EXT_texture_webp/box-textured-embedded/box-textured-embedded.gltf'; +const gltfWebpSeparatePath = 'specs/data/2.0/extensions/EXT_texture_webp/box-textured-separate/box-textured-with-fallback.gltf'; let gltf; let gltfWebp; let gltfWebpSeparate; From a42aedea2c66e13b1d484bbafaf713c2c45062c0 Mon Sep 17 00:00:00 2001 From: Shehata Date: Mon, 28 Jan 2019 11:53:40 -0500 Subject: [PATCH 4/4] Updated CHANGES.md --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index a60c505f..169b9a60 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,7 @@ Change Log ### 2.0.2 - ????-??-?? * Fixed a bug where nodes containing extensions or extras where being removed in the glTF 1.0 to 2.0 upgrade stage. [#431](https://github.com/AnalyticalGraphicsInc/gltf-pipeline/pull/431) +* Added support for the `EXT_texture_webp` extension. [#450](https://github.com/AnalyticalGraphicsInc/gltf-pipeline/pull/450) ### 2.0.1 - 2018-09-19