cesium 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.md +259 -0
- data/README.rdoc +90 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/Assets/Assets.profile.js +8 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_0.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_1.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_10.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_11.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_12.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_13.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_14.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_15.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_16.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_17.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_18.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_19.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_2.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_20.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_21.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_22.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_23.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_24.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_25.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_26.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_27.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_3.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_4.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_5.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_6.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_7.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_8.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_9.json +1 -0
- data/app/assets/javascripts/Assets/Textures/NE2_LR_LC_SR_W_DR_2048.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/waterNormals.jpg +0 -0
- data/app/assets/javascripts/Assets/package.json +6 -0
- data/app/assets/javascripts/Cesium.js +320 -0
- data/app/assets/javascripts/Core/AnimationController.js +148 -0
- data/app/assets/javascripts/Core/AxisAlignedBoundingBox.js +243 -0
- data/app/assets/javascripts/Core/BoundingRectangle.js +364 -0
- data/app/assets/javascripts/Core/BoundingSphere.js +819 -0
- data/app/assets/javascripts/Core/BoxTessellator.js +93 -0
- data/app/assets/javascripts/Core/Cartesian2.js +762 -0
- data/app/assets/javascripts/Core/Cartesian3.js +861 -0
- data/app/assets/javascripts/Core/Cartesian4.js +762 -0
- data/app/assets/javascripts/Core/Cartographic.js +211 -0
- data/app/assets/javascripts/Core/CatmullRomSpline.js +232 -0
- data/app/assets/javascripts/Core/Clock.js +195 -0
- data/app/assets/javascripts/Core/ClockRange.js +37 -0
- data/app/assets/javascripts/Core/ClockStep.js +32 -0
- data/app/assets/javascripts/Core/Color.js +1629 -0
- data/app/assets/javascripts/Core/ComponentDatatype.js +119 -0
- data/app/assets/javascripts/Core/Core.profile.js +8 -0
- data/app/assets/javascripts/Core/CubeMapEllipsoidTessellator.js +198 -0
- data/app/assets/javascripts/Core/CubicRealPolynomial.js +251 -0
- data/app/assets/javascripts/Core/DefaultProxy.js +30 -0
- data/app/assets/javascripts/Core/DeveloperError.js +60 -0
- data/app/assets/javascripts/Core/EarthOrientationParameters.js +383 -0
- data/app/assets/javascripts/Core/EarthOrientationParametersSample.js +50 -0
- data/app/assets/javascripts/Core/Ellipsoid.js +539 -0
- data/app/assets/javascripts/Core/EllipsoidTangentPlane.js +207 -0
- data/app/assets/javascripts/Core/EllipsoidalOccluder.js +151 -0
- data/app/assets/javascripts/Core/EncodedCartesian3.js +197 -0
- data/app/assets/javascripts/Core/Enumeration.js +67 -0
- data/app/assets/javascripts/Core/Event.js +122 -0
- data/app/assets/javascripts/Core/Extent.js +383 -0
- data/app/assets/javascripts/Core/ExtentTessellator.js +384 -0
- data/app/assets/javascripts/Core/FAR.js +13 -0
- data/app/assets/javascripts/Core/FeatureDetection.js +126 -0
- data/app/assets/javascripts/Core/Fullscreen.js +235 -0
- data/app/assets/javascripts/Core/GeographicProjection.js +107 -0
- data/app/assets/javascripts/Core/HermitePolynomialApproximation.js +176 -0
- data/app/assets/javascripts/Core/HermiteSpline.js +234 -0
- data/app/assets/javascripts/Core/Iau2006XysData.js +259 -0
- data/app/assets/javascripts/Core/Iau2006XysSample.js +36 -0
- data/app/assets/javascripts/Core/IndexDatatype.js +28 -0
- data/app/assets/javascripts/Core/Intersect.js +40 -0
- data/app/assets/javascripts/Core/IntersectionTests.js +359 -0
- data/app/assets/javascripts/Core/Interval.js +27 -0
- data/app/assets/javascripts/Core/Iso8601.js +46 -0
- data/app/assets/javascripts/Core/JulianDate.js +1228 -0
- data/app/assets/javascripts/Core/KeyboardEventModifier.js +38 -0
- data/app/assets/javascripts/Core/LagrangePolynomialApproximation.js +96 -0
- data/app/assets/javascripts/Core/LeapSecond.js +158 -0
- data/app/assets/javascripts/Core/LinearApproximation.js +98 -0
- data/app/assets/javascripts/Core/Math.js +532 -0
- data/app/assets/javascripts/Core/Matrix2.js +833 -0
- data/app/assets/javascripts/Core/Matrix3.js +1099 -0
- data/app/assets/javascripts/Core/Matrix4.js +2164 -0
- data/app/assets/javascripts/Core/MeshFilters.js +568 -0
- data/app/assets/javascripts/Core/Occluder.js +474 -0
- data/app/assets/javascripts/Core/OrientationInterpolator.js +109 -0
- data/app/assets/javascripts/Core/PlaneTessellator.js +74 -0
- data/app/assets/javascripts/Core/PolygonPipeline.js +792 -0
- data/app/assets/javascripts/Core/PolylinePipeline.js +90 -0
- data/app/assets/javascripts/Core/PrimitiveType.js +80 -0
- data/app/assets/javascripts/Core/QuadraticRealPolynomial.js +146 -0
- data/app/assets/javascripts/Core/QuarticRealPolynomial.js +339 -0
- data/app/assets/javascripts/Core/Quaternion.js +947 -0
- data/app/assets/javascripts/Core/Queue.js +95 -0
- data/app/assets/javascripts/Core/Ray.js +64 -0
- data/app/assets/javascripts/Core/ReferenceFrame.js +25 -0
- data/app/assets/javascripts/Core/RequestErrorEvent.js +35 -0
- data/app/assets/javascripts/Core/RuntimeError.js +59 -0
- data/app/assets/javascripts/Core/ScreenSpaceEventHandler.js +658 -0
- data/app/assets/javascripts/Core/ScreenSpaceEventType.js +149 -0
- data/app/assets/javascripts/Core/Shapes.js +230 -0
- data/app/assets/javascripts/Core/Spherical.js +192 -0
- data/app/assets/javascripts/Core/TaskProcessor.js +131 -0
- data/app/assets/javascripts/Core/TimeConstants.js +85 -0
- data/app/assets/javascripts/Core/TimeInterval.js +305 -0
- data/app/assets/javascripts/Core/TimeIntervalCollection.js +543 -0
- data/app/assets/javascripts/Core/TimeStandard.js +31 -0
- data/app/assets/javascripts/Core/Tipsify.js +285 -0
- data/app/assets/javascripts/Core/Transforms.js +614 -0
- data/app/assets/javascripts/Core/TridiagonalSystemSolver.js +102 -0
- data/app/assets/javascripts/Core/Visibility.js +38 -0
- data/app/assets/javascripts/Core/WebMercatorProjection.js +154 -0
- data/app/assets/javascripts/Core/WindingOrder.js +40 -0
- data/app/assets/javascripts/Core/binarySearch.js +69 -0
- data/app/assets/javascripts/Core/buildModuleUrl.js +77 -0
- data/app/assets/javascripts/Core/clone.js +21 -0
- data/app/assets/javascripts/Core/combine.js +81 -0
- data/app/assets/javascripts/Core/computeSunPosition.js +116 -0
- data/app/assets/javascripts/Core/createGuid.js +25 -0
- data/app/assets/javascripts/Core/defaultValue.js +22 -0
- data/app/assets/javascripts/Core/destroyObject.js +61 -0
- data/app/assets/javascripts/Core/freezeObject.js +20 -0
- data/app/assets/javascripts/Core/getImagePixels.js +46 -0
- data/app/assets/javascripts/Core/isLeapYear.js +30 -0
- data/app/assets/javascripts/Core/jsonp.js +116 -0
- data/app/assets/javascripts/Core/loadArrayBuffer.js +76 -0
- data/app/assets/javascripts/Core/loadImage.js +85 -0
- data/app/assets/javascripts/Core/loadJson.js +54 -0
- data/app/assets/javascripts/Core/loadText.js +78 -0
- data/app/assets/javascripts/Core/loadXML.js +76 -0
- data/app/assets/javascripts/Core/package.json +6 -0
- data/app/assets/javascripts/Core/pointInsideTriangle2D.js +41 -0
- data/app/assets/javascripts/Core/requestAnimationFrame.js +61 -0
- data/app/assets/javascripts/Core/throttleRequestByServer.js +74 -0
- data/app/assets/javascripts/Core/writeTextToCanvas.js +92 -0
- data/app/assets/javascripts/DynamicScene/CompositeDynamicObjectCollection.js +254 -0
- data/app/assets/javascripts/DynamicScene/CzmlBoolean.js +57 -0
- data/app/assets/javascripts/DynamicScene/CzmlCartesian2.js +96 -0
- data/app/assets/javascripts/DynamicScene/CzmlCartesian3.js +99 -0
- data/app/assets/javascripts/DynamicScene/CzmlCartographic.js +125 -0
- data/app/assets/javascripts/DynamicScene/CzmlColor.js +127 -0
- data/app/assets/javascripts/DynamicScene/CzmlDefaults.js +135 -0
- data/app/assets/javascripts/DynamicScene/CzmlHorizontalOrigin.js +59 -0
- data/app/assets/javascripts/DynamicScene/CzmlImage.js +61 -0
- data/app/assets/javascripts/DynamicScene/CzmlLabelStyle.js +59 -0
- data/app/assets/javascripts/DynamicScene/CzmlNumber.js +82 -0
- data/app/assets/javascripts/DynamicScene/CzmlString.js +56 -0
- data/app/assets/javascripts/DynamicScene/CzmlUnitCartesian3.js +99 -0
- data/app/assets/javascripts/DynamicScene/CzmlUnitQuaternion.js +172 -0
- data/app/assets/javascripts/DynamicScene/CzmlUnitSpherical.js +98 -0
- data/app/assets/javascripts/DynamicScene/CzmlVerticalOrigin.js +59 -0
- data/app/assets/javascripts/DynamicScene/DynamicBillboard.js +245 -0
- data/app/assets/javascripts/DynamicScene/DynamicBillboardVisualizer.js +347 -0
- data/app/assets/javascripts/DynamicScene/DynamicColorMaterial.js +78 -0
- data/app/assets/javascripts/DynamicScene/DynamicCone.js +291 -0
- data/app/assets/javascripts/DynamicScene/DynamicConeVisualizer.js +350 -0
- data/app/assets/javascripts/DynamicScene/DynamicConeVisualizerUsingCustomSensor.js +389 -0
- data/app/assets/javascripts/DynamicScene/DynamicDirectionsProperty.js +163 -0
- data/app/assets/javascripts/DynamicScene/DynamicEllipsoid.js +158 -0
- data/app/assets/javascripts/DynamicScene/DynamicEllipsoidVisualizer.js +277 -0
- data/app/assets/javascripts/DynamicScene/DynamicImageMaterial.js +136 -0
- data/app/assets/javascripts/DynamicScene/DynamicLabel.js +286 -0
- data/app/assets/javascripts/DynamicScene/DynamicLabelVisualizer.js +341 -0
- data/app/assets/javascripts/DynamicScene/DynamicMaterialProperty.js +125 -0
- data/app/assets/javascripts/DynamicScene/DynamicObject.js +364 -0
- data/app/assets/javascripts/DynamicScene/DynamicObjectCollection.js +137 -0
- data/app/assets/javascripts/DynamicScene/DynamicObjectView.js +299 -0
- data/app/assets/javascripts/DynamicScene/DynamicPath.js +214 -0
- data/app/assets/javascripts/DynamicScene/DynamicPathVisualizer.js +402 -0
- data/app/assets/javascripts/DynamicScene/DynamicPoint.js +184 -0
- data/app/assets/javascripts/DynamicScene/DynamicPointVisualizer.js +323 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolygon.js +138 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolygonVisualizer.js +251 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolyline.js +183 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolylineVisualizer.js +268 -0
- data/app/assets/javascripts/DynamicScene/DynamicPositionProperty.js +525 -0
- data/app/assets/javascripts/DynamicScene/DynamicProperty.js +352 -0
- data/app/assets/javascripts/DynamicScene/DynamicPyramid.js +204 -0
- data/app/assets/javascripts/DynamicScene/DynamicPyramidVisualizer.js +302 -0
- data/app/assets/javascripts/DynamicScene/DynamicScene.profile.js +8 -0
- data/app/assets/javascripts/DynamicScene/DynamicVertexPositionsProperty.js +199 -0
- data/app/assets/javascripts/DynamicScene/ReferenceProperty.js +155 -0
- data/app/assets/javascripts/DynamicScene/VisualizerCollection.js +181 -0
- data/app/assets/javascripts/DynamicScene/package.json +6 -0
- data/app/assets/javascripts/DynamicScene/processCzml.js +77 -0
- data/app/assets/javascripts/Renderer/BlendEquation.js +52 -0
- data/app/assets/javascripts/Renderer/BlendFunction.js +158 -0
- data/app/assets/javascripts/Renderer/BlendingState.js +64 -0
- data/app/assets/javascripts/Renderer/Buffer.js +141 -0
- data/app/assets/javascripts/Renderer/BufferUsage.js +48 -0
- data/app/assets/javascripts/Renderer/ClearCommand.js +40 -0
- data/app/assets/javascripts/Renderer/CommandLists.js +42 -0
- data/app/assets/javascripts/Renderer/Context.js +2805 -0
- data/app/assets/javascripts/Renderer/CubeMap.js +358 -0
- data/app/assets/javascripts/Renderer/CubeMapFace.js +202 -0
- data/app/assets/javascripts/Renderer/CullFace.js +50 -0
- data/app/assets/javascripts/Renderer/DepthFunction.js +95 -0
- data/app/assets/javascripts/Renderer/DrawCommand.js +96 -0
- data/app/assets/javascripts/Renderer/Framebuffer.js +435 -0
- data/app/assets/javascripts/Renderer/MipmapHint.js +50 -0
- data/app/assets/javascripts/Renderer/PickFramebuffer.js +178 -0
- data/app/assets/javascripts/Renderer/PixelDatatype.js +86 -0
- data/app/assets/javascripts/Renderer/PixelFormat.js +113 -0
- data/app/assets/javascripts/Renderer/Renderbuffer.js +102 -0
- data/app/assets/javascripts/Renderer/RenderbufferFormat.js +77 -0
- data/app/assets/javascripts/Renderer/Renderer.profile.js +8 -0
- data/app/assets/javascripts/Renderer/ShaderCache.js +121 -0
- data/app/assets/javascripts/Renderer/ShaderProgram.js +2402 -0
- data/app/assets/javascripts/Renderer/StencilFunction.js +95 -0
- data/app/assets/javascripts/Renderer/StencilOperation.js +95 -0
- data/app/assets/javascripts/Renderer/Texture.js +395 -0
- data/app/assets/javascripts/Renderer/TextureAtlas.js +472 -0
- data/app/assets/javascripts/Renderer/TextureAtlasBuilder.js +133 -0
- data/app/assets/javascripts/Renderer/TextureMagnificationFilter.js +41 -0
- data/app/assets/javascripts/Renderer/TextureMinificationFilter.js +77 -0
- data/app/assets/javascripts/Renderer/TextureWrap.js +50 -0
- data/app/assets/javascripts/Renderer/UniformDatatype.js +218 -0
- data/app/assets/javascripts/Renderer/UniformState.js +799 -0
- data/app/assets/javascripts/Renderer/VertexArray.js +365 -0
- data/app/assets/javascripts/Renderer/VertexArrayFacade.js +574 -0
- data/app/assets/javascripts/Renderer/VertexLayout.js +49 -0
- data/app/assets/javascripts/Renderer/loadCubeMap.js +92 -0
- data/app/assets/javascripts/Renderer/package.json +6 -0
- data/app/assets/javascripts/Scene/AnimationCollection.js +249 -0
- data/app/assets/javascripts/Scene/ArcGisMapServerImageryProvider.js +384 -0
- data/app/assets/javascripts/Scene/Billboard.js +680 -0
- data/app/assets/javascripts/Scene/BillboardCollection.js +1209 -0
- data/app/assets/javascripts/Scene/BingMapsImageryProvider.js +460 -0
- data/app/assets/javascripts/Scene/BingMapsStyle.js +55 -0
- data/app/assets/javascripts/Scene/Camera.js +358 -0
- data/app/assets/javascripts/Scene/CameraColumbusViewMode.js +30 -0
- data/app/assets/javascripts/Scene/CameraController.js +1258 -0
- data/app/assets/javascripts/Scene/CameraEventAggregator.js +270 -0
- data/app/assets/javascripts/Scene/CameraEventType.js +53 -0
- data/app/assets/javascripts/Scene/CameraFlightPath.js +495 -0
- data/app/assets/javascripts/Scene/CentralBody.js +817 -0
- data/app/assets/javascripts/Scene/CentralBodySurface.js +1120 -0
- data/app/assets/javascripts/Scene/CentralBodySurfaceShaderSet.js +107 -0
- data/app/assets/javascripts/Scene/ComplexConicSensorVolume.js +511 -0
- data/app/assets/javascripts/Scene/CompositePrimitive.js +454 -0
- data/app/assets/javascripts/Scene/CullingVolume.js +59 -0
- data/app/assets/javascripts/Scene/CustomSensorVolume.js +440 -0
- data/app/assets/javascripts/Scene/DiscardMissingTileImagePolicy.js +134 -0
- data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +412 -0
- data/app/assets/javascripts/Scene/EllipsoidTerrainProvider.js +182 -0
- data/app/assets/javascripts/Scene/FrameState.js +86 -0
- data/app/assets/javascripts/Scene/FrustumCommands.js +32 -0
- data/app/assets/javascripts/Scene/GeographicTilingScheme.js +265 -0
- data/app/assets/javascripts/Scene/HorizontalOrigin.js +39 -0
- data/app/assets/javascripts/Scene/Imagery.js +85 -0
- data/app/assets/javascripts/Scene/ImageryLayer.js +876 -0
- data/app/assets/javascripts/Scene/ImageryLayerCollection.js +403 -0
- data/app/assets/javascripts/Scene/ImageryProvider.js +185 -0
- data/app/assets/javascripts/Scene/ImageryProviderError.js +149 -0
- data/app/assets/javascripts/Scene/ImageryState.js +20 -0
- data/app/assets/javascripts/Scene/Label.js +706 -0
- data/app/assets/javascripts/Scene/LabelCollection.js +697 -0
- data/app/assets/javascripts/Scene/LabelStyle.js +39 -0
- data/app/assets/javascripts/Scene/Material.js +1177 -0
- data/app/assets/javascripts/Scene/NeverTileDiscardPolicy.js +38 -0
- data/app/assets/javascripts/Scene/OpenStreetMapImageryProvider.js +282 -0
- data/app/assets/javascripts/Scene/OrthographicFrustum.js +345 -0
- data/app/assets/javascripts/Scene/PerformanceDisplay.js +183 -0
- data/app/assets/javascripts/Scene/PerspectiveFrustum.js +239 -0
- data/app/assets/javascripts/Scene/PerspectiveOffCenterFrustum.js +394 -0
- data/app/assets/javascripts/Scene/Polygon.js +886 -0
- data/app/assets/javascripts/Scene/Polyline.js +441 -0
- data/app/assets/javascripts/Scene/PolylineCollection.js +1532 -0
- data/app/assets/javascripts/Scene/Projections.js +93 -0
- data/app/assets/javascripts/Scene/RectangularPyramidSensorVolume.js +224 -0
- data/app/assets/javascripts/Scene/Scene.js +632 -0
- data/app/assets/javascripts/Scene/Scene.profile.js +8 -0
- data/app/assets/javascripts/Scene/SceneMode.js +51 -0
- data/app/assets/javascripts/Scene/SceneTransitioner.js +776 -0
- data/app/assets/javascripts/Scene/ScreenSpaceCameraController.js +1063 -0
- data/app/assets/javascripts/Scene/SensorVolumeCollection.js +192 -0
- data/app/assets/javascripts/Scene/SingleTileImageryProvider.js +295 -0
- data/app/assets/javascripts/Scene/SkyAtmosphere.js +239 -0
- data/app/assets/javascripts/Scene/SkyBox.js +231 -0
- data/app/assets/javascripts/Scene/TerrainProvider.js +229 -0
- data/app/assets/javascripts/Scene/TexturePool.js +154 -0
- data/app/assets/javascripts/Scene/Tile.js +322 -0
- data/app/assets/javascripts/Scene/TileDiscardPolicy.js +42 -0
- data/app/assets/javascripts/Scene/TileImagery.js +36 -0
- data/app/assets/javascripts/Scene/TileLoadQueue.js +123 -0
- data/app/assets/javascripts/Scene/TileMapServiceImageryProvider.js +337 -0
- data/app/assets/javascripts/Scene/TileReplacementQueue.js +139 -0
- data/app/assets/javascripts/Scene/TileState.js +19 -0
- data/app/assets/javascripts/Scene/TilingScheme.js +213 -0
- data/app/assets/javascripts/Scene/VerticalOrigin.js +39 -0
- data/app/assets/javascripts/Scene/ViewportQuad.js +256 -0
- data/app/assets/javascripts/Scene/WebMapServiceImageryProvider.js +374 -0
- data/app/assets/javascripts/Scene/WebMercatorTilingScheme.js +291 -0
- data/app/assets/javascripts/Scene/package.json +6 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionFS.glsl +30 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionFS.js +31 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionVS.glsl +68 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionVS.js +54 -0
- data/app/assets/javascripts/Shaders/BuiltinFunctions.glsl +927 -0
- data/app/assets/javascripts/Shaders/BuiltinFunctions.js +322 -0
- data/app/assets/javascripts/Shaders/CentralBodyFS.glsl +106 -0
- data/app/assets/javascripts/Shaders/CentralBodyFS.js +82 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSDepth.glsl +20 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSDepth.js +22 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSPole.glsl +29 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSPole.js +28 -0
- data/app/assets/javascripts/Shaders/CentralBodyVS.glsl +88 -0
- data/app/assets/javascripts/Shaders/CentralBodyVS.js +69 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSDepth.glsl +9 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSDepth.js +13 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSPole.glsl +12 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSPole.js +15 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.glsl +448 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.js +361 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.glsl +19 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.js +20 -0
- data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.glsl +886 -0
- data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.js +586 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.glsl +126 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.js +95 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.glsl +14 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.js +18 -0
- data/app/assets/javascripts/Shaders/EllipsoidFS.glsl +40 -0
- data/app/assets/javascripts/Shaders/EllipsoidFS.js +38 -0
- data/app/assets/javascripts/Shaders/EllipsoidVS.glsl +26 -0
- data/app/assets/javascripts/Shaders/EllipsoidVS.js +16 -0
- data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.glsl +25 -0
- data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.js +23 -0
- data/app/assets/javascripts/Shaders/Materials/BlobMaterial.glsl +18 -0
- data/app/assets/javascripts/Shaders/Materials/BlobMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/BrickMaterial.glsl +42 -0
- data/app/assets/javascripts/Shaders/Materials/BrickMaterial.js +36 -0
- data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.glsl +29 -0
- data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.js +27 -0
- data/app/assets/javascripts/Shaders/Materials/CementMaterial.glsl +19 -0
- data/app/assets/javascripts/Shaders/Materials/CementMaterial.js +20 -0
- data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.glsl +38 -0
- data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.js +32 -0
- data/app/assets/javascripts/Shaders/Materials/DotMaterial.glsl +17 -0
- data/app/assets/javascripts/Shaders/Materials/DotMaterial.js +18 -0
- data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.glsl +23 -0
- data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.js +24 -0
- data/app/assets/javascripts/Shaders/Materials/FacetMaterial.glsl +18 -0
- data/app/assets/javascripts/Shaders/Materials/FacetMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.glsl +12 -0
- data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.js +15 -0
- data/app/assets/javascripts/Shaders/Materials/GrassMaterial.glsl +28 -0
- data/app/assets/javascripts/Shaders/Materials/GrassMaterial.js +26 -0
- data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.glsl +19 -0
- data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.js +21 -0
- data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.glsl +13 -0
- data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.js +16 -0
- data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.glsl +14 -0
- data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.js +17 -0
- data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.glsl +18 -0
- data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/StripeMaterial.glsl +29 -0
- data/app/assets/javascripts/Shaders/Materials/StripeMaterial.js +26 -0
- data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.glsl +17 -0
- data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/Water.glsl +91 -0
- data/app/assets/javascripts/Shaders/Materials/Water.js +60 -0
- data/app/assets/javascripts/Shaders/Materials/WoodMaterial.glsl +36 -0
- data/app/assets/javascripts/Shaders/Materials/WoodMaterial.js +31 -0
- data/app/assets/javascripts/Shaders/Noise.glsl +453 -0
- data/app/assets/javascripts/Shaders/Noise.js +242 -0
- data/app/assets/javascripts/Shaders/PolygonFS.glsl +27 -0
- data/app/assets/javascripts/Shaders/PolygonFS.js +23 -0
- data/app/assets/javascripts/Shaders/PolygonFSPick.glsl +6 -0
- data/app/assets/javascripts/Shaders/PolygonFSPick.js +11 -0
- data/app/assets/javascripts/Shaders/PolygonVS.glsl +38 -0
- data/app/assets/javascripts/Shaders/PolygonVS.js +39 -0
- data/app/assets/javascripts/Shaders/PolygonVSPick.glsl +30 -0
- data/app/assets/javascripts/Shaders/PolygonVSPick.js +32 -0
- data/app/assets/javascripts/Shaders/PolylineFS.glsl +6 -0
- data/app/assets/javascripts/Shaders/PolylineFS.js +11 -0
- data/app/assets/javascripts/Shaders/PolylineVS.glsl +34 -0
- data/app/assets/javascripts/Shaders/PolylineVS.js +35 -0
- data/app/assets/javascripts/Shaders/Ray.glsl +532 -0
- data/app/assets/javascripts/Shaders/Ray.js +357 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.glsl +26 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.js +22 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.glsl +11 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.js +14 -0
- data/app/assets/javascripts/Shaders/SensorVolume.glsl +43 -0
- data/app/assets/javascripts/Shaders/SensorVolume.js +31 -0
- data/app/assets/javascripts/Shaders/Shaders.profile.js +8 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereFS.glsl +70 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereFS.js +62 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereVS.glsl +131 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereVS.js +115 -0
- data/app/assets/javascripts/Shaders/SkyBoxFS.glsl +10 -0
- data/app/assets/javascripts/Shaders/SkyBoxFS.js +14 -0
- data/app/assets/javascripts/Shaders/SkyBoxVS.glsl +10 -0
- data/app/assets/javascripts/Shaders/SkyBoxVS.js +14 -0
- data/app/assets/javascripts/Shaders/ViewportQuadFS.glsl +16 -0
- data/app/assets/javascripts/Shaders/ViewportQuadFS.js +17 -0
- data/app/assets/javascripts/Shaders/ViewportQuadVS.glsl +10 -0
- data/app/assets/javascripts/Shaders/ViewportQuadVS.js +14 -0
- data/app/assets/javascripts/Shaders/package.json +6 -0
- data/app/assets/javascripts/ThirdParty/ThirdParty.profile.js +8 -0
- data/app/assets/javascripts/ThirdParty/Tween.js +678 -0
- data/app/assets/javascripts/ThirdParty/Uri.js +277 -0
- data/app/assets/javascripts/ThirdParty/measureText.js +197 -0
- data/app/assets/javascripts/ThirdParty/package.json +6 -0
- data/app/assets/javascripts/ThirdParty/sprintf.js +319 -0
- data/app/assets/javascripts/ThirdParty/when.js +748 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.css +175 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.html +52 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.js +1237 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.html +4 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.js +349 -0
- data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.css +1 -0
- data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.js +47 -0
- data/app/assets/javascripts/Widgets/Dojo/checkForChromeFrame.js +71 -0
- data/app/assets/javascripts/Widgets/Images/Bing_Logo_51x19_White.png +0 -0
- data/app/assets/javascripts/Widgets/Images/Cesium_Logo_overlay.png +0 -0
- data/app/assets/javascripts/Widgets/Images/TimelineIcons.png +0 -0
- data/app/assets/javascripts/Widgets/Images/ajax-loader.gif +0 -0
- data/app/assets/javascripts/Widgets/Images/animationBar.png +0 -0
- data/app/assets/javascripts/Widgets/Images/viewControlBar.png +0 -0
- data/app/assets/javascripts/Widgets/Timeline.css +113 -0
- data/app/assets/javascripts/Widgets/Timeline.js +629 -0
- data/app/assets/javascripts/Widgets/TimelineHighlightRange.js +51 -0
- data/app/assets/javascripts/Widgets/TimelineTrack.js +54 -0
- data/app/assets/javascripts/Widgets/Widgets.profile.js +8 -0
- data/app/assets/javascripts/Widgets/package.json +6 -0
- data/app/assets/javascripts/Workers/Workers.profile.js +8 -0
- data/app/assets/javascripts/Workers/cesiumWorkerBootstrapper.js +2015 -0
- data/app/assets/javascripts/Workers/createTaskProcessorWorker.js +55 -0
- data/app/assets/javascripts/Workers/createVerticesFromExtent.js +24 -0
- data/app/assets/javascripts/Workers/package.json +6 -0
- data/app/assets/javascripts/copyrightHeader.js +22 -0
- data/app/assets/javascripts/main.js +10 -0
- data/app/assets/stylesheets/cesium.css +4 -0
- data/app/controllers/cesium_controller.rb +4 -0
- data/app/helpers/cesium_helper.rb +2 -0
- data/app/views/cesium/index.html.erb +3 -0
- data/config/routes.rb +3 -0
- data/lib/cesium.rb +4 -0
- data/lib/cesium/engine.rb +4 -0
- data/lib/cesium/version.rb +3 -0
- data/lib/tasks/cesium_tasks.rake +4 -0
- data/test/cesium_test.rb +7 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/adapters/jquery-adapter.js.coffee +4 -0
- data/test/dummy/app/assets/javascripts/app.js.coffee +11 -0
- data/test/dummy/app/assets/javascripts/application.js.coffee +73 -0
- data/test/dummy/app/assets/stylesheets/application.css +12 -0
- data/test/dummy/app/controllers/application_controller.rb +4 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +21 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/requirejs.yml +10 -0
- data/test/dummy/config/routes.rb +3 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/functional/cesium_controller_test.rb +9 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/test_helper.rb +15 -0
- data/test/unit/helpers/cesium_helper_test.rb +4 -0
- metadata +641 -0
@@ -0,0 +1,1120 @@
|
|
1
|
+
/*global define*/
|
2
|
+
define([
|
3
|
+
'../Core/defaultValue',
|
4
|
+
'../Core/destroyObject',
|
5
|
+
'../Core/BoundingSphere',
|
6
|
+
'../Core/BoundingRectangle',
|
7
|
+
'../Core/Cartesian2',
|
8
|
+
'../Core/Cartesian3',
|
9
|
+
'../Core/Cartesian4',
|
10
|
+
'../Core/CubeMapEllipsoidTessellator',
|
11
|
+
'../Core/DeveloperError',
|
12
|
+
'../Core/Ellipsoid',
|
13
|
+
'../Core/EllipsoidalOccluder',
|
14
|
+
'../Core/Intersect',
|
15
|
+
'../Core/Matrix4',
|
16
|
+
'../Core/MeshFilters',
|
17
|
+
'../Core/PrimitiveType',
|
18
|
+
'../Core/Queue',
|
19
|
+
'../Core/WebMercatorProjection',
|
20
|
+
'../Renderer/DrawCommand',
|
21
|
+
'./ImageryLayer',
|
22
|
+
'./ImageryState',
|
23
|
+
'./SceneMode',
|
24
|
+
'./TerrainProvider',
|
25
|
+
'./TileLoadQueue',
|
26
|
+
'./TileReplacementQueue',
|
27
|
+
'./TileState'
|
28
|
+
], function(
|
29
|
+
defaultValue,
|
30
|
+
destroyObject,
|
31
|
+
BoundingSphere,
|
32
|
+
BoundingRectangle,
|
33
|
+
Cartesian2,
|
34
|
+
Cartesian3,
|
35
|
+
Cartesian4,
|
36
|
+
CubeMapEllipsoidTessellator,
|
37
|
+
DeveloperError,
|
38
|
+
Ellipsoid,
|
39
|
+
EllipsoidalOccluder,
|
40
|
+
Intersect,
|
41
|
+
Matrix4,
|
42
|
+
MeshFilters,
|
43
|
+
PrimitiveType,
|
44
|
+
Queue,
|
45
|
+
WebMercatorProjection,
|
46
|
+
DrawCommand,
|
47
|
+
ImageryLayer,
|
48
|
+
ImageryState,
|
49
|
+
SceneMode,
|
50
|
+
TerrainProvider,
|
51
|
+
TileLoadQueue,
|
52
|
+
TileReplacementQueue,
|
53
|
+
TileState) {
|
54
|
+
"use strict";
|
55
|
+
|
56
|
+
/**
|
57
|
+
* Manages and renders the terrain and imagery on the surface of a {@link CentralBody}.
|
58
|
+
* This class should be considered an implementation detail of {@link CentralBody} and not
|
59
|
+
* used directly.
|
60
|
+
*
|
61
|
+
* @alias CentralBodySurface
|
62
|
+
* @constructor
|
63
|
+
* @private
|
64
|
+
*/
|
65
|
+
var CentralBodySurface = function(description) {
|
66
|
+
if (typeof description.terrainProvider === 'undefined') {
|
67
|
+
throw new DeveloperError('description.terrainProvider is required.');
|
68
|
+
}
|
69
|
+
if (typeof description.imageryLayerCollection === 'undefined') {
|
70
|
+
throw new DeveloperError('description.imageryLayerCollection is required.');
|
71
|
+
}
|
72
|
+
|
73
|
+
this._terrainProvider = description.terrainProvider;
|
74
|
+
this._imageryLayerCollection = description.imageryLayerCollection;
|
75
|
+
this._maxScreenSpaceError = defaultValue(description.maxScreenSpaceError, 2);
|
76
|
+
|
77
|
+
this._imageryLayerCollection.layerAdded.addEventListener(CentralBodySurface.prototype._onLayerAdded, this);
|
78
|
+
this._imageryLayerCollection.layerRemoved.addEventListener(CentralBodySurface.prototype._onLayerRemoved, this);
|
79
|
+
this._imageryLayerCollection.layerMoved.addEventListener(CentralBodySurface.prototype._onLayerMoved, this);
|
80
|
+
this._imageryLayerCollection.layerShownOrHidden.addEventListener(CentralBodySurface.prototype._onLayerShownOrHidden, this);
|
81
|
+
|
82
|
+
this._layerOrderChanged = false;
|
83
|
+
|
84
|
+
var terrainTilingScheme = this._terrainProvider.tilingScheme;
|
85
|
+
this._levelZeroTiles = terrainTilingScheme.createLevelZeroTiles();
|
86
|
+
|
87
|
+
this._tilesToRenderByTextureCount = [];
|
88
|
+
this._tileCommands = [];
|
89
|
+
this._tileCommandUniformMaps = [];
|
90
|
+
this._tileTraversalQueue = new Queue();
|
91
|
+
this._tileLoadQueue = new TileLoadQueue();
|
92
|
+
this._tileReplacementQueue = new TileReplacementQueue();
|
93
|
+
|
94
|
+
// The number of milliseconds each frame to allow for processing the tile load queue.
|
95
|
+
// At least one tile will be processed per frame (assuming that any need processing),
|
96
|
+
// even if this value is 0.
|
97
|
+
this._loadQueueTimeSlice = 5;
|
98
|
+
|
99
|
+
var ellipsoid = terrainTilingScheme.getEllipsoid();
|
100
|
+
this._ellipsoidalOccluder = new EllipsoidalOccluder(ellipsoid, Cartesian3.ZERO);
|
101
|
+
|
102
|
+
this._debug = {
|
103
|
+
enableDebugOutput : false,
|
104
|
+
boundingSphereTile : undefined,
|
105
|
+
boundingSphereVA : undefined,
|
106
|
+
|
107
|
+
maxDepth : 0,
|
108
|
+
tilesVisited : 0,
|
109
|
+
tilesCulled : 0,
|
110
|
+
tilesRendered : 0,
|
111
|
+
texturesRendered : 0,
|
112
|
+
tilesWaitingForChildren : 0,
|
113
|
+
|
114
|
+
lastMaxDepth : -1,
|
115
|
+
lastTilesVisited : -1,
|
116
|
+
lastTilesCulled : -1,
|
117
|
+
lastTilesRendered : -1,
|
118
|
+
lastTexturesRendered : -1,
|
119
|
+
lastTilesWaitingForChildren : -1,
|
120
|
+
|
121
|
+
suspendLodUpdate : false
|
122
|
+
};
|
123
|
+
};
|
124
|
+
|
125
|
+
CentralBodySurface.prototype.update = function(context, frameState, colorCommandList, centralBodyUniformMap, shaderSet, renderState, mode, projection) {
|
126
|
+
updateLayers(this);
|
127
|
+
selectTilesForRendering(this, context, frameState);
|
128
|
+
processTileLoadQueue(this, context, frameState);
|
129
|
+
createRenderCommandsForSelectedTiles(this, context, frameState, shaderSet, mode, projection, centralBodyUniformMap, colorCommandList, renderState);
|
130
|
+
debugCreateRenderCommandsForTileBoundingSphere(this, context, frameState, centralBodyUniformMap, shaderSet, renderState, colorCommandList);
|
131
|
+
};
|
132
|
+
|
133
|
+
CentralBodySurface.prototype._onLayerAdded = function(layer, index) {
|
134
|
+
if (typeof this._levelZeroTiles === 'undefined') {
|
135
|
+
return;
|
136
|
+
}
|
137
|
+
|
138
|
+
// create TileImagerys for this layer for all previously loaded tiles
|
139
|
+
if (layer.show) {
|
140
|
+
var tile = this._tileReplacementQueue.head;
|
141
|
+
while (typeof tile !== 'undefined') {
|
142
|
+
if (layer._createTileImagerySkeletons(tile, this._terrainProvider)) {
|
143
|
+
tile.doneLoading = false;
|
144
|
+
}
|
145
|
+
tile = tile.replacementNext;
|
146
|
+
}
|
147
|
+
|
148
|
+
this._layerOrderChanged = true;
|
149
|
+
}
|
150
|
+
};
|
151
|
+
|
152
|
+
CentralBodySurface.prototype._onLayerRemoved = function(layer, index) {
|
153
|
+
if (typeof this._levelZeroTiles === 'undefined') {
|
154
|
+
return;
|
155
|
+
}
|
156
|
+
|
157
|
+
// destroy TileImagerys for this layer for all previously loaded tiles
|
158
|
+
var tile = this._tileReplacementQueue.head;
|
159
|
+
while (typeof tile !== 'undefined') {
|
160
|
+
var tileImageryCollection = tile.imagery;
|
161
|
+
|
162
|
+
var startIndex = -1;
|
163
|
+
var numDestroyed = 0;
|
164
|
+
for ( var i = 0, len = tileImageryCollection.length; i < len; ++i) {
|
165
|
+
var tileImagery = tileImageryCollection[i];
|
166
|
+
var imagery = tileImagery.imagery;
|
167
|
+
if (imagery.imageryLayer === layer) {
|
168
|
+
if (startIndex === -1) {
|
169
|
+
startIndex = i;
|
170
|
+
}
|
171
|
+
|
172
|
+
tileImagery.freeResources();
|
173
|
+
++numDestroyed;
|
174
|
+
} else if (startIndex !== -1) {
|
175
|
+
// iterated past the section of TileImagerys belonging to this layer, no need to continue.
|
176
|
+
break;
|
177
|
+
}
|
178
|
+
}
|
179
|
+
|
180
|
+
if (startIndex !== -1) {
|
181
|
+
tileImageryCollection.splice(startIndex, numDestroyed);
|
182
|
+
}
|
183
|
+
// If the base layer has been removed, mark the tile as non-renderable.
|
184
|
+
if (layer.isBaseLayer()) {
|
185
|
+
tile.renderable = false;
|
186
|
+
}
|
187
|
+
|
188
|
+
tile = tile.replacementNext;
|
189
|
+
}
|
190
|
+
};
|
191
|
+
|
192
|
+
CentralBodySurface.prototype._onLayerMoved = function(layer, newIndex, oldIndex) {
|
193
|
+
if (typeof this._levelZeroTiles === 'undefined') {
|
194
|
+
return;
|
195
|
+
}
|
196
|
+
|
197
|
+
this._layerOrderChanged = true;
|
198
|
+
};
|
199
|
+
|
200
|
+
CentralBodySurface.prototype._onLayerShownOrHidden = function(layer, index, show) {
|
201
|
+
if (typeof this._levelZeroTiles === 'undefined') {
|
202
|
+
return;
|
203
|
+
}
|
204
|
+
|
205
|
+
if (show) {
|
206
|
+
this._onLayerAdded(layer, index);
|
207
|
+
} else {
|
208
|
+
this._onLayerRemoved(layer, index);
|
209
|
+
}
|
210
|
+
};
|
211
|
+
|
212
|
+
/**
|
213
|
+
* Returns true if this object was destroyed; otherwise, false.
|
214
|
+
* <br /><br />
|
215
|
+
* If this object was destroyed, it should not be used; calling any function other than
|
216
|
+
* <code>isDestroyed</code> will result in a {@link DeveloperError} exception.
|
217
|
+
*
|
218
|
+
* @memberof CentralBodySurface
|
219
|
+
*
|
220
|
+
* @return {Boolean} True if this object was destroyed; otherwise, false.
|
221
|
+
*
|
222
|
+
* @see CentralBodySurface#destroy
|
223
|
+
*/
|
224
|
+
CentralBodySurface.prototype.isDestroyed = function() {
|
225
|
+
return false;
|
226
|
+
};
|
227
|
+
|
228
|
+
/**
|
229
|
+
* Destroys the WebGL resources held by this object. Destroying an object allows for deterministic
|
230
|
+
* release of WebGL resources, instead of relying on the garbage collector to destroy this object.
|
231
|
+
* <br /><br />
|
232
|
+
* Once an object is destroyed, it should not be used; calling any function other than
|
233
|
+
* <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,
|
234
|
+
* assign the return value (<code>undefined</code>) to the object as done in the example.
|
235
|
+
*
|
236
|
+
* @memberof CentralBodySurface
|
237
|
+
*
|
238
|
+
* @return {undefined}
|
239
|
+
*
|
240
|
+
* @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
|
241
|
+
*
|
242
|
+
* @see CentralBodySurface#isDestroyed
|
243
|
+
*/
|
244
|
+
CentralBodySurface.prototype.destroy = function() {
|
245
|
+
var levelZeroTiles = this._levelZeroTiles;
|
246
|
+
for (var i = 0; i < levelZeroTiles.length; ++i) {
|
247
|
+
levelZeroTiles[i].freeResources();
|
248
|
+
}
|
249
|
+
|
250
|
+
if (typeof this._terrainProvider.destroy !== 'undefined') {
|
251
|
+
this._terrainProvider.destroy();
|
252
|
+
}
|
253
|
+
|
254
|
+
this._imageryLayerCollection.destroy();
|
255
|
+
|
256
|
+
var debug = this._debug;
|
257
|
+
if (typeof debug !== 'undefined') {
|
258
|
+
if (typeof debug.boundingSphereVA !== 'undefined') {
|
259
|
+
debug.boundingSphereVA.destroy();
|
260
|
+
}
|
261
|
+
}
|
262
|
+
|
263
|
+
return destroyObject(this);
|
264
|
+
};
|
265
|
+
|
266
|
+
function sortTileImageryByLayerIndex(a, b) {
|
267
|
+
return a.imagery.imageryLayer._layerIndex - b.imagery.imageryLayer._layerIndex;
|
268
|
+
}
|
269
|
+
|
270
|
+
function updateLayers(surface) {
|
271
|
+
surface._imageryLayerCollection._update();
|
272
|
+
|
273
|
+
if (surface._layerOrderChanged) {
|
274
|
+
surface._layerOrderChanged = false;
|
275
|
+
|
276
|
+
// Sort the TileImagery instances in each tile by the layer index.
|
277
|
+
var tile = surface._tileReplacementQueue.head;
|
278
|
+
while (typeof tile !== 'undefined') {
|
279
|
+
tile.imagery.sort(sortTileImageryByLayerIndex);
|
280
|
+
tile = tile.replacementNext;
|
281
|
+
}
|
282
|
+
}
|
283
|
+
}
|
284
|
+
|
285
|
+
function selectTilesForRendering(surface, context, frameState) {
|
286
|
+
var debug = surface._debug;
|
287
|
+
|
288
|
+
if (debug.suspendLodUpdate) {
|
289
|
+
return;
|
290
|
+
}
|
291
|
+
|
292
|
+
var i, len;
|
293
|
+
|
294
|
+
// Clear the render list.
|
295
|
+
var tilesToRenderByTextureCount = surface._tilesToRenderByTextureCount;
|
296
|
+
for (i = 0, len = tilesToRenderByTextureCount.length; i < len; ++i) {
|
297
|
+
var tiles = tilesToRenderByTextureCount[i];
|
298
|
+
if (typeof tiles !== 'undefined') {
|
299
|
+
tiles.length = 0;
|
300
|
+
}
|
301
|
+
}
|
302
|
+
|
303
|
+
// We can't render anything before the level zero tiles exist.
|
304
|
+
if (typeof surface._levelZeroTiles === 'undefined') {
|
305
|
+
return;
|
306
|
+
}
|
307
|
+
|
308
|
+
var traversalQueue = surface._tileTraversalQueue;
|
309
|
+
traversalQueue.clear();
|
310
|
+
|
311
|
+
debug.maxDepth = 0;
|
312
|
+
debug.tilesVisited = 0;
|
313
|
+
debug.tilesCulled = 0;
|
314
|
+
debug.tilesRendered = 0;
|
315
|
+
debug.texturesRendered = 0;
|
316
|
+
debug.tilesWaitingForChildren = 0;
|
317
|
+
|
318
|
+
surface._tileLoadQueue.markInsertionPoint();
|
319
|
+
surface._tileReplacementQueue.markStartOfRenderFrame();
|
320
|
+
|
321
|
+
var cameraPosition = frameState.camera.getPositionWC();
|
322
|
+
|
323
|
+
var ellipsoid = surface._terrainProvider.tilingScheme.getEllipsoid();
|
324
|
+
var cameraPositionCartographic = ellipsoid.cartesianToCartographic(cameraPosition);
|
325
|
+
|
326
|
+
surface._ellipsoidalOccluder.setCameraPosition(cameraPosition);
|
327
|
+
|
328
|
+
var tile;
|
329
|
+
|
330
|
+
// Enqueue the root tiles that are renderable and visible.
|
331
|
+
var levelZeroTiles = surface._levelZeroTiles;
|
332
|
+
for (i = 0, len = levelZeroTiles.length; i < len; ++i) {
|
333
|
+
tile = levelZeroTiles[i];
|
334
|
+
if (!tile.doneLoading) {
|
335
|
+
queueTileLoad(surface, tile);
|
336
|
+
}
|
337
|
+
if (tile.renderable && isTileVisible(surface, frameState, tile)) {
|
338
|
+
traversalQueue.enqueue(tile);
|
339
|
+
} else {
|
340
|
+
++debug.tilesCulled;
|
341
|
+
}
|
342
|
+
}
|
343
|
+
|
344
|
+
// Traverse the tiles in breadth-first order.
|
345
|
+
// This ordering allows us to load bigger, lower-detail tiles before smaller, higher-detail ones.
|
346
|
+
// This maximizes the average detail across the scene and results in fewer sharp transitions
|
347
|
+
// between very different LODs.
|
348
|
+
while (typeof (tile = traversalQueue.dequeue()) !== 'undefined') {
|
349
|
+
++debug.tilesVisited;
|
350
|
+
|
351
|
+
surface._tileReplacementQueue.markTileRendered(tile);
|
352
|
+
|
353
|
+
if (tile.level > debug.maxDepth) {
|
354
|
+
debug.maxDepth = tile.level;
|
355
|
+
}
|
356
|
+
|
357
|
+
// There are a few different algorithms we could use here.
|
358
|
+
// This one doesn't load children unless we refine to them.
|
359
|
+
// We may want to revisit this in the future.
|
360
|
+
|
361
|
+
if (screenSpaceError(surface, context, frameState, cameraPosition, cameraPositionCartographic, tile) < surface._maxScreenSpaceError) {
|
362
|
+
// This tile meets SSE requirements, so render it.
|
363
|
+
addTileToRenderList(surface, tile);
|
364
|
+
} else if (queueChildrenLoadAndDetermineIfChildrenAreAllRenderable(surface, frameState, tile)) {
|
365
|
+
// SSE is not good enough and children are loaded, so refine.
|
366
|
+
var children = tile.children;
|
367
|
+
// PERFORMANCE_IDEA: traverse children front-to-back so we can avoid sorting by distance later.
|
368
|
+
for (i = 0, len = children.length; i < len; ++i) {
|
369
|
+
if (isTileVisible(surface, frameState, children[i])) {
|
370
|
+
traversalQueue.enqueue(children[i]);
|
371
|
+
} else {
|
372
|
+
++debug.tilesCulled;
|
373
|
+
}
|
374
|
+
}
|
375
|
+
} else {
|
376
|
+
++debug.tilesWaitingForChildren;
|
377
|
+
// SSE is not good enough but not all children are loaded, so render this tile anyway.
|
378
|
+
addTileToRenderList(surface, tile);
|
379
|
+
}
|
380
|
+
}
|
381
|
+
|
382
|
+
if (debug.enableDebugOutput) {
|
383
|
+
if (debug.tilesVisited !== debug.lastTilesVisited ||
|
384
|
+
debug.tilesRendered !== debug.lastTilesRendered ||
|
385
|
+
debug.texturesRendered !== debug.lastTexturesRendered ||
|
386
|
+
debug.tilesCulled !== debug.lastTilesCulled ||
|
387
|
+
debug.maxDepth !== debug.lastMaxDepth ||
|
388
|
+
debug.tilesWaitingForChildren !== debug.lastTilesWaitingForChildren) {
|
389
|
+
|
390
|
+
/*global console*/
|
391
|
+
console.log('Visited ' + debug.tilesVisited + ', Rendered: ' + debug.tilesRendered + ', Textures: ' + debug.texturesRendered + ', Culled: ' + debug.tilesCulled + ', Max Depth: ' + debug.maxDepth + ', Waiting for children: ' + debug.tilesWaitingForChildren);
|
392
|
+
|
393
|
+
debug.lastTilesVisited = debug.tilesVisited;
|
394
|
+
debug.lastTilesRendered = debug.tilesRendered;
|
395
|
+
debug.lastTexturesRendered = debug.texturesRendered;
|
396
|
+
debug.lastTilesCulled = debug.tilesCulled;
|
397
|
+
debug.lastMaxDepth = debug.maxDepth;
|
398
|
+
debug.lastTilesWaitingForChildren = debug.tilesWaitingForChildren;
|
399
|
+
}
|
400
|
+
}
|
401
|
+
}
|
402
|
+
|
403
|
+
function screenSpaceError(surface, context, frameState, cameraPosition, cameraPositionCartographic, tile) {
|
404
|
+
if (frameState.mode === SceneMode.SCENE2D) {
|
405
|
+
return screenSpaceError2D(surface, context, frameState, cameraPosition, cameraPositionCartographic, tile);
|
406
|
+
}
|
407
|
+
|
408
|
+
var extent = tile.extent;
|
409
|
+
|
410
|
+
var latitudeFactor = 1.0;
|
411
|
+
|
412
|
+
// Adjust by latitude in 3D only.
|
413
|
+
if (frameState.mode === SceneMode.SCENE3D) {
|
414
|
+
var latitudeClosestToEquator = 0.0;
|
415
|
+
if (extent.south > 0.0) {
|
416
|
+
latitudeClosestToEquator = extent.south;
|
417
|
+
} else if (extent.north < 0.0) {
|
418
|
+
latitudeClosestToEquator = extent.north;
|
419
|
+
}
|
420
|
+
|
421
|
+
latitudeFactor = Math.cos(latitudeClosestToEquator);
|
422
|
+
}
|
423
|
+
|
424
|
+
var maxGeometricError = latitudeFactor * surface._terrainProvider.getLevelMaximumGeometricError(tile.level);
|
425
|
+
|
426
|
+
|
427
|
+
var distance = Math.sqrt(distanceSquaredToTile(frameState, cameraPosition, cameraPositionCartographic, tile));
|
428
|
+
tile.distance = distance;
|
429
|
+
|
430
|
+
var canvas = context.getCanvas();
|
431
|
+
var height = canvas.clientHeight;
|
432
|
+
|
433
|
+
var camera = frameState.camera;
|
434
|
+
var frustum = camera.frustum;
|
435
|
+
var fovy = frustum.fovy;
|
436
|
+
|
437
|
+
// PERFORMANCE_IDEA: factor out stuff that's constant across tiles.
|
438
|
+
return (maxGeometricError * height) / (2 * distance * Math.tan(0.5 * fovy));
|
439
|
+
}
|
440
|
+
|
441
|
+
function screenSpaceError2D(surface, context, frameState, cameraPosition, cameraPositionCartographic, tile) {
|
442
|
+
var camera = frameState.camera;
|
443
|
+
var frustum = camera.frustum;
|
444
|
+
var canvas = context.getCanvas();
|
445
|
+
var width = canvas.clientWidth;
|
446
|
+
var height = canvas.clientHeight;
|
447
|
+
|
448
|
+
var maxGeometricError = surface._terrainProvider.getLevelMaximumGeometricError(tile.level);
|
449
|
+
var pixelSize = Math.max(frustum.top - frustum.bottom, frustum.right - frustum.left) / Math.max(width, height);
|
450
|
+
return maxGeometricError / pixelSize;
|
451
|
+
}
|
452
|
+
|
453
|
+
function addTileToRenderList(surface, tile) {
|
454
|
+
var readyTextureCount = 0;
|
455
|
+
var tileImageryCollection = tile.imagery;
|
456
|
+
for ( var i = 0, len = tileImageryCollection.length; i < len; ++i) {
|
457
|
+
var tileImagery = tileImageryCollection[i];
|
458
|
+
if (tileImagery.imagery.state === ImageryState.READY) {
|
459
|
+
++readyTextureCount;
|
460
|
+
}
|
461
|
+
}
|
462
|
+
|
463
|
+
var tileSet = surface._tilesToRenderByTextureCount[readyTextureCount];
|
464
|
+
if (typeof tileSet === 'undefined') {
|
465
|
+
tileSet = [];
|
466
|
+
surface._tilesToRenderByTextureCount[readyTextureCount] = tileSet;
|
467
|
+
}
|
468
|
+
|
469
|
+
tileSet.push(tile);
|
470
|
+
|
471
|
+
var debug = surface._debug;
|
472
|
+
++debug.tilesRendered;
|
473
|
+
debug.texturesRendered += readyTextureCount;
|
474
|
+
}
|
475
|
+
|
476
|
+
var boundingSphereScratch = new BoundingSphere();
|
477
|
+
|
478
|
+
function isTileVisible(surface, frameState, tile) {
|
479
|
+
var cullingVolume = frameState.cullingVolume;
|
480
|
+
|
481
|
+
var boundingVolume = tile.boundingSphere3D;
|
482
|
+
|
483
|
+
if (frameState.mode !== SceneMode.SCENE3D) {
|
484
|
+
boundingVolume = boundingSphereScratch;
|
485
|
+
BoundingSphere.fromExtent2D(tile.extent, frameState.scene2D.projection, boundingVolume);
|
486
|
+
boundingVolume.center = new Cartesian3(0.0, boundingVolume.center.x, boundingVolume.center.y);
|
487
|
+
|
488
|
+
if (frameState.mode === SceneMode.MORPHING) {
|
489
|
+
boundingVolume = BoundingSphere.union(tile.boundingSphere3D, boundingVolume, boundingVolume);
|
490
|
+
}
|
491
|
+
}
|
492
|
+
|
493
|
+
if (cullingVolume.getVisibility(boundingVolume) === Intersect.OUTSIDE) {
|
494
|
+
return false;
|
495
|
+
}
|
496
|
+
|
497
|
+
if (frameState.mode === SceneMode.SCENE3D) {
|
498
|
+
var occludeePointInScaledSpace = tile.occludeePointInScaledSpace;
|
499
|
+
if (typeof occludeePointInScaledSpace === 'undefined') {
|
500
|
+
return true;
|
501
|
+
}
|
502
|
+
|
503
|
+
return surface._ellipsoidalOccluder.isScaledSpacePointVisible(occludeePointInScaledSpace);
|
504
|
+
}
|
505
|
+
|
506
|
+
return true;
|
507
|
+
}
|
508
|
+
|
509
|
+
var southwestCornerScratch = new Cartesian3(0.0, 0.0, 0.0);
|
510
|
+
var northeastCornerScratch = new Cartesian3(0.0, 0.0, 0.0);
|
511
|
+
var negativeUnitY = Cartesian3.UNIT_Y.negate();
|
512
|
+
var negativeUnitZ = Cartesian3.UNIT_Z.negate();
|
513
|
+
var vectorScratch = new Cartesian3(0.0, 0.0, 0.0);
|
514
|
+
|
515
|
+
function distanceSquaredToTile(frameState, cameraCartesianPosition, cameraCartographicPosition, tile) {
|
516
|
+
var southwestCornerCartesian = tile.southwestCornerCartesian;
|
517
|
+
var northeastCornerCartesian = tile.northeastCornerCartesian;
|
518
|
+
var westNormal = tile.westNormal;
|
519
|
+
var southNormal = tile.southNormal;
|
520
|
+
var eastNormal = tile.eastNormal;
|
521
|
+
var northNormal = tile.northNormal;
|
522
|
+
var maxHeight = tile.maxHeight;
|
523
|
+
|
524
|
+
if (frameState.mode !== SceneMode.SCENE3D) {
|
525
|
+
southwestCornerCartesian = frameState.scene2D.projection.project(tile.extent.getSouthwest(), southwestCornerScratch);
|
526
|
+
southwestCornerCartesian.z = southwestCornerCartesian.y;
|
527
|
+
southwestCornerCartesian.y = southwestCornerCartesian.x;
|
528
|
+
southwestCornerCartesian.x = 0.0;
|
529
|
+
northeastCornerCartesian = frameState.scene2D.projection.project(tile.extent.getNortheast(), northeastCornerScratch);
|
530
|
+
northeastCornerCartesian.z = northeastCornerCartesian.y;
|
531
|
+
northeastCornerCartesian.y = northeastCornerCartesian.x;
|
532
|
+
northeastCornerCartesian.x = 0.0;
|
533
|
+
westNormal = negativeUnitY;
|
534
|
+
eastNormal = Cartesian3.UNIT_Y;
|
535
|
+
southNormal = negativeUnitZ;
|
536
|
+
northNormal = Cartesian3.UNIT_Z;
|
537
|
+
maxHeight = 0.0;
|
538
|
+
}
|
539
|
+
|
540
|
+
var vectorFromSouthwestCorner = cameraCartesianPosition.subtract(southwestCornerCartesian, vectorScratch);
|
541
|
+
var distanceToWestPlane = vectorFromSouthwestCorner.dot(westNormal);
|
542
|
+
var distanceToSouthPlane = vectorFromSouthwestCorner.dot(southNormal);
|
543
|
+
|
544
|
+
var vectorFromNortheastCorner = cameraCartesianPosition.subtract(northeastCornerCartesian, vectorScratch);
|
545
|
+
var distanceToEastPlane = vectorFromNortheastCorner.dot(eastNormal);
|
546
|
+
var distanceToNorthPlane = vectorFromNortheastCorner.dot(northNormal);
|
547
|
+
|
548
|
+
var cameraHeight;
|
549
|
+
if (frameState.mode === SceneMode.SCENE3D) {
|
550
|
+
cameraHeight = cameraCartographicPosition.height;
|
551
|
+
} else {
|
552
|
+
cameraHeight = cameraCartesianPosition.x;
|
553
|
+
}
|
554
|
+
var distanceFromTop = cameraHeight - maxHeight;
|
555
|
+
|
556
|
+
var result = 0.0;
|
557
|
+
|
558
|
+
if (distanceToWestPlane > 0.0) {
|
559
|
+
result += distanceToWestPlane * distanceToWestPlane;
|
560
|
+
} else if (distanceToEastPlane > 0.0) {
|
561
|
+
result += distanceToEastPlane * distanceToEastPlane;
|
562
|
+
}
|
563
|
+
|
564
|
+
if (distanceToSouthPlane > 0.0) {
|
565
|
+
result += distanceToSouthPlane * distanceToSouthPlane;
|
566
|
+
} else if (distanceToNorthPlane > 0.0) {
|
567
|
+
result += distanceToNorthPlane * distanceToNorthPlane;
|
568
|
+
}
|
569
|
+
|
570
|
+
if (distanceFromTop > 0.0) {
|
571
|
+
result += distanceFromTop * distanceFromTop;
|
572
|
+
}
|
573
|
+
|
574
|
+
return result;
|
575
|
+
}
|
576
|
+
|
577
|
+
function queueChildrenLoadAndDetermineIfChildrenAreAllRenderable(surface, frameState, tile) {
|
578
|
+
if (tile.level === surface._terrainProvider.maxLevel) {
|
579
|
+
return false;
|
580
|
+
}
|
581
|
+
|
582
|
+
var allRenderable = true;
|
583
|
+
|
584
|
+
var children = tile.getChildren();
|
585
|
+
for (var i = 0, len = children.length; i < len; ++i) {
|
586
|
+
var child = children[i];
|
587
|
+
surface._tileReplacementQueue.markTileRendered(child);
|
588
|
+
if (!child.doneLoading) {
|
589
|
+
queueTileLoad(surface, child);
|
590
|
+
}
|
591
|
+
if (!child.renderable) {
|
592
|
+
allRenderable = false;
|
593
|
+
}
|
594
|
+
}
|
595
|
+
|
596
|
+
return allRenderable;
|
597
|
+
}
|
598
|
+
|
599
|
+
function queueTileLoad(surface, tile) {
|
600
|
+
surface._tileLoadQueue.insertBeforeInsertionPoint(tile);
|
601
|
+
}
|
602
|
+
|
603
|
+
function processTileLoadQueue(surface, context, frameState) {
|
604
|
+
var tileLoadQueue = surface._tileLoadQueue;
|
605
|
+
var terrainProvider = surface._terrainProvider;
|
606
|
+
|
607
|
+
var tile = tileLoadQueue.head;
|
608
|
+
if (typeof tile === 'undefined') {
|
609
|
+
return;
|
610
|
+
}
|
611
|
+
|
612
|
+
var startTime = Date.now();
|
613
|
+
var timeSlice = surface._loadQueueTimeSlice;
|
614
|
+
var endTime = startTime + timeSlice;
|
615
|
+
|
616
|
+
do {
|
617
|
+
var i, len;
|
618
|
+
|
619
|
+
// Transition terrain states.
|
620
|
+
if (tile.state === TileState.UNLOADED) {
|
621
|
+
tile.state = TileState.TRANSITIONING;
|
622
|
+
terrainProvider.requestTileGeometry(tile);
|
623
|
+
|
624
|
+
// If we've made it past the UNLOADED state, add this tile to the replacement queue
|
625
|
+
// (replacing another tile if necessary), and create skeletons for the imagery.
|
626
|
+
if (tile.state !== TileState.UNLOADED) {
|
627
|
+
surface._tileReplacementQueue.markTileRendered(tile);
|
628
|
+
|
629
|
+
// Arbitrarily limit the number of loaded tiles to 100, or however
|
630
|
+
// many tiles were traversed this frame, whichever is greater.
|
631
|
+
surface._tileReplacementQueue.trimTiles(100);
|
632
|
+
|
633
|
+
var imageryLayerCollection = surface._imageryLayerCollection;
|
634
|
+
for (i = 0, len = imageryLayerCollection.getLength(); i < len; ++i) {
|
635
|
+
var layer = imageryLayerCollection.get(i);
|
636
|
+
if (layer.show) {
|
637
|
+
layer._createTileImagerySkeletons(tile, terrainProvider);
|
638
|
+
}
|
639
|
+
}
|
640
|
+
|
641
|
+
}
|
642
|
+
}
|
643
|
+
|
644
|
+
if (tile.state === TileState.RECEIVED) {
|
645
|
+
tile.state = TileState.TRANSITIONING;
|
646
|
+
terrainProvider.transformGeometry(context, tile);
|
647
|
+
}
|
648
|
+
|
649
|
+
if (tile.state === TileState.TRANSFORMED) {
|
650
|
+
tile.state = TileState.TRANSITIONING;
|
651
|
+
terrainProvider.createResources(context, tile);
|
652
|
+
}
|
653
|
+
// TODO: we should handle failed terrain. But it doesn't matter for now
|
654
|
+
// because EllipsoidTerrainProvider won't fail.
|
655
|
+
|
656
|
+
var doneLoading = tile.state === TileState.READY;
|
657
|
+
|
658
|
+
var didSomeWork = false;
|
659
|
+
|
660
|
+
// Transition imagery states
|
661
|
+
var tileImageryCollection = tile.imagery;
|
662
|
+
for (i = 0, len = tileImageryCollection.length; i < len; ++i) {
|
663
|
+
if (didSomeWork && Date.now() >= endTime) {
|
664
|
+
break;
|
665
|
+
}
|
666
|
+
|
667
|
+
var tileImagery = tileImageryCollection[i];
|
668
|
+
var imagery = tileImagery.imagery;
|
669
|
+
var imageryLayer = imagery.imageryLayer;
|
670
|
+
|
671
|
+
if (imagery.state === ImageryState.PLACEHOLDER) {
|
672
|
+
if (imageryLayer.getImageryProvider().isReady()) {
|
673
|
+
// Remove the placeholder and add the actual skeletons (if any)
|
674
|
+
// at the same position. Then continue the loop at the same index.
|
675
|
+
tileImagery.freeResources();
|
676
|
+
tileImageryCollection.splice(i, 1);
|
677
|
+
imageryLayer._createTileImagerySkeletons(tile, terrainProvider, i);
|
678
|
+
--i;
|
679
|
+
len = tileImageryCollection.length;
|
680
|
+
}
|
681
|
+
didSomeWork = true;
|
682
|
+
}
|
683
|
+
|
684
|
+
if (imagery.state === ImageryState.UNLOADED) {
|
685
|
+
imagery.state = ImageryState.TRANSITIONING;
|
686
|
+
imageryLayer._requestImagery(imagery);
|
687
|
+
didSomeWork = true;
|
688
|
+
}
|
689
|
+
|
690
|
+
if (imagery.state === ImageryState.RECEIVED) {
|
691
|
+
imagery.state = ImageryState.TRANSITIONING;
|
692
|
+
imageryLayer._createTexture(context, imagery);
|
693
|
+
didSomeWork = true;
|
694
|
+
}
|
695
|
+
|
696
|
+
if (imagery.state === ImageryState.TEXTURE_LOADED) {
|
697
|
+
imagery.state = ImageryState.TRANSITIONING;
|
698
|
+
imageryLayer._reprojectTexture(context, imagery);
|
699
|
+
didSomeWork = true;
|
700
|
+
}
|
701
|
+
|
702
|
+
if (imagery.state === ImageryState.FAILED || imagery.state === ImageryState.INVALID) {
|
703
|
+
// re-associate TileImagery with a parent Imagery that is not failed or invalid.
|
704
|
+
var parent = imagery.parent;
|
705
|
+
while (typeof parent !== 'undefined' && (parent.state === ImageryState.FAILED || parent.state === ImageryState.INVALID)) {
|
706
|
+
parent = parent.parent;
|
707
|
+
}
|
708
|
+
|
709
|
+
// If there's no valid parent, remove this TileImagery from the tile.
|
710
|
+
if (typeof parent === 'undefined') {
|
711
|
+
tileImagery.freeResources();
|
712
|
+
tileImageryCollection.splice(i, 1);
|
713
|
+
--i;
|
714
|
+
len = tileImageryCollection.length;
|
715
|
+
continue;
|
716
|
+
}
|
717
|
+
|
718
|
+
// use that parent imagery instead, storing the original imagery
|
719
|
+
// in originalImagery to keep it alive
|
720
|
+
tileImagery.originalImagery = imagery;
|
721
|
+
|
722
|
+
parent.addReference();
|
723
|
+
tileImagery.imagery = parent;
|
724
|
+
imagery = parent;
|
725
|
+
|
726
|
+
didSomeWork = true;
|
727
|
+
}
|
728
|
+
|
729
|
+
var imageryDoneLoading = imagery.state === ImageryState.READY;
|
730
|
+
|
731
|
+
if (imageryDoneLoading && typeof tileImagery.textureTranslationAndScale === 'undefined') {
|
732
|
+
tileImagery.textureTranslationAndScale = imageryLayer._calculateTextureTranslationAndScale(tile, tileImagery);
|
733
|
+
|
734
|
+
didSomeWork = true;
|
735
|
+
}
|
736
|
+
|
737
|
+
doneLoading = doneLoading && imageryDoneLoading;
|
738
|
+
}
|
739
|
+
|
740
|
+
// The tile becomes renderable when the terrain and all imagery data are loaded.
|
741
|
+
if (i === len && doneLoading) {
|
742
|
+
tile.renderable = true;
|
743
|
+
tile.doneLoading = true;
|
744
|
+
tileLoadQueue.remove(tile);
|
745
|
+
}
|
746
|
+
|
747
|
+
tile = tile.loadNext;
|
748
|
+
} while (Date.now() < endTime && typeof tile !== 'undefined');
|
749
|
+
}
|
750
|
+
|
751
|
+
// This is debug code to render the bounding sphere of the tile in
|
752
|
+
// CentralBodySurface._debug.boundingSphereTile.
|
753
|
+
CentralBodySurface.prototype.debugShowBoundingSphereOfTileAt = function(cartographicPick) {
|
754
|
+
// Find the tile in the render list that overlaps this extent
|
755
|
+
var tilesToRenderByTextureCount = this._tilesToRenderByTextureCount;
|
756
|
+
var result;
|
757
|
+
var tile;
|
758
|
+
for (var i = 0; i < tilesToRenderByTextureCount.length && typeof result === 'undefined'; ++i) {
|
759
|
+
var tileSet = tilesToRenderByTextureCount[i];
|
760
|
+
if (typeof tileSet === 'undefined') {
|
761
|
+
continue;
|
762
|
+
}
|
763
|
+
for (var j = 0; j < tileSet.length; ++j) {
|
764
|
+
tile = tileSet[j];
|
765
|
+
if (tile.extent.contains(cartographicPick)) {
|
766
|
+
result = tile;
|
767
|
+
break;
|
768
|
+
}
|
769
|
+
}
|
770
|
+
}
|
771
|
+
|
772
|
+
if (typeof result !== 'undefined') {
|
773
|
+
console.log('x: ' + result.x + ' y: ' + result.y + ' level: ' + result.level);
|
774
|
+
}
|
775
|
+
|
776
|
+
this._debug.boundingSphereTile = result;
|
777
|
+
this._debug.boundingSphereVA = undefined;
|
778
|
+
};
|
779
|
+
|
780
|
+
function debugCreateRenderCommandsForTileBoundingSphere(surface, context, frameState, centralBodyUniformMap, shaderSet, renderState, colorCommandList) {
|
781
|
+
if (typeof surface._debug !== 'undefined' && typeof surface._debug.boundingSphereTile !== 'undefined') {
|
782
|
+
if (!surface._debug.boundingSphereVA) {
|
783
|
+
var radius = surface._debug.boundingSphereTile.boundingSphere3D.radius;
|
784
|
+
var sphere = CubeMapEllipsoidTessellator.compute(new Ellipsoid(radius, radius, radius), 10);
|
785
|
+
MeshFilters.toWireframeInPlace(sphere);
|
786
|
+
surface._debug.boundingSphereVA = context.createVertexArrayFromMesh({
|
787
|
+
mesh : sphere,
|
788
|
+
attributeIndices : MeshFilters.createAttributeIndices(sphere)
|
789
|
+
});
|
790
|
+
}
|
791
|
+
|
792
|
+
var rtc2 = surface._debug.boundingSphereTile.center;
|
793
|
+
|
794
|
+
var uniformMap2 = createTileUniformMap();
|
795
|
+
mergeUniformMap(uniformMap2, centralBodyUniformMap);
|
796
|
+
|
797
|
+
uniformMap2.center3D = rtc2;
|
798
|
+
|
799
|
+
var viewMatrix = frameState.camera.getViewMatrix();
|
800
|
+
|
801
|
+
var centerEye2 = viewMatrix.multiplyByVector(new Cartesian4(rtc2.x, rtc2.y, rtc2.z, 1.0));
|
802
|
+
uniformMap2.modifiedModelView = viewMatrix.setColumn(3, centerEye2, uniformMap2.modifiedModelView);
|
803
|
+
|
804
|
+
uniformMap2.dayTextures[0] = context.getDefaultTexture();
|
805
|
+
uniformMap2.dayTextureTranslationAndScale[0] = new Cartesian4(0.0, 0.0, 1.0, 1.0);
|
806
|
+
uniformMap2.dayTextureTexCoordsExtent[0] = new Cartesian4(0.0, 0.0, 1.0, 1.0);
|
807
|
+
uniformMap2.dayTextureAlpha[0] = 1.0;
|
808
|
+
|
809
|
+
var boundingSphereCommand = new DrawCommand();
|
810
|
+
boundingSphereCommand.shaderProgram = shaderSet.getShaderProgram(context, 1);
|
811
|
+
boundingSphereCommand.renderState = renderState;
|
812
|
+
boundingSphereCommand.primitiveType = PrimitiveType.LINES;
|
813
|
+
boundingSphereCommand.vertexArray = surface._debug.boundingSphereVA;
|
814
|
+
boundingSphereCommand.uniformMap = uniformMap2;
|
815
|
+
|
816
|
+
colorCommandList.push(boundingSphereCommand);
|
817
|
+
}
|
818
|
+
}
|
819
|
+
|
820
|
+
CentralBodySurface.prototype.debugToggleLodUpdate = function(frameState) {
|
821
|
+
this._debug.suspendLodUpdate = !this._debug.suspendLodUpdate;
|
822
|
+
};
|
823
|
+
|
824
|
+
function tileDistanceSortFunction(a, b) {
|
825
|
+
return a.distance - b.distance;
|
826
|
+
}
|
827
|
+
|
828
|
+
function createTileUniformMap() {
|
829
|
+
return {
|
830
|
+
u_center3D : function() {
|
831
|
+
return this.center3D;
|
832
|
+
},
|
833
|
+
u_tileExtent : function() {
|
834
|
+
return this.tileExtent;
|
835
|
+
},
|
836
|
+
u_modifiedModelView : function() {
|
837
|
+
return this.modifiedModelView;
|
838
|
+
},
|
839
|
+
u_dayTextures : function() {
|
840
|
+
return this.dayTextures;
|
841
|
+
},
|
842
|
+
u_dayTextureTranslationAndScale : function() {
|
843
|
+
return this.dayTextureTranslationAndScale;
|
844
|
+
},
|
845
|
+
u_dayTextureTexCoordsExtent : function() {
|
846
|
+
return this.dayTextureTexCoordsExtent;
|
847
|
+
},
|
848
|
+
u_dayTextureAlpha : function() {
|
849
|
+
return this.dayTextureAlpha;
|
850
|
+
},
|
851
|
+
u_dayTextureBrightness : function() {
|
852
|
+
return this.dayTextureBrightness;
|
853
|
+
},
|
854
|
+
u_dayTextureContrast : function() {
|
855
|
+
return this.dayTextureContrast;
|
856
|
+
},
|
857
|
+
u_dayTextureHue : function() {
|
858
|
+
return this.dayTextureHue;
|
859
|
+
},
|
860
|
+
u_dayTextureSaturation : function() {
|
861
|
+
return this.dayTextureSaturation;
|
862
|
+
},
|
863
|
+
u_dayTextureOneOverGamma : function() {
|
864
|
+
return this.dayTextureOneOverGamma;
|
865
|
+
},
|
866
|
+
u_dayIntensity : function() {
|
867
|
+
return this.dayIntensity;
|
868
|
+
},
|
869
|
+
u_southAndNorthLatitude : function() {
|
870
|
+
return this.southAndNorthLatitude;
|
871
|
+
},
|
872
|
+
u_southMercatorYLowAndHighAndOneOverHeight : function() {
|
873
|
+
return this.southMercatorYLowAndHighAndOneOverHeight;
|
874
|
+
},
|
875
|
+
|
876
|
+
center3D : undefined,
|
877
|
+
modifiedModelView : new Matrix4(),
|
878
|
+
tileExtent : new Cartesian4(),
|
879
|
+
|
880
|
+
dayTextures : [],
|
881
|
+
dayTextureTranslationAndScale : [],
|
882
|
+
dayTextureTexCoordsExtent : [],
|
883
|
+
dayTextureAlpha : [],
|
884
|
+
dayTextureBrightness : [],
|
885
|
+
dayTextureContrast : [],
|
886
|
+
dayTextureHue : [],
|
887
|
+
dayTextureSaturation : [],
|
888
|
+
dayTextureOneOverGamma : [],
|
889
|
+
dayIntensity : 0.0,
|
890
|
+
|
891
|
+
southAndNorthLatitude : new Cartesian2(0.0, 0.0),
|
892
|
+
southMercatorYLowAndHighAndOneOverHeight : new Cartesian3(0.0, 0.0, 0.0)
|
893
|
+
};
|
894
|
+
}
|
895
|
+
|
896
|
+
function mergeUniformMap(target, source) {
|
897
|
+
for (var property in source) {
|
898
|
+
if (source.hasOwnProperty(property)) {
|
899
|
+
target[property] = source[property];
|
900
|
+
}
|
901
|
+
}
|
902
|
+
}
|
903
|
+
|
904
|
+
var float32ArrayScratch = typeof Float32Array !== 'undefined' ? new Float32Array(1) : undefined;
|
905
|
+
var modifiedModelViewScratch = new Matrix4();
|
906
|
+
var tileExtentScratch = new Cartesian4();
|
907
|
+
var rtcScratch = new Cartesian3();
|
908
|
+
var centerEyeScratch = new Cartesian4();
|
909
|
+
|
910
|
+
function createRenderCommandsForSelectedTiles(surface, context, frameState, shaderSet, mode, projection, centralBodyUniformMap, colorCommandList, renderState) {
|
911
|
+
var viewMatrix = frameState.camera.getViewMatrix();
|
912
|
+
|
913
|
+
var maxTextures = context.getMaximumTextureImageUnits();
|
914
|
+
|
915
|
+
var tileCommands = surface._tileCommands;
|
916
|
+
var tileCommandUniformMaps = surface._tileCommandUniformMaps;
|
917
|
+
var tileCommandIndex = -1;
|
918
|
+
|
919
|
+
var tilesToRenderByTextureCount = surface._tilesToRenderByTextureCount;
|
920
|
+
for (var tileSetIndex = 0, tileSetLength = tilesToRenderByTextureCount.length; tileSetIndex < tileSetLength; ++tileSetIndex) {
|
921
|
+
var tileSet = tilesToRenderByTextureCount[tileSetIndex];
|
922
|
+
if (typeof tileSet === 'undefined' || tileSet.length === 0) {
|
923
|
+
continue;
|
924
|
+
}
|
925
|
+
|
926
|
+
tileSet.sort(tileDistanceSortFunction);
|
927
|
+
|
928
|
+
for (var i = 0, len = tileSet.length; i < len; i++) {
|
929
|
+
var tile = tileSet[i];
|
930
|
+
|
931
|
+
var rtc = tile.center;
|
932
|
+
|
933
|
+
// Not used in 3D.
|
934
|
+
var tileExtent = tileExtentScratch;
|
935
|
+
|
936
|
+
// Only used for Mercator projections.
|
937
|
+
var southLatitude = 0.0;
|
938
|
+
var northLatitude = 0.0;
|
939
|
+
var southMercatorYHigh = 0.0;
|
940
|
+
var southMercatorYLow = 0.0;
|
941
|
+
var oneOverMercatorHeight = 0.0;
|
942
|
+
|
943
|
+
if (mode !== SceneMode.SCENE3D) {
|
944
|
+
var southwest = projection.project(tile.extent.getSouthwest());
|
945
|
+
var northeast = projection.project(tile.extent.getNortheast());
|
946
|
+
|
947
|
+
tileExtent.x = southwest.x;
|
948
|
+
tileExtent.y = southwest.y;
|
949
|
+
tileExtent.z = northeast.x;
|
950
|
+
tileExtent.w = northeast.y;
|
951
|
+
|
952
|
+
// In 2D and Columbus View, use the center of the tile for RTC rendering.
|
953
|
+
if (mode !== SceneMode.MORPHING) {
|
954
|
+
rtc = rtcScratch;
|
955
|
+
rtc.x = 0.0;
|
956
|
+
rtc.y = (tileExtent.z + tileExtent.x) * 0.5;
|
957
|
+
rtc.z = (tileExtent.w + tileExtent.y) * 0.5;
|
958
|
+
tileExtent.x -= rtc.y;
|
959
|
+
tileExtent.y -= rtc.z;
|
960
|
+
tileExtent.z -= rtc.y;
|
961
|
+
tileExtent.w -= rtc.z;
|
962
|
+
}
|
963
|
+
|
964
|
+
if (projection instanceof WebMercatorProjection) {
|
965
|
+
southLatitude = tile.extent.south;
|
966
|
+
northLatitude = tile.extent.north;
|
967
|
+
|
968
|
+
var southMercatorY = WebMercatorProjection.geodeticLatitudeToMercatorAngle(southLatitude);
|
969
|
+
var northMercatorY = WebMercatorProjection.geodeticLatitudeToMercatorAngle(northLatitude);
|
970
|
+
|
971
|
+
float32ArrayScratch[0] = southMercatorY;
|
972
|
+
southMercatorYHigh = float32ArrayScratch[0];
|
973
|
+
southMercatorYLow = southMercatorY - float32ArrayScratch[0];
|
974
|
+
|
975
|
+
oneOverMercatorHeight = 1.0 / (northMercatorY - southMercatorY);
|
976
|
+
}
|
977
|
+
}
|
978
|
+
|
979
|
+
var centerEye = centerEyeScratch;
|
980
|
+
centerEye.x = rtc.x;
|
981
|
+
centerEye.y = rtc.y;
|
982
|
+
centerEye.z = rtc.z;
|
983
|
+
centerEye.w = 1.0;
|
984
|
+
|
985
|
+
Matrix4.multiplyByVector(viewMatrix, centerEye, centerEye);
|
986
|
+
viewMatrix.setColumn(3, centerEye, modifiedModelViewScratch);
|
987
|
+
|
988
|
+
var tileImageryCollection = tile.imagery;
|
989
|
+
var imageryIndex = 0;
|
990
|
+
var imageryLen = tileImageryCollection.length;
|
991
|
+
|
992
|
+
do {
|
993
|
+
var numberOfDayTextures = 0;
|
994
|
+
|
995
|
+
++tileCommandIndex;
|
996
|
+
var command = tileCommands[tileCommandIndex];
|
997
|
+
if (typeof command === 'undefined') {
|
998
|
+
command = new DrawCommand();
|
999
|
+
tileCommands[tileCommandIndex] = command;
|
1000
|
+
tileCommandUniformMaps[tileCommandIndex] = createTileUniformMap();
|
1001
|
+
}
|
1002
|
+
var uniformMap = tileCommandUniformMaps[tileCommandIndex];
|
1003
|
+
|
1004
|
+
mergeUniformMap(uniformMap, centralBodyUniformMap);
|
1005
|
+
|
1006
|
+
uniformMap.center3D = tile.center;
|
1007
|
+
|
1008
|
+
Cartesian4.clone(tileExtent, uniformMap.tileExtent);
|
1009
|
+
uniformMap.southAndNorthLatitude.x = southLatitude;
|
1010
|
+
uniformMap.southAndNorthLatitude.y = northLatitude;
|
1011
|
+
uniformMap.southMercatorYLowAndHighAndOneOverHeight.x = southMercatorYLow;
|
1012
|
+
uniformMap.southMercatorYLowAndHighAndOneOverHeight.y = southMercatorYHigh;
|
1013
|
+
uniformMap.southMercatorYLowAndHighAndOneOverHeight.z = oneOverMercatorHeight;
|
1014
|
+
Matrix4.clone(modifiedModelViewScratch, uniformMap.modifiedModelView);
|
1015
|
+
|
1016
|
+
var applyBrightness = false;
|
1017
|
+
var applyContrast = false;
|
1018
|
+
var applyHue = false;
|
1019
|
+
var applySaturation = false;
|
1020
|
+
var applyGamma = false;
|
1021
|
+
|
1022
|
+
while (numberOfDayTextures < maxTextures && imageryIndex < imageryLen) {
|
1023
|
+
var tileImagery = tileImageryCollection[imageryIndex];
|
1024
|
+
var imagery = tileImagery.imagery;
|
1025
|
+
var imageryLayer = imagery.imageryLayer;
|
1026
|
+
++imageryIndex;
|
1027
|
+
|
1028
|
+
if (imagery.state !== ImageryState.READY) {
|
1029
|
+
continue;
|
1030
|
+
}
|
1031
|
+
|
1032
|
+
if (typeof tileImagery.textureTranslationAndScale === 'undefined') {
|
1033
|
+
tileImagery.textureTranslationAndScale = imageryLayer._calculateTextureTranslationAndScale(tile, tileImagery);
|
1034
|
+
}
|
1035
|
+
|
1036
|
+
uniformMap.dayTextures[numberOfDayTextures] = imagery.texture;
|
1037
|
+
uniformMap.dayTextureTranslationAndScale[numberOfDayTextures] = tileImagery.textureTranslationAndScale;
|
1038
|
+
uniformMap.dayTextureTexCoordsExtent[numberOfDayTextures] = tileImagery.textureCoordinateExtent;
|
1039
|
+
|
1040
|
+
if (typeof imageryLayer.alpha === 'function') {
|
1041
|
+
uniformMap.dayTextureAlpha[numberOfDayTextures] = imageryLayer.alpha(frameState, imageryLayer, imagery.x, imagery.y, imagery.level);
|
1042
|
+
} else {
|
1043
|
+
uniformMap.dayTextureAlpha[numberOfDayTextures] = imageryLayer.alpha;
|
1044
|
+
}
|
1045
|
+
|
1046
|
+
if (typeof imageryLayer.brightness === 'function') {
|
1047
|
+
uniformMap.dayTextureBrightness[numberOfDayTextures] = imageryLayer.brightness(frameState, imageryLayer, imagery.x, imagery.y, imagery.level);
|
1048
|
+
} else {
|
1049
|
+
uniformMap.dayTextureBrightness[numberOfDayTextures] = imageryLayer.brightness;
|
1050
|
+
}
|
1051
|
+
applyBrightness = uniformMap.dayTextureBrightness[numberOfDayTextures] !== ImageryLayer.DEFAULT_BRIGHTNESS;
|
1052
|
+
|
1053
|
+
if (typeof imageryLayer.contrast === 'function') {
|
1054
|
+
uniformMap.dayTextureContrast[numberOfDayTextures] = imageryLayer.contrast(frameState, imageryLayer, imagery.x, imagery.y, imagery.level);
|
1055
|
+
} else {
|
1056
|
+
uniformMap.dayTextureContrast[numberOfDayTextures] = imageryLayer.contrast;
|
1057
|
+
}
|
1058
|
+
applyContrast = uniformMap.dayTextureContrast[numberOfDayTextures] !== ImageryLayer.DEFAULT_CONTRAST;
|
1059
|
+
|
1060
|
+
if (typeof imageryLayer.hue === 'function') {
|
1061
|
+
uniformMap.dayTextureHue[numberOfDayTextures] = imageryLayer.hue(frameState, imageryLayer, imagery.x, imagery.y, imagery.level);
|
1062
|
+
} else {
|
1063
|
+
uniformMap.dayTextureHue[numberOfDayTextures] = imageryLayer.hue;
|
1064
|
+
}
|
1065
|
+
applyHue = uniformMap.dayTextureHue[numberOfDayTextures] !== ImageryLayer.DEFAULT_HUE;
|
1066
|
+
|
1067
|
+
if (typeof imageryLayer.saturation === 'function') {
|
1068
|
+
uniformMap.dayTextureSaturation[numberOfDayTextures] = imageryLayer.saturation(frameState, imageryLayer, imagery.x, imagery.y, imagery.level);
|
1069
|
+
} else {
|
1070
|
+
uniformMap.dayTextureSaturation[numberOfDayTextures] = imageryLayer.saturation;
|
1071
|
+
}
|
1072
|
+
applySaturation = uniformMap.dayTextureSaturation[numberOfDayTextures] !== ImageryLayer.DEFAULT_SATURATION;
|
1073
|
+
|
1074
|
+
if (typeof imageryLayer.gamma === 'function') {
|
1075
|
+
uniformMap.dayTextureOneOverGamma[numberOfDayTextures] = 1.0 / imageryLayer.gamma(frameState, imageryLayer, imagery.x, imagery.y, imagery.level);
|
1076
|
+
} else {
|
1077
|
+
uniformMap.dayTextureOneOverGamma[numberOfDayTextures] = 1.0 / imageryLayer.gamma;
|
1078
|
+
}
|
1079
|
+
applyGamma = uniformMap.dayTextureOneOverGamma[numberOfDayTextures] !== 1.0 / ImageryLayer.DEFAULT_GAMMA;
|
1080
|
+
|
1081
|
+
++numberOfDayTextures;
|
1082
|
+
}
|
1083
|
+
|
1084
|
+
// trim texture array to the used length so we don't end up using old textures
|
1085
|
+
// which might get destroyed eventually
|
1086
|
+
uniformMap.dayTextures.length = numberOfDayTextures;
|
1087
|
+
|
1088
|
+
colorCommandList.push(command);
|
1089
|
+
|
1090
|
+
command.shaderProgram = shaderSet.getShaderProgram(context, tileSetIndex, applyBrightness, applyContrast, applyHue, applySaturation, applyGamma);
|
1091
|
+
command.renderState = renderState;
|
1092
|
+
command.primitiveType = TerrainProvider.wireframe ? PrimitiveType.LINES : PrimitiveType.TRIANGLES;
|
1093
|
+
command.vertexArray = tile.vertexArray;
|
1094
|
+
command.uniformMap = uniformMap;
|
1095
|
+
|
1096
|
+
var boundingVolume = tile.boundingSphere3D;
|
1097
|
+
|
1098
|
+
if (frameState.mode !== SceneMode.SCENE3D) {
|
1099
|
+
// TODO: If we show terrain heights in Columbus View, the bounding sphere
|
1100
|
+
// needs to be expanded to include the heights.
|
1101
|
+
boundingVolume = BoundingSphere.fromExtent2D(tile.extent, frameState.scene2D.projection);
|
1102
|
+
boundingVolume.center = new Cartesian3(boundingVolume.center.z, boundingVolume.center.x, boundingVolume.center.y);
|
1103
|
+
|
1104
|
+
if (frameState.mode === SceneMode.MORPHING) {
|
1105
|
+
boundingVolume = BoundingSphere.union(tile.boundingSphere3D, boundingVolume, boundingVolume);
|
1106
|
+
}
|
1107
|
+
}
|
1108
|
+
|
1109
|
+
command.boundingVolume = boundingVolume;
|
1110
|
+
|
1111
|
+
} while (imageryIndex < imageryLen);
|
1112
|
+
}
|
1113
|
+
}
|
1114
|
+
|
1115
|
+
// trim command list to the number actually needed
|
1116
|
+
tileCommands.length = Math.max(0, tileCommandIndex);
|
1117
|
+
}
|
1118
|
+
|
1119
|
+
return CentralBodySurface;
|
1120
|
+
});
|