cesium 0.15.0 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
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() {