cesium 0.15.0 → 0.16.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.
Files changed (596) hide show
  1. data/app/assets/javascripts/Cesium.js +7 -7
  2. data/app/assets/javascripts/Core/BoundingRectangle.js +1 -1
  3. data/app/assets/javascripts/Core/BoundingSphere.js +12 -5
  4. data/app/assets/javascripts/Core/BoxTessellator.js +11 -8
  5. data/app/assets/javascripts/Core/CatmullRomSpline.js +23 -21
  6. data/app/assets/javascripts/Core/Clock.js +1 -1
  7. data/app/assets/javascripts/Core/Color.js +51 -0
  8. data/app/assets/javascripts/Core/CubeMapEllipsoidTessellator.js +3 -1
  9. data/app/assets/javascripts/Core/EarthOrientationParameters.js +1 -1
  10. data/app/assets/javascripts/Core/EllipsoidalOccluder.js +15 -12
  11. data/app/assets/javascripts/Core/Extent.js +37 -0
  12. data/app/assets/javascripts/Core/ExtentTessellator.js +33 -25
  13. data/app/assets/javascripts/Core/HermitePolynomialApproximation.js +18 -19
  14. data/app/assets/javascripts/Core/HermiteSpline.js +49 -49
  15. data/app/assets/javascripts/Core/Iau2006XysData.js +4 -5
  16. data/app/assets/javascripts/Core/LagrangePolynomialApproximation.js +10 -20
  17. data/app/assets/javascripts/Core/LinearApproximation.js +19 -23
  18. data/app/assets/javascripts/Core/Math.js +15 -3
  19. data/app/assets/javascripts/Core/Matrix4.js +186 -2
  20. data/app/assets/javascripts/Core/MeshFilters.js +13 -13
  21. data/app/assets/javascripts/Core/OrientationInterpolator.js +19 -19
  22. data/app/assets/javascripts/Core/PlaneTessellator.js +8 -6
  23. data/app/assets/javascripts/Core/PolygonPipeline.js +21 -21
  24. data/app/assets/javascripts/Core/PolylinePipeline.js +17 -25
  25. data/app/assets/javascripts/Core/ScreenSpaceEventHandler.js +187 -185
  26. data/app/assets/javascripts/Core/Shapes.js +8 -4
  27. data/app/assets/javascripts/Core/Simon1994PlanetaryPositions.js +521 -0
  28. data/app/assets/javascripts/Core/Spherical.js +36 -9
  29. data/app/assets/javascripts/Core/TaskProcessor.js +42 -5
  30. data/app/assets/javascripts/Core/TimeIntervalCollection.js +5 -5
  31. data/app/assets/javascripts/Core/Tipsify.js +21 -16
  32. data/app/assets/javascripts/Core/Transforms.js +11 -11
  33. data/app/assets/javascripts/Core/TridiagonalSystemSolver.js +4 -4
  34. data/app/assets/javascripts/Core/clone.js +25 -8
  35. data/app/assets/javascripts/Core/defaultValue.js +10 -1
  36. data/app/assets/javascripts/Core/isCrossOriginUrl.js +32 -0
  37. data/app/assets/javascripts/Core/jsonp.js +2 -2
  38. data/app/assets/javascripts/Core/loadImage.js +13 -6
  39. data/app/assets/javascripts/Core/loadJson.js +4 -1
  40. data/app/assets/javascripts/Core/pointInsideTriangle2D.js +1 -1
  41. data/app/assets/javascripts/Core/writeTextToCanvas.js +1 -3
  42. data/app/assets/javascripts/DynamicScene/CzmlBoolean.js +7 -4
  43. data/app/assets/javascripts/DynamicScene/CzmlCartesian2.js +1 -1
  44. data/app/assets/javascripts/DynamicScene/CzmlCartesian3.js +1 -1
  45. data/app/assets/javascripts/DynamicScene/CzmlColor.js +1 -1
  46. data/app/assets/javascripts/DynamicScene/CzmlHorizontalOrigin.js +6 -5
  47. data/app/assets/javascripts/DynamicScene/CzmlImage.js +8 -3
  48. data/app/assets/javascripts/DynamicScene/CzmlLabelStyle.js +6 -5
  49. data/app/assets/javascripts/DynamicScene/CzmlNumber.js +6 -4
  50. data/app/assets/javascripts/DynamicScene/CzmlPosition.js +166 -0
  51. data/app/assets/javascripts/DynamicScene/CzmlString.js +6 -4
  52. data/app/assets/javascripts/DynamicScene/CzmlUnitCartesian3.js +1 -1
  53. data/app/assets/javascripts/DynamicScene/CzmlUnitQuaternion.js +1 -1
  54. data/app/assets/javascripts/DynamicScene/CzmlUnitSpherical.js +1 -1
  55. data/app/assets/javascripts/DynamicScene/CzmlVerticalOrigin.js +6 -5
  56. data/app/assets/javascripts/DynamicScene/DynamicGridMaterial.js +202 -0
  57. data/app/assets/javascripts/DynamicScene/DynamicMaterialProperty.js +5 -3
  58. data/app/assets/javascripts/DynamicScene/DynamicObject.js +1 -2
  59. data/app/assets/javascripts/DynamicScene/DynamicPathVisualizer.js +19 -15
  60. data/app/assets/javascripts/DynamicScene/DynamicPointVisualizer.js +12 -10
  61. data/app/assets/javascripts/DynamicScene/DynamicPolylineVisualizer.js +17 -10
  62. data/app/assets/javascripts/DynamicScene/DynamicPositionProperty.js +39 -90
  63. data/app/assets/javascripts/DynamicScene/DynamicProperty.js +19 -6
  64. data/app/assets/javascripts/DynamicScene/ReferenceProperty.js +6 -4
  65. data/app/assets/javascripts/DynamicScene/VisualizerCollection.js +10 -11
  66. data/app/assets/javascripts/Renderer/ClearCommand.js +60 -9
  67. data/app/assets/javascripts/Renderer/Context.js +234 -575
  68. data/app/assets/javascripts/Renderer/DrawCommand.js +15 -3
  69. data/app/assets/javascripts/Renderer/PassState.js +55 -0
  70. data/app/assets/javascripts/Renderer/PickFramebuffer.js +47 -77
  71. data/app/assets/javascripts/Renderer/RenderState.js +541 -0
  72. data/app/assets/javascripts/Renderer/ShaderCache.js +34 -1
  73. data/app/assets/javascripts/Renderer/ShaderProgram.js +112 -6
  74. data/app/assets/javascripts/Renderer/TextureAtlas.js +63 -67
  75. data/app/assets/javascripts/Renderer/UniformState.js +59 -30
  76. data/app/assets/javascripts/Renderer/VertexArray.js +9 -7
  77. data/app/assets/javascripts/Renderer/VertexArrayFacade.js +28 -27
  78. data/app/assets/javascripts/Renderer/createPickFragmentShaderSource.js +53 -0
  79. data/app/assets/javascripts/Renderer/loadCubeMap.js +10 -11
  80. data/app/assets/javascripts/Scene/AnimationCollection.js +48 -44
  81. data/app/assets/javascripts/Scene/Billboard.js +8 -2
  82. data/app/assets/javascripts/Scene/BillboardCollection.js +66 -62
  83. data/app/assets/javascripts/Scene/Camera.js +3 -0
  84. data/app/assets/javascripts/Scene/CameraController.js +3 -3
  85. data/app/assets/javascripts/Scene/CameraFlightPath.js +9 -6
  86. data/app/assets/javascripts/Scene/CentralBody.js +47 -65
  87. data/app/assets/javascripts/Scene/CentralBodySurface.js +9 -6
  88. data/app/assets/javascripts/Scene/CentralBodySurfaceShaderSet.js +5 -9
  89. data/app/assets/javascripts/Scene/CompositePrimitive.js +8 -8
  90. data/app/assets/javascripts/Scene/CustomSensorVolume.js +66 -55
  91. data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +26 -27
  92. data/app/assets/javascripts/Scene/FrameState.js +15 -4
  93. data/app/assets/javascripts/Scene/GridImageryProvider.js +266 -0
  94. data/app/assets/javascripts/Scene/ImageryLayer.js +44 -19
  95. data/app/assets/javascripts/Scene/ImageryLayerCollection.js +3 -0
  96. data/app/assets/javascripts/Scene/ImageryProvider.js +3 -0
  97. data/app/assets/javascripts/Scene/Label.js +4 -4
  98. data/app/assets/javascripts/Scene/LabelCollection.js +2 -9
  99. data/app/assets/javascripts/Scene/Material.js +97 -8
  100. data/app/assets/javascripts/Scene/OrthographicFrustum.js +2 -2
  101. data/app/assets/javascripts/Scene/PerformanceDisplay.js +17 -10
  102. data/app/assets/javascripts/Scene/PerspectiveOffCenterFrustum.js +2 -2
  103. data/app/assets/javascripts/Scene/Polygon.js +30 -56
  104. data/app/assets/javascripts/Scene/Polyline.js +93 -227
  105. data/app/assets/javascripts/Scene/PolylineCollection.js +685 -757
  106. data/app/assets/javascripts/Scene/Projections.js +2 -2
  107. data/app/assets/javascripts/Scene/RectangularPyramidSensorVolume.js +21 -16
  108. data/app/assets/javascripts/Scene/Scene.js +40 -32
  109. data/app/assets/javascripts/Scene/SceneTransitioner.js +8 -56
  110. data/app/assets/javascripts/Scene/SensorVolumeCollection.js +6 -20
  111. data/app/assets/javascripts/Scene/SkyAtmosphere.js +0 -11
  112. data/app/assets/javascripts/Scene/SkyBox.js +0 -11
  113. data/app/assets/javascripts/Scene/VRTheWorldTerrainProvider.js +3 -2
  114. data/app/assets/javascripts/Scene/ViewportQuad.js +8 -8
  115. data/app/assets/javascripts/Shaders/BillboardCollectionVS.glsl +0 -2
  116. data/app/assets/javascripts/Shaders/BillboardCollectionVS.js +0 -2
  117. data/app/assets/javascripts/Shaders/BuiltinFunctions.glsl +517 -3
  118. data/app/assets/javascripts/Shaders/BuiltinFunctions.js +535 -4
  119. data/app/assets/javascripts/Shaders/CentralBodyFS.glsl +11 -24
  120. data/app/assets/javascripts/Shaders/CentralBodyFS.js +11 -24
  121. data/app/assets/javascripts/Shaders/CentralBodyVS.glsl +1 -3
  122. data/app/assets/javascripts/Shaders/CentralBodyVS.js +1 -3
  123. data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.glsl +14 -33
  124. data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.js +14 -33
  125. data/app/assets/javascripts/Shaders/EllipsoidFS.glsl +0 -1
  126. data/app/assets/javascripts/Shaders/EllipsoidFS.js +0 -1
  127. data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.glsl +1 -11
  128. data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.js +1 -11
  129. data/app/assets/javascripts/Shaders/Materials/FadeMaterial.glsl +36 -0
  130. data/app/assets/javascripts/Shaders/Materials/FadeMaterial.js +42 -0
  131. data/app/assets/javascripts/Shaders/Materials/GridMaterial.glsl +9 -1
  132. data/app/assets/javascripts/Shaders/Materials/GridMaterial.js +9 -1
  133. data/app/assets/javascripts/Shaders/Materials/PolylineArrowMaterial.glsl +60 -0
  134. data/app/assets/javascripts/Shaders/Materials/PolylineArrowMaterial.js +66 -0
  135. data/app/assets/javascripts/Shaders/Materials/PolylineGlowMaterial.glsl +17 -0
  136. data/app/assets/javascripts/Shaders/Materials/PolylineGlowMaterial.js +23 -0
  137. data/app/assets/javascripts/Shaders/Materials/PolylineOutlineMaterial.glsl +28 -0
  138. data/app/assets/javascripts/Shaders/Materials/PolylineOutlineMaterial.js +34 -0
  139. data/app/assets/javascripts/Shaders/Materials/StripeMaterial.glsl +4 -10
  140. data/app/assets/javascripts/Shaders/Materials/StripeMaterial.js +4 -10
  141. data/app/assets/javascripts/Shaders/PolygonFS.glsl +0 -3
  142. data/app/assets/javascripts/Shaders/PolygonFS.js +1 -4
  143. data/app/assets/javascripts/Shaders/PolygonVS.glsl +3 -4
  144. data/app/assets/javascripts/Shaders/PolygonVS.js +3 -4
  145. data/app/assets/javascripts/Shaders/PolylineFS.glsl +9 -2
  146. data/app/assets/javascripts/Shaders/PolylineFS.js +9 -2
  147. data/app/assets/javascripts/Shaders/PolylineVS.glsl +131 -14
  148. data/app/assets/javascripts/Shaders/PolylineVS.js +131 -14
  149. data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.glsl +1 -19
  150. data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.js +1 -19
  151. data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.glsl +9 -1
  152. data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.js +9 -1
  153. data/app/assets/javascripts/Shaders/SkyAtmosphereFS.glsl +1 -3
  154. data/app/assets/javascripts/Shaders/SkyAtmosphereFS.js +1 -3
  155. data/app/assets/javascripts/Shaders/SkyBoxFS.glsl +1 -2
  156. data/app/assets/javascripts/Shaders/SkyBoxFS.js +1 -2
  157. data/app/assets/javascripts/Widgets/Animation/Animation.js +8 -5
  158. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.js +19 -1
  159. data/app/assets/javascripts/Widgets/Timeline/Timeline.js +19 -2
  160. data/lib/cesium/version.rb +1 -1
  161. data/test/dummy/app/assets/javascripts/application.js.coffee +10 -10
  162. data/test/dummy/log/development.log +28285 -0
  163. data/test/dummy/tmp/cache/assets/BAF/370/sprockets%2F799a74598087f7719313562f44828061 +0 -0
  164. data/test/dummy/tmp/cache/assets/BF8/BC0/sprockets%2F1982805b53487d15554f20955019b8c4 +0 -0
  165. data/test/dummy/tmp/cache/assets/C12/030/sprockets%2Fbd84b00d783150a219825433401a7946 +0 -0
  166. data/test/dummy/tmp/cache/assets/C1F/BE0/sprockets%2F9ff195723d3a539023420682a372f561 +0 -0
  167. data/test/dummy/tmp/cache/assets/C23/060/sprockets%2F0844038b70e644bef4539389305680a3 +0 -0
  168. data/test/dummy/tmp/cache/assets/C27/DA0/sprockets%2Fe49200d07769d24f54f721d890142818 +0 -0
  169. data/test/dummy/tmp/cache/assets/C37/EB0/sprockets%2F410166e528f769c35999d061f6552d57 +0 -0
  170. data/test/dummy/tmp/cache/assets/C38/870/sprockets%2F3c244a5393086f3b95954f4675f29458 +0 -0
  171. data/test/dummy/tmp/cache/assets/C44/870/sprockets%2Fc7607e52811e723312c83d096c611c32 +0 -0
  172. data/test/dummy/tmp/cache/assets/C46/770/sprockets%2F9b6c82d0454ab5ba8727173860060324 +0 -0
  173. data/test/dummy/tmp/cache/assets/C46/E60/sprockets%2F151028e967f13248ca6121c9407242cf +0 -0
  174. data/test/dummy/tmp/cache/assets/C48/360/sprockets%2Fc966013651008025255f5b53b1d63f9e +0 -0
  175. data/test/dummy/tmp/cache/assets/C49/6B0/sprockets%2Ff15d3a84028c48073d820c51575157a4 +0 -0
  176. data/test/dummy/tmp/cache/assets/C4A/020/sprockets%2F162d504e77459f0304b964139300cfe3 +0 -0
  177. data/test/dummy/tmp/cache/assets/C4A/2B0/sprockets%2F821c1d08482a9b936b661a56444551b3 +0 -0
  178. data/test/dummy/tmp/cache/assets/C4F/630/sprockets%2F8935f51ad832c341c838751031a827f2 +0 -0
  179. data/test/dummy/tmp/cache/assets/C51/170/sprockets%2F7121148c53e447e867b886592e11ad00 +0 -0
  180. data/test/dummy/tmp/cache/assets/C53/040/sprockets%2F52411d26c4863636c7ae5b5090690f94 +0 -0
  181. data/test/dummy/tmp/cache/assets/C57/D10/sprockets%2F784e21cb5b634a598629115ef4685213 +0 -0
  182. data/test/dummy/tmp/cache/assets/C59/810/sprockets%2Fc37183f61d9511d324983656cd9375a1 +0 -0
  183. data/test/dummy/tmp/cache/assets/C61/2F0/sprockets%2Fe7f511982b4799474ab391f714d39630 +0 -0
  184. data/test/dummy/tmp/cache/assets/C64/730/sprockets%2F78fd706ba991f21a399070866616c297 +0 -0
  185. data/test/dummy/tmp/cache/assets/C65/0E0/sprockets%2F8303e4555c14f5f62cd2979665f50578 +0 -0
  186. data/test/dummy/tmp/cache/assets/C6C/C90/sprockets%2Fad7947b2492467a62388859219a92de9 +0 -0
  187. data/test/dummy/tmp/cache/assets/C70/900/sprockets%2F8dc34820f1167ed79c121111a0696c03 +0 -0
  188. data/test/dummy/tmp/cache/assets/C72/450/sprockets%2F12725ceae78656537003a1240f640ed4 +0 -0
  189. data/test/dummy/tmp/cache/assets/C73/0F0/sprockets%2F8a6a50d9b866140c720b6a48307c4116 +0 -0
  190. data/test/dummy/tmp/cache/assets/C75/F50/sprockets%2F52991c5c131fb0049279124ef17047ba +0 -0
  191. data/test/dummy/tmp/cache/assets/C76/F10/sprockets%2F536e031c5d9a257b602d38f8711480a2 +0 -0
  192. data/test/dummy/tmp/cache/assets/C7E/EA0/sprockets%2F2504a119ab66f79d8d296032e957a023 +0 -0
  193. data/test/dummy/tmp/cache/assets/C7F/860/sprockets%2F7646acf5464f211440d12d09847e7c43 +0 -0
  194. data/test/dummy/tmp/cache/assets/C80/150/sprockets%2F0d3881005b0646df783d5c24683d34f5 +0 -0
  195. data/test/dummy/tmp/cache/assets/C80/780/sprockets%2F49930c35001a30c38745b89a6a86cf74 +0 -0
  196. data/test/dummy/tmp/cache/assets/C82/060/sprockets%2Fb043f48276a50489714f9ec04525e26a +0 -0
  197. data/test/dummy/tmp/cache/assets/C82/580/sprockets%2F8118f4526088ba8fd441f20317475d6b +0 -0
  198. data/test/dummy/tmp/cache/assets/C82/AA0/sprockets%2Fd83006c52345d7fe51216f1e577a8185 +0 -0
  199. data/test/dummy/tmp/cache/assets/C83/A50/sprockets%2F26b151f7490286ff7059ff9a411e1027 +0 -0
  200. data/test/dummy/tmp/cache/assets/C84/E00/sprockets%2F49d13d786c17ba7650b374646455a6b3 +0 -0
  201. data/test/dummy/tmp/cache/assets/C85/310/sprockets%2Fc638d86c720815e5b635e0a3646e2186 +0 -0
  202. data/test/dummy/tmp/cache/assets/C87/1B0/sprockets%2F58524f16545fa54ea39c3c1270d06799 +0 -0
  203. data/test/dummy/tmp/cache/assets/C88/960/sprockets%2F50655bc2c86c7c3007756af818375e64 +0 -0
  204. data/test/dummy/tmp/cache/assets/C89/9E0/sprockets%2Fbc5d891273e7d61e56762000337868bf +0 -0
  205. data/test/dummy/tmp/cache/assets/C8A/680/sprockets%2F401d94c3b6643cb7764590d5765197ea +0 -0
  206. data/test/dummy/tmp/cache/assets/C8B/0F0/sprockets%2F3317c35ce7597681091ac91985d08bb5 +0 -0
  207. data/test/dummy/tmp/cache/assets/C8B/A30/sprockets%2Fe20153c26552232703d0f4a5a60b10ed +0 -0
  208. data/test/dummy/tmp/cache/assets/C8D/FC0/sprockets%2Fab1b1b654d968822069892e844f5244f +0 -0
  209. data/test/dummy/tmp/cache/assets/C8E/1A0/sprockets%2F7937090f77385164f68c0ee252b26be5 +0 -0
  210. data/test/dummy/tmp/cache/assets/C8E/1B0/sprockets%2F3309cd849788a2b736f12369ad4e4851 +0 -0
  211. data/test/dummy/tmp/cache/assets/C8E/D50/sprockets%2F687d2438d13763a733287fc4a2e5f746 +0 -0
  212. data/test/dummy/tmp/cache/assets/C8E/E40/sprockets%2F96aaf9af5e7906347880902610773bc5 +0 -0
  213. data/test/dummy/tmp/cache/assets/C8F/370/sprockets%2Ff794170ec844d49b57216a088c0297d7 +0 -0
  214. data/test/dummy/tmp/cache/assets/C91/F00/sprockets%2F0f611f4f95811990472ff1b6f95383d5 +0 -0
  215. data/test/dummy/tmp/cache/assets/C98/D30/sprockets%2F3f2411651caa9b4fd0833085b001f490 +0 -0
  216. data/test/dummy/tmp/cache/assets/CA9/5A0/sprockets%2F8282351dd11504a68cbc8500b7786cf2 +0 -0
  217. data/test/dummy/tmp/cache/assets/CA9/E20/sprockets%2F1ca84c82be52603a0c947256a38a0598 +0 -0
  218. data/test/dummy/tmp/cache/assets/CAA/3C0/sprockets%2F75ce813900f222ce7892711f61db04d3 +0 -0
  219. data/test/dummy/tmp/cache/assets/CAA/400/sprockets%2F5c330e413aa8e6769050215b5366c7ef +0 -0
  220. data/test/dummy/tmp/cache/assets/CAA/A60/sprockets%2F76b467bc7a2344e208653c4261f8ab15 +0 -0
  221. data/test/dummy/tmp/cache/assets/CAA/D90/sprockets%2Fd477a5c2046351a0c462bb945e3954e5 +0 -0
  222. data/test/dummy/tmp/cache/assets/CAB/670/sprockets%2F678e67cae28828b42b010381be1f1247 +0 -0
  223. data/test/dummy/tmp/cache/assets/CAC/000/sprockets%2F39720f0080e70a954d9956acd571d0b2 +0 -0
  224. data/test/dummy/tmp/cache/assets/CAC/220/sprockets%2Fe9d921c5251a11d0a6296974975dbb20 +0 -0
  225. data/test/dummy/tmp/cache/assets/CAD/B20/sprockets%2F4c087829240d4b69e0a47e39bb8124d0 +0 -0
  226. data/test/dummy/tmp/cache/assets/CAD/CF0/sprockets%2F25811882cd57a31606348eb7b16f4f0d +0 -0
  227. data/test/dummy/tmp/cache/assets/CAE/0D0/sprockets%2F02345f5b06f3a25b588ed66b8e167034 +0 -0
  228. data/test/dummy/tmp/cache/assets/CAF/AD0/sprockets%2Fec228a94364d0d686876d02550ed15c1 +0 -0
  229. data/test/dummy/tmp/cache/assets/CB4/D20/sprockets%2F94c251de5c21293f227709479c4f32be +0 -0
  230. data/test/dummy/tmp/cache/assets/CB5/4C0/sprockets%2F446522846ac4ed6619268b3e00fd497a +0 -0
  231. data/test/dummy/tmp/cache/assets/CB7/FA0/sprockets%2F62d364e38ba9b500f8b1633367f782b9 +0 -0
  232. data/test/dummy/tmp/cache/assets/CB8/180/sprockets%2Fe66eae8997e04c4bf70531e166511662 +0 -0
  233. data/test/dummy/tmp/cache/assets/CB8/E20/sprockets%2Fcb0a5df9573576546972b95a14d8f112 +0 -0
  234. data/test/dummy/tmp/cache/assets/CB8/EA0/sprockets%2F9e63d365e2159c725d111698cc04a7e7 +0 -0
  235. data/test/dummy/tmp/cache/assets/CB9/680/sprockets%2F9bad6dc04875e04891351521b9795f5a +0 -0
  236. data/test/dummy/tmp/cache/assets/CBA/250/sprockets%2F39bb3860405888c9f3b4b35c738b940c +0 -0
  237. data/test/dummy/tmp/cache/assets/CBB/E80/sprockets%2F43b17645e39f018bc195bc9828f4b357 +0 -0
  238. data/test/dummy/tmp/cache/assets/CBC/6C0/sprockets%2F6f494cff47ee245d30168217542c66d6 +0 -0
  239. data/test/dummy/tmp/cache/assets/CBE/6B0/sprockets%2F285b1ec717d1c4c725758951c8785b2f +0 -0
  240. data/test/dummy/tmp/cache/assets/CBE/F20/sprockets%2F7610efc00f29935606275944978fbabf +0 -0
  241. data/test/dummy/tmp/cache/assets/CBF/3A0/sprockets%2Fc7b6a2891626c77607ea2881dc84d475 +0 -0
  242. data/test/dummy/tmp/cache/assets/CBF/8B0/sprockets%2F5c98534d57c1e7f7d2926173d27e4d14 +0 -0
  243. data/test/dummy/tmp/cache/assets/CC0/E60/sprockets%2F9731b0739ec7356b2e484cb427d6955f +0 -0
  244. data/test/dummy/tmp/cache/assets/CC1/600/sprockets%2F322629f082c9e743f47a32edd58874b8 +0 -0
  245. data/test/dummy/tmp/cache/assets/CC4/950/sprockets%2F697670d712a9a24f564f9e62b5ed1389 +0 -0
  246. data/test/dummy/tmp/cache/assets/CC4/B10/sprockets%2F55b1a4137e59cad5520e1f012eb29021 +0 -0
  247. data/test/dummy/tmp/cache/assets/CC4/B80/sprockets%2F5b090557c9468f93cc1ab77898ba2629 +0 -0
  248. data/test/dummy/tmp/cache/assets/CC7/0B0/sprockets%2Fa26009e31f9e68672f4fc7f873909a64 +0 -0
  249. data/test/dummy/tmp/cache/assets/CC9/D20/sprockets%2F372172a3ef18b8cac40a5c410f748021 +0 -0
  250. data/test/dummy/tmp/cache/assets/CCD/9B0/sprockets%2F0b3845e705c1a2c20c80b56c9c8a2246 +0 -0
  251. data/test/dummy/tmp/cache/assets/CCF/7E0/sprockets%2F3d478e2550d0140a8da13a229735bcd7 +0 -0
  252. data/test/dummy/tmp/cache/assets/CD0/990/sprockets%2F3027964ce732931bb70c158aa61ab08d +0 -0
  253. data/test/dummy/tmp/cache/assets/CD1/590/sprockets%2F2f99067423113c4aebb30a4dd3643b85 +0 -0
  254. data/test/dummy/tmp/cache/assets/CD3/250/sprockets%2F9982c13eacaf46622739beab50120614 +0 -0
  255. data/test/dummy/tmp/cache/assets/CD3/DB0/sprockets%2F38ec8b4912b23f2b31322570d56c9c2b +0 -0
  256. data/test/dummy/tmp/cache/assets/CD8/5E0/sprockets%2Ffd127b418d9dc4cc3d196672811a6112 +0 -0
  257. data/test/dummy/tmp/cache/assets/CD8/D40/sprockets%2F73570572f17300ebf2dda1ef2635149e +0 -0
  258. data/test/dummy/tmp/cache/assets/CD9/B20/sprockets%2F65698070c3bce81f5ee4eb101722b741 +0 -0
  259. data/test/dummy/tmp/cache/assets/CD9/D90/sprockets%2F87979893cfde1b28afc60797a9948345 +0 -0
  260. data/test/dummy/tmp/cache/assets/CDA/DA0/sprockets%2F13e6789dd595b2b5033b335bbd1472f2 +0 -0
  261. data/test/dummy/tmp/cache/assets/CDB/4D0/sprockets%2Ffb9182b4d13b796b245db8153324f4d2 +0 -0
  262. data/test/dummy/tmp/cache/assets/CDB/630/sprockets%2Fc48aca3d09504ff1811d9234c8267f50 +0 -0
  263. data/test/dummy/tmp/cache/assets/CDC/B50/sprockets%2F0f1e213595a02089df9735ec41c3ee80 +0 -0
  264. data/test/dummy/tmp/cache/assets/CDF/380/sprockets%2F39695e0a1726566c80281aab8d9a51cc +0 -0
  265. data/test/dummy/tmp/cache/assets/CDF/710/sprockets%2F16d775d6707a066df80d10cd1528ff33 +0 -0
  266. data/test/dummy/tmp/cache/assets/CDF/CA0/sprockets%2F3d5b2c400b7877c15ec29575d95b613b +0 -0
  267. data/test/dummy/tmp/cache/assets/CE0/420/sprockets%2F5b3a1508216cb6b968313beae256f788 +0 -0
  268. data/test/dummy/tmp/cache/assets/CE1/A00/sprockets%2F168b4bf7364dfd883a5930302e0f554c +0 -0
  269. data/test/dummy/tmp/cache/assets/CE4/F60/sprockets%2Fbc3490162e3489bf88aab055d19397f0 +0 -0
  270. data/test/dummy/tmp/cache/assets/CE5/F10/sprockets%2Fe9cf045465025d8527c83c3b93625fca +0 -0
  271. data/test/dummy/tmp/cache/assets/CE5/F90/sprockets%2F31557450886bf9c124f2fdb42704ce8e +0 -0
  272. data/test/dummy/tmp/cache/assets/CE5/FE0/sprockets%2F627e4127557531a3f8471cfbc718ed2f +0 -0
  273. data/test/dummy/tmp/cache/assets/CE6/4A0/sprockets%2F9c04b8b8df7217a708732da4982a5f61 +0 -0
  274. data/test/dummy/tmp/cache/assets/CE7/650/sprockets%2F834b60044436456eefb9ce5cf7144d38 +0 -0
  275. data/test/dummy/tmp/cache/assets/CE7/A40/sprockets%2F2974c4aef7a04f06738c8f6a2066e292 +0 -0
  276. data/test/dummy/tmp/cache/assets/CE7/C70/sprockets%2F8627e999f207ce7214e0ab06afe86412 +0 -0
  277. data/test/dummy/tmp/cache/assets/CE8/AA0/sprockets%2Fd569f5f91016b77401782ef3b42de6a6 +0 -0
  278. data/test/dummy/tmp/cache/assets/CE8/DC0/sprockets%2F49324064376deb60c942b7d85a3e7d9b +0 -0
  279. data/test/dummy/tmp/cache/assets/CEA/6D0/sprockets%2F1da842257a051a9e871c739d29b7d77f +0 -0
  280. data/test/dummy/tmp/cache/assets/CEA/E10/sprockets%2F888c18a6b36ca5e51363b7b21c29f877 +0 -0
  281. data/test/dummy/tmp/cache/assets/CEB/520/sprockets%2Fe99130a4204fac5e0b886885339af7c8 +0 -0
  282. data/test/dummy/tmp/cache/assets/CEB/C10/sprockets%2F6cadb28080126992d76e5e35ba79088e +0 -0
  283. data/test/dummy/tmp/cache/assets/CEC/2B0/sprockets%2F917af8a56c884b3d5c6a03593d95a365 +0 -0
  284. data/test/dummy/tmp/cache/assets/CEC/7A0/sprockets%2F1ccee406d881875c559b82932a25e7d4 +0 -0
  285. data/test/dummy/tmp/cache/assets/CEE/920/sprockets%2F97c97b08d42738b583ed92b55c540a4f +0 -0
  286. data/test/dummy/tmp/cache/assets/CEF/F00/sprockets%2F8ac77338a1dc57bb32999653c561e74e +0 -0
  287. data/test/dummy/tmp/cache/assets/CF0/950/sprockets%2Fd08f99c34c161881adb05d342e8984f9 +0 -0
  288. data/test/dummy/tmp/cache/assets/CF1/000/sprockets%2Fa779ae7d9f80d3098529264b91dd405d +0 -0
  289. data/test/dummy/tmp/cache/assets/CF1/5B0/sprockets%2F46e4886602bb924fc5c638865b6bf4f2 +0 -0
  290. data/test/dummy/tmp/cache/assets/CF5/2E0/sprockets%2F14513ab2f3a0311abd083e70c99bd293 +0 -0
  291. data/test/dummy/tmp/cache/assets/CF5/5C0/sprockets%2F64a4190014fe00d17e708fc02dfc2a32 +0 -0
  292. data/test/dummy/tmp/cache/assets/CF6/4E0/sprockets%2Ff9c27df89c8173d41850b9c40e766a85 +0 -0
  293. data/test/dummy/tmp/cache/assets/CF6/710/sprockets%2Fe53fe9369ad5f26285ab27754a943c88 +0 -0
  294. data/test/dummy/tmp/cache/assets/CF9/B70/sprockets%2F8144ebf49f85b18c46d90b897239b56e +0 -0
  295. data/test/dummy/tmp/cache/assets/CFB/540/sprockets%2Fc40fe1438edc416788894df8b834f944 +0 -0
  296. data/test/dummy/tmp/cache/assets/CFC/7F0/sprockets%2F6158d3ff6993e4c114a894dd371999ec +0 -0
  297. data/test/dummy/tmp/cache/assets/CFD/EA0/sprockets%2Fe43051fb1f2752c010e292ccbc53399b +0 -0
  298. data/test/dummy/tmp/cache/assets/CFD/F60/sprockets%2Fb5776671dd7cf557332f7720f49c9c9f +0 -0
  299. data/test/dummy/tmp/cache/assets/CFD/F80/sprockets%2Fe2b02979764013ad04e2f2b23d28e2ca +0 -0
  300. data/test/dummy/tmp/cache/assets/D00/690/sprockets%2F488324fb426a1e3cb3ca16488caf4004 +0 -0
  301. data/test/dummy/tmp/cache/assets/D01/A00/sprockets%2F5704bfb588da51f6053f30abd310b458 +0 -0
  302. data/test/dummy/tmp/cache/assets/D02/4C0/sprockets%2F6386d72b2c51c911a7fd84ba612430cc +0 -0
  303. data/test/dummy/tmp/cache/assets/D02/6E0/sprockets%2F886e897f07ee48ec4e9f640643440dd9 +0 -0
  304. data/test/dummy/tmp/cache/assets/D03/EF0/sprockets%2F4799db40f9cc57f50689f6da487464f5 +0 -0
  305. data/test/dummy/tmp/cache/assets/D04/530/sprockets%2Fc14ce481964a025c2501a5c907c65fce +0 -0
  306. data/test/dummy/tmp/cache/assets/D06/590/sprockets%2F19c899c20cf5d9b8629878e3add89708 +0 -0
  307. data/test/dummy/tmp/cache/assets/D06/A70/sprockets%2Ff5da4e04222a35db9d267255424bf5c6 +0 -0
  308. data/test/dummy/tmp/cache/assets/D07/330/sprockets%2F3b24c0c589b1004b399d108ae5d6ef81 +0 -0
  309. data/test/dummy/tmp/cache/assets/D07/7F0/sprockets%2F3fb0ed6b32aa83a6878d12a209c38824 +0 -0
  310. data/test/dummy/tmp/cache/assets/D08/530/sprockets%2F311d9ba15b34718d1e60ddc95a84194d +0 -0
  311. data/test/dummy/tmp/cache/assets/D08/D80/sprockets%2F388df4f82d11657bb0b4024448b6af2b +0 -0
  312. data/test/dummy/tmp/cache/assets/D09/7F0/sprockets%2Fa2d67c31222348f16a9812df26da3e8d +0 -0
  313. data/test/dummy/tmp/cache/assets/D09/E40/sprockets%2Fc2693927bc52084b4d2b89373aaa0ac9 +0 -0
  314. data/test/dummy/tmp/cache/assets/D0A/830/sprockets%2F3155dcf93a62cf601a0d48b2806b599b +0 -0
  315. data/test/dummy/tmp/cache/assets/D0A/830/sprockets%2F830cdfb33202453675d55d8de703fa2f +0 -0
  316. data/test/dummy/tmp/cache/assets/D0B/3E0/sprockets%2F66c11f02337c8851bfab67bbb3b94916 +0 -0
  317. data/test/dummy/tmp/cache/assets/D0C/2E0/sprockets%2Fecb35ec370e250a63784c2f508b76a38 +0 -0
  318. data/test/dummy/tmp/cache/assets/D0E/010/sprockets%2F797b9e08c55a2106f8e2dace455710d0 +0 -0
  319. data/test/dummy/tmp/cache/assets/D0E/180/sprockets%2F045e183281dfc37485db513d585c5bdb +0 -0
  320. data/test/dummy/tmp/cache/assets/D0E/EA0/sprockets%2F1d36a1420cf4558fb3c793316ae89ca7 +0 -0
  321. data/test/dummy/tmp/cache/assets/D0F/7E0/sprockets%2F45f0d1bae6783a949cd01767d4c7e212 +0 -0
  322. data/test/dummy/tmp/cache/assets/D0F/9E0/sprockets%2F1536c04e487ca1a768d90a68513c3cff +0 -0
  323. data/test/dummy/tmp/cache/assets/D10/750/sprockets%2F4c4a696e3e0b905d75ed60f9042cd227 +0 -0
  324. data/test/dummy/tmp/cache/assets/D11/FC0/sprockets%2F9bd6c83d367423fe05ef6c3338143aa6 +0 -0
  325. data/test/dummy/tmp/cache/assets/D11/FD0/sprockets%2Fa7872e06fd015c19f48f4c350d63cc19 +0 -0
  326. data/test/dummy/tmp/cache/assets/D12/1C0/sprockets%2F5901cb9faf1725dd2e472ca2965b4287 +0 -0
  327. data/test/dummy/tmp/cache/assets/D12/BE0/sprockets%2Ff01aaa83ff0f19584cb671837a7d7444 +0 -0
  328. data/test/dummy/tmp/cache/assets/D13/6B0/sprockets%2F0975ed2a9d299bf1c719b3b1137e581b +0 -0
  329. data/test/dummy/tmp/cache/assets/D14/340/sprockets%2F4d057c80e80694c2c4d637ecd538bc08 +0 -0
  330. data/test/dummy/tmp/cache/assets/D14/BD0/sprockets%2Ffc2255112852fb55d96d41a92f8fb6b6 +0 -0
  331. data/test/dummy/tmp/cache/assets/D14/DA0/sprockets%2F54a7d7c2a544df07d57173cda79e9700 +0 -0
  332. data/test/dummy/tmp/cache/assets/D15/A20/sprockets%2F46b5881e463b09c7f61736e5ec2aeb16 +0 -0
  333. data/test/dummy/tmp/cache/assets/D15/A20/sprockets%2F9e52b9b230f4aa1d0e1a74699d82e983 +0 -0
  334. data/test/dummy/tmp/cache/assets/D16/2A0/sprockets%2F3739709cf73c9a32b521b45677cd4bde +0 -0
  335. data/test/dummy/tmp/cache/assets/D17/6C0/sprockets%2F69144d8b21e495ac17e4994fdfa3a803 +0 -0
  336. data/test/dummy/tmp/cache/assets/D19/680/sprockets%2Fcd3a545b89d274cfd328f4d341f96272 +0 -0
  337. data/test/dummy/tmp/cache/assets/D19/E90/sprockets%2F16cd7e58935dd8d1d376f10be6b50368 +0 -0
  338. data/test/dummy/tmp/cache/assets/D1A/0C0/sprockets%2Fa606399c0ce2e298b58fec46777024ad +0 -0
  339. data/test/dummy/tmp/cache/assets/D1B/C80/sprockets%2F835147dfca8c918a99182e9e2e600f1c +0 -0
  340. data/test/dummy/tmp/cache/assets/D1C/070/sprockets%2F19aa6be16056890e435d65d4c84cf69e +0 -0
  341. data/test/dummy/tmp/cache/assets/D1D/700/sprockets%2F72d9824da671eff2338d52de93b83a56 +0 -0
  342. data/test/dummy/tmp/cache/assets/D1D/C60/sprockets%2F54364ea078190fbd4168336feef963fc +0 -0
  343. data/test/dummy/tmp/cache/assets/D1F/5F0/sprockets%2Ff8cb248d9fc90758124cd284e17e3b66 +0 -0
  344. data/test/dummy/tmp/cache/assets/D21/EF0/sprockets%2F935d9ee3ec37515493a293c3785dadc8 +0 -0
  345. data/test/dummy/tmp/cache/assets/D22/0B0/sprockets%2F9dfda36b032e59892637b875d7af392b +0 -0
  346. data/test/dummy/tmp/cache/assets/D22/2C0/sprockets%2Fe42d5d90d467a803999bdec116955f8b +0 -0
  347. data/test/dummy/tmp/cache/assets/D23/610/sprockets%2F0e51cca080cc65e62e080941b232a1ed +0 -0
  348. data/test/dummy/tmp/cache/assets/D23/EB0/sprockets%2Fe26ee953fe7e3172d737e6e67a96332a +0 -0
  349. data/test/dummy/tmp/cache/assets/D25/C00/sprockets%2Ff63d097054df34bc660bdf98f7661b99 +0 -0
  350. data/test/dummy/tmp/cache/assets/D26/470/sprockets%2F1e9b32c11057bc537b0021de4f1f1fc6 +0 -0
  351. data/test/dummy/tmp/cache/assets/D29/910/sprockets%2Fe51f36e9fde73e3928070a96fcf77571 +0 -0
  352. data/test/dummy/tmp/cache/assets/D2A/E10/sprockets%2F2d2a1cfcc28a38330d30434fd8c1077c +0 -0
  353. data/test/dummy/tmp/cache/assets/D2B/210/sprockets%2F67aaa6c903e6b15c74de39af0002a451 +0 -0
  354. data/test/dummy/tmp/cache/assets/D2B/CF0/sprockets%2F70b2adc5e73b271342371aaad257b76d +0 -0
  355. data/test/dummy/tmp/cache/assets/D2D/E40/sprockets%2Faf21fa3d26ad3f68a23532178e20fb15 +0 -0
  356. data/test/dummy/tmp/cache/assets/D2F/100/sprockets%2F8c0286ee70744ca12c7c12a563de4b2a +0 -0
  357. data/test/dummy/tmp/cache/assets/D32/3E0/sprockets%2Fc9f2c6b93b29fa3b0d5420b751903eb1 +0 -0
  358. data/test/dummy/tmp/cache/assets/D32/6E0/sprockets%2Fb4f78f31b9aab6dbd2911b07076d4601 +0 -0
  359. data/test/dummy/tmp/cache/assets/D32/A80/sprockets%2Fb12fb26042f73cf3b2796abc2836ee20 +0 -0
  360. data/test/dummy/tmp/cache/assets/D36/7F0/sprockets%2F78e0c63f0043ae6e6536ec504cc23a9b +0 -0
  361. data/test/dummy/tmp/cache/assets/D36/E70/sprockets%2F69b00a4118d012bf6d7cf293b5f316ff +0 -0
  362. data/test/dummy/tmp/cache/assets/D37/070/sprockets%2F59e3be9a13634f3b3d0cab4ad0889063 +0 -0
  363. data/test/dummy/tmp/cache/assets/D39/740/sprockets%2Fd4834d921f293e5dcc04bea2b3917d51 +0 -0
  364. data/test/dummy/tmp/cache/assets/D3A/520/sprockets%2F7193d867aa217d4a306848dbcc1d9c0b +0 -0
  365. data/test/dummy/tmp/cache/assets/D3A/670/sprockets%2F0db6624d07920a5f4decb479718da33c +0 -0
  366. data/test/dummy/tmp/cache/assets/D3A/690/sprockets%2Fb5058a82d02b84df6210af598cfa644c +0 -0
  367. data/test/dummy/tmp/cache/assets/D3A/A00/sprockets%2F1077cd94fef55fbb01ce529612180bd5 +0 -0
  368. data/test/dummy/tmp/cache/assets/D3A/ED0/sprockets%2F5ae1cf0266d63b8eb0647535ca93b63d +0 -0
  369. data/test/dummy/tmp/cache/assets/D3C/640/sprockets%2F42e7a70bb8be9398385afb3c4742aa04 +0 -0
  370. data/test/dummy/tmp/cache/assets/D3C/E40/sprockets%2Fba57600a2dd2f6da96613de37f27930f +0 -0
  371. data/test/dummy/tmp/cache/assets/D3D/4E0/sprockets%2F7d37b8c27a3f3b1a02c4fe17643de865 +0 -0
  372. data/test/dummy/tmp/cache/assets/D3E/940/sprockets%2F5ed82a03c1de5c34135b67ff053787ec +0 -0
  373. data/test/dummy/tmp/cache/assets/D3E/F80/sprockets%2Fa146a4bfc3b8cb08334b9b14fe379756 +0 -0
  374. data/test/dummy/tmp/cache/assets/D3F/050/sprockets%2Fab4aa96dbce1e6b359f2658118291d90 +0 -0
  375. data/test/dummy/tmp/cache/assets/D3F/590/sprockets%2F13a259ba93c919fa5a47ba9cf10569f1 +0 -0
  376. data/test/dummy/tmp/cache/assets/D3F/E10/sprockets%2Ff8492202733ea4a4f67065c95eec1beb +0 -0
  377. data/test/dummy/tmp/cache/assets/D40/6C0/sprockets%2Fafe496eaca27b82020893b81383e8b6b +0 -0
  378. data/test/dummy/tmp/cache/assets/D40/D10/sprockets%2F7af151c9b6080d9285fe058ae6d40c4d +0 -0
  379. data/test/dummy/tmp/cache/assets/D40/E50/sprockets%2F278df3df34e9573cbd9a402e42d1193b +0 -0
  380. data/test/dummy/tmp/cache/assets/D41/220/sprockets%2Fafb511e47c76bf448b6f7072c8d3118c +0 -0
  381. data/test/dummy/tmp/cache/assets/D41/770/sprockets%2F271c5f12457864bbb0c6646c9ebf1f3f +0 -0
  382. data/test/dummy/tmp/cache/assets/D41/8A0/sprockets%2Fbc7ce77806517ea173350e6a4d8c55db +0 -0
  383. data/test/dummy/tmp/cache/assets/D41/D70/sprockets%2F48b33bbf96854b502b0eaf902e69d55c +0 -0
  384. data/test/dummy/tmp/cache/assets/D41/FE0/sprockets%2F2901ba969f333cc19393afd2f0fc7c64 +0 -0
  385. data/test/dummy/tmp/cache/assets/D42/970/sprockets%2Fe27c8084b9cf2eaa063f585e92064c5a +0 -0
  386. data/test/dummy/tmp/cache/assets/D43/F70/sprockets%2F2c844357dd8de7db147f80c3539b0ee0 +0 -0
  387. data/test/dummy/tmp/cache/assets/D44/6D0/sprockets%2F4d7032af47bfce2d4a8564830f8a6a96 +0 -0
  388. data/test/dummy/tmp/cache/assets/D45/1C0/sprockets%2F7e052d17bd4b749ba373bea97380c8f6 +0 -0
  389. data/test/dummy/tmp/cache/assets/D45/3B0/sprockets%2Fd26b5a0d570ef57d06df6f032e9b8980 +0 -0
  390. data/test/dummy/tmp/cache/assets/D46/770/sprockets%2F96355435f9ab8090c2d3e4f0ddd9b7c3 +0 -0
  391. data/test/dummy/tmp/cache/assets/D46/8E0/sprockets%2F1a4f07bd2741629bdd572848dccf773e +0 -0
  392. data/test/dummy/tmp/cache/assets/D47/2B0/sprockets%2Ff3d8c4ca1a44044d98395b36b770fcf9 +0 -0
  393. data/test/dummy/tmp/cache/assets/D47/8F0/sprockets%2F1cc6e49382be4f74cbb97821ae1928c4 +0 -0
  394. data/test/dummy/tmp/cache/assets/D47/AC0/sprockets%2Fcb9189183de4d74faa04d6ad1347964f +0 -0
  395. data/test/dummy/tmp/cache/assets/D48/1D0/sprockets%2Fbff4201c0944eaf31a2f6a0110cbd224 +0 -0
  396. data/test/dummy/tmp/cache/assets/D48/2F0/sprockets%2F6b79e4839df89b4abb51c2c6105d15e8 +0 -0
  397. data/test/dummy/tmp/cache/assets/D48/960/sprockets%2F90e2c11ff8fd31e591b9fd39932631bf +0 -0
  398. data/test/dummy/tmp/cache/assets/D4A/C80/sprockets%2F0289519826ada458af4b9a728fdfcf31 +0 -0
  399. data/test/dummy/tmp/cache/assets/D4B/C20/sprockets%2Fc28f3c4d6cd98dbb784830d7c6214d65 +0 -0
  400. data/test/dummy/tmp/cache/assets/D4B/E90/sprockets%2F51d49f9bc2549684e6da91a4e0bc379b +0 -0
  401. data/test/dummy/tmp/cache/assets/D4C/490/sprockets%2F7e207e1654e5343a964fd6cf3fefb447 +0 -0
  402. data/test/dummy/tmp/cache/assets/D4C/BD0/sprockets%2F4ac9d1aa903d4731edf18fe2b9589829 +0 -0
  403. data/test/dummy/tmp/cache/assets/D4E/640/sprockets%2Fdaab3d2130266b5b7a2f1d04b8c4322e +0 -0
  404. data/test/dummy/tmp/cache/assets/D4E/6C0/sprockets%2Fedd9cf282af0f00637e5273c8c3888b9 +0 -0
  405. data/test/dummy/tmp/cache/assets/D4E/D00/sprockets%2F1a6846f0a837ae2524e2f9ec89e6ef43 +0 -0
  406. data/test/dummy/tmp/cache/assets/D4F/410/sprockets%2F1377bb2e86073ae3a688e5a6c499a9df +0 -0
  407. data/test/dummy/tmp/cache/assets/D50/E10/sprockets%2F28698bc0c536fe5e97a2935e3bb929bb +0 -0
  408. data/test/dummy/tmp/cache/assets/D51/230/sprockets%2F742ba6ca9f84d98ffc38ca5687c05155 +0 -0
  409. data/test/dummy/tmp/cache/assets/D53/440/sprockets%2F2def445147b9f5d6363f6f6d497d2f0e +0 -0
  410. data/test/dummy/tmp/cache/assets/D53/DE0/sprockets%2F7736b51cb3bf8679b8bdc8ab9d184954 +0 -0
  411. data/test/dummy/tmp/cache/assets/D54/0D0/sprockets%2F448752db3a53dd453db1b01de121ebd2 +0 -0
  412. data/test/dummy/tmp/cache/assets/D56/1F0/sprockets%2F291fcb7a26ff3aac6bc1404e0a247242 +0 -0
  413. data/test/dummy/tmp/cache/assets/D57/DF0/sprockets%2F8d06b94587d49e037e77f8afcb6802cf +0 -0
  414. data/test/dummy/tmp/cache/assets/D59/070/sprockets%2F822cd47e69d40ba87f95181fdd698ed5 +0 -0
  415. data/test/dummy/tmp/cache/assets/D5A/070/sprockets%2Fe7159b621a21a7a0ebd81a32912e8faa +0 -0
  416. data/test/dummy/tmp/cache/assets/D5A/D80/sprockets%2F28dc9152e2ead49ae414a5b82d04a1a2 +0 -0
  417. data/test/dummy/tmp/cache/assets/D5C/660/sprockets%2F5baf6a64b3151ae6bf40155e90db6e03 +0 -0
  418. data/test/dummy/tmp/cache/assets/D5C/E00/sprockets%2F92930d4e993eb8bd3498b699dccf9a33 +0 -0
  419. data/test/dummy/tmp/cache/assets/D5E/3D0/sprockets%2F5f786d832b4e0ba05f6abc3ea314901a +0 -0
  420. data/test/dummy/tmp/cache/assets/D5F/7F0/sprockets%2Fabbcc55042a82b42c900c09d59de4c29 +0 -0
  421. data/test/dummy/tmp/cache/assets/D60/2A0/sprockets%2Fcd5c12269b6c414bf722c6c2dc0e18c4 +0 -0
  422. data/test/dummy/tmp/cache/assets/D62/140/sprockets%2F7e5a724c4c00951a0da7ec767ce19aa1 +0 -0
  423. data/test/dummy/tmp/cache/assets/D62/2E0/sprockets%2F51a06ddef9bd05b405fd605d37be3154 +0 -0
  424. data/test/dummy/tmp/cache/assets/D63/B00/sprockets%2F2672399dfcdd2b6b61536cab3d800bc1 +0 -0
  425. data/test/dummy/tmp/cache/assets/D63/D60/sprockets%2Ff791df22a3d7e2f4ef01ad0742f370c1 +0 -0
  426. data/test/dummy/tmp/cache/assets/D63/DC0/sprockets%2Fc298c2b66150c7f11d95cecf450bb14a +0 -0
  427. data/test/dummy/tmp/cache/assets/D63/DE0/sprockets%2F73c9e04acfc930681ab170b3e4bfc453 +0 -0
  428. data/test/dummy/tmp/cache/assets/D64/670/sprockets%2F7dc8c0ad36d436eb56a0824a46e0eb08 +0 -0
  429. data/test/dummy/tmp/cache/assets/D64/B50/sprockets%2F7ac06eacb363b85744337c0ea88e2b0c +0 -0
  430. data/test/dummy/tmp/cache/assets/D65/990/sprockets%2Fa2965ca374a00aaceb747e60b654e2f8 +0 -0
  431. data/test/dummy/tmp/cache/assets/D66/360/sprockets%2Fc94d86aa0bc1a44817a1fd3db0873a87 +0 -0
  432. data/test/dummy/tmp/cache/assets/D66/6C0/sprockets%2F1b63a7f0e3fb2a7f3124f198d0ff462b +0 -0
  433. data/test/dummy/tmp/cache/assets/D67/8E0/sprockets%2Ffd0eaaf36da9805e6c4ec303534162f5 +0 -0
  434. data/test/dummy/tmp/cache/assets/D67/C10/sprockets%2Ffb4b4451c110f07957c2ecacf854c5d4 +0 -0
  435. data/test/dummy/tmp/cache/assets/D68/000/sprockets%2F39c01fa5c01830f3558eb1c97c4dfb6b +0 -0
  436. data/test/dummy/tmp/cache/assets/D68/0C0/sprockets%2F6c628ddf1ba5c680e04ad54a476f163b +0 -0
  437. data/test/dummy/tmp/cache/assets/D68/210/sprockets%2Fdc284967860db06c2cb2e1da78bab156 +0 -0
  438. data/test/dummy/tmp/cache/assets/D6A/2E0/sprockets%2Fc3a3a8e66c9b58b52b1db3ad754c9423 +0 -0
  439. data/test/dummy/tmp/cache/assets/D6B/BA0/sprockets%2F8293eb343aead8dda54496532fb24fa1 +0 -0
  440. data/test/dummy/tmp/cache/assets/D6C/AD0/sprockets%2Fdabce05f6e4419832e20d6b7420fe9a7 +0 -0
  441. data/test/dummy/tmp/cache/assets/D6D/080/sprockets%2F3cc7b7355591babda1661e6c5e9f8c20 +0 -0
  442. data/test/dummy/tmp/cache/assets/D6D/690/sprockets%2Fd288d7215df092fdc70b3b8216dce2f3 +0 -0
  443. data/test/dummy/tmp/cache/assets/D6D/7A0/sprockets%2Fff4be901f55528b85b2b1fc73ebc4352 +0 -0
  444. data/test/dummy/tmp/cache/assets/D6D/E80/sprockets%2F9ef00ee94e3b0eed7c4e45b342085d51 +0 -0
  445. data/test/dummy/tmp/cache/assets/D6E/940/sprockets%2Fb19f43bd8383eeb5e26a4d2b79f1240e +0 -0
  446. data/test/dummy/tmp/cache/assets/D6E/9F0/sprockets%2F15f61ad82d9ca6cce6a0e42b7249662f +0 -0
  447. data/test/dummy/tmp/cache/assets/D6E/AD0/sprockets%2F4441be9946083b61e75f7bf1a1cca5cf +0 -0
  448. data/test/dummy/tmp/cache/assets/D73/3F0/sprockets%2F09b4a9c1131740eba5d85fcf9c86b97a +0 -0
  449. data/test/dummy/tmp/cache/assets/D76/030/sprockets%2F7e8689ec6a9f3754a4aa660e303cbf4a +0 -0
  450. data/test/dummy/tmp/cache/assets/D76/C80/sprockets%2F952307811ad5e9e8b540cf5e9cf08cea +0 -0
  451. data/test/dummy/tmp/cache/assets/D76/CA0/sprockets%2F797920cdabaf2f8431968a34c2cbae79 +0 -0
  452. data/test/dummy/tmp/cache/assets/D77/B70/sprockets%2Fa02f64f352cfa69d33983fd15e8ea3d7 +0 -0
  453. data/test/dummy/tmp/cache/assets/D77/FF0/sprockets%2F126c2e2ca6f5e8477c9525f46cdba7d5 +0 -0
  454. data/test/dummy/tmp/cache/assets/D79/2F0/sprockets%2F4b9fd617fe0d6c7e5eb934a139507e3d +0 -0
  455. data/test/dummy/tmp/cache/assets/D79/E80/sprockets%2F7d329345d1b9f914c87fc5e07ea9ab4b +0 -0
  456. data/test/dummy/tmp/cache/assets/D7A/5C0/sprockets%2F6e2b202ee971a68c1e78eddf5658e53a +0 -0
  457. data/test/dummy/tmp/cache/assets/D7A/8C0/sprockets%2Fc477a2d0aa5d658fd7294d6f6c5a484e +0 -0
  458. data/test/dummy/tmp/cache/assets/D7C/160/sprockets%2F6847e66cdafb094701f479a515ede5dd +0 -0
  459. data/test/dummy/tmp/cache/assets/D7C/750/sprockets%2F1f76d236fdf42a817bd84da719fde069 +0 -0
  460. data/test/dummy/tmp/cache/assets/D7C/B90/sprockets%2Fc89b5af12387ee80ca80e3f2ac776c79 +0 -0
  461. data/test/dummy/tmp/cache/assets/D7E/2A0/sprockets%2F1ce479f9423e748690a75abbabf8af84 +0 -0
  462. data/test/dummy/tmp/cache/assets/D7F/A60/sprockets%2F5c683951503f673cceffa6ba76f38b8d +0 -0
  463. data/test/dummy/tmp/cache/assets/D81/120/sprockets%2F75c7f18e61fa042b776ce2e5c3ff786f +0 -0
  464. data/test/dummy/tmp/cache/assets/D82/560/sprockets%2Fcb5875caef3f569f08878b13cdd991a2 +0 -0
  465. data/test/dummy/tmp/cache/assets/D84/0A0/sprockets%2F07fc0bfe2237a171b813aa147f3ced1a +0 -0
  466. data/test/dummy/tmp/cache/assets/D85/050/sprockets%2Fa9b35663e7dc78eacde8d84ae3599163 +0 -0
  467. data/test/dummy/tmp/cache/assets/D85/5A0/sprockets%2Fc2cbee1b5160e0e8b022933feb36ea30 +0 -0
  468. data/test/dummy/tmp/cache/assets/D87/6D0/sprockets%2F51df69aad9a6f892254deb9d4c1992f8 +0 -0
  469. data/test/dummy/tmp/cache/assets/D88/1B0/sprockets%2Fb5bb04fc812b607ce046a4b702be4c4f +0 -0
  470. data/test/dummy/tmp/cache/assets/D88/7E0/sprockets%2Fe9fedb2c5be893a15939dc65f684196b +0 -0
  471. data/test/dummy/tmp/cache/assets/D8A/2C0/sprockets%2F6ec8da0142f240ce8a7e0b46aea363c1 +0 -0
  472. data/test/dummy/tmp/cache/assets/D8A/370/sprockets%2Fb4600d72a29aba7a39c2ec58aa04f18b +0 -0
  473. data/test/dummy/tmp/cache/assets/D8A/B90/sprockets%2F7506f75d60f93f9e8405ffb9cf85ddb2 +0 -0
  474. data/test/dummy/tmp/cache/assets/D8A/BF0/sprockets%2F1967ce66d464496a6fab44ff8be55ef6 +0 -0
  475. data/test/dummy/tmp/cache/assets/D8C/9C0/sprockets%2F2e7c2cd86215800a37c4d4b1bf0bea5f +0 -0
  476. data/test/dummy/tmp/cache/assets/D8E/910/sprockets%2Fbbf8e4c05ca721c1cd18c17902256ade +0 -0
  477. data/test/dummy/tmp/cache/assets/D8F/C40/sprockets%2Fa76260381aff4aa0c8beea0404e95de2 +0 -0
  478. data/test/dummy/tmp/cache/assets/D93/3B0/sprockets%2Fd0fb3bdcf317425a433a125c986b3dff +0 -0
  479. data/test/dummy/tmp/cache/assets/D94/1A0/sprockets%2Fb4748c092e8a4c127bcfacb06cdc2735 +0 -0
  480. data/test/dummy/tmp/cache/assets/D94/AD0/sprockets%2Fa1ac4bf342006e1f98def10cf9d7d234 +0 -0
  481. data/test/dummy/tmp/cache/assets/D95/430/sprockets%2Fcf054ac65aa2c4b72d661fc32c898aa5 +0 -0
  482. data/test/dummy/tmp/cache/assets/D96/C10/sprockets%2F620f6865aeb0de3c5cf8b305b13c7cb7 +0 -0
  483. data/test/dummy/tmp/cache/assets/D97/2B0/sprockets%2F16a899a4b20af5f53cdd2870e1b0aed8 +0 -0
  484. data/test/dummy/tmp/cache/assets/D97/4C0/sprockets%2F4d4aea86610bc9652c70455a6beafc4d +0 -0
  485. data/test/dummy/tmp/cache/assets/D99/330/sprockets%2Ff01679ca9c88dd0a3eb6922b0b8f3bc0 +0 -0
  486. data/test/dummy/tmp/cache/assets/D99/B10/sprockets%2F4aa8fece5b18d820a44dc266a89d50e0 +0 -0
  487. data/test/dummy/tmp/cache/assets/D99/CD0/sprockets%2Ffe0c5f4b8b52baa0f91870da12599a6d +0 -0
  488. data/test/dummy/tmp/cache/assets/D9D/170/sprockets%2F37f702f1f3ad35b9022fc87fdce7de02 +0 -0
  489. data/test/dummy/tmp/cache/assets/D9E/C90/sprockets%2F9cd75b38f1c1f85bbdac2576ca9106b5 +0 -0
  490. data/test/dummy/tmp/cache/assets/D9F/6F0/sprockets%2Fff261c15e6b97bf57e372f0de1ad571a +0 -0
  491. data/test/dummy/tmp/cache/assets/D9F/800/sprockets%2F5c722d8150c68e6eacad70fb64e5e1f5 +0 -0
  492. data/test/dummy/tmp/cache/assets/DA0/1B0/sprockets%2F71e2cd8803aac9fb0bb4c47593cf17e8 +0 -0
  493. data/test/dummy/tmp/cache/assets/DA1/530/sprockets%2F88a8bb9debb752ba06f07909db83e02d +0 -0
  494. data/test/dummy/tmp/cache/assets/DA3/9F0/sprockets%2F5122955dfe6694bdc6b69cbea09d2cd1 +0 -0
  495. data/test/dummy/tmp/cache/assets/DA4/450/sprockets%2F6f2bd50f9f1551ed8e00fd8b84f37c2c +0 -0
  496. data/test/dummy/tmp/cache/assets/DA5/0E0/sprockets%2Fe61590dc98f1e532ea20e296c5fce7bd +0 -0
  497. data/test/dummy/tmp/cache/assets/DA6/FC0/sprockets%2F900ed66847c0ec1eff94ad75fc26f11e +0 -0
  498. data/test/dummy/tmp/cache/assets/DAB/B00/sprockets%2F5286678a74e7bcc66e0d3c7c7d2db5fb +0 -0
  499. data/test/dummy/tmp/cache/assets/DAD/810/sprockets%2Fcfb7db145b0d0a3010f5d0cd7a08fb15 +0 -0
  500. data/test/dummy/tmp/cache/assets/DAE/A40/sprockets%2F7fefa2cd6e72f17c926159c9b7c3a95a +0 -0
  501. data/test/dummy/tmp/cache/assets/DB0/BF0/sprockets%2F52e4cdf37aa489ff6c138dedf036588d +0 -0
  502. data/test/dummy/tmp/cache/assets/DB1/C80/sprockets%2Fa2d1a10a3cc780fd30127b2be96ddfa2 +0 -0
  503. data/test/dummy/tmp/cache/assets/DB2/850/sprockets%2F9d6e12a0e28cc9ded4e859613cf75f6e +0 -0
  504. data/test/dummy/tmp/cache/assets/DB6/710/sprockets%2Ff53e9d96ae4808ad0f9e09ab4ef78f80 +0 -0
  505. data/test/dummy/tmp/cache/assets/DBA/7F0/sprockets%2F4f7fd7b68b8bc29c67fa996e37eaf512 +0 -0
  506. data/test/dummy/tmp/cache/assets/DBD/080/sprockets%2F039ace5986a3cbf4cca0b0a753bc71a6 +0 -0
  507. data/test/dummy/tmp/cache/assets/DBE/210/sprockets%2Fa12ca5480c3e2b9cf44ab4ef32e813ec +0 -0
  508. data/test/dummy/tmp/cache/assets/DBE/DF0/sprockets%2F6d1f018e11ee2240a8dd1df920c6cddd +0 -0
  509. data/test/dummy/tmp/cache/assets/DC0/760/sprockets%2Fb7e4cf2efcf48d0dcc420131fd30d454 +0 -0
  510. data/test/dummy/tmp/cache/assets/DC1/C20/sprockets%2Fb60b7b3aeb56bd55b67183b6f151ecca +0 -0
  511. data/test/dummy/tmp/cache/assets/DC5/5F0/sprockets%2F9d4cc0ae7ac214bb22c7cf455d06b9c9 +0 -0
  512. data/test/dummy/tmp/cache/assets/DC5/660/sprockets%2F637431e1c8fffeaafc23f021bd49fa06 +0 -0
  513. data/test/dummy/tmp/cache/assets/DC6/7C0/sprockets%2Fb408df7a822c70a0924e0cdf6c8fe2ca +0 -0
  514. data/test/dummy/tmp/cache/assets/DC8/2F0/sprockets%2F15c5ad9491aa5ef9fe4aef6333fa12c0 +0 -0
  515. data/test/dummy/tmp/cache/assets/DC8/C70/sprockets%2Fbb5351434afe5616cbe7e4a6cea95a6b +0 -0
  516. data/test/dummy/tmp/cache/assets/DCC/F40/sprockets%2Fdc3342c548fc7d3c4f4e27732b5acfea +0 -0
  517. data/test/dummy/tmp/cache/assets/DCD/390/sprockets%2Fdcd461b67aec99b76eea270a9ad2c046 +0 -0
  518. data/test/dummy/tmp/cache/assets/DCD/730/sprockets%2Fe577d2f2df0ce1516b2bdfa9fe0909e0 +0 -0
  519. data/test/dummy/tmp/cache/assets/DCD/8D0/sprockets%2Fbf36f09be83b4d0986ad23ea4d1f32df +0 -0
  520. data/test/dummy/tmp/cache/assets/DCE/1C0/sprockets%2F58cc5eb1cb2a47c8067c940caecf449d +0 -0
  521. data/test/dummy/tmp/cache/assets/DCE/BA0/sprockets%2F57c5ecddc82aa706b1e64691a8a5bcc9 +0 -0
  522. data/test/dummy/tmp/cache/assets/DCF/4A0/sprockets%2F3efd01a56bae3ae99fd13085f75b9e0d +0 -0
  523. data/test/dummy/tmp/cache/assets/DD1/4A0/sprockets%2Fd1fd81d46b69d255ebc7ab7f3f96a03a +0 -0
  524. data/test/dummy/tmp/cache/assets/DD2/380/sprockets%2F7972dab64d4a2a8007c3ecfd887ace4e +0 -0
  525. data/test/dummy/tmp/cache/assets/DD2/D90/sprockets%2Facc08ab37871b8576bfcb992aedaf228 +0 -0
  526. data/test/dummy/tmp/cache/assets/DD3/FE0/sprockets%2Fd19b0f09a29f8558a8d1f5cfc02acec9 +0 -0
  527. data/test/dummy/tmp/cache/assets/DD8/5C0/sprockets%2F9dd7bcb46a4b58ee446353a9cdaf93f2 +0 -0
  528. data/test/dummy/tmp/cache/assets/DD9/AA0/sprockets%2Ff96cdb075b4fc5b6eabb92832f6ad758 +0 -0
  529. data/test/dummy/tmp/cache/assets/DD9/F90/sprockets%2Ff09bdb745c8fa4987aa1ffcd6370c94b +0 -0
  530. data/test/dummy/tmp/cache/assets/DDB/140/sprockets%2F7815fdf1a6a74db4fca71ff6537ced67 +0 -0
  531. data/test/dummy/tmp/cache/assets/DDD/E10/sprockets%2Fd7292f5eb3a7b1f583efbf05aef567d9 +0 -0
  532. data/test/dummy/tmp/cache/assets/DDE/C00/sprockets%2Ffb5947d8ea5a7d6c08c71b3c9d7a88cb +0 -0
  533. data/test/dummy/tmp/cache/assets/DE7/3B0/sprockets%2F55fc91edc7ee6e5f818993cbddb6b707 +0 -0
  534. data/test/dummy/tmp/cache/assets/DE7/550/sprockets%2Ffff04b0980f1fbe9ece54cd8ca779867 +0 -0
  535. data/test/dummy/tmp/cache/assets/DE8/980/sprockets%2Fea9daa72d1acd0886cc064d0ea6c4a30 +0 -0
  536. data/test/dummy/tmp/cache/assets/DEF/140/sprockets%2F0182a5cba9d2df2eabb3783cf53a1ea9 +0 -0
  537. data/test/dummy/tmp/cache/assets/DF5/0C0/sprockets%2Faf8105cfdb7ceae04b099c4a2f654ce1 +0 -0
  538. data/test/dummy/tmp/cache/assets/DF5/4D0/sprockets%2Fa1a06ee61db75c3c0bed4caad288789b +0 -0
  539. data/test/dummy/tmp/cache/assets/DF7/110/sprockets%2F0654cdd8dfa5adb61e2029fefe5f50c0 +0 -0
  540. data/test/dummy/tmp/cache/assets/DF7/D40/sprockets%2F38cdcfc274accc45023affa7be98350c +0 -0
  541. data/test/dummy/tmp/cache/assets/DF8/570/sprockets%2Fd956ef1a15caba08edb2fc63c569f20d +0 -0
  542. data/test/dummy/tmp/cache/assets/DFB/E90/sprockets%2Ff7bd5fbb19ef32fc5a396d8012fac3f0 +0 -0
  543. data/test/dummy/tmp/cache/assets/DFC/9D0/sprockets%2F38fd8e0a2fde3b853f2a24571cd2dfdd +0 -0
  544. data/test/dummy/tmp/cache/assets/DFE/3C0/sprockets%2Fe7c824dbbee345aa5a66a56ebe82a29e +0 -0
  545. data/test/dummy/tmp/cache/assets/DFF/560/sprockets%2F5c1cedb5538de9d0c4dc9fdb62554fa1 +0 -0
  546. data/test/dummy/tmp/cache/assets/E02/B00/sprockets%2F723ccdfbeacf6c4176de34f371c91af9 +0 -0
  547. data/test/dummy/tmp/cache/assets/E02/DA0/sprockets%2F9829dec75de6c2a52fdc20d428d2edae +0 -0
  548. data/test/dummy/tmp/cache/assets/E04/860/sprockets%2F972757dbdbdfabfeac8ecb8a15520793 +0 -0
  549. data/test/dummy/tmp/cache/assets/E05/A70/sprockets%2F7a4daf48a8b7fba4f7bd770048b37fbf +0 -0
  550. data/test/dummy/tmp/cache/assets/E07/5B0/sprockets%2F75fdbfc0584a9cb9dda6428a66dec4b5 +0 -0
  551. data/test/dummy/tmp/cache/assets/E0C/810/sprockets%2Fe74897a12cedd8efea5a559354bd5bfc +0 -0
  552. data/test/dummy/tmp/cache/assets/E0F/B40/sprockets%2Ff5dfabed7f563e53d4735ef9c4b7a0e9 +0 -0
  553. data/test/dummy/tmp/cache/assets/E11/400/sprockets%2Ff6a9c23ee9f2ed728efa077ea66dfb55 +0 -0
  554. data/test/dummy/tmp/cache/assets/E11/4E0/sprockets%2F86e145a39f85cceeaffdff91ebb61449 +0 -0
  555. data/test/dummy/tmp/cache/assets/E11/C70/sprockets%2Fe5ad970d57c66489f9eebacb8e3a5ae5 +0 -0
  556. data/test/dummy/tmp/cache/assets/E13/B10/sprockets%2Fafbb0a11dcbf1c86ee74a1f22f2c173a +0 -0
  557. data/test/dummy/tmp/cache/assets/E14/0B0/sprockets%2F8bffda6f68fc139ee329bc86f6b7d2f1 +0 -0
  558. data/test/dummy/tmp/cache/assets/E1E/DE0/sprockets%2F84b3baefc2c0a8c2c9c0a92eacc3557b +0 -0
  559. data/test/dummy/tmp/cache/assets/E1F/5E0/sprockets%2Fedacf71afed14b1da329d30fcaf84091 +0 -0
  560. data/test/dummy/tmp/cache/assets/E21/330/sprockets%2F816aead61cd3e240f2bbe1e78da1fdb7 +0 -0
  561. data/test/dummy/tmp/cache/assets/E27/540/sprockets%2F3507970b2c1ccbf7b6bc37d61efadfeb +0 -0
  562. data/test/dummy/tmp/cache/assets/E2A/030/sprockets%2Fc8ab33fc707f5fb9b8befd27b142b3cb +0 -0
  563. data/test/dummy/tmp/cache/assets/E2C/EA0/sprockets%2Fcb15d5ff97502cc7dfe8a2e06ab16efb +0 -0
  564. data/test/dummy/tmp/cache/assets/E2F/3D0/sprockets%2Ff740ae8eecbaedadc3c664c62b83e925 +0 -0
  565. data/test/dummy/tmp/cache/assets/E30/C50/sprockets%2Fdaad6c4c7b1429f8de49d81fac6ad18b +0 -0
  566. data/test/dummy/tmp/cache/assets/E32/FD0/sprockets%2Fce7d29b07b2f0d14ef1add992dfafa89 +0 -0
  567. data/test/dummy/tmp/cache/assets/E36/230/sprockets%2F56aec75c7f17ef3509d4cadcf2e6fc3d +0 -0
  568. data/test/dummy/tmp/cache/assets/E37/6B0/sprockets%2Fce49aa1fbe8185b07e78cf9b9eee22ab +0 -0
  569. data/test/dummy/tmp/cache/assets/E3B/DD0/sprockets%2F8cb9fef1ee4f6bcbb80758f5c675db1a +0 -0
  570. data/test/dummy/tmp/cache/assets/E3C/680/sprockets%2Fd057ba99f8cc7b032da8ed9e8c0dff7c +0 -0
  571. data/test/dummy/tmp/cache/assets/E3E/270/sprockets%2F426e7ee1f8aeb990a55fdf8d6eefbd04 +0 -0
  572. data/test/dummy/tmp/cache/assets/E54/0F0/sprockets%2Fddbe86c2b19c9b2c5d0bca8e248a1fcb +0 -0
  573. data/test/dummy/tmp/cache/assets/E83/3A0/sprockets%2Ffdb5f7dc3aba4ce1edb8fd4bd1b42923 +0 -0
  574. data/test/dummy/tmp/cache/assets/E89/BE0/sprockets%2F9bfc41fee1adbc5e0ab3e58eafb550f9 +0 -0
  575. data/test/dummy/tmp/cache/assets/E93/2E0/sprockets%2Fba1eb3cc84f5e1fd789bf5f61a8ecdbc +0 -0
  576. metadata +90 -24
  577. data/app/assets/javascripts/Core/computeSunPosition.js +0 -116
  578. data/app/assets/javascripts/DynamicScene/CzmlCartographic.js +0 -125
  579. data/app/assets/javascripts/DynamicScene/DynamicConeVisualizer.js +0 -350
  580. data/app/assets/javascripts/Scene/ComplexConicSensorVolume.js +0 -511
  581. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.glsl +0 -448
  582. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.glsl +0 -19
  583. data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.glsl +0 -886
  584. data/app/assets/javascripts/Shaders/Noise.glsl +0 -453
  585. data/app/assets/javascripts/Shaders/PolygonFSPick.glsl +0 -6
  586. data/app/assets/javascripts/Shaders/PolygonVSPick.glsl +0 -30
  587. data/app/assets/javascripts/Shaders/Ray.glsl +0 -532
  588. data/app/assets/javascripts/Widgets/Animation/darker.css +0 -69
  589. data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.html +0 -4
  590. data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.js +0 -348
  591. data/app/assets/javascripts/Widgets/Fullscreen/darker.css +0 -14
  592. data/app/assets/javascripts/Widgets/Images/enterFullscreen-darker.svg +0 -18
  593. data/app/assets/javascripts/Widgets/Images/exitFullscreen-darker.svg +0 -18
  594. data/app/assets/javascripts/Widgets/Images/viewControlBar.png +0 -0
  595. data/app/assets/javascripts/Widgets/Timeline/darker.css +0 -20
  596. data/app/assets/javascripts/Workers/package.json +0 -6
@@ -1,39 +1,90 @@
1
1
  /*global define*/
2
- define(['../Core/DeveloperError'], function(DeveloperError) {
2
+ define([
3
+ '../Core/Color',
4
+ '../Core/freezeObject'
5
+ ], function(
6
+ Color,
7
+ freezeObject) {
3
8
  "use strict";
4
9
 
5
10
  /**
6
- * Represents a command to the renderer for clearing.
11
+ * Represents a command to the renderer for clearing a framebuffer.
7
12
  *
8
13
  * @alias ClearCommand
9
14
  * @constructor
10
15
  *
11
- * @param {ClearState} [clearState] The clear state.
16
+ * @see DrawCommand
17
+ * @see PassState
12
18
  */
13
- var ClearCommand = function(clearState) {
19
+ var ClearCommand = function() {
14
20
  /**
15
- * The clear state. If this property is undefined, a default clear state is used.
21
+ * The value to clear the color buffer to. When <code>undefined</code>, the color buffer is not cleared.
22
+ *
23
+ * @type Color
24
+ * @default undefined
25
+ */
26
+ this.color = undefined;
27
+
28
+ /**
29
+ * The value to clear the depth buffer to. When <code>undefined</code>, the depth buffer is not cleared.
30
+ *
31
+ * @type Number
32
+ * @default undefined
33
+ */
34
+ this.depth = undefined;
35
+
36
+ /**
37
+ * The value to clear the stencil buffer to. When <code>undefined</code>, the stencil buffer is not cleared.
38
+ *
39
+ * @type Number
40
+ * @default undefined
41
+ */
42
+ this.stencil = undefined;
43
+
44
+ /**
45
+ * The render state to apply when executing the clear command. The following states affect clearing:
46
+ * scissor test, color mask, depth mask, stencil mask, and dither. When the render state is
47
+ * <code>undefined</code>, the default render state is used.
48
+ *
16
49
  * @type Object
50
+ * @default undefined
51
+ *
52
+ * @see Context#createRenderState
17
53
  */
18
- this.clearState = clearState;
54
+ this.renderState = undefined;
19
55
 
20
56
  /**
21
57
  * The framebuffer to clear.
58
+ *
22
59
  * @type Framebuffer
60
+ * @default undefined
23
61
  */
24
62
  this.framebuffer = undefined;
25
63
  };
26
64
 
65
+ var all = new ClearCommand();
66
+ all.color = new Color(0.0, 0.0, 0.0, 0.0);
67
+ all.depth = 1.0;
68
+ all.stencil = 0.0;
69
+
70
+ /**
71
+ * Clears color to (0.0, 0.0, 0.0, 0.0); depth to 1.0; and stencil to 0.
72
+ *
73
+ * @constant
74
+ * @type {ClearCommand}
75
+ */
76
+ ClearCommand.ALL = freezeObject(all);
77
+
27
78
  /**
28
79
  * Executes the clear command.
29
80
  *
30
81
  * @memberof ClearCommand
31
82
  *
32
83
  * @param {Context} context The renderer context in which to clear.
33
- * @param {Framebuffer} [framebuffer] The framebuffer to clear if one is not specified by the command.
84
+ * @param {PassState} [passState] The state for the current rendering pass.
34
85
  */
35
- ClearCommand.prototype.execute = function(context, framebuffer) {
36
- context.clear(this, framebuffer);
86
+ ClearCommand.prototype.execute = function(context, passState) {
87
+ context.clear(this, passState);
37
88
  };
38
89
 
39
90
  return ClearCommand;
@@ -7,17 +7,11 @@ define([
7
7
  '../Core/IndexDatatype',
8
8
  '../Core/RuntimeError',
9
9
  '../Core/PrimitiveType',
10
- '../Core/WindingOrder',
11
- '../Core/BoundingRectangle',
12
10
  '../Core/createGuid',
13
11
  '../Core/Matrix4',
14
12
  './Buffer',
15
13
  './BufferUsage',
16
- './BlendEquation',
17
- './BlendFunction',
18
14
  './CubeMap',
19
- './CullFace',
20
- './DepthFunction',
21
15
  './Framebuffer',
22
16
  './MipmapHint',
23
17
  './PixelDatatype',
@@ -25,10 +19,9 @@ define([
25
19
  './PickFramebuffer',
26
20
  './Renderbuffer',
27
21
  './RenderbufferFormat',
22
+ './RenderState',
28
23
  './ShaderCache',
29
24
  './ShaderProgram',
30
- './StencilFunction',
31
- './StencilOperation',
32
25
  './Texture',
33
26
  './TextureAtlas',
34
27
  './TextureMagnificationFilter',
@@ -36,7 +29,9 @@ define([
36
29
  './TextureWrap',
37
30
  './UniformState',
38
31
  './VertexArray',
39
- './VertexLayout'
32
+ './VertexLayout',
33
+ './ClearCommand',
34
+ './PassState'
40
35
  ], function(
41
36
  defaultValue,
42
37
  DeveloperError,
@@ -45,17 +40,11 @@ define([
45
40
  IndexDatatype,
46
41
  RuntimeError,
47
42
  PrimitiveType,
48
- WindingOrder,
49
- BoundingRectangle,
50
43
  createGuid,
51
44
  Matrix4,
52
45
  Buffer,
53
46
  BufferUsage,
54
- BlendEquation,
55
- BlendFunction,
56
47
  CubeMap,
57
- CullFace,
58
- DepthFunction,
59
48
  Framebuffer,
60
49
  MipmapHint,
61
50
  PixelDatatype,
@@ -63,10 +52,9 @@ define([
63
52
  PickFramebuffer,
64
53
  Renderbuffer,
65
54
  RenderbufferFormat,
55
+ RenderState,
66
56
  ShaderCache,
67
57
  ShaderProgram,
68
- StencilFunction,
69
- StencilOperation,
70
58
  Texture,
71
59
  TextureAtlas,
72
60
  TextureMagnificationFilter,
@@ -74,9 +62,10 @@ define([
74
62
  TextureWrap,
75
63
  UniformState,
76
64
  VertexArray,
77
- VertexLayout) {
65
+ VertexLayout,
66
+ ClearCommand,
67
+ PassState) {
78
68
  "use strict";
79
- /*global Uint8Array*/
80
69
 
81
70
  function _errorToString(gl, error) {
82
71
  var message = 'OpenGL Error: ';
@@ -173,7 +162,7 @@ define([
173
162
  throw new RuntimeError('The browser does not support WebGL. Visit http://get.webgl.org.');
174
163
  }
175
164
 
176
- if (!canvas) {
165
+ if (typeof canvas === 'undefined') {
177
166
  throw new DeveloperError('canvas is required.');
178
167
  }
179
168
 
@@ -183,7 +172,7 @@ define([
183
172
  options = {};
184
173
  }
185
174
  if (typeof options.stencil === 'undefined') {
186
- options.stencil = true;
175
+ options.stencil = false;
187
176
  }
188
177
  if (typeof options.alpha === 'undefined') {
189
178
  options.alpha = false;
@@ -203,8 +192,6 @@ define([
203
192
  this._logShaderCompilation = false;
204
193
  this._throwOnWebGLError = false;
205
194
 
206
- // TODO: Also need point_size and point_size_enable for ColladaFX
207
- // TODO: Also need sample_alpha_to_coverage_enable for ColladaFX
208
195
  this._shaderCache = new ShaderCache(this);
209
196
 
210
197
  var gl = this._gl = this._originalGLContext;
@@ -244,17 +231,24 @@ define([
244
231
  this._clearColor = new Color(cc[0], cc[1], cc[2], cc[3]);
245
232
  this._clearDepth = gl.getParameter(gl.DEPTH_CLEAR_VALUE);
246
233
  this._clearStencil = gl.getParameter(gl.STENCIL_CLEAR_VALUE);
247
- this._defaultClearColor = new Color(cc[0], cc[1], cc[2], cc[3]);
248
- this._defaultClearDepth = this._clearDepth;
249
- this._defaultClearStencil = this._clearStencil;
250
234
 
251
- this._us = new UniformState();
252
- this._currentFramebuffer = undefined;
253
- this._currentSp = undefined;
235
+ var us = new UniformState();
236
+ var ps = new PassState(this);
237
+ var rs = this.createRenderState();
254
238
 
239
+ this._defaultPassState = ps;
240
+ this._defaultRenderState = rs;
255
241
  this._defaultTexture = undefined;
256
242
  this._defaultCubeMap = undefined;
257
243
 
244
+ this._us = us;
245
+ this._currentFramebuffer = undefined;
246
+ this._currentSp = undefined;
247
+ this._currentRenderState = rs;
248
+
249
+ this._pickObjects = {};
250
+ this._nextPickColor = new Uint32Array(1);
251
+
258
252
  /**
259
253
  * A cache of objects tied to this context. Just before the Context is destroyed,
260
254
  * <code>destroy</code> will be invoked on each object in this object literal that has
@@ -266,186 +260,8 @@ define([
266
260
  * @type {Object}
267
261
  */
268
262
  this.cache = {};
269
- };
270
-
271
- Context.prototype._enableOrDisable = function(glEnum, enable) {
272
- if (enable) {
273
- this._gl.enable(glEnum);
274
- } else {
275
- this._gl.disable(glEnum);
276
- }
277
- };
278
-
279
- Context.prototype._applyFrontFace = function(frontFace) {
280
- this._gl.frontFace(frontFace);
281
- };
282
-
283
- Context.prototype._applyCull = function(cull) {
284
- var gl = this._gl;
285
- var enabled = cull.enabled;
286
-
287
- this._enableOrDisable(gl.CULL_FACE, enabled);
288
-
289
- if (enabled) {
290
- gl.cullFace(cull.face);
291
- }
292
- };
293
-
294
- Context.prototype._applyLineWidth = function(lineWidth) {
295
- this._gl.lineWidth(lineWidth);
296
- };
297
-
298
- Context.prototype._applyPolygonOffset = function(polygonOffset) {
299
- var gl = this._gl;
300
- var enabled = polygonOffset.enabled;
301
-
302
- this._enableOrDisable(gl.POLYGON_OFFSET_FILL, enabled);
303
-
304
- if (enabled) {
305
- gl.polygonOffset(polygonOffset.factor, polygonOffset.units);
306
- }
307
- };
308
-
309
- Context.prototype._applyScissorTest = function(scissorTest) {
310
- var gl = this._gl;
311
- var enabled = scissorTest.enabled;
312
-
313
- this._enableOrDisable(gl.SCISSOR_TEST, enabled);
314
-
315
- if (enabled) {
316
- var newRectangle = scissorTest.rectangle;
317
- gl.scissor(newRectangle.x, newRectangle.y, newRectangle.width, newRectangle.height);
318
- }
319
- };
320
-
321
- Context.prototype._applyDepthRange = function(depthRange) {
322
- var near = depthRange.near;
323
- var far = depthRange.far;
324
- this._gl.depthRange(near, far);
325
- };
326
-
327
- Context.prototype._applyDepthTest = function(depthTest) {
328
- var gl = this._gl;
329
- var enabled = depthTest.enabled;
330
-
331
- this._enableOrDisable(gl.DEPTH_TEST, enabled);
332
-
333
- if (enabled) {
334
- gl.depthFunc(depthTest.func);
335
- }
336
- };
337
-
338
- Context.prototype._applyColorMask = function(colorMask) {
339
- this._gl.colorMask(colorMask.red, colorMask.green, colorMask.blue, colorMask.alpha);
340
- };
341
-
342
- Context.prototype._applyDepthMask = function(depthMask) {
343
- this._gl.depthMask(depthMask);
344
- };
345
-
346
- Context.prototype._applyStencilMask = function(stencilMask) {
347
- this._gl.stencilMask(stencilMask);
348
- };
349
-
350
- Context.prototype._applyBlending = function(blending) {
351
- var gl = this._gl;
352
- var enabled = blending.enabled;
353
-
354
- this._enableOrDisable(gl.BLEND, enabled);
355
-
356
- if (enabled) {
357
- var color = blending.color;
358
- var equationRgb = blending.equationRgb;
359
- var equationAlpha = blending.equationAlpha;
360
- var functionSourceRgb = blending.functionSourceRgb;
361
- var functionDestinationRgb = blending.functionDestinationRgb;
362
- var functionSourceAlpha = blending.functionSourceAlpha;
363
- var functionDestinationAlpha = blending.functionDestinationAlpha;
364
-
365
- gl.blendColor(color.red, color.green, color.blue, color.alpha);
366
- gl.blendEquationSeparate(equationRgb, equationAlpha);
367
- gl.blendFuncSeparate(functionSourceRgb, functionDestinationRgb, functionSourceAlpha, functionDestinationAlpha);
368
- }
369
- };
370
-
371
- Context.prototype._applyStencilTest = function(stencilTest) {
372
- var gl = this._gl;
373
- var enabled = stencilTest.enabled;
374
-
375
- this._enableOrDisable(gl.STENCIL_TEST, enabled);
376
-
377
- if (enabled) {
378
- var frontFunction = stencilTest.frontFunction;
379
- var backFunction = stencilTest.backFunction;
380
- var reference = stencilTest.reference;
381
- var mask = stencilTest.mask;
382
-
383
- // Section 6.8 of the WebGL spec requires the reference and masks to be the same for
384
- // front- and back-face tests. This call prevents invalid operation errors when calling
385
- // stencilFuncSeparate on Firefox. Perhaps they should delay validation to avoid requiring this.
386
- gl.stencilFunc(stencilTest.frontFunction, stencilTest.reference, stencilTest.mask);
387
- gl.stencilFuncSeparate(gl.BACK, backFunction, reference, mask);
388
- gl.stencilFuncSeparate(gl.FRONT, frontFunction, reference, mask);
389
-
390
- var frontOperation = stencilTest.frontOperation;
391
- var frontOperationFail = frontOperation.fail;
392
- var frontOperationZFail = frontOperation.zFail;
393
- var frontOperationZPass = frontOperation.zPass;
394
263
 
395
- gl.stencilOpSeparate(gl.FRONT, frontOperationFail, frontOperationZFail, frontOperationZPass);
396
-
397
- var backOperation = stencilTest.backOperation;
398
- var backOperationFail = backOperation.fail;
399
- var backOperationZFail = backOperation.zFail;
400
- var backOperationZPass = backOperation.zPass;
401
-
402
- gl.stencilOpSeparate(gl.BACK, backOperationFail, backOperationZFail, backOperationZPass);
403
- }
404
- };
405
-
406
- Context.prototype._applySampleCoverage = function(sampleCoverage) {
407
- var gl = this._gl;
408
- var enabled = sampleCoverage.enabled;
409
-
410
- this._enableOrDisable(gl.SAMPLE_COVERAGE, enabled);
411
-
412
- if (enabled) {
413
- gl.sampleCoverage(sampleCoverage.value, sampleCoverage.invert);
414
- }
415
- };
416
-
417
- Context.prototype._applyDither = function(dither) {
418
- this._enableOrDisable(this._gl.DITHER, dither);
419
- };
420
-
421
- var scratchViewport = new BoundingRectangle();
422
- Context.prototype._applyViewport = function(viewport) {
423
- if (typeof viewport === 'undefined') {
424
- viewport = scratchViewport;
425
- viewport.width = this._canvas.clientWidth;
426
- viewport.height = this._canvas.clientHeight;
427
- }
428
-
429
- this._us.setViewport(viewport);
430
- this._gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height);
431
- };
432
-
433
- Context.prototype._applyRenderState = function(state) {
434
- this._applyFrontFace(state.frontFace);
435
- this._applyCull(state.cull);
436
- this._applyLineWidth(state.lineWidth);
437
- this._applyPolygonOffset(state.polygonOffset);
438
- this._applyScissorTest(state.scissorTest);
439
- this._applyDepthRange(state.depthRange);
440
- this._applyDepthTest(state.depthTest);
441
- this._applyColorMask(state.colorMask);
442
- this._applyDepthMask(state.depthMask);
443
- this._applyStencilMask(state.stencilMask);
444
- this._applyBlending(state.blending);
445
- this._applyStencilTest(state.stencilTest);
446
- this._applySampleCoverage(state.sampleCoverage);
447
- this._applyDither(state.dither);
448
- this._applyViewport(state.viewport);
264
+ RenderState.apply(gl, rs, ps);
449
265
  };
450
266
 
451
267
  /**
@@ -1496,7 +1312,7 @@ define([
1496
1312
  * var t = context.createTexture2DFromFramebuffer();
1497
1313
  */
1498
1314
  Context.prototype.createTexture2DFromFramebuffer = function(pixelFormat, framebufferXOffset, framebufferYOffset, width, height) {
1499
- pixelFormat = pixelFormat || PixelFormat.RGB;
1315
+ pixelFormat = defaultValue(pixelFormat, PixelFormat.RGB);
1500
1316
  framebufferXOffset = defaultValue(framebufferXOffset, 0);
1501
1317
  framebufferYOffset = defaultValue(framebufferYOffset, 0);
1502
1318
  width = defaultValue(width, this._canvas.clientWidth);
@@ -1763,11 +1579,10 @@ define([
1763
1579
  * @see Context#createFramebuffer
1764
1580
  */
1765
1581
  Context.prototype.createRenderbuffer = function(description) {
1766
- description = description || {};
1767
- var format = description.format || RenderbufferFormat.RGBA4;
1768
- var width = (typeof description.width === 'undefined') ? this._canvas.clientWidth : description.width;
1769
- var height = (typeof description.height === 'undefined') ? this._canvas.clientHeight : description.height;
1770
-
1582
+ description = defaultValue(description, defaultValue.EMPTY_OBJECT);
1583
+ var format = defaultValue(description.format, RenderbufferFormat.RGBA4);
1584
+ var width = typeof description.width !== 'undefined' ? description.width : this._canvas.clientWidth;
1585
+ var height = typeof description.height !== 'undefined' ? description.height : this._canvas.clientHeight;
1771
1586
 
1772
1587
  var gl = this._gl;
1773
1588
  if (!RenderbufferFormat.validate(format)) {
@@ -1793,13 +1608,18 @@ define([
1793
1608
  return new Renderbuffer(gl, format, width, height);
1794
1609
  };
1795
1610
 
1611
+ var nextRenderStateId = 0;
1612
+ var renderStateCache = {};
1613
+
1796
1614
  /**
1797
- * DOC_TBA.
1798
- *
1799
- * Validates and adds defaults for missing states.
1615
+ * Validates and then finds or creates an immutable render state, which defines the pipeline
1616
+ * state for a {@link DrawCommand} or {@link ClearCommand}. All inputs states are optional. Omitted states
1617
+ * use the defaults shown in the example below.
1800
1618
  *
1801
1619
  * @memberof Context
1802
1620
  *
1621
+ * @param {Object} [renderState=undefined] The states defining the render state as shown in the example below.
1622
+ *
1803
1623
  * @exception {RuntimeError} renderState.lineWidth is out of range.
1804
1624
  * @exception {DeveloperError} Invalid renderState.frontFace.
1805
1625
  * @exception {DeveloperError} Invalid renderState.cull.face.
@@ -1827,226 +1647,115 @@ define([
1827
1647
  * @exception {DeveloperError} renderState.viewport.width must be less than or equal to the maximum viewport width.
1828
1648
  * @exception {DeveloperError} renderState.viewport.height must be greater than or equal to zero.
1829
1649
  * @exception {DeveloperError} renderState.viewport.height must be less than or equal to the maximum viewport height.
1650
+ *
1651
+ * @example
1652
+ * var defaults = {
1653
+ * frontFace : WindingOrder.COUNTER_CLOCKWISE,
1654
+ * cull : {
1655
+ * enabled : false,
1656
+ * face : CullFace.BACK
1657
+ * },
1658
+ * lineWidth : 1,
1659
+ * polygonOffset : {
1660
+ * enabled : false,
1661
+ * factor : 0,
1662
+ * units : 0
1663
+ * },
1664
+ * scissorTest : {
1665
+ * enabled : false,
1666
+ * rectangle : {
1667
+ * x : 0,
1668
+ * y : 0,
1669
+ * width : 0,
1670
+ * height : 0
1671
+ * }
1672
+ * },
1673
+ * depthRange : {
1674
+ * near : 0,
1675
+ * far : 1
1676
+ * },
1677
+ * depthTest : {
1678
+ * enabled : false,
1679
+ * func : DepthFunction.LESS
1680
+ * },
1681
+ * colorMask : {
1682
+ * red : true,
1683
+ * green : true,
1684
+ * blue : true,
1685
+ * alpha : true
1686
+ * },
1687
+ * depthMask : true,
1688
+ * stencilMask : ~0,
1689
+ * blending : {
1690
+ * enabled : false,
1691
+ * color : {
1692
+ * red : 0.0,
1693
+ * green : 0.0,
1694
+ * blue : 0.0,
1695
+ * alpha : 0.0
1696
+ * },
1697
+ * equationRgb : BlendEquation.ADD,
1698
+ * equationAlpha : BlendEquation.ADD,
1699
+ * functionSourceRgb : BlendFunction.ONE,
1700
+ * functionSourceAlpha : BlendFunction.ONE,
1701
+ * functionDestinationRgb : BlendFunction.ZERO,
1702
+ * functionDestinationAlpha : BlendFunction.ZERO
1703
+ * },
1704
+ * stencilTest : {
1705
+ * enabled : false,
1706
+ * frontFunction : StencilFunction.ALWAYS,
1707
+ * backFunction : StencilFunction.ALWAYS,
1708
+ * reference : 0,
1709
+ * mask : ~0,
1710
+ * frontOperation : {
1711
+ * fail : StencilOperation.KEEP,
1712
+ * zFail : StencilOperation.KEEP,
1713
+ * zPass : StencilOperation.KEEP
1714
+ * },
1715
+ * backOperation : {
1716
+ * fail : StencilOperation.KEEP,
1717
+ * zFail : StencilOperation.KEEP,
1718
+ * zPass : StencilOperation.KEEP
1719
+ * }
1720
+ * },
1721
+ * sampleCoverage : {
1722
+ * enabled : false,
1723
+ * value : 1.0,
1724
+ * invert : false
1725
+ * },
1726
+ * dither : true
1727
+ * };
1728
+ *
1729
+ * // Same as just context.createRenderState().
1730
+ * var rs = context.createRenderState(defaults);
1731
+ *
1732
+ * @see DrawCommand
1733
+ * @see ClearCommand
1830
1734
  */
1831
1735
  Context.prototype.createRenderState = function(renderState) {
1832
- var rs = renderState || {};
1833
- var cull = rs.cull || {};
1834
- var polygonOffset = rs.polygonOffset || {};
1835
- var scissorTest = rs.scissorTest || {};
1836
- var scissorTestRectangle = scissorTest.rectangle || {};
1837
- var depthRange = rs.depthRange || {};
1838
- var depthTest = rs.depthTest || {};
1839
- var colorMask = rs.colorMask || {};
1840
- var blending = rs.blending || {};
1841
- var blendingColor = blending.color || {};
1842
- var stencilTest = rs.stencilTest || {};
1843
- var stencilTestFrontOperation = stencilTest.frontOperation || {};
1844
- var stencilTestBackOperation = stencilTest.backOperation || {};
1845
- var sampleCoverage = rs.sampleCoverage || {};
1846
- var viewport = rs.viewport;
1847
-
1848
- var r = {
1849
- frontFace : (typeof rs.frontFace === 'undefined') ? WindingOrder.COUNTER_CLOCKWISE : rs.frontFace,
1850
- cull : {
1851
- enabled : (typeof cull.enabled === 'undefined') ? false : cull.enabled,
1852
- face : (typeof cull.face === 'undefined') ? CullFace.BACK : cull.face
1853
- },
1854
- lineWidth : (typeof rs.lineWidth === 'undefined') ? 1 : rs.lineWidth,
1855
- polygonOffset : {
1856
- enabled : (typeof polygonOffset.enabled === 'undefined') ? false : polygonOffset.enabled,
1857
- factor : (typeof polygonOffset.factor === 'undefined') ? 0 : polygonOffset.factor,
1858
- units : (typeof polygonOffset.units === 'undefined') ? 0 : polygonOffset.units
1859
- },
1860
- scissorTest : {
1861
- enabled : (typeof scissorTest.enabled === 'undefined') ? false : scissorTest.enabled,
1862
- rectangle : BoundingRectangle.clone(scissorTestRectangle)
1863
- },
1864
- depthRange : {
1865
- near : (typeof depthRange.near === 'undefined') ? 0 : depthRange.near,
1866
- far : (typeof depthRange.far === 'undefined') ? 1 : depthRange.far
1867
- },
1868
- depthTest : {
1869
- enabled : (typeof depthTest.enabled === 'undefined') ? false : depthTest.enabled,
1870
- func : (typeof depthTest.func === 'undefined') ? DepthFunction.LESS : depthTest.func // func, because function is a JavaScript keyword
1871
- },
1872
- colorMask : {
1873
- red : (typeof colorMask.red === 'undefined') ? true : colorMask.red,
1874
- green : (typeof colorMask.green === 'undefined') ? true : colorMask.green,
1875
- blue : (typeof colorMask.blue === 'undefined') ? true : colorMask.blue,
1876
- alpha : (typeof colorMask.alpha === 'undefined') ? true : colorMask.alpha
1877
- },
1878
- depthMask : (typeof rs.depthMask === 'undefined') ? true : rs.depthMask,
1879
- stencilMask : (typeof rs.stencilMask === 'undefined') ? ~0 : rs.stencilMask,
1880
- blending : {
1881
- enabled : (typeof blending.enabled === 'undefined') ? false : blending.enabled,
1882
- color : new Color(
1883
- (typeof blendingColor.red === 'undefined') ? 0.0 : blendingColor.red,
1884
- (typeof blendingColor.green === 'undefined') ? 0.0 : blendingColor.green,
1885
- (typeof blendingColor.blue === 'undefined') ? 0.0 : blendingColor.blue,
1886
- (typeof blendingColor.alpha === 'undefined') ? 0.0 : blendingColor.alpha
1887
- ),
1888
- equationRgb : (typeof blending.equationRgb === 'undefined') ? BlendEquation.ADD : blending.equationRgb,
1889
- equationAlpha : (typeof blending.equationAlpha === 'undefined') ? BlendEquation.ADD : blending.equationAlpha,
1890
- functionSourceRgb : (typeof blending.functionSourceRgb === 'undefined') ? BlendFunction.ONE : blending.functionSourceRgb,
1891
- functionSourceAlpha : (typeof blending.functionSourceAlpha === 'undefined') ? BlendFunction.ONE : blending.functionSourceAlpha,
1892
- functionDestinationRgb : (typeof blending.functionDestinationRgb === 'undefined') ? BlendFunction.ZERO : blending.functionDestinationRgb,
1893
- functionDestinationAlpha : (typeof blending.functionDestinationAlpha === 'undefined') ? BlendFunction.ZERO : blending.functionDestinationAlpha
1894
- },
1895
- stencilTest : {
1896
- enabled : (typeof stencilTest.enabled === 'undefined') ? false : stencilTest.enabled,
1897
- frontFunction : (typeof stencilTest.frontFunction === 'undefined') ? StencilFunction.ALWAYS : stencilTest.frontFunction,
1898
- backFunction : (typeof stencilTest.backFunction === 'undefined') ? StencilFunction.ALWAYS : stencilTest.backFunction,
1899
- reference : (typeof stencilTest.reference === 'undefined') ? 0 : stencilTest.reference,
1900
- mask : (typeof stencilTest.mask === 'undefined') ? ~0 : stencilTest.mask,
1901
- frontOperation : {
1902
- fail : (typeof stencilTestFrontOperation.fail === 'undefined') ? StencilOperation.KEEP : stencilTestFrontOperation.fail,
1903
- zFail : (typeof stencilTestFrontOperation.zFail === 'undefined') ? StencilOperation.KEEP : stencilTestFrontOperation.zFail,
1904
- zPass : (typeof stencilTestFrontOperation.zPass === 'undefined') ? StencilOperation.KEEP : stencilTestFrontOperation.zPass
1905
- },
1906
- backOperation : {
1907
- fail : (typeof stencilTestBackOperation.fail === 'undefined') ? StencilOperation.KEEP : stencilTestBackOperation.fail,
1908
- zFail : (typeof stencilTestBackOperation.zFail === 'undefined') ? StencilOperation.KEEP : stencilTestBackOperation.zFail,
1909
- zPass : (typeof stencilTestBackOperation.zPass === 'undefined') ? StencilOperation.KEEP : stencilTestBackOperation.zPass
1910
- }
1911
- },
1912
- // TODO: Also need point_size and point_size_enable for ColladaFX
1913
- // TODO: Also need sample_alpha_to_coverage_enable for ColladaFX
1914
- sampleCoverage : {
1915
- enabled : (typeof sampleCoverage.enabled === 'undefined') ? false : sampleCoverage.enabled,
1916
- value : (typeof sampleCoverage.value === 'undefined') ? 1.0 : sampleCoverage.value,
1917
- invert : (typeof sampleCoverage.invert === 'undefined') ? false : sampleCoverage.invert
1918
- },
1919
- dither : (typeof rs.dither === 'undefined') ? true : rs.dither
1920
- // viewport is set below because it is allowed to be undefined - meaning always the canvas size.
1921
- };
1922
-
1923
- // Validate
1924
-
1925
- if (!WindingOrder.validate(r.frontFace)) {
1926
- throw new DeveloperError('Invalid renderState.frontFace.');
1736
+ var partialKey = JSON.stringify(renderState);
1737
+ var cachedState = renderStateCache[partialKey];
1738
+ if (typeof cachedState !== 'undefined') {
1739
+ return cachedState;
1927
1740
  }
1928
1741
 
1929
- if (!CullFace.validate(r.cull.face)) {
1930
- throw new DeveloperError('Invalid renderState.cull.face.');
1931
- }
1742
+ // Cache miss. Fully define render state and try again.
1743
+ var states = new RenderState(this, renderState);
1744
+ var fullKey = JSON.stringify(states);
1745
+ cachedState = renderStateCache[fullKey];
1746
+ if (typeof cachedState === 'undefined') {
1747
+ states.id = nextRenderStateId++;
1932
1748
 
1933
- if ((r.lineWidth < this._aliasedLineWidthRange[0]) ||
1934
- (r.lineWidth > this._aliasedLineWidthRange[1])) {
1935
- throw new RuntimeError('renderState.lineWidth is out of range. Check getMinimumAliasedLineWidth() and getMaximumAliasedLineWidth().');
1936
- }
1937
-
1938
- if ((r.scissorTest.rectangle.width < 0) ||
1939
- (r.scissorTest.rectangle.height < 0)) {
1940
- throw new DeveloperError('renderState.scissorTest.rectangle.width and renderState.scissorTest.rectangle.height must be greater than or equal to zero.');
1941
- }
1749
+ cachedState = states;
1942
1750
 
1943
- if (r.depthRange.near > r.depthRange.far) {
1944
- // WebGL specific - not an error in GL ES
1945
- throw new DeveloperError('renderState.depthRange.near can not be greater than renderState.depthRange.far.');
1751
+ // Cache full render state. Multiple partially defined render states may map to this.
1752
+ renderStateCache[fullKey] = cachedState;
1946
1753
  }
1947
1754
 
1948
- if (r.depthRange.near < 0) {
1949
- // Would be clamped by GL
1950
- throw new DeveloperError('renderState.depthRange.near must be greater than or equal to zero.');
1951
- }
1952
-
1953
- if (r.depthRange.far > 1) {
1954
- // Would be clamped by GL
1955
- throw new DeveloperError('renderState.depthRange.far must be less than or equal to one.');
1956
- }
1755
+ // Cache partial render state so we can skip validation on a cache hit for a partially defined render state
1756
+ renderStateCache[partialKey] = cachedState;
1957
1757
 
1958
-
1959
- if (!DepthFunction.validate(r.depthTest.func)) {
1960
- throw new DeveloperError('Invalid renderState.depthTest.func.');
1961
- }
1962
-
1963
- if ((r.blending.color.red < 0.0) || (r.blending.color.red > 1.0) ||
1964
- (r.blending.color.green < 0.0) || (r.blending.color.green > 1.0) ||
1965
- (r.blending.color.blue < 0.0) || (r.blending.color.blue > 1.0) ||
1966
- (r.blending.color.alpha < 0.0) || (r.blending.color.alpha > 1.0)) {
1967
- // Would be clamped by GL
1968
- throw new DeveloperError('renderState.blending.color components must be greater than or equal to zero and less than or equal to one.');
1969
- }
1970
-
1971
- if (!BlendEquation.validate(r.blending.equationRgb)) {
1972
- throw new DeveloperError('Invalid renderState.blending.equationRgb.');
1973
- }
1974
-
1975
- if (!BlendEquation.validate(r.blending.equationAlpha)) {
1976
- throw new DeveloperError('Invalid renderState.blending.equationAlpha.');
1977
- }
1978
-
1979
- if (!BlendFunction.validate(r.blending.functionSourceRgb)) {
1980
- throw new DeveloperError('Invalid renderState.blending.functionSourceRgb.');
1981
- }
1982
-
1983
- if (!BlendFunction.validate(r.blending.functionSourceAlpha)) {
1984
- throw new DeveloperError('Invalid renderState.blending.functionSourceAlpha.');
1985
- }
1986
-
1987
- if (!BlendFunction.validate(r.blending.functionDestinationRgb)) {
1988
- throw new DeveloperError('Invalid renderState.blending.functionDestinationRgb.');
1989
- }
1990
-
1991
- if (!BlendFunction.validate(r.blending.functionDestinationAlpha)) {
1992
- throw new DeveloperError('Invalid renderState.blending.functionDestinationAlpha.');
1993
- }
1994
-
1995
- if (!StencilFunction.validate(r.stencilTest.frontFunction)) {
1996
- throw new DeveloperError('Invalid renderState.stencilTest.frontFunction.');
1997
- }
1998
-
1999
- if (!StencilFunction.validate(r.stencilTest.backFunction)) {
2000
- throw new DeveloperError('Invalid renderState.stencilTest.backFunction.');
2001
- }
2002
-
2003
- if (!StencilOperation.validate(r.stencilTest.frontOperation.fail)) {
2004
- throw new DeveloperError('Invalid renderState.stencilTest.frontOperation.fail.');
2005
- }
2006
-
2007
- if (!StencilOperation.validate(r.stencilTest.frontOperation.zFail)) {
2008
- throw new DeveloperError('Invalid renderState.stencilTest.frontOperation.zFail.');
2009
- }
2010
-
2011
- if (!StencilOperation.validate(r.stencilTest.frontOperation.zPass)) {
2012
- throw new DeveloperError('Invalid renderState.stencilTest.frontOperation.zPass.');
2013
- }
2014
-
2015
- if (!StencilOperation.validate(r.stencilTest.backOperation.fail)) {
2016
- throw new DeveloperError('Invalid renderState.stencilTest.backOperation.fail.');
2017
- }
2018
-
2019
- if (!StencilOperation.validate(r.stencilTest.backOperation.zFail)) {
2020
- throw new DeveloperError('Invalid renderState.stencilTest.backOperation.zFail.');
2021
- }
2022
-
2023
- if (!StencilOperation.validate(r.stencilTest.backOperation.zPass)) {
2024
- throw new DeveloperError('Invalid renderState.stencilTest.backOperation.zPass.');
2025
- }
2026
-
2027
- if (typeof vieport !== 'undefined') {
2028
- if (viewport.width < 0) {
2029
- throw new DeveloperError('renderState.viewport.width must be greater than or equal to zero.');
2030
- }
2031
-
2032
- if (viewport.width > this.getMaximumViewportWidth()) {
2033
- throw new RuntimeError('renderState.viewport.width must be less than or equal to the maximum viewport width (' + this.getMaximumViewportWidth().toString() + '). Check getMaximumViewportWidth().');
2034
- }
2035
-
2036
- if (viewport.height < 0) {
2037
- throw new DeveloperError('renderState.viewport.height must be greater than or equal to zero.');
2038
- }
2039
-
2040
- if (viewport.height > this.getMaximumViewportHeight()) {
2041
- throw new RuntimeError('renderState.viewport.height must be less than or equal to the maximum viewport height (' + this.getMaximumViewportHeight().toString() + '). Check getMaximumViewportHeight().');
2042
- }
2043
-
2044
- r.viewport = new BoundingRectangle(viewport.x, viewport.y,
2045
- (typeof viewport.width === 'undefined') ? this._canvas.clientWidth : viewport.width,
2046
- (typeof viewport.height === 'undefined') ? this._canvas.clientHeight : viewport.height);
2047
- }
2048
-
2049
- return r;
1758
+ return cachedState;
2050
1759
  };
2051
1760
 
2052
1761
  /**
@@ -2094,68 +1803,6 @@ define([
2094
1803
  return s;
2095
1804
  };
2096
1805
 
2097
- /**
2098
- * DOC_TBA.
2099
- *
2100
- * @memberof Context
2101
- *
2102
- * Validates and adds defaults for missing states.
2103
- *
2104
- * @exception {DeveloperError} clearState.scissorTest.rectangle.width and clearState.scissorTest.rectangle.height must be greater than or equal to zero.
2105
- *
2106
- * @see Context#clear
2107
- */
2108
- Context.prototype.createClearState = function(clearState) {
2109
- var cs = clearState || {};
2110
- var scissorTest = cs.scissorTest || {};
2111
- var scissorTestRectangle = scissorTest.rectangle || {};
2112
- var colorMask = cs.colorMask || {};
2113
-
2114
- var color = cs.color;
2115
- var depth = cs.depth;
2116
- var stencil = cs.stencil;
2117
-
2118
- // Clear everything if nothing is specified
2119
- if ((typeof color === 'undefined') && (typeof depth === 'undefined') && (typeof stencil === 'undefined')) {
2120
- color = this._defaultClearColor;
2121
- depth = this._defaultClearDepth;
2122
- stencil = this._defaultClearStencil;
2123
- }
2124
-
2125
- var c = {
2126
- scissorTest : {
2127
- enabled : (typeof scissorTest.enabled === 'undefined') ? false : scissorTest.enabled,
2128
- rectangle : {
2129
- x : (typeof scissorTestRectangle.x === 'undefined') ? 0 : scissorTestRectangle.x,
2130
- y : (typeof scissorTestRectangle.y === 'undefined') ? 0 : scissorTestRectangle.y,
2131
- width : (typeof scissorTestRectangle.width === 'undefined') ? 0 : scissorTestRectangle.width,
2132
- height : (typeof scissorTestRectangle.height === 'undefined') ? 0 : scissorTestRectangle.height
2133
- }
2134
- },
2135
- colorMask : {
2136
- red : (typeof colorMask.red === 'undefined') ? true : colorMask.red,
2137
- green : (typeof colorMask.green === 'undefined') ? true : colorMask.green,
2138
- blue : (typeof colorMask.blue === 'undefined') ? true : colorMask.blue,
2139
- alpha : (typeof colorMask.alpha === 'undefined') ? true : colorMask.alpha
2140
- },
2141
- depthMask : (typeof cs.depthMask === 'undefined') ? true : cs.depthMask,
2142
- stencilMask : (typeof cs.stencilMask === 'undefined') ? ~0 : cs.stencilMask,
2143
- dither : (typeof cs.dither === 'undefined') ? true : cs.dither,
2144
-
2145
- framebuffer : cs.framebuffer,
2146
-
2147
- color : (typeof color !== 'undefined') ? Color.clone(color) : undefined,
2148
- depth : depth,
2149
- stencil : stencil
2150
- };
2151
-
2152
- if ((c.scissorTest.rectangle.width < 0) || (c.scissorTest.rectangle.height < 0)) {
2153
- throw new DeveloperError('clearState.scissorTest.rectangle.width and clearState.scissorTest.rectangle.height must be greater than or equal to zero.');
2154
- }
2155
-
2156
- return c;
2157
- };
2158
-
2159
1806
  Context.prototype._validateFramebuffer = function(framebuffer) {
2160
1807
  if (this._validateFB) {
2161
1808
  var gl = this._gl;
@@ -2184,34 +1831,39 @@ define([
2184
1831
  }
2185
1832
  };
2186
1833
 
1834
+ function applyRenderState(context, renderState, passState) {
1835
+ var previousState = context._currentRenderState;
1836
+ if (previousState !== renderState) {
1837
+ context._currentRenderState = renderState;
1838
+ RenderState.partialApply(context._gl, previousState, renderState, passState);
1839
+ }
1840
+ // else same render state as before so state is already applied.
1841
+ }
1842
+
1843
+ var defaultClearCommand = new ClearCommand();
1844
+
2187
1845
  /**
2188
1846
  * Executes the specified clear command.
2189
1847
  *
2190
1848
  * @memberof Context
2191
1849
  *
2192
- * @param {ClearCommand} [clearCommand] The command with which to clear. If this parameter is undefined
2193
- * or its clearState property is undefined, a default clear state is used.
2194
- * @param {Framebuffer} [framebuffer] The framebuffer to clear if one is not specified by the command.
1850
+ * @param {ClearCommand} [clearCommand] The command with which to clear.
1851
+ * @param {PassState} [passState] The state for the current rendering pass.
2195
1852
  *
2196
1853
  * @memberof Context
2197
1854
  *
2198
- * @see Context#createClearState
1855
+ * @see ClearCommand
2199
1856
  */
2200
- Context.prototype.clear = function(clearCommand, framebuffer) {
2201
- var clearState;
2202
- if (typeof clearCommand !== 'undefined' && typeof clearCommand.clearState !== 'undefined') {
2203
- clearState = clearCommand.clearState;
2204
- } else {
2205
- clearState = this.createClearState();
2206
- }
1857
+ Context.prototype.clear = function(clearCommand, passState) {
1858
+ clearCommand = defaultValue(clearCommand, defaultClearCommand);
1859
+ passState = defaultValue(passState, this._defaultPassState);
2207
1860
 
2208
1861
  var gl = this._gl;
2209
1862
  var bitmask = 0;
2210
1863
 
2211
- clearState = clearState || this.createClearState();
2212
- var c = clearState.color;
2213
- var d = clearState.depth;
2214
- var s = clearState.stencil;
1864
+ var c = clearCommand.color;
1865
+ var d = clearCommand.depth;
1866
+ var s = clearCommand.stencil;
2215
1867
 
2216
1868
  if (typeof c !== 'undefined') {
2217
1869
  if (!Color.equals(this._clearColor, c)) {
@@ -2237,22 +1889,20 @@ define([
2237
1889
  bitmask |= gl.STENCIL_BUFFER_BIT;
2238
1890
  }
2239
1891
 
2240
- this._applyScissorTest(clearState.scissorTest);
2241
- this._applyColorMask(clearState.colorMask);
2242
- this._applyDepthMask(clearState.depthMask);
2243
- this._applyStencilMask(clearState.stencilMask);
2244
- this._applyDither(clearState.dither);
1892
+ var rs = defaultValue(clearCommand.renderState, this._defaultRenderState);
1893
+ applyRenderState(this, rs, passState);
2245
1894
 
2246
- framebuffer = defaultValue(clearState.framebuffer, framebuffer);
1895
+ // The command's framebuffer takes presidence over the pass' framebuffer, e.g., for off-screen rendering.
1896
+ var framebuffer = defaultValue(clearCommand.framebuffer, passState.framebuffer);
2247
1897
 
2248
- if (framebuffer) {
1898
+ if (typeof framebuffer !== 'undefined') {
2249
1899
  framebuffer._bind();
2250
1900
  this._validateFramebuffer(framebuffer);
2251
1901
  }
2252
1902
 
2253
1903
  gl.clear(bitmask);
2254
1904
 
2255
- if (framebuffer) {
1905
+ if (typeof framebuffer !== 'undefined') {
2256
1906
  framebuffer._unBind();
2257
1907
  }
2258
1908
  };
@@ -2263,7 +1913,7 @@ define([
2263
1913
  * @memberof Context
2264
1914
  *
2265
1915
  * @param {DrawCommand} drawCommand The command with which to draw.
2266
- * @param {Framebuffer} [framebuffer] The framebuffer to which to draw if one is not specified by the command.
1916
+ * @param {PassState} [passState] The state for the current rendering pass
2267
1917
  *
2268
1918
  * @memberof Context
2269
1919
  *
@@ -2301,8 +1951,9 @@ define([
2301
1951
  * @see Context#createFramebuffer
2302
1952
  * @see Context#createRenderState
2303
1953
  */
2304
- Context.prototype.draw = function(drawCommand, framebuffer) {
2305
- this.beginDraw(drawCommand, framebuffer);
1954
+ Context.prototype.draw = function(drawCommand, passState) {
1955
+ passState = defaultValue(passState, this._defaultPassState);
1956
+ this.beginDraw(drawCommand, passState);
2306
1957
  this.continueDraw(drawCommand);
2307
1958
  this.endDraw();
2308
1959
  };
@@ -2312,7 +1963,7 @@ define([
2312
1963
  *
2313
1964
  * @memberof Context
2314
1965
  */
2315
- Context.prototype.beginDraw = function(command, framebuffer) {
1966
+ Context.prototype.beginDraw = function(command, passState) {
2316
1967
  if (typeof command === 'undefined') {
2317
1968
  throw new DeveloperError('command is required.');
2318
1969
  }
@@ -2321,11 +1972,12 @@ define([
2321
1972
  throw new DeveloperError('command.shaderProgram is required.');
2322
1973
  }
2323
1974
 
2324
- framebuffer = defaultValue(command.framebuffer, framebuffer);
1975
+ // The command's framebuffer takes presidence over the pass' framebuffer, e.g., for off-screen rendering.
1976
+ var framebuffer = defaultValue(command.framebuffer, passState.framebuffer);
2325
1977
  var sp = command.shaderProgram;
2326
- var rs = command.renderState || this.createRenderState();
1978
+ var rs = (typeof command.renderState !== 'undefined') ? command.renderState : this._defaultRenderState;
2327
1979
 
2328
- if (framebuffer && rs.depthTest) {
1980
+ if ((typeof framebuffer !== 'undefined') && rs.depthTest) {
2329
1981
  if (rs.depthTest.enabled && !framebuffer.hasDepthAttachment()) {
2330
1982
  throw new DeveloperError('The depth test can not be enabled (command.renderState.depthTest.enabled) because the framebuffer (command.framebuffer) does not have a depth or depth-stencil renderbuffer.');
2331
1983
  }
@@ -2333,8 +1985,9 @@ define([
2333
1985
 
2334
1986
  ///////////////////////////////////////////////////////////////////////
2335
1987
 
2336
- this._applyRenderState(rs);
2337
- if (framebuffer) {
1988
+ applyRenderState(this, rs, passState);
1989
+
1990
+ if (typeof framebuffer !== 'undefined') {
2338
1991
  framebuffer._bind();
2339
1992
  this._validateFramebuffer(framebuffer);
2340
1993
  }
@@ -2408,7 +2061,7 @@ define([
2408
2061
  * @memberof Context
2409
2062
  */
2410
2063
  Context.prototype.endDraw = function() {
2411
- if (this._currentFramebuffer) {
2064
+ if (typeof this._currentFramebuffer !== 'undefined') {
2412
2065
  this._currentFramebuffer._unBind();
2413
2066
  this._currentFramebuffer = undefined;
2414
2067
  }
@@ -2576,7 +2229,7 @@ define([
2576
2229
  return undefined;
2577
2230
  };
2578
2231
 
2579
- Context.prototype._createVertexArrayAttributes = function(creationArguments) {
2232
+ function createVertexArrayAttributes(context, creationArguments) {
2580
2233
  var ca = creationArguments || {};
2581
2234
  var mesh = ca.mesh || {};
2582
2235
  var attributeIndices = ca.attributeIndices || {};
@@ -2590,9 +2243,9 @@ define([
2590
2243
 
2591
2244
  if (interleave) {
2592
2245
  // Use a single vertex buffer with interleaved vertices.
2593
- var interleavedAttributes = this._interleaveAttributes(attributes);
2246
+ var interleavedAttributes = context._interleaveAttributes(attributes);
2594
2247
  if (interleavedAttributes) {
2595
- var vertexBuffer = this.createVertexBuffer(interleavedAttributes.buffer, bufferUsage);
2248
+ var vertexBuffer = context.createVertexBuffer(interleavedAttributes.buffer, bufferUsage);
2596
2249
  var offsetsInBytes = interleavedAttributes.offsetsInBytes;
2597
2250
  var strideInBytes = interleavedAttributes.vertexSizeInBytes;
2598
2251
 
@@ -2630,7 +2283,7 @@ define([
2630
2283
  attribute = attributes[name];
2631
2284
  vaAttributes.push({
2632
2285
  index : attributeIndices[name],
2633
- vertexBuffer : attribute.values ? this.createVertexBuffer(attribute.componentDatatype.toTypedArray(attribute.values), bufferUsage) : undefined,
2286
+ vertexBuffer : attribute.values ? context.createVertexBuffer(attribute.componentDatatype.toTypedArray(attribute.values), bufferUsage) : undefined,
2634
2287
  value : attribute.value ? attribute.value : undefined,
2635
2288
  componentDatatype : attribute.componentDatatype,
2636
2289
  componentsPerAttribute : attribute.componentsPerAttribute,
@@ -2640,8 +2293,8 @@ define([
2640
2293
  }
2641
2294
  }
2642
2295
 
2643
- return this.createVertexArray(vaAttributes);
2644
- };
2296
+ return context.createVertexArray(vaAttributes);
2297
+ }
2645
2298
 
2646
2299
  /**
2647
2300
  * Creates a vertex array from a mesh. A mesh contains vertex attributes and optional index data
@@ -2715,7 +2368,7 @@ define([
2715
2368
  }
2716
2369
  }
2717
2370
 
2718
- var va = this._createVertexArrayAttributes(creationArguments);
2371
+ var va = createVertexArrayAttributes(this, creationArguments);
2719
2372
 
2720
2373
  if (indexLists) {
2721
2374
  va.setIndexBuffer(this.createIndexBuffer(new Uint16Array(indexLists[0].values), bufferUsage, IndexDatatype.UNSIGNED_SHORT));
@@ -2736,69 +2389,75 @@ define([
2736
2389
  };
2737
2390
 
2738
2391
  /**
2739
- * DOC_TBA
2392
+ * Gets the object associated with a pick color.
2740
2393
  *
2741
2394
  * @memberof Context
2742
2395
  *
2396
+ * @param {Color} The pick color.
2397
+ *
2398
+ * @returns {Object} The object associated with the pick color, or undefined if no object is associated with that color.
2399
+ *
2400
+ * @exception {DeveloperError} pickColor is required.
2401
+ *
2402
+ * @example
2403
+ * var object = context.getObjectByPickColor(pickColor);
2404
+ *
2743
2405
  * @see Context#createPickId
2744
2406
  */
2745
- Context.prototype.getObjectByPickId = function(pickId) {
2407
+ Context.prototype.getObjectByPickColor = function(pickColor) {
2408
+ if (typeof pickColor === 'undefined') {
2409
+ throw new DeveloperError('pickColor is required.');
2410
+ }
2411
+
2412
+ return this._pickObjects[pickColor.toRgba()];
2413
+ };
2414
+
2415
+ function PickId(pickObjects, key, color) {
2416
+ this._pickObjects = pickObjects;
2417
+ this.key = key;
2418
+ this.color = color;
2419
+ }
2420
+
2421
+ PickId.prototype.destroy = function() {
2422
+ delete this._pickObjects[this.key];
2746
2423
  return undefined;
2747
2424
  };
2748
2425
 
2749
2426
  /**
2750
- * DOC_TBA
2427
+ * Creates a unique ID associated with the input object for use with color-buffer picking.
2428
+ * The ID has an RGBA color value unique to this context. You must call destroy()
2429
+ * on the pick ID when destroying the input object.
2751
2430
  *
2752
2431
  * @memberof Context
2753
2432
  *
2754
- * @see Context#getObjectByPickId
2433
+ * @param {Object} object The object to associate with the pick ID.
2434
+ *
2435
+ * @returns {Object} A PickId object with a <code>color</code> property.
2436
+ *
2437
+ * @exception {DeveloperError} object is required.
2438
+ * @exception {RuntimeError} Out of unique Pick IDs.
2439
+ *
2440
+ * @see Context#getObjectByPickColor
2441
+ *
2442
+ * @example
2443
+ * this._pickId = context.createPickId(this);
2755
2444
  */
2756
2445
  Context.prototype.createPickId = function(object) {
2757
- var objects = {};
2758
- var nextRgb = new Color(0, 0, 0, 0);
2759
-
2760
- function rgbToObjectIndex(unnormalizedRgb) {
2761
- // TODO: Use alpha?
2762
- var index = 'r' + unnormalizedRgb.red + 'g' + unnormalizedRgb.green + 'b' + unnormalizedRgb.blue;
2763
- return index;
2446
+ if (typeof object === 'undefined') {
2447
+ throw new DeveloperError('object is required.');
2764
2448
  }
2765
2449
 
2766
- function _createPickId(object) {
2767
- // TODO: Use alpha?
2768
- if (++nextRgb.blue === 256) {
2769
- nextRgb.blue = 0;
2770
-
2771
- if (++nextRgb.green === 256) {
2772
- nextRgb.green = 0;
2773
-
2774
- if (++nextRgb.red === 256) {
2775
- throw new RuntimeError('Out of unique Rgb colors.');
2776
- }
2777
- }
2778
- }
2779
-
2780
- var pickId = {
2781
- unnormalizedRgb : new Color(nextRgb.red, nextRgb.green, nextRgb.blue, 1.0),
2782
- normalizedRgba : Color.fromBytes(nextRgb.red, nextRgb.green, nextRgb.blue, 255.0),
2783
- destroy : function() {
2784
- // TODO: Remove from objects
2785
- return null;
2786
- }
2787
- };
2788
-
2789
- objects[rgbToObjectIndex(pickId.unnormalizedRgb)] = object;
2790
-
2791
- return pickId;
2450
+ // the increment and assignment have to be separate statements to
2451
+ // actually detect overflow in the Uint32 value
2452
+ ++this._nextPickColor[0];
2453
+ var key = this._nextPickColor[0];
2454
+ if (key === 0) {
2455
+ // In case of overflow
2456
+ throw new RuntimeError('Out of unique Pick IDs.');
2792
2457
  }
2793
2458
 
2794
- function _getObjectByPickId(unnormalizedRgb) {
2795
- return objects[rgbToObjectIndex(unnormalizedRgb)];
2796
- }
2797
-
2798
- this.createPickId = _createPickId;
2799
- this.getObjectByPickId = _getObjectByPickId;
2800
-
2801
- return _createPickId(object);
2459
+ this._pickObjects[key] = object;
2460
+ return new PickId(this._pickObjects, key, Color.fromRgba(key));
2802
2461
  };
2803
2462
 
2804
2463
  Context.prototype.isDestroyed = function() {