deeptwins-cesium-engine 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/Build/Workers/chunk-2HWLF3FT.js +837 -0
  2. package/Build/Workers/chunk-2KXMJ5XS.js +3792 -0
  3. package/Build/Workers/chunk-2NPCLB3H.js +56 -0
  4. package/Build/Workers/chunk-2ZHQTIBH.js +1483 -0
  5. package/Build/Workers/chunk-3GLYOW63.js +352 -0
  6. package/Build/Workers/chunk-3L22KMPU.js +219 -0
  7. package/Build/Workers/chunk-3Q6V2B2I.js +73 -0
  8. package/Build/Workers/chunk-3QOKKRIG.js +387 -0
  9. package/Build/Workers/chunk-44YZFGRH.js +1800 -0
  10. package/Build/Workers/chunk-45VV4SBO.js +2342 -0
  11. package/Build/Workers/chunk-4EJ4AA2S.js +368 -0
  12. package/Build/Workers/chunk-4IJFHUL6.js +414 -0
  13. package/Build/Workers/chunk-4K3V5CGW.js +454 -0
  14. package/Build/Workers/chunk-4M4QL6KJ.js +305 -0
  15. package/Build/Workers/chunk-4YNRIEQ6.js +288 -0
  16. package/Build/Workers/chunk-56CVDPH5.js +352 -0
  17. package/Build/Workers/chunk-5CTAAPXH.js +1483 -0
  18. package/Build/Workers/chunk-5ISZ6NJD.js +102 -0
  19. package/Build/Workers/chunk-5SDHYIOS.js +56 -0
  20. package/Build/Workers/chunk-66TGUMCU.js +2719 -0
  21. package/Build/Workers/chunk-6EJMTDQJ.js +163 -0
  22. package/Build/Workers/chunk-6VWXYSMH.js +959 -0
  23. package/Build/Workers/chunk-6VZ7VB2Q.js +241 -0
  24. package/Build/Workers/chunk-7AMRE57Q.js +301 -0
  25. package/Build/Workers/chunk-7DH6C33H.js +398 -0
  26. package/Build/Workers/chunk-7VUS3FVE.js +38 -0
  27. package/Build/Workers/chunk-7Y3ZA6H3.js +198 -0
  28. package/Build/Workers/chunk-A6BMHZNA.js +38 -0
  29. package/Build/Workers/chunk-A7XY2MN7.js +171 -0
  30. package/Build/Workers/chunk-AC7ND63S.js +57 -0
  31. package/Build/Workers/chunk-AHCZ757M.js +9230 -0
  32. package/Build/Workers/chunk-ANOA7E7F.js +56 -0
  33. package/Build/Workers/chunk-AYO5HHV6.js +789 -0
  34. package/Build/Workers/chunk-BE2N56VZ.js +1344 -0
  35. package/Build/Workers/chunk-BR3BPM64.js +9230 -0
  36. package/Build/Workers/chunk-BVMRWGOK.js +455 -0
  37. package/Build/Workers/chunk-BXEL2NX7.js +455 -0
  38. package/Build/Workers/chunk-C5BO2JCG.js +278 -0
  39. package/Build/Workers/chunk-CIRQNZVR.js +301 -0
  40. package/Build/Workers/chunk-CM67CQME.js +305 -0
  41. package/Build/Workers/chunk-D3QIW4DH.js +630 -0
  42. package/Build/Workers/chunk-E5W7QIGZ.js +511 -0
  43. package/Build/Workers/chunk-E6CYGUJI.js +1054 -0
  44. package/Build/Workers/chunk-EIZ23IOX.js +414 -0
  45. package/Build/Workers/chunk-EIZJUMQY.js +101 -0
  46. package/Build/Workers/chunk-EXTMZJXB.js +82 -0
  47. package/Build/Workers/chunk-EYOOSIBW.js +682 -0
  48. package/Build/Workers/chunk-F37WADVC.js +1054 -0
  49. package/Build/Workers/chunk-FIWPJFHX.js +101 -0
  50. package/Build/Workers/chunk-FM32TNGT.js +198 -0
  51. package/Build/Workers/chunk-FOMYIEIB.js +476 -0
  52. package/Build/Workers/chunk-FWYDLSVQ.js +97 -0
  53. package/Build/Workers/chunk-HGZR6CZF.js +1067 -0
  54. package/Build/Workers/chunk-HIXHDABG.js +288 -0
  55. package/Build/Workers/chunk-HMCCZZWE.js +97 -0
  56. package/Build/Workers/chunk-HW54WHGM.js +2719 -0
  57. package/Build/Workers/chunk-IHYAI7GF.js +973 -0
  58. package/Build/Workers/chunk-INLQ7LVK.js +837 -0
  59. package/Build/Workers/chunk-IQMESTCB.js +124 -0
  60. package/Build/Workers/chunk-J4PISUNT.js +2342 -0
  61. package/Build/Workers/chunk-JSWU557I.js +693 -0
  62. package/Build/Workers/chunk-KHONDSQ7.js +693 -0
  63. package/Build/Workers/chunk-KLUL2SOE.js +352 -0
  64. package/Build/Workers/chunk-KMBLKQCC.js +1992 -0
  65. package/Build/Workers/chunk-KOTWWQN7.js +171 -0
  66. package/Build/Workers/chunk-KWV6ZTF4.js +163 -0
  67. package/Build/Workers/chunk-LSEFPQHG.js +476 -0
  68. package/Build/Workers/chunk-M66X4O24.js +44 -0
  69. package/Build/Workers/chunk-M6IXKBC7.js +1992 -0
  70. package/Build/Workers/chunk-MFUC3D5C.js +162 -0
  71. package/Build/Workers/chunk-MRMNELAH.js +82 -0
  72. package/Build/Workers/chunk-N3NUA5H2.js +3792 -0
  73. package/Build/Workers/chunk-NFB2NXJN.js +138 -0
  74. package/Build/Workers/chunk-NQAXBK4K.js +789 -0
  75. package/Build/Workers/chunk-NUGQWV6S.js +352 -0
  76. package/Build/Workers/chunk-O7S7WL7K.js +278 -0
  77. package/Build/Workers/chunk-ODZYB26X.js +1287 -0
  78. package/Build/Workers/chunk-OEHJY463.js +3201 -0
  79. package/Build/Workers/chunk-OMMRNMXF.js +44 -0
  80. package/Build/Workers/chunk-OZ3CQDO3.js +138 -0
  81. package/Build/Workers/chunk-PNXBG64I.js +219 -0
  82. package/Build/Workers/chunk-PYR35GK4.js +973 -0
  83. package/Build/Workers/chunk-Q4CXGW74.js +57 -0
  84. package/Build/Workers/chunk-QGISLKCW.js +147 -0
  85. package/Build/Workers/chunk-QQHVOJW6.js +497 -0
  86. package/Build/Workers/chunk-QWCMMRJW.js +58 -0
  87. package/Build/Workers/chunk-RDEZCHF4.js +398 -0
  88. package/Build/Workers/chunk-SJTE7FVN.js +778 -0
  89. package/Build/Workers/chunk-SM5T67LR.js +162 -0
  90. package/Build/Workers/chunk-T27NNXEU.js +58 -0
  91. package/Build/Workers/chunk-T4J5BWUO.js +511 -0
  92. package/Build/Workers/chunk-T6JS4BRN.js +140 -0
  93. package/Build/Workers/chunk-UH6DUQBW.js +140 -0
  94. package/Build/Workers/chunk-UJAH6XKF.js +73 -0
  95. package/Build/Workers/chunk-UKSTJ2PH.js +454 -0
  96. package/Build/Workers/chunk-UQCDCCZ7.js +368 -0
  97. package/Build/Workers/chunk-UXIFNEA3.js +1287 -0
  98. package/Build/Workers/chunk-UXJ6J5L7.js +56 -0
  99. package/Build/Workers/chunk-V4VUAZXI.js +1800 -0
  100. package/Build/Workers/chunk-VQH2YXO2.js +497 -0
  101. package/Build/Workers/chunk-VXKCLSE4.js +241 -0
  102. package/Build/Workers/chunk-W3U6YBEI.js +280 -0
  103. package/Build/Workers/chunk-W75ZVFKP.js +778 -0
  104. package/Build/Workers/chunk-WCDFJYFB.js +1344 -0
  105. package/Build/Workers/chunk-WME5M6W3.js +630 -0
  106. package/Build/Workers/chunk-XDQBQB64.js +1067 -0
  107. package/Build/Workers/chunk-Y6HOIWE5.js +959 -0
  108. package/Build/Workers/chunk-YEMC2ZOR.js +147 -0
  109. package/Build/Workers/chunk-YWNF3TPE.js +682 -0
  110. package/Build/Workers/chunk-Z55VGWJP.js +280 -0
  111. package/Build/Workers/chunk-Z5YWP24C.js +124 -0
  112. package/Build/Workers/chunk-ZHXCWUJB.js +387 -0
  113. package/Build/Workers/chunk-ZIMPUF2I.js +102 -0
  114. package/Build/Workers/chunk-ZKDWYQKC.js +3201 -0
  115. package/Build/Workers/combineGeometry.js +24 -22
  116. package/Build/Workers/createBoxGeometry.js +18 -16
  117. package/Build/Workers/createBoxOutlineGeometry.js +23 -25
  118. package/Build/Workers/createCircleGeometry.js +29 -27
  119. package/Build/Workers/createCircleOutlineGeometry.js +22 -20
  120. package/Build/Workers/createCoplanarPolygonGeometry.js +43 -43
  121. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +37 -35
  122. package/Build/Workers/createCorridorGeometry.js +46 -49
  123. package/Build/Workers/createCorridorOutlineGeometry.js +40 -43
  124. package/Build/Workers/createCylinderGeometry.js +20 -18
  125. package/Build/Workers/createCylinderOutlineGeometry.js +27 -25
  126. package/Build/Workers/createEllipseGeometry.js +28 -25
  127. package/Build/Workers/createEllipseOutlineGeometry.js +21 -18
  128. package/Build/Workers/createEllipsoidGeometry.js +19 -17
  129. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -16
  130. package/Build/Workers/createFrustumGeometry.js +18 -16
  131. package/Build/Workers/createFrustumOutlineGeometry.js +21 -21
  132. package/Build/Workers/createGeometry.js +31 -26
  133. package/Build/Workers/createGroundPolylineGeometry.js +188 -135
  134. package/Build/Workers/createPlaneGeometry.js +22 -21
  135. package/Build/Workers/createPlaneOutlineGeometry.js +15 -13
  136. package/Build/Workers/createPolygonGeometry.js +51 -52
  137. package/Build/Workers/createPolygonOutlineGeometry.js +43 -44
  138. package/Build/Workers/createPolylineGeometry.js +37 -40
  139. package/Build/Workers/createPolylineVolumeGeometry.js +41 -44
  140. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +36 -39
  141. package/Build/Workers/createRectangleGeometry.js +47 -53
  142. package/Build/Workers/createRectangleOutlineGeometry.js +32 -33
  143. package/Build/Workers/createSimplePolylineGeometry.js +33 -34
  144. package/Build/Workers/createSphereGeometry.js +20 -20
  145. package/Build/Workers/createSphereOutlineGeometry.js +19 -19
  146. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  147. package/Build/Workers/createVectorTileClampedPolylines.js +16 -14
  148. package/Build/Workers/createVectorTileGeometries.js +24 -22
  149. package/Build/Workers/createVectorTilePoints.js +15 -13
  150. package/Build/Workers/createVectorTilePolygons.js +24 -21
  151. package/Build/Workers/createVectorTilePolylines.js +16 -14
  152. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +25 -25
  153. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +29 -27
  154. package/Build/Workers/createVerticesFromHeightmap.js +42 -63
  155. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +26 -280
  156. package/Build/Workers/createWallGeometry.js +35 -36
  157. package/Build/Workers/createWallOutlineGeometry.js +33 -34
  158. package/Build/Workers/decodeDraco.js +10 -11
  159. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  160. package/Build/Workers/decodeI3S.js +16 -20
  161. package/Build/Workers/gaussianSplatSorter.js +4 -4
  162. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  163. package/Build/Workers/incrementallyBuildTerrainPicker.js +20 -12
  164. package/Build/Workers/transcodeKTX2.js +42 -14
  165. package/Build/Workers/transferTypedArrayTest.js +1 -1
  166. package/Build/Workers/upsampleQuantizedTerrainMesh.js +24 -21
  167. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
  168. package/Source/Shaders/BillboardCollectionFS.js +85 -81
  169. package/Source/Shaders/BillboardCollectionVS.js +60 -118
  170. package/Source/Shaders/Builtin/Constants/passCesium3DTile.js +1 -1
  171. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.js +1 -1
  172. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.js +1 -1
  173. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdges.js +12 -0
  174. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.js +11 -0
  175. package/Source/Shaders/Builtin/Constants/passGaussianSplats.js +11 -0
  176. package/Source/Shaders/Builtin/Constants/passOpaque.js +1 -1
  177. package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
  178. package/Source/Shaders/Builtin/Constants/passTranslucent.js +1 -1
  179. package/Source/Shaders/Builtin/Constants/passVoxels.js +1 -1
  180. package/Source/Shaders/Builtin/CzmBuiltins.js +12 -0
  181. package/Source/Shaders/Builtin/Functions/columbusViewMorph.js +8 -1
  182. package/Source/Shaders/Builtin/Functions/computeTextureTransform.js +25 -0
  183. package/Source/Shaders/Builtin/Functions/decodeRGB8.js +24 -0
  184. package/Source/Shaders/Builtin/Functions/modelToWindowCoordinates.js +2 -1
  185. package/Source/Shaders/Builtin/Functions/unpackTexture.js +37 -0
  186. package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.js +0 -1
  187. package/Source/Shaders/EllipsoidVS.js +4 -4
  188. package/Source/Shaders/FXAA3_11.js +2 -0
  189. package/Source/Shaders/GlobeFS.js +22 -0
  190. package/Source/Shaders/GlobeVS.js +3 -2
  191. package/Source/Shaders/Model/MaterialStageFS.js +50 -20
  192. package/Source/Shaders/Model/MetadataStageFS.js +2 -1
  193. package/Source/Shaders/Model/MetadataStageVS.js +2 -1
  194. package/Source/Shaders/Model/ModelFS.js +32 -2
  195. package/Source/Shaders/Model/ModelVS.js +15 -1
  196. package/Source/Shaders/Model/PointCloudStylingStageVS.js +2 -1
  197. package/Source/Shaders/Model/PrimitiveOutlineStageFS.js +0 -1
  198. package/Source/Shaders/PointPrimitiveCollectionVS.js +8 -39
  199. package/Source/Shaders/PolygonSignedDistanceFS.js +64 -33
  200. package/Source/Shaders/PolylineCommon.js +1 -1
  201. package/Source/Shaders/ShadowVolumeAppearanceFS.js +7 -15
  202. package/Source/Shaders/SkyAtmosphereVS.js +2 -1
  203. package/Source/Shaders/Voxels/IntersectBox.js +20 -33
  204. package/Source/Shaders/Voxels/IntersectCylinder.js +28 -32
  205. package/Source/Shaders/Voxels/IntersectDepth.js +10 -6
  206. package/Source/Shaders/Voxels/IntersectEllipsoid.js +12 -20
  207. package/Source/Shaders/Voxels/IntersectLongitude.js +21 -9
  208. package/Source/Shaders/Voxels/Intersection.js +3 -5
  209. package/Source/Shaders/Voxels/IntersectionUtils.js +2 -1
  210. package/Source/Shaders/Voxels/Megatexture.js +15 -83
  211. package/Source/Shaders/Voxels/Octree.js +53 -61
  212. package/Source/Shaders/Voxels/VoxelFS.js +67 -52
  213. package/Source/Shaders/Voxels/VoxelUtils.js +0 -19
  214. package/index.js +346 -261
  215. package/package.json +1 -1
  216. package/Source/Shaders/Voxels/IntersectClippingPlanes.js +0 -80
  217. package/Source/Shaders/Voxels/convertUvToBox.js +0 -46
  218. package/Source/Shaders/Voxels/convertUvToCylinder.js +0 -101
  219. package/Source/Shaders/Voxels/convertUvToEllipsoid.js +0 -141
@@ -88,25 +88,47 @@ flat in int v_regionIndex;\n\
88
88
  uniform float u_minimumBrightness;\n\
89
89
  #endif\n\
90
90
  \n\
91
+ // Based on colorCorrect\n\
92
+ // The colorCorrect flag can only be true when tileProvider.hue/saturation/brightnessShift \n\
93
+ // are nonzero AND when (applyFog || showGroundAtmosphere) in the tile provider\n\
94
+ // - The tileProvider.hue/saturation/brightnessShift are just passed through\n\
95
+ // from the Globe hue/saturation/brightness, like atmosphereBrightnessShift\n\
96
+ // - The applyFog depends on enableFog, and some tile distance from the viewer\n\
97
+ // - The showGroundAtmosphere is a flag that is passed through from the Globe,\n\
98
+ // and is true by default when the ellipsoid is WGS84\n\
91
99
  #ifdef COLOR_CORRECT\n\
92
100
  uniform vec3 u_hsbShift; // Hue, saturation, brightness\n\
93
101
  #endif\n\
94
102
  \n\
103
+ // Based on highlightFillTile\n\
104
+ // This is set for terrain tiles when they are \"fill\" tiles, and\n\
105
+ // the terrainProvider.fillHighlightColor was set to a value with\n\
106
+ // nonzero alpha\n\
95
107
  #ifdef HIGHLIGHT_FILL_TILE\n\
96
108
  uniform vec4 u_fillHighlightColor;\n\
97
109
  #endif\n\
98
110
  \n\
111
+ // Based on translucent\n\
112
+ // This is set depending on the GlobeTranslucencyState\n\
99
113
  #ifdef TRANSLUCENT\n\
100
114
  uniform vec4 u_frontFaceAlphaByDistance;\n\
101
115
  uniform vec4 u_backFaceAlphaByDistance;\n\
102
116
  uniform vec4 u_translucencyRectangle;\n\
103
117
  #endif\n\
104
118
  \n\
119
+ // Based on showUndergroundColor\n\
120
+ // This is set when GlobeSurfaceTileProvider.isUndergroundVisible \n\
121
+ // returns true, AND the tileProvider.undergroundColor had a value with \n\
122
+ // nonzero alpha, and the tileProvider.undergroundColorAlphaByDistance\n\
123
+ // was in the right range\n\
105
124
  #ifdef UNDERGROUND_COLOR\n\
106
125
  uniform vec4 u_undergroundColor;\n\
107
126
  uniform vec4 u_undergroundColorAlphaByDistance;\n\
108
127
  #endif\n\
109
128
  \n\
129
+ // Based on enableLighting && hasVertexNormals\n\
130
+ // The enableLighting flag is passed in directly from the Globe.\n\
131
+ // The hasVertexNormals flag is from the tileProvider\n\
110
132
  #ifdef ENABLE_VERTEX_LIGHTING\n\
111
133
  uniform float u_lambertDiffuseMultiplier;\n\
112
134
  uniform float u_vertexShadowDarkness;\n\
@@ -115,7 +115,8 @@ vec4 getPositionMorphingMode(vec3 position, float height, vec2 textureCoordinate
115
115
  float yPositionFraction = get2DYPositionFraction(textureCoordinates);\n\
116
116
  vec4 position2DWC = vec4(height, mix(u_tileRectangle.st, u_tileRectangle.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0);\n\
117
117
  vec4 morphPosition = czm_columbusViewMorph(position2DWC, vec4(position3DWC, 1.0), czm_morphTime);\n\
118
- return czm_modelViewProjection * morphPosition;\n\
118
+ vec4 morphPositionEC = czm_modelView * morphPosition;\n\
119
+ return czm_projection * morphPositionEC;\n\
119
120
  }\n\
120
121
  \n\
121
122
  #ifdef QUANTIZATION_BITS12\n\
@@ -141,7 +142,7 @@ void main()\n\
141
142
  #elif defined(INCLUDE_WEB_MERCATOR_Y)\n\
142
143
  float webMercatorT = czm_decompressTextureCoordinates(compressed0.w).x;\n\
143
144
  float encodedNormal = 0.0;\n\
144
- #elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL)\n\
145
+ #elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)\n\
145
146
  float webMercatorT = textureCoordinates.y;\n\
146
147
  float encodedNormal = compressed0.w;\n\
147
148
  #else\n\
@@ -12,17 +12,12 @@ vec3 blend(vec3 sourceColor, vec3 styleColor, float styleColorBlend)\n\
12
12
  return color;\n\
13
13
  }\n\
14
14
  \n\
15
- vec2 computeTextureTransform(vec2 texCoord, mat3 textureTransform)\n\
16
- {\n\
17
- return vec2(textureTransform * vec3(texCoord, 1.0));\n\
18
- }\n\
19
- \n\
20
15
  #ifdef HAS_NORMAL_TEXTURE\n\
21
16
  vec2 getNormalTexCoords()\n\
22
17
  {\n\
23
18
  vec2 texCoord = TEXCOORD_NORMAL;\n\
24
19
  #ifdef HAS_NORMAL_TEXTURE_TRANSFORM\n\
25
- texCoord = vec2(u_normalTextureTransform * vec3(texCoord, 1.0));\n\
20
+ texCoord = czm_computeTextureTransform(texCoord, u_normalTextureTransform);\n\
26
21
  #endif\n\
27
22
  return texCoord;\n\
28
23
  }\n\
@@ -65,7 +60,18 @@ NormalInfo getNormalInfo(ProcessedAttributes attributes)\n\
65
60
  \n\
66
61
  #ifdef HAS_NORMAL_TEXTURE\n\
67
62
  mat3 tbn = mat3(tangent, bitangent, geometryNormal);\n\
68
- vec3 normalSample = texture(u_normalTexture, normalTexCoords).rgb;\n\
63
+ \n\
64
+ vec3 normalSample;\n\
65
+ #if defined(HAS_NORMAL_CONSTANT_LOD) && defined(HAS_CONSTANT_LOD)\n\
66
+ #ifdef HAS_NORMAL_TEXTURE_TRANSFORM\n\
67
+ normalSample = constantLodTextureLookup(u_normalTexture, u_normalTextureConstantLodParams, u_normalTextureTransform).rgb;\n\
68
+ #else\n\
69
+ normalSample = constantLodTextureLookup(u_normalTexture, u_normalTextureConstantLodParams).rgb;\n\
70
+ #endif\n\
71
+ #else\n\
72
+ normalSample = texture(u_normalTexture, normalTexCoords).rgb;\n\
73
+ #endif\n\
74
+ \n\
69
75
  normalSample = 2.0 * normalSample - 1.0;\n\
70
76
  #ifdef HAS_NORMAL_TEXTURE_SCALE\n\
71
77
  normalSample.xy *= u_normalTextureScale;\n\
@@ -110,7 +116,18 @@ vec3 getNormalFromTexture(ProcessedAttributes attributes, vec3 geometryNormal)\n
110
116
  #endif\n\
111
117
  \n\
112
118
  mat3 tbn = mat3(t, b, geometryNormal);\n\
113
- vec3 normalSample = texture(u_normalTexture, normalTexCoords).rgb;\n\
119
+ \n\
120
+ vec3 normalSample;\n\
121
+ #if defined(HAS_NORMAL_CONSTANT_LOD) && defined(HAS_CONSTANT_LOD)\n\
122
+ #ifdef HAS_NORMAL_TEXTURE_TRANSFORM\n\
123
+ normalSample = constantLodTextureLookup(u_normalTexture, u_normalTextureConstantLodParams, u_normalTextureTransform).rgb;\n\
124
+ #else\n\
125
+ normalSample = constantLodTextureLookup(u_normalTexture, u_normalTextureConstantLodParams).rgb;\n\
126
+ #endif\n\
127
+ #else\n\
128
+ normalSample = texture(u_normalTexture, normalTexCoords).rgb;\n\
129
+ #endif\n\
130
+ \n\
114
131
  normalSample = 2.0 * normalSample - 1.0;\n\
115
132
  #ifdef HAS_NORMAL_TEXTURE_SCALE\n\
116
133
  normalSample.xy *= u_normalTextureScale;\n\
@@ -172,10 +189,19 @@ vec4 getBaseColorFromTexture()\n\
172
189
  {\n\
173
190
  vec2 baseColorTexCoords = TEXCOORD_BASE_COLOR;\n\
174
191
  #ifdef HAS_BASE_COLOR_TEXTURE_TRANSFORM\n\
175
- baseColorTexCoords = computeTextureTransform(baseColorTexCoords, u_baseColorTextureTransform);\n\
192
+ baseColorTexCoords = czm_computeTextureTransform(baseColorTexCoords, u_baseColorTextureTransform);\n\
176
193
  #endif\n\
177
194
  \n\
178
- vec4 baseColorWithAlpha = czm_srgbToLinear(texture(u_baseColorTexture, baseColorTexCoords));\n\
195
+ vec4 baseColorWithAlpha;\n\
196
+ #if defined(HAS_BASE_COLOR_CONSTANT_LOD) && defined(HAS_CONSTANT_LOD)\n\
197
+ #ifdef HAS_BASE_COLOR_TEXTURE_TRANSFORM\n\
198
+ baseColorWithAlpha = czm_srgbToLinear(constantLodTextureLookup(u_baseColorTexture, u_baseColorTextureConstantLodParams, u_baseColorTextureTransform));\n\
199
+ #else\n\
200
+ baseColorWithAlpha = czm_srgbToLinear(constantLodTextureLookup(u_baseColorTexture, u_baseColorTextureConstantLodParams));\n\
201
+ #endif\n\
202
+ #else\n\
203
+ baseColorWithAlpha = czm_srgbToLinear(texture(u_baseColorTexture, baseColorTexCoords));\n\
204
+ #endif\n\
179
205
  \n\
180
206
  #ifdef HAS_BASE_COLOR_FACTOR\n\
181
207
  baseColorWithAlpha *= u_baseColorFactor;\n\
@@ -190,7 +216,7 @@ vec3 getEmissiveFromTexture()\n\
190
216
  {\n\
191
217
  vec2 emissiveTexCoords = TEXCOORD_EMISSIVE;\n\
192
218
  #ifdef HAS_EMISSIVE_TEXTURE_TRANSFORM\n\
193
- emissiveTexCoords = computeTextureTransform(emissiveTexCoords, u_emissiveTextureTransform);\n\
219
+ emissiveTexCoords = czm_computeTextureTransform(emissiveTexCoords, u_emissiveTextureTransform);\n\
194
220
  #endif\n\
195
221
  \n\
196
222
  vec3 emissive = czm_srgbToLinear(texture(u_emissiveTexture, emissiveTexCoords).rgb);\n\
@@ -208,7 +234,7 @@ void setSpecularGlossiness(inout czm_modelMaterial material)\n\
208
234
  #ifdef HAS_SPECULAR_GLOSSINESS_TEXTURE\n\
209
235
  vec2 specularGlossinessTexCoords = TEXCOORD_SPECULAR_GLOSSINESS;\n\
210
236
  #ifdef HAS_SPECULAR_GLOSSINESS_TEXTURE_TRANSFORM\n\
211
- specularGlossinessTexCoords = computeTextureTransform(specularGlossinessTexCoords, u_specularGlossinessTextureTransform);\n\
237
+ specularGlossinessTexCoords = czm_computeTextureTransform(specularGlossinessTexCoords, u_specularGlossinessTextureTransform);\n\
212
238
  #endif\n\
213
239
  \n\
214
240
  vec4 specularGlossiness = czm_srgbToLinear(texture(u_specularGlossinessTexture, specularGlossinessTexCoords));\n\
@@ -238,7 +264,7 @@ void setSpecularGlossiness(inout czm_modelMaterial material)\n\
238
264
  #ifdef HAS_DIFFUSE_TEXTURE\n\
239
265
  vec2 diffuseTexCoords = TEXCOORD_DIFFUSE;\n\
240
266
  #ifdef HAS_DIFFUSE_TEXTURE_TRANSFORM\n\
241
- diffuseTexCoords = computeTextureTransform(diffuseTexCoords, u_diffuseTextureTransform);\n\
267
+ diffuseTexCoords = czm_computeTextureTransform(diffuseTexCoords, u_diffuseTextureTransform);\n\
242
268
  #endif\n\
243
269
  \n\
244
270
  vec4 diffuse = czm_srgbToLinear(texture(u_diffuseTexture, diffuseTexCoords));\n\
@@ -267,7 +293,7 @@ float setMetallicRoughness(inout czm_modelMaterial material)\n\
267
293
  #ifdef HAS_METALLIC_ROUGHNESS_TEXTURE\n\
268
294
  vec2 metallicRoughnessTexCoords = TEXCOORD_METALLIC_ROUGHNESS;\n\
269
295
  #ifdef HAS_METALLIC_ROUGHNESS_TEXTURE_TRANSFORM\n\
270
- metallicRoughnessTexCoords = computeTextureTransform(metallicRoughnessTexCoords, u_metallicRoughnessTextureTransform);\n\
296
+ metallicRoughnessTexCoords = czm_computeTextureTransform(metallicRoughnessTexCoords, u_metallicRoughnessTextureTransform);\n\
271
297
  #endif\n\
272
298
  \n\
273
299
  vec3 metallicRoughness = texture(u_metallicRoughnessTexture, metallicRoughnessTexCoords).rgb;\n\
@@ -314,7 +340,7 @@ void setSpecular(inout czm_modelMaterial material, in float metalness)\n\
314
340
  #ifdef HAS_SPECULAR_TEXTURE\n\
315
341
  vec2 specularTexCoords = TEXCOORD_SPECULAR;\n\
316
342
  #ifdef HAS_SPECULAR_TEXTURE_TRANSFORM\n\
317
- specularTexCoords = computeTextureTransform(specularTexCoords, u_specularTextureTransform);\n\
343
+ specularTexCoords = czm_computeTextureTransform(specularTexCoords, u_specularTextureTransform);\n\
318
344
  #endif\n\
319
345
  float specularWeight = texture(u_specularTexture, specularTexCoords).a;\n\
320
346
  #ifdef HAS_SPECULAR_FACTOR\n\
@@ -331,7 +357,7 @@ void setSpecular(inout czm_modelMaterial material, in float metalness)\n\
331
357
  #ifdef HAS_SPECULAR_COLOR_TEXTURE\n\
332
358
  vec2 specularColorTexCoords = TEXCOORD_SPECULAR_COLOR;\n\
333
359
  #ifdef HAS_SPECULAR_COLOR_TEXTURE_TRANSFORM\n\
334
- specularColorTexCoords = computeTextureTransform(specularColorTexCoords, u_specularColorTextureTransform);\n\
360
+ specularColorTexCoords = czm_computeTextureTransform(specularColorTexCoords, u_specularColorTextureTransform);\n\
335
361
  #endif\n\
336
362
  vec3 specularColorSample = texture(u_specularColorTexture, specularColorTexCoords).rgb;\n\
337
363
  vec3 specularColorFactor = czm_srgbToLinear(specularColorSample);\n\
@@ -361,7 +387,7 @@ void setAnisotropy(inout czm_modelMaterial material, in NormalInfo normalInfo)\n
361
387
  #ifdef HAS_ANISOTROPY_TEXTURE\n\
362
388
  vec2 anisotropyTexCoords = TEXCOORD_ANISOTROPY;\n\
363
389
  #ifdef HAS_ANISOTROPY_TEXTURE_TRANSFORM\n\
364
- anisotropyTexCoords = computeTextureTransform(anisotropyTexCoords, u_anisotropyTextureTransform);\n\
390
+ anisotropyTexCoords = czm_computeTextureTransform(anisotropyTexCoords, u_anisotropyTextureTransform);\n\
365
391
  #endif\n\
366
392
  vec3 anisotropySample = texture(u_anisotropyTexture, anisotropyTexCoords).rgb;\n\
367
393
  direction = anisotropySample.rg * 2.0 - vec2(1.0);\n\
@@ -384,7 +410,7 @@ void setClearcoat(inout czm_modelMaterial material, in ProcessedAttributes attri
384
410
  #ifdef HAS_CLEARCOAT_TEXTURE\n\
385
411
  vec2 clearcoatTexCoords = TEXCOORD_CLEARCOAT;\n\
386
412
  #ifdef HAS_CLEARCOAT_TEXTURE_TRANSFORM\n\
387
- clearcoatTexCoords = computeTextureTransform(clearcoatTexCoords, u_clearcoatTextureTransform);\n\
413
+ clearcoatTexCoords = czm_computeTextureTransform(clearcoatTexCoords, u_clearcoatTextureTransform);\n\
388
414
  #endif\n\
389
415
  float clearcoatFactor = texture(u_clearcoatTexture, clearcoatTexCoords).r;\n\
390
416
  #ifdef HAS_CLEARCOAT_FACTOR\n\
@@ -402,7 +428,7 @@ void setClearcoat(inout czm_modelMaterial material, in ProcessedAttributes attri
402
428
  #ifdef HAS_CLEARCOAT_ROUGHNESS_TEXTURE\n\
403
429
  vec2 clearcoatRoughnessTexCoords = TEXCOORD_CLEARCOAT_ROUGHNESS;\n\
404
430
  #ifdef HAS_CLEARCOAT_ROUGHNESS_TEXTURE_TRANSFORM\n\
405
- clearcoatRoughnessTexCoords = computeTextureTransform(clearcoatRoughnessTexCoords, u_clearcoatRoughnessTextureTransform);\n\
431
+ clearcoatRoughnessTexCoords = czm_computeTextureTransform(clearcoatRoughnessTexCoords, u_clearcoatRoughnessTextureTransform);\n\
406
432
  #endif\n\
407
433
  float clearcoatRoughness = texture(u_clearcoatRoughnessTexture, clearcoatRoughnessTexCoords).g;\n\
408
434
  #ifdef HAS_CLEARCOAT_ROUGHNESS_FACTOR\n\
@@ -444,6 +470,10 @@ void materialStage(inout czm_modelMaterial material, ProcessedAttributes attribu
444
470
  #elif defined(HAS_BASE_COLOR_FACTOR)\n\
445
471
  baseColorWithAlpha = u_baseColorFactor;\n\
446
472
  #endif\n\
473
+ \n\
474
+ #ifdef HAS_IMAGERY\n\
475
+ baseColorWithAlpha = blendBaseColorWithImagery(baseColorWithAlpha);\n\
476
+ #endif // HAS_IMAGERY\n\
447
477
  \n\
448
478
  #ifdef HAS_POINT_CLOUD_COLOR_STYLE\n\
449
479
  baseColorWithAlpha = v_pointCloudColor;\n\
@@ -466,7 +496,7 @@ void materialStage(inout czm_modelMaterial material, ProcessedAttributes attribu
466
496
  #ifdef HAS_OCCLUSION_TEXTURE\n\
467
497
  vec2 occlusionTexCoords = TEXCOORD_OCCLUSION;\n\
468
498
  #ifdef HAS_OCCLUSION_TEXTURE_TRANSFORM\n\
469
- occlusionTexCoords = computeTextureTransform(occlusionTexCoords, u_occlusionTextureTransform);\n\
499
+ occlusionTexCoords = czm_computeTextureTransform(occlusionTexCoords, u_occlusionTextureTransform);\n\
470
500
  #endif\n\
471
501
  material.occlusion = texture(u_occlusionTexture, occlusionTexCoords).r;\n\
472
502
  #endif\n\
@@ -1,11 +1,12 @@
1
1
  //This file is automatically rebuilt by the Cesium build process.
2
2
  export default "void metadataStage(\n\
3
+ FeatureIds featureIds,\n\
3
4
  out Metadata metadata,\n\
4
5
  out MetadataClass metadataClass,\n\
5
6
  out MetadataStatistics metadataStatistics,\n\
6
7
  ProcessedAttributes attributes\n\
7
8
  )\n\
8
9
  {\n\
9
- initializeMetadata(metadata, metadataClass, metadataStatistics, attributes);\n\
10
+ initializeMetadata(featureIds, metadata, metadataClass, metadataStatistics, attributes);\n\
10
11
  }\n\
11
12
  ";
@@ -1,12 +1,13 @@
1
1
  //This file is automatically rebuilt by the Cesium build process.
2
2
  export default "void metadataStage(\n\
3
+ FeatureIds featureIds,\n\
3
4
  out Metadata metadata,\n\
4
5
  out MetadataClass metadataClass,\n\
5
6
  out MetadataStatistics metadataStatistics,\n\
6
7
  ProcessedAttributes attributes\n\
7
8
  )\n\
8
9
  {\n\
9
- initializeMetadata(metadata, metadataClass, metadataStatistics, attributes);\n\
10
+ initializeMetadata(featureIds, metadata, metadataClass, metadataStatistics, attributes);\n\
10
11
  setMetadataVaryings();\n\
11
12
  }\n\
12
13
  ";
@@ -1,6 +1,7 @@
1
1
  //This file is automatically rebuilt by the Cesium build process.
2
2
  export default "\n\
3
3
  precision highp float;\n\
4
+ \n\
4
5
  czm_modelMaterial defaultModelMaterial()\n\
5
6
  {\n\
6
7
  czm_modelMaterial material;\n\
@@ -25,10 +26,31 @@ vec4 handleAlpha(vec3 color, float alpha)\n\
25
26
  return vec4(color, alpha);\n\
26
27
  }\n\
27
28
  \n\
29
+ void lineStyleStage()\n\
30
+ {\n\
31
+ #if defined(HAS_LINE_PATTERN) && !defined(HAS_EDGE_VISIBILITY)\n\
32
+ const float maskLength = 16.0;\n\
33
+ float dashPosition = fract(v_lineCoord / maskLength);\n\
34
+ float maskIndex = floor(dashPosition * maskLength);\n\
35
+ float maskTest = floor(u_linePattern / pow(2.0, maskIndex));\n\
36
+ if (mod(maskTest, 2.0) < 1.0) {\n\
37
+ discard;\n\
38
+ }\n\
39
+ #endif\n\
40
+ }\n\
41
+ \n\
28
42
  SelectedFeature selectedFeature;\n\
29
43
  \n\
30
44
  void main()\n\
31
45
  {\n\
46
+ #if defined(PRIMITIVE_TYPE_POINTS) && defined(HAS_POINT_DIAMETER)\n\
47
+ // Render points as circles\n\
48
+ float distanceToCenter = length(gl_PointCoord - vec2(0.5));\n\
49
+ if (distanceToCenter > 0.5) {\n\
50
+ discard;\n\
51
+ }\n\
52
+ #endif\n\
53
+ \n\
32
54
  #ifdef HAS_POINT_CLOUD_SHOW_STYLE\n\
33
55
  if (v_pointCloudShow == 0.0)\n\
34
56
  {\n\
@@ -51,7 +73,7 @@ void main()\n\
51
73
  Metadata metadata;\n\
52
74
  MetadataClass metadataClass;\n\
53
75
  MetadataStatistics metadataStatistics;\n\
54
- metadataStage(metadata, metadataClass, metadataStatistics, attributes);\n\
76
+ metadataStage(featureIds, metadata, metadataClass, metadataStatistics, attributes);\n\
55
77
  \n\
56
78
  //========================================================================\n\
57
79
  // When not picking metadata START\n\
@@ -87,7 +109,7 @@ void main()\n\
87
109
  \n\
88
110
  // When not picking metadata END\n\
89
111
  //========================================================================\n\
90
- #else \n\
112
+ #else\n\
91
113
  //========================================================================\n\
92
114
  // When picking metadata START\n\
93
115
  \n\
@@ -98,6 +120,8 @@ void main()\n\
98
120
  #endif\n\
99
121
  // When picking metadata END\n\
100
122
  //========================================================================\n\
123
+ \n\
124
+ lineStyleStage();\n\
101
125
  \n\
102
126
  #ifdef HAS_CLIPPING_PLANES\n\
103
127
  modelClippingPlanesStage(color);\n\
@@ -118,6 +142,11 @@ void main()\n\
118
142
  #ifdef HAS_ATMOSPHERE\n\
119
143
  atmosphereStage(color, attributes);\n\
120
144
  #endif\n\
145
+ \n\
146
+ #ifdef HAS_EDGE_VISIBILITY\n\
147
+ edgeVisibilityStage(color, featureIds);\n\
148
+ edgeDetectionStage(color, featureIds);\n\
149
+ #endif\n\
121
150
  \n\
122
151
  #endif\n\
123
152
  // When not picking metadata END\n\
@@ -125,4 +154,5 @@ void main()\n\
125
154
  \n\
126
155
  out_FragColor = color;\n\
127
156
  }\n\
157
+ \n\
128
158
  ";
@@ -14,6 +14,10 @@ void main()\n\
14
14
  // attributes except quantized ones.\n\
15
15
  ProcessedAttributes attributes;\n\
16
16
  initializeAttributes(attributes);\n\
17
+ \n\
18
+ #ifdef HAS_IMAGERY\n\
19
+ initializeImageryAttributes();\n\
20
+ #endif\n\
17
21
  \n\
18
22
  // Dequantize the quantized ones and add them to the\n\
19
23
  // attributes struct.\n\
@@ -92,7 +96,7 @@ void main()\n\
92
96
  Metadata metadata;\n\
93
97
  MetadataClass metadataClass;\n\
94
98
  MetadataStatistics metadataStatistics;\n\
95
- metadataStage(metadata, metadataClass, metadataStatistics, attributes);\n\
99
+ metadataStage(featureIds, metadata, metadataClass, metadataStatistics, attributes);\n\
96
100
  \n\
97
101
  #ifdef HAS_VERTICAL_EXAGGERATION\n\
98
102
  verticalExaggerationStage(attributes);\n\
@@ -106,6 +110,10 @@ void main()\n\
106
110
  // Compute the final position in each coordinate system needed.\n\
107
111
  // This returns the value that will be assigned to gl_Position.\n\
108
112
  vec4 positionClip = geometryStage(attributes, modelView, normal);\n\
113
+ \n\
114
+ #if defined(HAS_LINE_CUMULATIVE_DISTANCE) || defined(HAS_LINE_PATTERN)\n\
115
+ lineStyleStageVS(attributes);\n\
116
+ #endif\n\
109
117
  \n\
110
118
  // This must go after the geometry stage as it needs v_positionWC\n\
111
119
  #ifdef HAS_ATMOSPHERE\n\
@@ -139,6 +147,8 @@ void main()\n\
139
147
  gl_PointSize = vsOutput.pointSize;\n\
140
148
  #elif defined(HAS_POINT_CLOUD_POINT_SIZE_STYLE) || defined(HAS_POINT_CLOUD_ATTENUATION)\n\
141
149
  gl_PointSize = pointCloudPointSizeStylingStage(attributes, metadata);\n\
150
+ #elif defined(HAS_POINT_DIAMETER)\n\
151
+ gl_PointSize = u_pointDiameter;\n\
142
152
  #else\n\
143
153
  gl_PointSize = 1.0;\n\
144
154
  #endif\n\
@@ -151,6 +161,10 @@ void main()\n\
151
161
  //\n\
152
162
  // We will discard points with v_pointCloudShow == 0 in the fragment shader.\n\
153
163
  gl_Position = positionClip;\n\
164
+ \n\
165
+ #ifdef HAS_EDGE_VISIBILITY\n\
166
+ edgeVisibilityStageVS();\n\
167
+ #endif\n\
154
168
  \n\
155
169
  #ifdef HAS_POINT_CLOUD_SHOW_STYLE\n\
156
170
  v_pointCloudShow = show;\n\
@@ -43,4 +43,5 @@ float pointCloudBackFaceCullingStage() {\n\
43
43
  return 1.0;\n\
44
44
  #endif\n\
45
45
  }\n\
46
- #endif";
46
+ #endif\n\
47
+ ";
@@ -14,5 +14,4 @@ export default "void primitiveOutlineStage(inout czm_modelMaterial material) {\n
14
14
  \n\
15
15
  material.diffuse = mix(material.diffuse, model_outlineColor.rgb, model_outlineColor.a * outlineness);\n\
16
16
  }\n\
17
- \n\
18
17
  ";
@@ -47,45 +47,14 @@ void main()\n\
47
47
  \n\
48
48
  ///////////////////////////////////////////////////////////////////////////\n\
49
49
  \n\
50
- vec4 color;\n\
51
- vec4 outlineColor;\n\
52
- vec4 pickColor;\n\
53
- \n\
54
- // compressedAttribute0.z => pickColor.rgb\n\
55
- \n\
56
- temp = compressedAttribute0.z * SHIFT_RIGHT8;\n\
57
- pickColor.b = (temp - floor(temp)) * SHIFT_LEFT8;\n\
58
- temp = floor(temp) * SHIFT_RIGHT8;\n\
59
- pickColor.g = (temp - floor(temp)) * SHIFT_LEFT8;\n\
60
- pickColor.r = floor(temp);\n\
61
- \n\
62
- // compressedAttribute0.x => color.rgb\n\
63
- \n\
64
- temp = compressedAttribute0.x * SHIFT_RIGHT8;\n\
65
- color.b = (temp - floor(temp)) * SHIFT_LEFT8;\n\
66
- temp = floor(temp) * SHIFT_RIGHT8;\n\
67
- color.g = (temp - floor(temp)) * SHIFT_LEFT8;\n\
68
- color.r = floor(temp);\n\
69
- \n\
70
- // compressedAttribute0.y => outlineColor.rgb\n\
71
- \n\
72
- temp = compressedAttribute0.y * SHIFT_RIGHT8;\n\
73
- outlineColor.b = (temp - floor(temp)) * SHIFT_LEFT8;\n\
74
- temp = floor(temp) * SHIFT_RIGHT8;\n\
75
- outlineColor.g = (temp - floor(temp)) * SHIFT_LEFT8;\n\
76
- outlineColor.r = floor(temp);\n\
77
- \n\
78
- // compressedAttribute0.w => color.a, outlineColor.a, pickColor.a\n\
79
- \n\
80
- temp = compressedAttribute0.w * SHIFT_RIGHT8;\n\
81
- pickColor.a = (temp - floor(temp)) * SHIFT_LEFT8;\n\
82
- pickColor = pickColor / 255.0;\n\
83
- \n\
84
- temp = floor(temp) * SHIFT_RIGHT8;\n\
85
- outlineColor.a = (temp - floor(temp)) * SHIFT_LEFT8;\n\
86
- outlineColor /= 255.0;\n\
87
- color.a = floor(temp);\n\
88
- color /= 255.0;\n\
50
+ vec4 color = czm_decodeRGB8(compressedAttribute0.x);\n\
51
+ vec4 outlineColor = czm_decodeRGB8(compressedAttribute0.y);\n\
52
+ vec4 pickColor = czm_decodeRGB8(compressedAttribute0.z);\n\
53
+ vec4 alphaPacked = czm_decodeRGB8(compressedAttribute0.w);\n\
54
+ \n\
55
+ color.a = alphaPacked.x;\n\
56
+ outlineColor.a = alphaPacked.y;\n\
57
+ pickColor.a = alphaPacked.z;\n\
89
58
  \n\
90
59
  ///////////////////////////////////////////////////////////////////////////\n\
91
60
  \n\
@@ -52,49 +52,80 @@ void main() {\n\
52
52
  dimension = ceil(log2(float(u_extentsLength)));\n\
53
53
  }\n\
54
54
  int regionIndex = getPolygonIndex(dimension, v_textureCoordinates);\n\
55
+ \n\
56
+ if (regionIndex >= u_extentsLength) {\n\
57
+ return; // done (no polygons in this region)\n\
58
+ }\n\
55
59
  \n\
56
60
  for (int polygonIndex = 0; polygonIndex < u_polygonsLength; polygonIndex++) {\n\
57
61
  ivec2 positionsLengthAndExtents = getPositionsLengthAndExtentsIndex(lastPolygonIndex);\n\
58
62
  int positionsLength = positionsLengthAndExtents.x;\n\
59
63
  int polygonExtentsIndex = positionsLengthAndExtents.y;\n\
60
64
  lastPolygonIndex += 1;\n\
65
+ \n\
66
+ // Read the individual polygon extent (2 pixels: south/west, latRange/lonRange)\n\
67
+ vec2 extentsSouthWest = getPolygonPosition(lastPolygonIndex);\n\
68
+ vec2 extentsRange = getPolygonPosition(lastPolygonIndex + 1);\n\
69
+ vec4 polygonExtent = vec4(extentsSouthWest, extentsRange);\n\
70
+ lastPolygonIndex += 2;\n\
71
+ \n\
72
+ if (polygonExtentsIndex < regionIndex) {\n\
73
+ lastPolygonIndex += positionsLength;\n\
74
+ continue; // skip to next (TODO: could optimize further if we knew how many polygons to skip)\n\
75
+ } else if (polygonExtentsIndex > regionIndex) {\n\
76
+ break; // done (we know polygons are sorted by regionIndex)\n\
77
+ }\n\
61
78
  \n\
62
79
  // Only compute signed distance for the relevant part of the atlas\n\
63
- if (polygonExtentsIndex == regionIndex) {\n\
64
- float clipAmount = czm_infinity;\n\
65
- vec4 extents = getExtents(polygonExtentsIndex);\n\
66
- vec2 textureOffset = vec2(mod(float(polygonExtentsIndex), dimension), floor(float(polygonExtentsIndex) / dimension)) / dimension;\n\
67
- vec2 p = getCoordinates((v_textureCoordinates - textureOffset) * dimension, extents);\n\
68
- float s = 1.0;\n\
69
- \n\
70
- // Check each edge for absolute distance\n\
71
- for (int i = 0, j = positionsLength - 1; i < positionsLength; j = i, i++) {\n\
72
- vec2 a = getPolygonPosition(lastPolygonIndex + i);\n\
73
- vec2 b = getPolygonPosition(lastPolygonIndex + j);\n\
74
- \n\
75
- vec2 ab = b - a;\n\
76
- vec2 pa = p - a;\n\
77
- float t = dot(pa, ab) / dot(ab, ab);\n\
78
- t = clamp(t, 0.0, 1.0);\n\
79
- \n\
80
- vec2 pq = pa - t * ab;\n\
81
- float d = length(pq);\n\
82
- \n\
83
- // Inside / outside computation to determine sign\n\
84
- bvec3 cond = bvec3(p.y >= a.y, \n\
85
- p.y < b.y, \n\
86
- ab.x * pa.y > ab.y * pa.x);\n\
87
- if (all(cond) || all(not(cond))) s = -s;\n\
88
- if (abs(d) < abs(clipAmount)) {\n\
89
- clipAmount = d;\n\
90
- }\n\
80
+ float clipAmount = czm_infinity;\n\
81
+ vec4 extents = getExtents(polygonExtentsIndex);\n\
82
+ vec2 textureOffset = vec2(mod(float(polygonExtentsIndex), dimension), floor(float(polygonExtentsIndex) / dimension)) / dimension;\n\
83
+ vec2 p = getCoordinates((v_textureCoordinates - textureOffset) * dimension, extents); // current pixel position\n\
84
+ \n\
85
+ // Only consider polygons whos boundingbox includes current pixel (with a slight padding)\n\
86
+ float padding = 0.05; // 5% of polygon extents\n\
87
+ float polygonNorth = polygonExtent.x + polygonExtent.z;\n\
88
+ float polygonEast = polygonExtent.y + polygonExtent.w;\n\
89
+ float latPadding = padding * polygonExtent.z; // padding as fraction of latitude range\n\
90
+ float lonPadding = padding * polygonExtent.w; // padding as fraction of longitude range\n\
91
+ if (p.x < polygonExtent.x - latPadding || p.x > polygonNorth + latPadding ||\n\
92
+ p.y < polygonExtent.y - lonPadding || p.y > polygonEast + lonPadding) {\n\
93
+ lastPolygonIndex += positionsLength;\n\
94
+ continue; // skip to next\n\
95
+ }\n\
96
+ \n\
97
+ float s = 1.0;\n\
98
+ \n\
99
+ // Check each edge for absolute distance.\n\
100
+ // Cache the previous vertex to halve the texture reads per iteration.\n\
101
+ vec2 prev = getPolygonPosition(lastPolygonIndex + positionsLength - 1);\n\
102
+ for (int i = 0; i < positionsLength; i++) {\n\
103
+ vec2 a = getPolygonPosition(lastPolygonIndex + i);\n\
104
+ vec2 b = prev;\n\
105
+ prev = a;\n\
106
+ \n\
107
+ vec2 ab = b - a;\n\
108
+ vec2 pa = p - a;\n\
109
+ float t = dot(pa, ab) / dot(ab, ab);\n\
110
+ t = clamp(t, 0.0, 1.0);\n\
111
+ \n\
112
+ vec2 pq = pa - t * ab;\n\
113
+ float d = length(pq);\n\
114
+ \n\
115
+ // Inside / outside computation to determine sign\n\
116
+ bvec3 cond = bvec3(p.y >= a.y, \n\
117
+ p.y < b.y, \n\
118
+ ab.x * pa.y > ab.y * pa.x);\n\
119
+ if (all(cond) || all(not(cond))) s = -s;\n\
120
+ if (abs(d) < abs(clipAmount)) {\n\
121
+ clipAmount = d;\n\
91
122
  }\n\
123
+ }\n\
92
124
  \n\
93
- // Normalize the range to [0,1]\n\
94
- vec4 result = (s * vec4(clipAmount * length(extents.zw))) / 2.0 + 0.5;\n\
95
- // In the case where we've iterated through multiple polygons, take the minimum\n\
96
- out_FragColor = min(out_FragColor, result);\n\
97
- }\n\
125
+ // Normalize the range to [0,1]\n\
126
+ vec4 result = (s * vec4(clipAmount * length(extents.zw))) / 2.0 + 0.5;\n\
127
+ // In the case where we've iterated through multiple polygons, take the minimum\n\
128
+ out_FragColor = min(out_FragColor, result);\n\
98
129
  \n\
99
130
  lastPolygonIndex += positionsLength;\n\
100
131
  }\n\
@@ -161,7 +161,7 @@ vec4 getPolylineWindowCoordinatesEC(vec4 positionEC, vec4 prevEC, vec4 nextEC, f
161
161
  vec2 u = -thisSegmentForwardWC;\n\
162
162
  vec2 v = leftWC;\n\
163
163
  float sinAngle = abs(u.x * v.y - u.y * v.x);\n\
164
- expandWidth = clamp(expandWidth / sinAngle, 0.0, width * 0.5);\n\
164
+ expandWidth = clamp(expandWidth / sinAngle, 0.0, width * 2.0);\n\
165
165
  }\n\
166
166
  \n\
167
167
  vec2 offset = leftWC * expandDirection * expandWidth * czm_pixelRatio;\n\
@@ -66,21 +66,6 @@ void main(void)\n\
66
66
  #endif // SPHERICAL\n\
67
67
  #endif // TEXTURE_COORDINATES\n\
68
68
  \n\
69
- #ifdef PICK\n\
70
- #ifdef CULL_FRAGMENTS\n\
71
- // When classifying translucent geometry, logDepthOrDepth == 0.0\n\
72
- // indicates a region that should not be classified, possibly due to there\n\
73
- // being opaque pixels there in another buffer.\n\
74
- // Check for logDepthOrDepth != 0.0 to make sure this should be classified.\n\
75
- if (0.0 <= uv.x && uv.x <= 1.0 && 0.0 <= uv.y && uv.y <= 1.0 || logDepthOrDepth != 0.0) {\n\
76
- out_FragColor.a = 1.0; // 0.0 alpha leads to discard from ShaderSource.createPickFragmentShaderSource\n\
77
- czm_writeDepthClamp();\n\
78
- }\n\
79
- #else // CULL_FRAGMENTS\n\
80
- out_FragColor.a = 1.0;\n\
81
- #endif // CULL_FRAGMENTS\n\
82
- #else // PICK\n\
83
- \n\
84
69
  #ifdef CULL_FRAGMENTS\n\
85
70
  // When classifying translucent geometry, logDepthOrDepth == 0.0\n\
86
71
  // indicates a region that should not be classified, possibly due to there\n\
@@ -90,6 +75,13 @@ void main(void)\n\
90
75
  }\n\
91
76
  #endif\n\
92
77
  \n\
78
+ #ifdef PICK\n\
79
+ out_FragColor.a = 1.0; // Explicitly set the alpha, otherwise this may be discarded by ShaderSource.createPickFragmentShaderSource\n\
80
+ #ifdef CULL_FRAGMENTS\n\
81
+ czm_writeDepthClamp();\n\
82
+ #endif // CULL_FRAGMENTS\n\
83
+ #else // PICK\n\
84
+ \n\
93
85
  #ifdef NORMAL_EC\n\
94
86
  // Compute normal by sampling adjacent pixels in 2x2 block in screen space\n\
95
87
  vec3 downUp = vectorFromOffset(eyeCoordinate, vec2(0.0, 1.0));\n\
@@ -28,6 +28,7 @@ void main(void)\n\
28
28
  #endif\n\
29
29
  \n\
30
30
  v_outerPositionWC = positionWC.xyz;\n\
31
- gl_Position = czm_modelViewProjection * position;\n\
31
+ vec4 positionEC = czm_modelView * position;\n\
32
+ gl_Position = czm_projection * positionEC;\n\
32
33
  }\n\
33
34
  ";