From e2ee679cb75b420e015129f7ccbdabb3d705e99d Mon Sep 17 00:00:00 2001 From: Tom Fili Date: Tue, 11 Jul 2017 14:50:24 -0400 Subject: [PATCH 01/12] Fixed issue where a composite tile containing and instanced tile that required padding would have a bad URL because the padding would end up appended to the url. --- Source/Scene/Instanced3DModel3DTileContent.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Source/Scene/Instanced3DModel3DTileContent.js b/Source/Scene/Instanced3DModel3DTileContent.js index df1de7ca0593..b26b64a05ba0 100644 --- a/Source/Scene/Instanced3DModel3DTileContent.js +++ b/Source/Scene/Instanced3DModel3DTileContent.js @@ -308,6 +308,10 @@ define([ if (gltfFormat === 0) { var gltfUrl = getStringFromTypedArray(gltfView); + + // We need to remove padding from the end of the model URL in case this tile was part of a composite tile + // This removes all white space and null characters from the end of the string. + gltfUrl = gltfUrl.trim().replace(/\0+$/, ''); collectionOptions.url = getAbsoluteUri(joinUrls(getBaseUri(content._url, true), gltfUrl)); } else { collectionOptions.gltf = gltfView; From 65840a48023c62bd44531350c8534a6953f7630c Mon Sep 17 00:00:00 2001 From: Tom Fili Date: Tue, 11 Jul 2017 18:01:50 -0400 Subject: [PATCH 02/12] Added test. --- .../MultipleInstancedTilesets/1/0/0.i3dm | Bin 0 -> 151 bytes .../MultipleInstancedTilesets/2/2/2.i3dm | Bin 0 -> 174 bytes .../MultipleInstancedTilesets/2/2/3.i3dm | Bin 0 -> 175 bytes .../MultipleInstancedTilesets/2/3/3.i3dm | Bin 0 -> 173 bytes .../MultipleInstancedTilesets/box1.glb | Bin 0 -> 1981 bytes .../MultipleInstancedTilesets/box2.glb | Bin 0 -> 2003 bytes .../MultipleInstancedTilesets/tileset.json | Bin 0 -> 481 bytes Specs/Scene/Composite3DTileContentSpec.js | 29 +++++++++++++++++- 8 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/1/0/0.i3dm create mode 100644 Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/2/2/2.i3dm create mode 100644 Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/2/2/3.i3dm create mode 100644 Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/2/3/3.i3dm create mode 100644 Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/box1.glb create mode 100644 Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/box2.glb create mode 100644 Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/tileset.json diff --git a/Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/1/0/0.i3dm b/Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/1/0/0.i3dm new file mode 100644 index 0000000000000000000000000000000000000000..f3c99b72a54a7025c98a4924b43fe08ae6128cd4 GIT binary patch literal 151 zcmV;I0BHXoiwFP!000003d=N3$z^08XWKA>gOKf zp=4#KqZHsD>>1+e@26x{t&~(*lIow9R-9U*WMxpRqvYxs91`#69~9yd9~z)!RZ>)% zTB{%*IK?x&Yr-iG`ARQ{xgM#R=@~#R(T1_L3JQ99`aqPFUty@1o|DAD001$=_CuHe F007w3L>&MC literal 0 HcmV?d00001 diff --git a/Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/2/2/2.i3dm b/Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/2/2/2.i3dm new file mode 100644 index 0000000000000000000000000000000000000000..3dd31dc796ba283f98ea2d41c751b7b14739288a GIT binary patch literal 174 zcmV;f08#%RiwFP!000003d=N3$z^07WvHVR;2-Q6;_2_FWL2${R9TYhpO#jfTB2lSP^+Wl>KGgn@8=&B;t?Mjpk!52 zRGO-z6zuHi&E)x}w%3d6y0v4ql1FN0dInHYw4tG%xk)Tk cp`M;T5GCbT80n?wBrz}m0EdR~(ZB!z03UEt*#H0l literal 0 HcmV?d00001 diff --git a/Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/2/2/3.i3dm b/Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/2/2/3.i3dm new file mode 100644 index 0000000000000000000000000000000000000000..bf77cccec5d649015a368e97ba41a30e05394bdf GIT binary patch literal 175 zcmV;g08sxQiwFP!000003d=N3$z^07WvHVR;2-Q6;_2_FWL2${R9TYhpO#jfTB2lSP^+Wl>KGgn@8=&B;t?Mjpk!52 zRGO-z6zuHiP7WvHVR;2-Q6;_2_FWL2${R9TYhpO#jfTB2lSP^+Wl>KGgn@8=&B;t?Mjpk!52 zRGO-z6zuHijR bP)|=Eh?4Rv4E54;k{B2Of)Ou6zyJUMGw4nd literal 0 HcmV?d00001 diff --git a/Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/box1.glb b/Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/box1.glb new file mode 100644 index 0000000000000000000000000000000000000000..d43defba2fb5ff1ce2284967dd091501b84992a1 GIT binary patch literal 1981 zcmV;u2SWHCiwFP!000003awaqZ{x-l=eAATICa~!IsP56Kp>^G!c(%ebz65Wr*3>K zEXNDfFo+R3l9*7WLQ;yfhJbv;exvlw#Zz|NG}2O@dFOB5F*Dq0cyszfQIzh-it?ZL z6!v*gvFDLAjgwRz6cg7p=ybfCOh|GYkZ;vNY2q5Hrj9omxtdH;lBoloPe)l2_=HWp zc)o}u5@k1=1yCHrv?y^Ifwa}t)Hz$8xmNZ-GvOZ-MZ3_{svGWSx;H4dRH!?#=KY)`|Pg5=U9^miR8t!2fue z5yth27yHD&VCD|=j-%y2U{`V(3`!SI&bq*0j5Brk7>?=mb<;TPcf0+rZJL@czdxE^ z1*IAH+ifKU&i|4E!?vH11Y<`MOvlmSDTlricvEGtqF|0Q5qdgLncD|-N+OcrEKWe$ zi^CB6*qnyhcoKw!waOv@7jMY;^K(#Hk%SfkP>hb=F=_EuNd_eq0ZXgFg!tui z8rUGh$;O>R!-}|`lW3aFAg+D0QR^8_rgUi8{jOQ@;u_C1+pAe+ZpwBoYL}}Q=AR4N z?pamyX4l?j@40AAqia+R_N?AEUpbF$NgJl3esGfDjqp&jdDuVH)MY}G>f;O#G*)L& zWF!f2$ZQTl&&v+3iBD${o>P-_2C*XEEDF9^Qc6CiO|in^QtSZ1WU@>N-S#y0g|bd( zK@>#LU;w~@Z82RCZyDl5ZaK0G=OmqRE1#2iPO@ZkKuNl8mXKTkg;j4b53*oI)~;z7A9g2K?J%s8)I;Ww{a%jsHXtvc(+&lmr^c56jn-K?A4%SubGrQ*!` zsht_r8C~Vqf!wn5HenV^O*5z$ZJx1#x+`@9H6PL{z>s&6iBRTE_n@X^PLE~}-D;<-Z{*QxM;buk6teO zw1czD+u`+ScyoPxIf53g0PQ(+v3U$C2J&_;J9T)AdXu z$wGkxoN@9!>!A|Hq9bXB@_qz`42#5)2#@J$dS~{{zGfaC+V`NfjDiUShe<5mJcD^I zLBefhsF5=&RgG~q9fHuC(}4AQ&fKd=Up$=pGbdf<>vrU1dtdIK}ft$g7hz z!8%(el2KcMkK`I+)_cwQ*KP~K5~sr(9_ca&c%?<#xBd+@xg{6^VVeyjWr zo_*!_%KOS6lt04rzVd%8c8$@rn3c_gfY%u?(eN2SV1&JE8wMtRXS88XQw4l|8PMMB-gfsf`mh+1^iMh`%u9=ShsBnFVumITp$$z*H< zx7IiT5jtt<9Ss#vE+g>mk}?XZ64*kayf`Vq$W7_adh-^2dISquxBNJ3aiAJq33Uno zz*$=YW4M{hpN~+)`}suH4WWUIE`NkJ*EQW?fzcz;c=&Tdp8ZH z(PfqUylHD zK>^Z_umj~PN1t&JQ0FGNIzX({m@H2;?+B|vr4?W_R-Xq5kJEzRt`S%@<%?T&-lD%S zXq;AB#tIq{ytN9OtIlTKZUeMt>_JwVm1`4GDD7HIVq0p*A509Os+3YqG*2JA{PXBm zGQZP2&ve~Br)FfnsN@1(uw?wX1QY=s#Yv0Gw#zIQEN0;Vt!b1>%DdsS{QwfkQ?f1B zEUQ|2AUs*M@iG%-0oRW>F&Y%JL9w1(G8Fk|i2gU$^Or3&PwB*{hafk_6l%UUyM1k* z=gTbl+BAKMh=9=Un&EhbbrGzmh0Thv)fC>D&Oe24z9YRD=aZd>KjdrIv#+!UzabLFL_0-F11$@`0q04TdF)XYQ1 z*uhY&1a1a8yN9^>m8S|>?mUh7u*3hgFvHa9P(c;ki0eRc(~|r4PP5GniwFP!000003awcCbK}Gv*HNG)5L(*u_;E*_VQi`xJ^eaDn_e6U&EqBx zxtV4%p0%{L)!LGgWMf~(9sYCr{qC+_mJuMfvZ?it@>O z3jf@z)OA@Lhf%C{^U1(8a5`L!Ml8DV+4pLWr?`?yX_m!O#z2sKY4XvTFau(b>_Jy3q=7tjFN! z{}&w7PT@2i$8xm7Z;nobZ;tS$_re07Y?ZJe_QQb3?p5y}*74xG1q~AaHS-2E0sq5A z!Z_DsZs;-ZoSQq)8;+L!fZdeKVIW;T8S9*aF~QW~V>qVM(M_Y>X*N4e+cY&j{r+Np z8I)$+Z8oJ8I6o%^hHXC~3C4~jn2w{tQw)76@TSUP1^$dCGW0l)x!Zen%mNnCB#c1X z4X0D;QFA;^Mt^S)J;%0(9dqPZmOEPSY%T85mDA+uE|q-4yLwXjiD`=AR1M zZdqmXX4Bqf@2O}_qiK{4wyf4BTe*mBK^vyBerOcYwe+xMv)yTH>LS9VdNiS3jn^3z z8H;>6!#V+hySbA(kVe9GhsU*wuqrkvyiJ;u(LE-3QZd`PL^qW<`S}|$4@u@tl7B5LhE(6i#E$xSKXDmu9^+8 z3Mk~AB{Gy*>)xv|o8bZPg8aZbzCJzc^^Z?aPQLB;R4re6v$+vPJVn^);a$=`zdY`p z-JJGb74=$8Uhe{CNnEyE(MKzjecZw6#ZB+3-@Cp#y68iTmVmY#Tx=GDl7Xz9i%uQU zBL9Y71&y7KUtV2)(|fV4$(L5x-_k;XYXIkDJKcRLjCn_5hO&MHg@nq)vVacpOujX7 zD>d6~`wp}gfj@%aaEZkr%V3sEkQh`lRLL1im1A5EIr6LFs746o3X3lUf^)LP=W*bL z?m`hpRF*p2c*abQV>+8pMRoEfSS5=n<>gKGZH!0N?PFI{tt`52xL6}SqzKE{$v z{PAQ?M$?cc&-eG15H3F$lO=O4vXmtPbXj#sw@FrZRYscT0*9L>g)%`mq3@9y^@AFY z>f|0s=u!A1hjIW(t)(F9&$*0E;Px9vAcB*c-q1+?WHJ)pE-53IDuB%uii=AHIJqj_ zSgl`^&kkWBtC|-kH33w^m7q)b2hQp#Fpit6{PmC&ETpUytdNVwL-JWBMzws1w#L)J z37p3-q#joR@@9W8|A@HbJHjCL$H7II{EJ0lO_2HZt-g1^2R%U|23-~i8u{`N@ap7m z5Gb8=$pQR%zPH)Kh?!MuoVwE(FltqClx(aZCJ(UI^?K^f+Ud=D$eZ~m*u@V(6A}mzKhh4AYdZQ|fPgwT!PNobrN(7NqD4noIVvp& zqw)GYAaoe#{Q4GwS5vmQW#cvZf8TLe<1-yfTJ*~p=`a# z;=$q;4#*0lR8ZaxpYI2dK#`J7v1WPI;(_pJ)rN~imIYiu!pNvl%nHSNbjeWUpA-D= zu%|CuYM$W4*bYHviYsjSTJQF?ewr_{;A>s=B_jetyK6?^mDXjj9v3!C!d6vyXFC5f zh4Y>0`5?QG@#BD`Zz|9CO2sTA+Qoh}mxp+_6x(`At}^;(D5 zT*s0R?bPGY@5*@G=JwH*zI4Y-BpgKI%70Nw?OHtzD!<*}B{=URuVR_IMa z$F`v+OWtc$hv6LQ+i>i+rQbab`(t;;t9f_!@%5IZbH z^qiH(Ap}Qy0fuG%U1YJp8Tv8zXO+jgZ&kE}C743nPRUjLlT*wgrT~F0Q?!dE?kX(#&rJ|AQVSO3q)6$YYR01d(17H-|FmcE&`rv~FPm@^hqZBZ+yxejMGA}tH X#2F> Date: Tue, 11 Jul 2017 18:04:20 -0400 Subject: [PATCH 03/12] Tweaks. --- Source/Scene/Instanced3DModel3DTileContent.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Scene/Instanced3DModel3DTileContent.js b/Source/Scene/Instanced3DModel3DTileContent.js index b26b64a05ba0..66ad743fc5d2 100644 --- a/Source/Scene/Instanced3DModel3DTileContent.js +++ b/Source/Scene/Instanced3DModel3DTileContent.js @@ -309,9 +309,9 @@ define([ if (gltfFormat === 0) { var gltfUrl = getStringFromTypedArray(gltfView); - // We need to remove padding from the end of the model URL in case this tile was part of a composite tile + // We need to remove padding from the end of the model URL in case this tile was part of a composite tile. // This removes all white space and null characters from the end of the string. - gltfUrl = gltfUrl.trim().replace(/\0+$/, ''); + gltfUrl = gltfUrl.replace(/[\s\0]+$/, ''); collectionOptions.url = getAbsoluteUri(joinUrls(getBaseUri(content._url, true), gltfUrl)); } else { collectionOptions.gltf = gltfView; From 15177bc84d4e9c45ebdb7942fa0650a8dcf17e7f Mon Sep 17 00:00:00 2001 From: Tom Fili Date: Wed, 12 Jul 2017 11:53:47 -0400 Subject: [PATCH 04/12] Updated CHANGES --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index 28ac687b486d..73b8678675b4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,7 @@ Change Log ### 1.36 - 2017-08-01 * Added ability to show tile urls in the 3D Tiles Inspector. [#5592](https://github.com/AnalyticalGraphicsInc/cesium/pull/5592) +* Fixed issue where composite 3D Tiles that contained instanced 3D Tiles with an external model reference would fail to download the model. ### 1.35.2 - 2017-07-11 From b9d7b45b580e01850bcdcdf444c30e065e6e947d Mon Sep 17 00:00:00 2001 From: hpinkos Date: Wed, 19 Jul 2017 13:44:16 -0400 Subject: [PATCH 05/12] Add setter for GeoJsonDataSource.name --- CHANGES.md | 1 + Source/DataSources/GeoJsonDataSource.js | 6 ++++++ Specs/DataSources/GeoJsonDataSourceSpec.js | 13 +++++++++++++ 3 files changed, 20 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index e06889b90fa6..826f7eee1471 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -16,6 +16,7 @@ Change Log * Added ability to show tile urls in the 3D Tiles Inspector. [#5592](https://github.com/AnalyticalGraphicsInc/cesium/pull/5592) * Added behavior to `Cesium3DTilesInspector` that selects the first tileset hovered over if no tilest is specified. [#5139](https://github.com/AnalyticalGraphicsInc/cesium/issues/5139) * Added ability to provide a `width` and `height` to `scene.pick`. [#5602](https://github.com/AnalyticalGraphicsInc/cesium/pull/5602) +* Added setter for `GeoJsonDataSource.name` to specify a name for the datasource [#5653](https://github.com/AnalyticalGraphicsInc/cesium/issues/5653) * Fixed issue where scene would blink when labels were added. [#5537](https://github.com/AnalyticalGraphicsInc/cesium/issues/5537) * Fixed label positioning when height reference changes [#5609](https://github.com/AnalyticalGraphicsInc/cesium/issues/5609) * Fixed crash when using the `Cesium3DTilesInspectorViewModel` and removing a tileset [#5607](https://github.com/AnalyticalGraphicsInc/cesium/issues/5607) diff --git a/Source/DataSources/GeoJsonDataSource.js b/Source/DataSources/GeoJsonDataSource.js index 2123486fcb1c..4fe2a5eec8fc 100644 --- a/Source/DataSources/GeoJsonDataSource.js +++ b/Source/DataSources/GeoJsonDataSource.js @@ -690,6 +690,12 @@ define([ name : { get : function() { return this._name; + }, + set : function(value) { + if (this._name !== value) { + this._name = value; + this._changed.raiseEvent(this); + } } }, /** diff --git a/Specs/DataSources/GeoJsonDataSourceSpec.js b/Specs/DataSources/GeoJsonDataSourceSpec.js index a19097e85205..18fd511998bd 100644 --- a/Specs/DataSources/GeoJsonDataSourceSpec.js +++ b/Specs/DataSources/GeoJsonDataSourceSpec.js @@ -279,6 +279,19 @@ defineSuite([ expect(dataSource.show).toBe(true); }); + it('setting name raises changed event', function() { + var dataSource = new GeoJsonDataSource(); + + var spy = jasmine.createSpy('changedEvent'); + dataSource.changedEvent.addEventListener(spy); + + var newName = 'chester'; + dataSource.name = newName; + expect(dataSource.name).toEqual(newName); + expect(spy.calls.count()).toEqual(1); + expect(spy).toHaveBeenCalledWith(dataSource); + }); + it('show sets underlying entity collection show.', function() { var dataSource = new GeoJsonDataSource(); From b146e77c303b5113e019c040595f9a34838c6c00 Mon Sep 17 00:00:00 2001 From: hpinkos Date: Wed, 19 Jul 2017 13:59:44 -0400 Subject: [PATCH 06/12] doc --- Source/DataSources/GeoJsonDataSource.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/DataSources/GeoJsonDataSource.js b/Source/DataSources/GeoJsonDataSource.js index 4fe2a5eec8fc..854760323b76 100644 --- a/Source/DataSources/GeoJsonDataSource.js +++ b/Source/DataSources/GeoJsonDataSource.js @@ -683,7 +683,7 @@ define([ defineProperties(GeoJsonDataSource.prototype, { /** - * Gets a human-readable name for this instance. + * Gets or sets a human-readable name for this instance. * @memberof GeoJsonDataSource.prototype * @type {String} */ From 3cbf6c11f414f54f989687bc94253952946d4cf6 Mon Sep 17 00:00:00 2001 From: hpinkos Date: Wed, 19 Jul 2017 14:17:24 -0400 Subject: [PATCH 07/12] Remove model height callback on destroy --- Source/Scene/Model.js | 5 +++++ Specs/Scene/ModelSpec.js | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Source/Scene/Model.js b/Source/Scene/Model.js index 06425037b1f8..2ff7c56c6fa2 100644 --- a/Source/Scene/Model.js +++ b/Source/Scene/Model.js @@ -4764,6 +4764,11 @@ define([ destroy(this._rendererResources.vertexArrays); } + if (defined(this._removeUpdateHeightCallback)) { + this._removeUpdateHeightCallback(); + this._removeUpdateHeightCallback = undefined; + } + this._rendererResources = undefined; this._cachedRendererResources = this._cachedRendererResources && this._cachedRendererResources.release(); diff --git a/Specs/Scene/ModelSpec.js b/Specs/Scene/ModelSpec.js index 87f7a76c5346..c7dd2dfec270 100644 --- a/Specs/Scene/ModelSpec.js +++ b/Specs/Scene/ModelSpec.js @@ -2521,6 +2521,23 @@ defineSuite([ }); }); + it('removes the callback on destroy', function() { + scene.globe = createMockGlobe(); + return loadModelJson(texturedBoxModel.gltf, { + heightReference : HeightReference.CLAMP_TO_GROUND, + position : Cartesian3.fromDegrees(-72.0, 40.0), + scene : scene, + show : true + }).then(function(model) { + expect(scene.globe.callback).toBeDefined(); + scene.renderForSpecs(); + + primitives.remove(model); + scene.renderForSpecs(); + expect(scene.globe.callback).toBeUndefined(); + }); + }); + it('changing the terrain provider', function() { scene.globe = createMockGlobe(); return loadModelJson(texturedBoxModel.gltf, { @@ -2566,5 +2583,4 @@ defineSuite([ }); }); }); - }, 'WebGL'); From eebf7e51d54f398c1de8c4170d8f0e03170de7a9 Mon Sep 17 00:00:00 2001 From: Tom Fili Date: Wed, 19 Jul 2017 16:50:31 -0400 Subject: [PATCH 08/12] Fixed tests to use samples-generator. --- .../compositeOfInstanced.cmpt | Bin 0 -> 11760 bytes .../CompositeOfInstanced/tileset.json | 29 ++++++++++++++++++ .../MultipleInstancedTilesets/1/0/0.i3dm | Bin 151 -> 0 bytes .../MultipleInstancedTilesets/2/2/2.i3dm | Bin 174 -> 0 bytes .../MultipleInstancedTilesets/2/2/3.i3dm | Bin 175 -> 0 bytes .../MultipleInstancedTilesets/2/3/3.i3dm | Bin 173 -> 0 bytes .../MultipleInstancedTilesets/box1.glb | Bin 1981 -> 0 bytes .../MultipleInstancedTilesets/box2.glb | Bin 2003 -> 0 bytes .../MultipleInstancedTilesets/tileset.json | Bin 481 -> 0 bytes Specs/Scene/Composite3DTileContentSpec.js | 26 ++-------------- 10 files changed, 31 insertions(+), 24 deletions(-) create mode 100644 Specs/Data/Cesium3DTiles/Composite/CompositeOfInstanced/compositeOfInstanced.cmpt create mode 100644 Specs/Data/Cesium3DTiles/Composite/CompositeOfInstanced/tileset.json delete mode 100644 Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/1/0/0.i3dm delete mode 100644 Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/2/2/2.i3dm delete mode 100644 Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/2/2/3.i3dm delete mode 100644 Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/2/3/3.i3dm delete mode 100644 Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/box1.glb delete mode 100644 Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/box2.glb delete mode 100644 Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/tileset.json diff --git a/Specs/Data/Cesium3DTiles/Composite/CompositeOfInstanced/compositeOfInstanced.cmpt b/Specs/Data/Cesium3DTiles/Composite/CompositeOfInstanced/compositeOfInstanced.cmpt new file mode 100644 index 0000000000000000000000000000000000000000..d2149ce185edf70f11373d391792c5fbc2365611 GIT binary patch literal 11760 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 F007w3L>&MC diff --git a/Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/2/2/2.i3dm b/Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/2/2/2.i3dm deleted file mode 100644 index 3dd31dc796ba283f98ea2d41c751b7b14739288a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174 zcmV;f08#%RiwFP!000003d=N3$z^07WvHVR;2-Q6;_2_FWL2${R9TYhpO#jfTB2lSP^+Wl>KGgn@8=&B;t?Mjpk!52 zRGO-z6zuHi&E)x}w%3d6y0v4ql1FN0dInHYw4tG%xk)Tk cp`M;T5GCbT80n?wBrz}m0EdR~(ZB!z03UEt*#H0l diff --git a/Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/2/2/3.i3dm b/Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/2/2/3.i3dm deleted file mode 100644 index bf77cccec5d649015a368e97ba41a30e05394bdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175 zcmV;g08sxQiwFP!000003d=N3$z^07WvHVR;2-Q6;_2_FWL2${R9TYhpO#jfTB2lSP^+Wl>KGgn@8=&B;t?Mjpk!52 zRGO-z6zuHiP7WvHVR;2-Q6;_2_FWL2${R9TYhpO#jfTB2lSP^+Wl>KGgn@8=&B;t?Mjpk!52 zRGO-z6zuHijR bP)|=Eh?4Rv4E54;k{B2Of)Ou6zyJUMGw4nd diff --git a/Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/box1.glb b/Specs/Data/Cesium3DTiles/Composite/MultipleInstancedTilesets/box1.glb deleted file mode 100644 index d43defba2fb5ff1ce2284967dd091501b84992a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1981 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 X#2F> Date: Wed, 19 Jul 2017 22:45:55 -0400 Subject: [PATCH 09/12] Fix travis builds The problem was that travis itself was killing our build process because we were trying to run 8 requirejs processes at once, leading us to run out of memory (only 3GB available on travis). This adds a command line to specify concurrency and updates travis to do at most 2 (one for each core). --- .travis.yml | 2 +- gulpfile.js | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 024b8097b877..42139a1752fe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,7 +22,7 @@ script: - echo 'makeZipFile' && echo -en 'travis_fold:start:script.makeZipFile\\r' - npm run clean - - npm run makeZipFile + - npm run makeZipFile -- --concurrency 2 - npm pack - echo -en 'travis_fold:end:script.makeZipFile\\r' diff --git a/gulpfile.js b/gulpfile.js index b46c2eb1999c..6be3722bd14b 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -46,8 +46,10 @@ var noDevelopmentGallery = taskName === 'release' || taskName === 'makeZipFile'; var buildingRelease = noDevelopmentGallery; var minifyShaders = taskName === 'minify' || taskName === 'minifyRelease' || taskName === 'release' || taskName === 'makeZipFile' || taskName === 'buildApps'; -//travis reports 32 cores but only has 3GB of memory, which causes the VM to run out. Limit to 8 cores instead. -var concurrency = Math.min(os.cpus().length, 8); +var concurrency = yargs.argv.concurrency; +if (!concurrency) { + concurrency = os.cpus().length; +} //Since combine and minify run in parallel already, split concurrency in half when building both. //This can go away when gulp 4 comes out because it allows for synchronous tasks. From 8bc17605d4812dfb34fde782ad33e498f2ec3416 Mon Sep 17 00:00:00 2001 From: Hannah Date: Thu, 20 Jul 2017 09:25:20 -0400 Subject: [PATCH 10/12] Update CHANGES.md --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index 1fa858a010a8..5579d8c74fb2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -21,6 +21,7 @@ Change Log * Fixed crash when using the `Cesium3DTilesInspectorViewModel` and removing a tileset [#5607](https://github.com/AnalyticalGraphicsInc/cesium/issues/5607) * Fixed polygon outline in Polygon Sandcastle demo [#5642](https://github.com/AnalyticalGraphicsInc/cesium/issues/5642) * Fixed label positioning when using `HeightReference.CLAMP_TO_GROUND` and no position [#5648](https://github.com/AnalyticalGraphicsInc/cesium/pull/5648) +* Updated `Billboard`, `Label` and `PointPrimitive` constructors to clone NearFarScale parameters [#5654](https://github.com/AnalyticalGraphicsInc/cesium/pull/5654) * Added `FrustumGeometry` and `FrustumOutlineGeometry`. [#5649](https://github.com/AnalyticalGraphicsInc/cesium/pull/5649) * Added an `options` parameter to the constructors of `PerspectiveFrustum`, `PerspectiveOffCenterFrustum`, `OrthographicFrustum`, and `OrthographicOffCenterFrustum` to set properties. [#5649](https://github.com/AnalyticalGraphicsInc/cesium/pull/5649) From 2760875293d4f6319b4f72e2cda2c02488b1acda Mon Sep 17 00:00:00 2001 From: Hannah Date: Thu, 20 Jul 2017 09:25:45 -0400 Subject: [PATCH 11/12] Update CHANGES.md --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 5579d8c74fb2..4b4cab78edac 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -21,7 +21,7 @@ Change Log * Fixed crash when using the `Cesium3DTilesInspectorViewModel` and removing a tileset [#5607](https://github.com/AnalyticalGraphicsInc/cesium/issues/5607) * Fixed polygon outline in Polygon Sandcastle demo [#5642](https://github.com/AnalyticalGraphicsInc/cesium/issues/5642) * Fixed label positioning when using `HeightReference.CLAMP_TO_GROUND` and no position [#5648](https://github.com/AnalyticalGraphicsInc/cesium/pull/5648) -* Updated `Billboard`, `Label` and `PointPrimitive` constructors to clone NearFarScale parameters [#5654](https://github.com/AnalyticalGraphicsInc/cesium/pull/5654) +* Updated `Billboard`, `Label` and `PointPrimitive` constructors to clone `NearFarScale` parameters [#5654](https://github.com/AnalyticalGraphicsInc/cesium/pull/5654) * Added `FrustumGeometry` and `FrustumOutlineGeometry`. [#5649](https://github.com/AnalyticalGraphicsInc/cesium/pull/5649) * Added an `options` parameter to the constructors of `PerspectiveFrustum`, `PerspectiveOffCenterFrustum`, `OrthographicFrustum`, and `OrthographicOffCenterFrustum` to set properties. [#5649](https://github.com/AnalyticalGraphicsInc/cesium/pull/5649) From 9db61912e02c8cf703133b2d1ac3a04df5499a92 Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Thu, 20 Jul 2017 11:03:17 -0400 Subject: [PATCH 12/12] Updated files --- .../Composite/CompositeOfInstanced/box.glb | Bin 0 -> 5360 bytes .../compositeOfInstanced.cmpt | Bin 11760 -> 1024 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Specs/Data/Cesium3DTiles/Composite/CompositeOfInstanced/box.glb diff --git a/Specs/Data/Cesium3DTiles/Composite/CompositeOfInstanced/box.glb b/Specs/Data/Cesium3DTiles/Composite/CompositeOfInstanced/box.glb new file mode 100644 index 0000000000000000000000000000000000000000..2bde3c4ee98e6dae935c4f9e5e2ee152fbfdc347 GIT binary patch literal 5360 zcmb_g?Qh#e8283DAdCTHjE}SYDFv@e;xtK9Ar#tlbo6CvyY53(MVG`$42~UaCu>(# z+JA=jAMq807{BMvcRnZGS`gjh+&wS9d*1H3bB6xm<_*Izet%#Xhj%f+-?_zlJvWZS zD7Ko}q~isB_q0T$v7sTU zEA>jHR9$JTHlUDte$-xfEZxN*jK<9WHx5=Bjcdd`@1nkX<}iH2|I8b^Y?n_i$hw&4 z_uLw~fg7}?J zaT?KreU`AMZIK&U9Sc-d)_R#!iEGP=&`RKyI^sB2@(GKERQ*nMwN}Zkf(@by^}Vq5 zN*i?> z^LeP{q_dM!DKG&WqcAK*vMu*CaRVxg6l2ExDaW(exa*;fP;;>9A604J8w{o~AdXR| zyjFoQ_F_?2nqWL}dsCmGXm#Sq3%mf0&uXsLmP_?U)hT0JMl6UYEOLY1nbj=AkHqbb z0`J!;nX1O9SaQ*gN5VWBb$Zh-FZ9$eKBXPtjnTAbBzTNnkf1wur-{&ews){~xV5(n zY}tjgCTCl_d;2@BZJn962P}^M?4fV#Oxd!t;Dfsuday(4&(#aQxdTin-c}Tb$u1^h zH}poH-$xu^HDWDYJ?10fDv=qyp+;TiS>c(vY{VCe*?8h(+l%^$d*~&wkADk5TTHky z8ktH(*m$hl$T1U?%rxTmBPJ|B1=0bLuF*q;m>Z5qHw9=v;DoN?R8#s^P0kvOSRN; zTf0Z?{e$-5erxvt)!WW3zk=n}PL+KccGbu(wOw<5bexUDt?l-~#@6QM^E@2a$~N>o zUbd?jIN8>gEZjWEhWz%PW2*F^;Iv4qJ*tJPMxM$H=A_dto0o+!vNA+=k-2n4_mnt6 zI~2thur3{w$2iTac4f7)dO{J4Q|bv2rhzv=sc`XWXQ4Xyrq=5P8lA;jSS$~c%V$3I zEG-1$tE8&*5>;hX<(8;f#MJ;53vxBr2@Pp1uc< zvDZ{)wT*}P4k9)j<5W2qvA#=JnmmCrgj)$(j1thN;tYtnF1H}hgc)jII=J=bZXix1HPz>_+o!YQ!Zc08FkAS% zdHeR!8#$)$8=w*W@3)Uye+k~3TbSP#@~uBX({+ePdXR1Xfe(%Eq_TuVvbyeNGNhA! zIF>G>TA?>8*m?c$np_MN1 z=bLCwzyW~XJ=Y4V`Is}e=a^adSu4!&7UKm&!I-JG)Ly?tOMouuD01la;eZzuXBaJ+ z=LM5st0sD#`Q4&d<~N*O%*?Uz;4<{m!%Wm78PEM*^Ub78t@X zE~du=BJ!@YR=6l!krD2JI&QK+r}Xr|S)j`!XMrIPnvB6q0O3(5%_2)bb{66ffB8=k zl(V^XUXdEdR3Q=r@0DAerNtu>LHSF4ynR z5sNf7lt;usj}$>EF}VE#!Y-Y?8_i06yV_{&SL+X& zyVho5&9;9vxbnaX9sC>+qmaYt|0x*5;Yjp2glluNQf-wV69VUpcs_ z-TLv{f4cXT*>`*Q*RrEyXFfq>ry@2>${cV~O=L5H6R_^aT3Dqs)1Jpum`yhj3l8@yw{ zzXI>?!TW}Q--iyn0?vcCDBwPLO##0F-me3G#hmT^6uhqr_z&Q{Bj699!%YDf!Ta|g za(eRpnYHWr{Q;bJT*%oU)9=Z-*&jA{D6Ynr4Ws)a0koFe>3C5z4kL=39JKtP>pf}Z zSTv`-o)5*0{_dh5FO@vZ~qEzBu zKDU~qAE%rzmNwQ4rIHOC{mtW*x^k+xUMf55`L%Mv28YD1trrTp;#zs53q z1P?Gv%C;Z4;jBgJOOk~4ZWy{VP9&ce z%_*C-<+y95;I(!5F;(0UNjL0MopXvCr9x^IY!H>GA1QXdke14p(d9ZMmur<6q3z9& zlwQoui7yq)m&v=Xw)wmR@9JL2=hjf=ZOb3IeUE$#c;v=j=(|JaYB^{<6j*Xh;Es?O zmO|N<_aycLN(&+5)E!QlJj)%meUuR@4mSOxEbaQe-ZX-UW8^8zRY(~55zi})Fq(Ls z>Ci>e>d1i~_yG!^wYgDR&8?SP*`#(S==XNPEK{p=g~F;W2hWjOy5)#+)xXGcPG}wuK}1VPzi+tEw!@0~SYp z_EER>Nm;TJ=VNx!^_U)0eJ-A}%^hGs{q7G^a^kbh~pv?zN84XRT!gV~>b!0MQq|7vA`okw~ zfDEJqLafn2hJ~&eq>{_}*6vYDx+ZGjoEq_CWk}~P(*X2>7m~FBMk)^&p&GFbnGUeq zO3o}xfzY%i3q5RO6(3@ecTgDHhKZ#h4e8K*D4cv|Mc&8_V!s2oJv_Ky-G5xGzK+tz z>!Gt&S}&25aQt1bLteO)@$l$iue!}HYV(|2lS{eOa<%&7>QSTGJgU?i$lhvd`86!B zcB-t?(5pmxsqLDwqvhOh*7mE7`?Z~&M`>}4E7{QV@{(P>Fq3R;Ifa`C>5$&ubCW7O zNI1>YYL9B}Dv_l!f+=dTWz)1EMpXKUE+Qu&x~D`j${|m-z-`kpd5qJ%XcsmL8zHR z!YA>v6v*&Nw5&+MG?R{2I(X+)fQ2iWOO#s?J$(-zW3Q>mY8wy!?S*cCgj1z4aJwE| zY0?Oa5N;(XF^WJR@-rY}yi9}iB-Bv*(!s4absL#G>R2_>ZyjJx&Uq+y$=S~wFt2cG zQJnf8@1l8}dgS)#d%mo&Nl|?id0pi1f+=|IFb%`3;P2V<=Xak;m_Ba+NB9q(->tmQ z=bpWQ@hwhY`8RMn56uxDXe;mGkKo&amgEqv&U+aR@rXYrOQ+H0>$>T%PNVDgVfxFp zh*qc3dD)AY@zy*1lb+Xtzd?jVjgKo}HqS{p?G-SS`<5p63Yh5&8sfVS3`+KMEj!_t z8?0Y()A)q(f^o~ZjpuFSlg6ivPa8{kE*YOOUNk;yyoBdV#^;RB8(%P9#`9(4i^iAm zvU>;5JH{&p-cve0T@TFxj`@k%8;;$0Ye`gAbL7TFbD^{@%+D9q6oCT)dNtizQpLzT z^*WB3RHLn>Q@qvqL7z{YsxnpGzJ!YlUEopZvEPLOez1HBXvI8RGD&RFMC~)bwrG|4 zDw|$T)Uoj*wz5TRnj&C@fYm3nr!>m%$ZdWV$~IcLe_ z7cSzOVRDd3JDH+fFnsF7pMIBCD<~by{_?cKZGZOU{?F ze)nuI>vzj$3cIw+LDuh}6FC6C6H=zb-w z=&avOy-C^L5V*?B};Gx_Q{)q$22*O4Z>l}wr(q@>B#B`qi5)O^