cesium 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,365 @@
|
|
1
|
+
/*global define*/
|
2
|
+
define([
|
3
|
+
'../Core/DeveloperError',
|
4
|
+
'../Core/destroyObject',
|
5
|
+
'../Core/ComponentDatatype'
|
6
|
+
], function(
|
7
|
+
DeveloperError,
|
8
|
+
destroyObject,
|
9
|
+
ComponentDatatype) {
|
10
|
+
"use strict";
|
11
|
+
|
12
|
+
/**
|
13
|
+
* DOC_TBA
|
14
|
+
*
|
15
|
+
* @alias VertexArray
|
16
|
+
*
|
17
|
+
* @internalConstructor
|
18
|
+
*
|
19
|
+
* @see {@link Context#createVertexArray}
|
20
|
+
* @see {@link Context#createVertexArrayFromMesh}
|
21
|
+
*/
|
22
|
+
var VertexArray = function(gl, attributes, indexBuffer) {
|
23
|
+
this._gl = gl;
|
24
|
+
this._attributes = [];
|
25
|
+
this._indexBuffer = indexBuffer;
|
26
|
+
|
27
|
+
if (attributes) {
|
28
|
+
for ( var i = 0; i < attributes.length; ++i) {
|
29
|
+
try {
|
30
|
+
this._addAttribute(attributes[i], i);
|
31
|
+
} catch (e) {
|
32
|
+
throw new DeveloperError(e.message);
|
33
|
+
}
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
// Verify all attribute names are unique
|
38
|
+
var uniqueIndices = {};
|
39
|
+
for ( var j = 0; j < this._attributes.length; ++j) {
|
40
|
+
var index = this._attributes[j].index;
|
41
|
+
if (uniqueIndices[index]) {
|
42
|
+
throw new DeveloperError('Index ' + index + ' is used by more than one attribute.');
|
43
|
+
}
|
44
|
+
|
45
|
+
uniqueIndices[index] = true;
|
46
|
+
}
|
47
|
+
};
|
48
|
+
|
49
|
+
VertexArray.prototype._addAttribute = function(attribute, index) {
|
50
|
+
if (!attribute.vertexBuffer && !attribute.value) {
|
51
|
+
throw new DeveloperError('attribute must have a vertexBuffer or a value.');
|
52
|
+
}
|
53
|
+
|
54
|
+
if (attribute.vertexBuffer && attribute.value) {
|
55
|
+
throw new DeveloperError('attribute cannot have both a vertexBuffer and a value. It must have either a vertexBuffer property defining per-vertex data or a value property defining data for all vertices.');
|
56
|
+
}
|
57
|
+
|
58
|
+
var componentsPerAttribute = attribute.value ? attribute.value.length : attribute.componentsPerAttribute;
|
59
|
+
|
60
|
+
if ((componentsPerAttribute !== 1) &&
|
61
|
+
(componentsPerAttribute !== 2) &&
|
62
|
+
(componentsPerAttribute !== 3) &&
|
63
|
+
(componentsPerAttribute !== 4)) {
|
64
|
+
if (attribute.value) {
|
65
|
+
throw new DeveloperError('attribute.value.length must be in the range [1, 4].');
|
66
|
+
}
|
67
|
+
|
68
|
+
throw new DeveloperError('attribute.componentsPerAttribute must be in the range [1, 4].');
|
69
|
+
}
|
70
|
+
|
71
|
+
if (attribute.componentDatatype) {
|
72
|
+
var datatype = attribute.componentDatatype;
|
73
|
+
if (!ComponentDatatype.validate(datatype)) {
|
74
|
+
throw new DeveloperError('attribute must have a valid componentDatatype or not specify it.');
|
75
|
+
}
|
76
|
+
}
|
77
|
+
|
78
|
+
if (attribute.strideInBytes && (attribute.strideInBytes > 255)) {
|
79
|
+
// WebGL limit. Not in GL ES.
|
80
|
+
throw new DeveloperError('attribute must have a strideInBytes less than or equal to 255 or not specify it.');
|
81
|
+
}
|
82
|
+
|
83
|
+
// Shallow copy the attribute; we do not want to copy the vertex buffer.
|
84
|
+
var attr = {
|
85
|
+
index : (typeof attribute.index === 'undefined') ? index : attribute.index,
|
86
|
+
enabled : (typeof attribute.enabled === 'undefined') ? true : attribute.enabled,
|
87
|
+
vertexBuffer : attribute.vertexBuffer,
|
88
|
+
value : attribute.value ? attribute.value.slice(0) : undefined,
|
89
|
+
componentsPerAttribute : componentsPerAttribute,
|
90
|
+
componentDatatype : attribute.componentDatatype || ComponentDatatype.FLOAT,
|
91
|
+
normalize : attribute.normalize || false,
|
92
|
+
offsetInBytes : attribute.offsetInBytes || 0,
|
93
|
+
strideInBytes : attribute.strideInBytes || 0
|
94
|
+
};
|
95
|
+
|
96
|
+
if (attr.vertexBuffer) {
|
97
|
+
// Common case: vertex buffer for per-vertex data
|
98
|
+
attr.vertexAttrib = function(gl) {
|
99
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer._getBuffer());
|
100
|
+
gl.vertexAttribPointer(this.index, this.componentsPerAttribute, this.componentDatatype, this.normalize, this.strideInBytes, this.offsetInBytes);
|
101
|
+
gl.enableVertexAttribArray(this.index);
|
102
|
+
};
|
103
|
+
|
104
|
+
attr.disableVertexAttribArray = function(gl) {
|
105
|
+
gl.disableVertexAttribArray(this.index);
|
106
|
+
};
|
107
|
+
} else {
|
108
|
+
// Less common case: value array for the same data for each vertex
|
109
|
+
switch (attr.componentsPerAttribute) {
|
110
|
+
case 1:
|
111
|
+
attr.vertexAttrib = function(gl) {
|
112
|
+
gl.vertexAttrib1fv(this.index, this.value);
|
113
|
+
};
|
114
|
+
break;
|
115
|
+
case 2:
|
116
|
+
attr.vertexAttrib = function(gl) {
|
117
|
+
gl.vertexAttrib2fv(this.index, this.value);
|
118
|
+
};
|
119
|
+
break;
|
120
|
+
case 3:
|
121
|
+
attr.vertexAttrib = function(gl) {
|
122
|
+
gl.vertexAttrib3fv(this.index, this.value);
|
123
|
+
};
|
124
|
+
break;
|
125
|
+
case 4:
|
126
|
+
attr.vertexAttrib = function(gl) {
|
127
|
+
gl.vertexAttrib4fv(this.index, this.value);
|
128
|
+
};
|
129
|
+
break;
|
130
|
+
}
|
131
|
+
|
132
|
+
attr.disableVertexAttribArray = function(gl) {
|
133
|
+
};
|
134
|
+
}
|
135
|
+
|
136
|
+
this._attributes.push(attr);
|
137
|
+
};
|
138
|
+
|
139
|
+
/**
|
140
|
+
* DOC_TBA
|
141
|
+
*
|
142
|
+
* index is the location in the array of attributes, not the index property of an attribute.
|
143
|
+
*
|
144
|
+
* @memberof VertexArray
|
145
|
+
*
|
146
|
+
* @exception {DeveloperError} index is required.
|
147
|
+
* @exception {DeveloperError} This vertex array was destroyed, i.e., destroy() was called.
|
148
|
+
*/
|
149
|
+
VertexArray.prototype.getAttribute = function(index) {
|
150
|
+
if (typeof index === 'undefined') {
|
151
|
+
throw new DeveloperError('index is required.');
|
152
|
+
}
|
153
|
+
|
154
|
+
return this._attributes[index];
|
155
|
+
};
|
156
|
+
|
157
|
+
/**
|
158
|
+
* DOC_TBA
|
159
|
+
*
|
160
|
+
* @memberof VertexArray
|
161
|
+
*
|
162
|
+
* @exception {DeveloperError} This vertex array was destroyed, i.e., destroy() was called.
|
163
|
+
*/
|
164
|
+
VertexArray.prototype.getNumberOfAttributes = function() {
|
165
|
+
return this._attributes.length;
|
166
|
+
};
|
167
|
+
|
168
|
+
/**
|
169
|
+
* DOC_TBA
|
170
|
+
*
|
171
|
+
* @memberof VertexArray
|
172
|
+
*
|
173
|
+
* @exception {DeveloperError} Attribute must have a vertexBuffer.
|
174
|
+
* @exception {DeveloperError} Attribute must have a componentsPerAttribute.
|
175
|
+
* @exception {DeveloperError} Attribute must have a valid componentDatatype or not specify it.
|
176
|
+
* @exception {DeveloperError} Attribute must have a strideInBytes less than or equal to 255 or not specify it.
|
177
|
+
* @exception {DeveloperError} Index is already in use.
|
178
|
+
* @exception {DeveloperError} This vertex array was destroyed, i.e., destroy() was called.
|
179
|
+
*/
|
180
|
+
VertexArray.prototype.addAttribute = function(attribute) {
|
181
|
+
if (attribute) {
|
182
|
+
var attributes = this._attributes;
|
183
|
+
var index = (typeof attribute.index === 'undefined') ? attributes.length : attribute.index;
|
184
|
+
for ( var i = 0; i < attributes.length; ++i) {
|
185
|
+
if (index === attributes[i].index) {
|
186
|
+
throw new DeveloperError('Index ' + index + ' is already in use.');
|
187
|
+
}
|
188
|
+
}
|
189
|
+
|
190
|
+
try {
|
191
|
+
this._addAttribute(attribute, index);
|
192
|
+
} catch (e) {
|
193
|
+
throw new DeveloperError(e.message);
|
194
|
+
}
|
195
|
+
}
|
196
|
+
};
|
197
|
+
|
198
|
+
/**
|
199
|
+
* DOC_TBA
|
200
|
+
*
|
201
|
+
* @memberof VertexArray
|
202
|
+
*
|
203
|
+
* @return {Boolean} True if the attribute was removed; false if the attribute was not found in the vertex array.
|
204
|
+
*
|
205
|
+
* @exception {DeveloperError} Attribute must have an index.
|
206
|
+
* @exception {DeveloperError} This vertex array was destroyed, i.e., destroy() was called.
|
207
|
+
*/
|
208
|
+
VertexArray.prototype.removeAttribute = function(attribute) {
|
209
|
+
if (attribute) {
|
210
|
+
if (typeof attribute.index === 'undefined') {
|
211
|
+
throw new DeveloperError('Attribute must have an index.');
|
212
|
+
}
|
213
|
+
|
214
|
+
var attributes = this._attributes;
|
215
|
+
for ( var i = 0; i < attributes.length; ++i) {
|
216
|
+
if (attributes[i].index === attribute.index) {
|
217
|
+
attributes.splice(i, 1);
|
218
|
+
return true;
|
219
|
+
}
|
220
|
+
}
|
221
|
+
}
|
222
|
+
|
223
|
+
return false;
|
224
|
+
};
|
225
|
+
|
226
|
+
/**
|
227
|
+
* DOC_TBA
|
228
|
+
*
|
229
|
+
* @memberof VertexArray
|
230
|
+
*
|
231
|
+
* @return {Buffer} DOC_TBA.
|
232
|
+
* @exception {DeveloperError} This vertex array was destroyed, i.e., destroy() was called.
|
233
|
+
*/
|
234
|
+
VertexArray.prototype.getIndexBuffer = function() {
|
235
|
+
return this._indexBuffer;
|
236
|
+
};
|
237
|
+
|
238
|
+
/**
|
239
|
+
* DOC_TBA
|
240
|
+
*
|
241
|
+
* @memberof VertexArray
|
242
|
+
*
|
243
|
+
* @exception {DeveloperError} This vertex array was destroyed, i.e., destroy() was called.
|
244
|
+
*/
|
245
|
+
VertexArray.prototype.setIndexBuffer = function(indexBuffer) {
|
246
|
+
this._indexBuffer = indexBuffer;
|
247
|
+
};
|
248
|
+
|
249
|
+
VertexArray.prototype._bind = function() {
|
250
|
+
var attributes = this._attributes;
|
251
|
+
var gl = this._gl;
|
252
|
+
|
253
|
+
// TODO: Performance: sort by vertex buffer?
|
254
|
+
for ( var i = 0; i < attributes.length; ++i) {
|
255
|
+
var attribute = attributes[i];
|
256
|
+
if (attribute.enabled) {
|
257
|
+
attribute.vertexAttrib(gl);
|
258
|
+
}
|
259
|
+
}
|
260
|
+
|
261
|
+
if (this._indexBuffer) {
|
262
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer._getBuffer());
|
263
|
+
}
|
264
|
+
};
|
265
|
+
|
266
|
+
VertexArray.prototype._unBind = function() {
|
267
|
+
var attributes = this._attributes;
|
268
|
+
var gl = this._gl;
|
269
|
+
|
270
|
+
for ( var i = 0; i < attributes.length; ++i) {
|
271
|
+
var attribute = attributes[i];
|
272
|
+
if (attribute.enabled) {
|
273
|
+
attribute.disableVertexAttribArray(gl);
|
274
|
+
}
|
275
|
+
}
|
276
|
+
if (this._indexBuffer) {
|
277
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
|
278
|
+
}
|
279
|
+
};
|
280
|
+
|
281
|
+
/**
|
282
|
+
* This assumes that each vertex buffer in the vertex array has the same number of vertices.
|
283
|
+
* @private
|
284
|
+
*/
|
285
|
+
VertexArray.prototype._getNumberOfVertices = function() {
|
286
|
+
if (this._attributes.length > 0) {
|
287
|
+
var attribute = this._attributes[0];
|
288
|
+
var bytes = attribute.strideInBytes || (attribute.componentsPerAttribute * attribute.componentDatatype.sizeInBytes);
|
289
|
+
|
290
|
+
return attribute.vertexBuffer.getSizeInBytes() / bytes;
|
291
|
+
}
|
292
|
+
|
293
|
+
return 0;
|
294
|
+
};
|
295
|
+
|
296
|
+
/**
|
297
|
+
* Returns true if this object was destroyed; otherwise, false.
|
298
|
+
* <br /><br />
|
299
|
+
* If this object was destroyed, it should not be used; calling any function other than
|
300
|
+
* <code>isDestroyed</code> will result in a {@link DeveloperError} exception.
|
301
|
+
*
|
302
|
+
* @memberof VertexArray
|
303
|
+
*
|
304
|
+
* @return {Boolean} True if this object was destroyed; otherwise, false.
|
305
|
+
*
|
306
|
+
* @see VertexArray#destroy
|
307
|
+
*/
|
308
|
+
VertexArray.prototype.isDestroyed = function() {
|
309
|
+
return false;
|
310
|
+
};
|
311
|
+
|
312
|
+
/**
|
313
|
+
* Destroys the WebGL resources held by this object. Destroying an object allows for deterministic
|
314
|
+
* release of WebGL resources, instead of relying on the garbage collector to destroy this object.
|
315
|
+
* <br /><br />
|
316
|
+
* Only call this if the vertex array owns the vertex buffers referenced by the attributes and owns its
|
317
|
+
* index buffer; otherwise, the owner of the buffers is responsible for destroying them. A vertex or
|
318
|
+
* index buffer is only destroyed if it's <code>getVertexArrayDestroyable</code> function returns
|
319
|
+
* <code>true</code> (the default). This allows combining destroyable and non-destroyable buffers
|
320
|
+
* in the same vertex array.
|
321
|
+
* <br /><br />
|
322
|
+
* Once an object is destroyed, it should not be used; calling any function other than
|
323
|
+
* <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,
|
324
|
+
* assign the return value (<code>undefined</code>) to the object as done in the example.
|
325
|
+
*
|
326
|
+
* @memberof VertexArray
|
327
|
+
*
|
328
|
+
* @return {undefined}
|
329
|
+
*
|
330
|
+
* @exception {DeveloperError} This vertex array was destroyed, i.e., destroy() was called.
|
331
|
+
*
|
332
|
+
* @see VertexArray#isDestroyed
|
333
|
+
* @see Buffer#getVertexArrayDestroyable
|
334
|
+
* @see <a href='http://www.khronos.org/opengles/sdk/2.0/docs/man/glDeleteBuffers.xml'>glDeleteBuffers</a>
|
335
|
+
*
|
336
|
+
* @example
|
337
|
+
* // Destroying the vertex array implicitly calls destroy for each of its vertex
|
338
|
+
* // buffers and its index buffer.
|
339
|
+
* var vertexBuffer = context.createVertexBuffer(new Float32Array([0, 0, 0]),
|
340
|
+
* BufferUsage.STATIC_DRAW);
|
341
|
+
* var vertexArray = context.createVertexArray();
|
342
|
+
* vertexArray.addAttribute({ vertexBuffer : vertexBuffer, componentsPerAttribute : 3 });
|
343
|
+
* // ...
|
344
|
+
* vertexArray = vertexArray.destroy();
|
345
|
+
* // Calling vertexBuffer.destroy() would throw DeveloperError at this point.
|
346
|
+
*/
|
347
|
+
VertexArray.prototype.destroy = function() {
|
348
|
+
var attributes = this._attributes;
|
349
|
+
for ( var i = 0; i < attributes.length; ++i) {
|
350
|
+
var vertexBuffer = attributes[i].vertexBuffer;
|
351
|
+
if (vertexBuffer && !vertexBuffer.isDestroyed() && vertexBuffer.getVertexArrayDestroyable()) {
|
352
|
+
vertexBuffer.destroy();
|
353
|
+
}
|
354
|
+
}
|
355
|
+
|
356
|
+
var indexBuffer = this._indexBuffer;
|
357
|
+
if (indexBuffer && indexBuffer.getVertexArrayDestroyable()) {
|
358
|
+
this._indexBuffer = indexBuffer.destroy();
|
359
|
+
}
|
360
|
+
|
361
|
+
return destroyObject(this);
|
362
|
+
};
|
363
|
+
|
364
|
+
return VertexArray;
|
365
|
+
});
|
@@ -0,0 +1,574 @@
|
|
1
|
+
/*global define*/
|
2
|
+
define([
|
3
|
+
'../Core/DeveloperError',
|
4
|
+
'../Core/defaultValue',
|
5
|
+
'../Core/destroyObject',
|
6
|
+
'../Core/ComponentDatatype',
|
7
|
+
'./BufferUsage'
|
8
|
+
], function(
|
9
|
+
DeveloperError,
|
10
|
+
defaultValue,
|
11
|
+
destroyObject,
|
12
|
+
ComponentDatatype,
|
13
|
+
BufferUsage) {
|
14
|
+
"use strict";
|
15
|
+
|
16
|
+
/**
|
17
|
+
* DOC_TBA
|
18
|
+
*
|
19
|
+
* @alias VertexArrayFacade
|
20
|
+
*
|
21
|
+
* @constructor
|
22
|
+
*
|
23
|
+
* @exception {DeveloperError} context is required.
|
24
|
+
* @exception {DeveloperError} At least one attribute is required.
|
25
|
+
* @exception {DeveloperError} Attribute must have a componentsPerAttribute.
|
26
|
+
* @exception {DeveloperError} Attribute must have a valid componentDatatype or not specify it.
|
27
|
+
* @exception {DeveloperError} Attribute must have a valid usage or not specify it.
|
28
|
+
* @exception {DeveloperError} Index n is used by more than one attribute.
|
29
|
+
*/
|
30
|
+
var VertexArrayFacade = function(context, attributes, sizeInVertices) {
|
31
|
+
if (!context) {
|
32
|
+
throw new DeveloperError('context is required.');
|
33
|
+
}
|
34
|
+
|
35
|
+
if (!attributes || (attributes.length === 0)) {
|
36
|
+
throw new DeveloperError('At least one attribute is required.');
|
37
|
+
}
|
38
|
+
|
39
|
+
var attrs = VertexArrayFacade._verifyAttributes(attributes);
|
40
|
+
|
41
|
+
sizeInVertices = sizeInVertices || 0;
|
42
|
+
|
43
|
+
var attributesByPurposeAndUsage = {};
|
44
|
+
var precreatedAttributes = [];
|
45
|
+
|
46
|
+
var attributesByUsage;
|
47
|
+
var attributesForUsage;
|
48
|
+
var purpose;
|
49
|
+
var usage;
|
50
|
+
|
51
|
+
// Bucket the attributes first by purpose and second by usage.
|
52
|
+
var length = attrs.length;
|
53
|
+
for (var i = 0; i < length; ++i) {
|
54
|
+
var attribute = attrs[i];
|
55
|
+
|
56
|
+
// If the attribute already has a vertex buffer, we do not need
|
57
|
+
// to manage a vertex buffer or typed array for it.
|
58
|
+
if (attribute.vertexBuffer) {
|
59
|
+
precreatedAttributes.push(attribute);
|
60
|
+
continue;
|
61
|
+
}
|
62
|
+
|
63
|
+
purpose = attribute.purpose;
|
64
|
+
attributesByUsage = attributesByPurposeAndUsage[purpose];
|
65
|
+
if (typeof attributesByUsage === 'undefined') {
|
66
|
+
attributesByUsage = attributesByPurposeAndUsage[purpose] = {};
|
67
|
+
}
|
68
|
+
|
69
|
+
usage = attribute.usage.toString();
|
70
|
+
attributesForUsage = attributesByUsage[usage];
|
71
|
+
if (typeof attributesForUsage === 'undefined') {
|
72
|
+
attributesForUsage = attributesByUsage[usage] = [];
|
73
|
+
}
|
74
|
+
|
75
|
+
attributesForUsage.push(attribute);
|
76
|
+
}
|
77
|
+
|
78
|
+
// A function to sort attributes by the size of their components. From left to right, a vertex
|
79
|
+
// stores floats, shorts, and then bytes.
|
80
|
+
function compare(left, right) {
|
81
|
+
return right.componentDatatype.sizeInBytes - left.componentDatatype.sizeInBytes;
|
82
|
+
}
|
83
|
+
|
84
|
+
// Create a buffer description for each purpose/usage combination.
|
85
|
+
this._buffersByPurposeAndUsage = {};
|
86
|
+
this._allBuffers = [];
|
87
|
+
|
88
|
+
for (purpose in attributesByPurposeAndUsage) {
|
89
|
+
if (attributesByPurposeAndUsage.hasOwnProperty(purpose)) {
|
90
|
+
attributesByUsage = attributesByPurposeAndUsage[purpose];
|
91
|
+
|
92
|
+
var buffersByUsage = this._buffersByPurposeAndUsage[purpose];
|
93
|
+
if (typeof buffersByUsage === 'undefined') {
|
94
|
+
buffersByUsage = this._buffersByPurposeAndUsage[purpose] = {};
|
95
|
+
}
|
96
|
+
|
97
|
+
for (usage in attributesByUsage) {
|
98
|
+
if (attributesByUsage.hasOwnProperty(usage)) {
|
99
|
+
attributesForUsage = attributesByUsage[usage];
|
100
|
+
|
101
|
+
attributesForUsage.sort(compare);
|
102
|
+
var vertexSizeInBytes = VertexArrayFacade._vertexSizeInBytes(attributesForUsage);
|
103
|
+
|
104
|
+
var usageEnum;
|
105
|
+
switch (usage) {
|
106
|
+
case BufferUsage.STATIC_DRAW.toString():
|
107
|
+
usageEnum = BufferUsage.STATIC_DRAW;
|
108
|
+
break;
|
109
|
+
case BufferUsage.STREAM_DRAW.toString():
|
110
|
+
usageEnum = BufferUsage.STREAM_DRAW;
|
111
|
+
break;
|
112
|
+
case BufferUsage.DYNAMIC_DRAW.toString():
|
113
|
+
usageEnum = BufferUsage.DYNAMIC_DRAW;
|
114
|
+
break;
|
115
|
+
}
|
116
|
+
|
117
|
+
var buffer = {
|
118
|
+
purpose : purpose,
|
119
|
+
|
120
|
+
vertexSizeInBytes : vertexSizeInBytes,
|
121
|
+
|
122
|
+
vertexBuffer : undefined,
|
123
|
+
usage : usageEnum,
|
124
|
+
needsCommit : false,
|
125
|
+
|
126
|
+
arrayBuffer : undefined,
|
127
|
+
arrayViews : VertexArrayFacade._createArrayViews(attributesForUsage, vertexSizeInBytes)
|
128
|
+
};
|
129
|
+
|
130
|
+
buffersByUsage[usage] = buffer;
|
131
|
+
this._allBuffers.push(buffer);
|
132
|
+
}
|
133
|
+
}
|
134
|
+
}
|
135
|
+
}
|
136
|
+
|
137
|
+
this._size = 0;
|
138
|
+
|
139
|
+
this._precreated = precreatedAttributes;
|
140
|
+
this._context = context;
|
141
|
+
|
142
|
+
/**
|
143
|
+
* DOC_TBA
|
144
|
+
*/
|
145
|
+
this.writers = undefined;
|
146
|
+
|
147
|
+
/**
|
148
|
+
* DOC_TBA
|
149
|
+
*/
|
150
|
+
this.vaByPurpose = undefined;
|
151
|
+
|
152
|
+
this.resize(sizeInVertices);
|
153
|
+
};
|
154
|
+
|
155
|
+
VertexArrayFacade._verifyAttributes = function(attributes) {
|
156
|
+
var attrs = [];
|
157
|
+
|
158
|
+
for ( var i = 0; i < attributes.length; ++i) {
|
159
|
+
var attribute = attributes[i];
|
160
|
+
|
161
|
+
var attr = {
|
162
|
+
index : (typeof attribute.index === 'undefined') ? i : attribute.index,
|
163
|
+
enabled : (typeof attribute.enabled === 'undefined') ? true : attribute.enabled,
|
164
|
+
componentsPerAttribute : attribute.componentsPerAttribute,
|
165
|
+
componentDatatype : attribute.componentDatatype || ComponentDatatype.FLOAT,
|
166
|
+
normalize : attribute.normalize || false,
|
167
|
+
purpose : defaultValue(attribute.purpose, 'all'),
|
168
|
+
|
169
|
+
// There will be either a vertexBuffer or an [optional] usage.
|
170
|
+
vertexBuffer : attribute.vertexBuffer,
|
171
|
+
usage : attribute.usage || BufferUsage.STATIC_DRAW
|
172
|
+
};
|
173
|
+
attrs.push(attr);
|
174
|
+
|
175
|
+
if ((attr.componentsPerAttribute !== 1) && (attr.componentsPerAttribute !== 2) && (attr.componentsPerAttribute !== 3) && (attr.componentsPerAttribute !== 4)) {
|
176
|
+
throw new DeveloperError('attribute.componentsPerAttribute must be in the range [1, 4].');
|
177
|
+
}
|
178
|
+
|
179
|
+
var datatype = attr.componentDatatype;
|
180
|
+
if (!ComponentDatatype.validate(datatype)) {
|
181
|
+
throw new DeveloperError('Attribute must have a valid componentDatatype or not specify it.');
|
182
|
+
}
|
183
|
+
|
184
|
+
if (!BufferUsage.validate(attr.usage)) {
|
185
|
+
throw new DeveloperError('Attribute must have a valid usage or not specify it.');
|
186
|
+
}
|
187
|
+
}
|
188
|
+
|
189
|
+
// Verify all attribute names are unique.
|
190
|
+
// Multiple attributes can share a name as long as they have different purposes.
|
191
|
+
var uniqueIndices = new Array(attrs.length);
|
192
|
+
for ( var j = 0; j < attrs.length; ++j) {
|
193
|
+
var currentAttr = attrs[j];
|
194
|
+
var index = currentAttr.index;
|
195
|
+
var purpose = currentAttr.purpose;
|
196
|
+
|
197
|
+
if (purpose !== 'all') {
|
198
|
+
var uniqueIndex = uniqueIndices[index];
|
199
|
+
if (uniqueIndex === true) {
|
200
|
+
throw new DeveloperError('Index ' + index + ' is used by more than one attribute.');
|
201
|
+
}
|
202
|
+
if (typeof uniqueIndex !== 'undefined') {
|
203
|
+
if (uniqueIndex[purpose]) {
|
204
|
+
throw new DeveloperError('Index ' + index + ' is used by more than one attribute with the same purpose.');
|
205
|
+
}
|
206
|
+
} else {
|
207
|
+
uniqueIndex = uniqueIndices[index] = {};
|
208
|
+
}
|
209
|
+
uniqueIndex[purpose] = true;
|
210
|
+
} else {
|
211
|
+
if (uniqueIndices[index]) {
|
212
|
+
throw new DeveloperError('Index ' + index + ' is used by more than one attribute.');
|
213
|
+
}
|
214
|
+
uniqueIndices[index] = true;
|
215
|
+
}
|
216
|
+
}
|
217
|
+
|
218
|
+
return attrs;
|
219
|
+
};
|
220
|
+
|
221
|
+
VertexArrayFacade._vertexSizeInBytes = function(attributes) {
|
222
|
+
var sizeInBytes = 0;
|
223
|
+
|
224
|
+
var length = attributes.length;
|
225
|
+
for ( var i = 0; i < length; ++i) {
|
226
|
+
var attribute = attributes[i];
|
227
|
+
sizeInBytes += (attribute.componentsPerAttribute * attribute.componentDatatype.sizeInBytes);
|
228
|
+
}
|
229
|
+
|
230
|
+
var maxComponentSizeInBytes = (length > 0) ? attributes[0].componentDatatype.sizeInBytes : 0; // Sorted by size
|
231
|
+
var remainder = (maxComponentSizeInBytes > 0) ? (sizeInBytes % maxComponentSizeInBytes) : 0;
|
232
|
+
var padding = (remainder === 0) ? 0 : (maxComponentSizeInBytes - remainder);
|
233
|
+
sizeInBytes += padding;
|
234
|
+
|
235
|
+
return sizeInBytes;
|
236
|
+
};
|
237
|
+
|
238
|
+
VertexArrayFacade._createArrayViews = function(attributes, vertexSizeInBytes) {
|
239
|
+
var views = [];
|
240
|
+
var offsetInBytes = 0;
|
241
|
+
|
242
|
+
var length = attributes.length;
|
243
|
+
for ( var i = 0; i < length; ++i) {
|
244
|
+
var attribute = attributes[i];
|
245
|
+
var componentDatatype = attribute.componentDatatype;
|
246
|
+
|
247
|
+
views.push({
|
248
|
+
index : attribute.index,
|
249
|
+
enabled : attribute.enabled,
|
250
|
+
componentsPerAttribute : attribute.componentsPerAttribute,
|
251
|
+
componentDatatype : componentDatatype,
|
252
|
+
normalize : attribute.normalize,
|
253
|
+
|
254
|
+
offsetInBytes : offsetInBytes,
|
255
|
+
vertexSizeInComponentType : vertexSizeInBytes / componentDatatype.sizeInBytes,
|
256
|
+
|
257
|
+
view : undefined
|
258
|
+
});
|
259
|
+
|
260
|
+
offsetInBytes += (attribute.componentsPerAttribute * componentDatatype.sizeInBytes);
|
261
|
+
}
|
262
|
+
|
263
|
+
return views;
|
264
|
+
};
|
265
|
+
|
266
|
+
/**
|
267
|
+
* DOC_TBA
|
268
|
+
*
|
269
|
+
* Invalidates writers. Can't render again until commit is called.
|
270
|
+
*
|
271
|
+
* @memberof VertexArrayFacade
|
272
|
+
*/
|
273
|
+
VertexArrayFacade.prototype.resize = function(sizeInVertices) {
|
274
|
+
this._size = sizeInVertices;
|
275
|
+
|
276
|
+
var allBuffers = this._allBuffers;
|
277
|
+
this.writers = {};
|
278
|
+
|
279
|
+
for (var i = 0, len = allBuffers.length; i < len; ++i) {
|
280
|
+
var buffer = allBuffers[i];
|
281
|
+
VertexArrayFacade._resize(buffer, this._size);
|
282
|
+
|
283
|
+
var writersForPurpose = this.writers[buffer.purpose];
|
284
|
+
if (typeof writersForPurpose === 'undefined') {
|
285
|
+
writersForPurpose = this.writers[buffer.purpose] = [];
|
286
|
+
}
|
287
|
+
|
288
|
+
// Reserving invalidates the writers, so if client's cache them, they need to invalidate their cache.
|
289
|
+
VertexArrayFacade._appendWriters(writersForPurpose, buffer);
|
290
|
+
}
|
291
|
+
|
292
|
+
// VAs are recreated next time commit is called.
|
293
|
+
this._destroyVA();
|
294
|
+
};
|
295
|
+
|
296
|
+
VertexArrayFacade._resize = function(buffer, size) {
|
297
|
+
if (buffer.vertexSizeInBytes > 0) {
|
298
|
+
// Create larger array buffer
|
299
|
+
var arrayBuffer = new ArrayBuffer(size * buffer.vertexSizeInBytes);
|
300
|
+
|
301
|
+
// Copy contents from previous array buffer
|
302
|
+
if (buffer.arrayBuffer) {
|
303
|
+
var destView = new Uint8Array(arrayBuffer);
|
304
|
+
var sourceView = new Uint8Array(buffer.arrayBuffer);
|
305
|
+
var sourceLength = sourceView.length;
|
306
|
+
for ( var j = 0; j < sourceLength; ++j) {
|
307
|
+
destView[j] = sourceView[j];
|
308
|
+
}
|
309
|
+
}
|
310
|
+
|
311
|
+
// Create typed views into the new array buffer
|
312
|
+
var views = buffer.arrayViews;
|
313
|
+
var length = views.length;
|
314
|
+
for ( var i = 0; i < length; ++i) {
|
315
|
+
var view = views[i];
|
316
|
+
view.view = view.componentDatatype.createArrayBufferView(arrayBuffer, view.offsetInBytes);
|
317
|
+
}
|
318
|
+
|
319
|
+
buffer.arrayBuffer = arrayBuffer;
|
320
|
+
}
|
321
|
+
};
|
322
|
+
|
323
|
+
var createWriters = [
|
324
|
+
// 1 component per attribute
|
325
|
+
function(buffer, view, vertexSizeInComponentType) {
|
326
|
+
return function(index, attribute) {
|
327
|
+
view[index * vertexSizeInComponentType] = attribute;
|
328
|
+
buffer.needsCommit = true;
|
329
|
+
};
|
330
|
+
},
|
331
|
+
|
332
|
+
// 2 component per attribute
|
333
|
+
function(buffer, view, vertexSizeInComponentType) {
|
334
|
+
return function(index, component0, component1) {
|
335
|
+
var i = index * vertexSizeInComponentType;
|
336
|
+
view[i] = component0;
|
337
|
+
view[i + 1] = component1;
|
338
|
+
buffer.needsCommit = true;
|
339
|
+
};
|
340
|
+
},
|
341
|
+
|
342
|
+
// 3 component per attribute
|
343
|
+
function(buffer, view, vertexSizeInComponentType) {
|
344
|
+
return function(index, component0, component1, component2) {
|
345
|
+
var i = index * vertexSizeInComponentType;
|
346
|
+
view[i] = component0;
|
347
|
+
view[i + 1] = component1;
|
348
|
+
view[i + 2] = component2;
|
349
|
+
buffer.needsCommit = true;
|
350
|
+
};
|
351
|
+
},
|
352
|
+
|
353
|
+
// 4 component per attribute
|
354
|
+
function(buffer, view, vertexSizeInComponentType) {
|
355
|
+
return function(index, component0, component1, component2, component3) {
|
356
|
+
var i = index * vertexSizeInComponentType;
|
357
|
+
view[i] = component0;
|
358
|
+
view[i + 1] = component1;
|
359
|
+
view[i + 2] = component2;
|
360
|
+
view[i + 3] = component3;
|
361
|
+
buffer.needsCommit = true;
|
362
|
+
};
|
363
|
+
}];
|
364
|
+
|
365
|
+
VertexArrayFacade._appendWriters = function(writers, buffer) {
|
366
|
+
var arrayViews = buffer.arrayViews;
|
367
|
+
var length = arrayViews.length;
|
368
|
+
for ( var i = 0; i < length; ++i) {
|
369
|
+
var arrayView = arrayViews[i];
|
370
|
+
writers[arrayView.index] = createWriters[arrayView.componentsPerAttribute - 1](buffer, arrayView.view, arrayView.vertexSizeInComponentType);
|
371
|
+
}
|
372
|
+
};
|
373
|
+
|
374
|
+
/**
|
375
|
+
* DOC_TBA
|
376
|
+
*
|
377
|
+
* @memberof VertexArrayFacade
|
378
|
+
*/
|
379
|
+
VertexArrayFacade.prototype.commit = function(indexBuffer) {
|
380
|
+
var recreateVA = false;
|
381
|
+
|
382
|
+
var allBuffers = this._allBuffers;
|
383
|
+
var buffer;
|
384
|
+
|
385
|
+
for (var i = 0, len = allBuffers.length; i < len; ++i) {
|
386
|
+
buffer = allBuffers[i];
|
387
|
+
recreateVA = this._commit(buffer) || recreateVA;
|
388
|
+
}
|
389
|
+
|
390
|
+
///////////////////////////////////////////////////////////////////////
|
391
|
+
|
392
|
+
if (recreateVA || !this.va) {
|
393
|
+
// Using unsigned short indices, 64K vertices can be indexed by one index buffer
|
394
|
+
var sixtyFourK = 64 * 1024;
|
395
|
+
|
396
|
+
var buffersByPurposeAndUsage = this._buffersByPurposeAndUsage;
|
397
|
+
|
398
|
+
this._destroyVA();
|
399
|
+
this.vaByPurpose = {};
|
400
|
+
|
401
|
+
for (var purpose in buffersByPurposeAndUsage) {
|
402
|
+
if (buffersByPurposeAndUsage.hasOwnProperty(purpose)) {
|
403
|
+
var buffersByUsage = buffersByPurposeAndUsage[purpose];
|
404
|
+
|
405
|
+
var va = [];
|
406
|
+
var numberOfVertexArrays = Math.ceil(this._size / sixtyFourK);
|
407
|
+
for ( var k = 0; k < numberOfVertexArrays; ++k) {
|
408
|
+
var attributes = [];
|
409
|
+
|
410
|
+
// Add all-purpose attributes
|
411
|
+
var allPurposeBuffersByUsage = buffersByPurposeAndUsage.all;
|
412
|
+
if (allPurposeBuffersByUsage !== buffersByUsage) {
|
413
|
+
for (var allPurposeUsage in allPurposeBuffersByUsage) {
|
414
|
+
if (allPurposeBuffersByUsage.hasOwnProperty(allPurposeUsage)) {
|
415
|
+
var allPurposeBuffer = allPurposeBuffersByUsage[allPurposeUsage];
|
416
|
+
VertexArrayFacade._appendAttributes(attributes, allPurposeBuffer, k * (allPurposeBuffer.vertexSizeInBytes * sixtyFourK));
|
417
|
+
}
|
418
|
+
}
|
419
|
+
}
|
420
|
+
|
421
|
+
// Add purpose-specific attributes
|
422
|
+
for (var usage in buffersByUsage) {
|
423
|
+
if (buffersByUsage.hasOwnProperty(usage)) {
|
424
|
+
buffer = buffersByUsage[usage];
|
425
|
+
VertexArrayFacade._appendAttributes(attributes, buffer, k * (buffer.vertexSizeInBytes * sixtyFourK));
|
426
|
+
}
|
427
|
+
}
|
428
|
+
|
429
|
+
attributes = attributes.concat(this._precreated);
|
430
|
+
|
431
|
+
va.push({
|
432
|
+
va : this._context.createVertexArray(attributes, indexBuffer),
|
433
|
+
indicesCount : 1.5 * ((k !== (numberOfVertexArrays - 1)) ? sixtyFourK : (this._size % sixtyFourK))
|
434
|
+
// TODO: not hardcode 1.5
|
435
|
+
});
|
436
|
+
}
|
437
|
+
|
438
|
+
this.vaByPurpose[purpose] = va;
|
439
|
+
}
|
440
|
+
}
|
441
|
+
}
|
442
|
+
};
|
443
|
+
|
444
|
+
VertexArrayFacade.prototype._commit = function(buffer) {
|
445
|
+
if (buffer.needsCommit && (buffer.vertexSizeInBytes > 0)) {
|
446
|
+
buffer.needsCommit = false;
|
447
|
+
|
448
|
+
var vertexBuffer = buffer.vertexBuffer;
|
449
|
+
var vertexBufferSizeInBytes = this._size * buffer.vertexSizeInBytes;
|
450
|
+
if (!vertexBuffer || (vertexBuffer.getSizeInBytes() < vertexBufferSizeInBytes)) {
|
451
|
+
if (vertexBuffer) {
|
452
|
+
vertexBuffer.destroy();
|
453
|
+
}
|
454
|
+
buffer.vertexBuffer = this._context.createVertexBuffer(buffer.arrayBuffer, buffer.usage);
|
455
|
+
buffer.vertexBuffer.setVertexArrayDestroyable(false);
|
456
|
+
|
457
|
+
return true; // Created new vertex buffer
|
458
|
+
}
|
459
|
+
|
460
|
+
buffer.vertexBuffer.copyFromArrayView(buffer.arrayBuffer);
|
461
|
+
}
|
462
|
+
|
463
|
+
return false; // Did not create new vertex buffer
|
464
|
+
};
|
465
|
+
|
466
|
+
VertexArrayFacade._appendAttributes = function(attributes, buffer, vertexBufferOffset) {
|
467
|
+
var arrayViews = buffer.arrayViews;
|
468
|
+
var length = arrayViews.length;
|
469
|
+
for ( var i = 0; i < length; ++i) {
|
470
|
+
var view = arrayViews[i];
|
471
|
+
|
472
|
+
attributes.push({
|
473
|
+
index : view.index,
|
474
|
+
enabled : view.enabled,
|
475
|
+
componentsPerAttribute : view.componentsPerAttribute,
|
476
|
+
componentDatatype : view.componentDatatype,
|
477
|
+
normalize : view.normalize,
|
478
|
+
vertexBuffer : buffer.vertexBuffer,
|
479
|
+
offsetInBytes : vertexBufferOffset + view.offsetInBytes,
|
480
|
+
strideInBytes : buffer.vertexSizeInBytes
|
481
|
+
});
|
482
|
+
}
|
483
|
+
};
|
484
|
+
|
485
|
+
/**
|
486
|
+
* DOC_TBA
|
487
|
+
* @memberof VertexArrayFacade
|
488
|
+
*/
|
489
|
+
VertexArrayFacade.prototype.subCommit = function(offsetInVertices, lengthInVertices) {
|
490
|
+
if (offsetInVertices < 0 || offsetInVertices >= this._size) {
|
491
|
+
throw new DeveloperError('offsetInVertices must be greater than or equal to zero and less than the vertex array size.');
|
492
|
+
}
|
493
|
+
|
494
|
+
if (offsetInVertices + lengthInVertices > this._size) {
|
495
|
+
throw new DeveloperError('offsetInVertices + lengthInVertices cannot exceed the vertex array size.');
|
496
|
+
}
|
497
|
+
|
498
|
+
var allBuffers = this._allBuffers;
|
499
|
+
|
500
|
+
for (var i = 0, len = allBuffers.length; i < len; ++i) {
|
501
|
+
this._subCommit(allBuffers[i], offsetInVertices, lengthInVertices);
|
502
|
+
}
|
503
|
+
};
|
504
|
+
|
505
|
+
VertexArrayFacade.prototype._subCommit = function(buffer, offsetInVertices, lengthInVertices) {
|
506
|
+
if (buffer.needsCommit && (buffer.vertexSizeInBytes > 0)) {
|
507
|
+
var byteOffset = buffer.vertexSizeInBytes * offsetInVertices;
|
508
|
+
var byteLength = buffer.vertexSizeInBytes * lengthInVertices;
|
509
|
+
|
510
|
+
// PERFORMANCE_IDEA: If we want to get really crazy, we could consider updating
|
511
|
+
// individual attributes instead of the entire (sub-)vertex.
|
512
|
+
//
|
513
|
+
// PERFORMANCE_IDEA: Does creating the typed view add too much GC overhead?
|
514
|
+
buffer.vertexBuffer.copyFromArrayView(new Uint8Array(buffer.arrayBuffer, byteOffset, byteLength), byteOffset);
|
515
|
+
}
|
516
|
+
};
|
517
|
+
|
518
|
+
/**
|
519
|
+
* DOC_TBA
|
520
|
+
* @memberof VertexArrayFacade
|
521
|
+
*/
|
522
|
+
VertexArrayFacade.prototype.endSubCommits = function() {
|
523
|
+
var allBuffers = this._allBuffers;
|
524
|
+
|
525
|
+
for (var i = 0, len = allBuffers.length; i < len; ++i) {
|
526
|
+
allBuffers[i].needsCommit = false;
|
527
|
+
}
|
528
|
+
};
|
529
|
+
|
530
|
+
VertexArrayFacade.prototype._destroyVA = function() {
|
531
|
+
var vaByPurpose = this.vaByPurpose;
|
532
|
+
if (typeof vaByPurpose === 'undefined') {
|
533
|
+
return;
|
534
|
+
}
|
535
|
+
|
536
|
+
for (var purpose in vaByPurpose) {
|
537
|
+
if (vaByPurpose.hasOwnProperty(purpose)) {
|
538
|
+
var va = vaByPurpose[purpose];
|
539
|
+
var length = va.length;
|
540
|
+
for (var i = 0; i < length; ++i) {
|
541
|
+
va[i].va.destroy();
|
542
|
+
}
|
543
|
+
}
|
544
|
+
}
|
545
|
+
|
546
|
+
this.vaByPurpose = undefined;
|
547
|
+
};
|
548
|
+
|
549
|
+
/**
|
550
|
+
* DOC_TBA
|
551
|
+
* @memberof VertexArrayFacade
|
552
|
+
*/
|
553
|
+
VertexArrayFacade.prototype.isDestroyed = function() {
|
554
|
+
return false;
|
555
|
+
};
|
556
|
+
|
557
|
+
/**
|
558
|
+
* DOC_TBA
|
559
|
+
* @memberof VertexArrayFacade
|
560
|
+
*/
|
561
|
+
VertexArrayFacade.prototype.destroy = function() {
|
562
|
+
var allBuffers = this._allBuffers;
|
563
|
+
for (var i = 0, len = allBuffers.length; i < len; ++i) {
|
564
|
+
var buffer = allBuffers[i];
|
565
|
+
buffer.vertexBuffer = buffer.vertexBuffer && buffer.vertexBuffer.destroy();
|
566
|
+
}
|
567
|
+
|
568
|
+
this._destroyVA();
|
569
|
+
|
570
|
+
return destroyObject(this);
|
571
|
+
};
|
572
|
+
|
573
|
+
return VertexArrayFacade;
|
574
|
+
});
|