//This file is automatically rebuilt by the Cesium build process. export default "uniform highp sampler2D u_vectorSegmentTexture;\n\ uniform highp sampler2D u_vectorWidthTexture;\n\ uniform highp sampler2D u_vectorColorTexture;\n\ uniform highp sampler2D u_vectorSegmentPrimitiveIndicesTexture;\n\ uniform highp sampler2D u_vectorGridCellIndicesTexture;\n\ \n\ // UV-space offset from the closest point on the segment to p.\n\ vec2 vectorOffsetToLine(vec2 p, vec4 line)\n\ {\n\ vec2 a = line.xy;\n\ vec2 b = line.zw;\n\ vec2 ab = b - a;\n\ float abLengthSquared = dot(ab, ab);\n\ if (abLengthSquared < 1.0e-8)\n\ {\n\ return p - a;\n\ }\n\ float t = clamp(dot(p - a, ab) / abLengthSquared, 0.0, 1.0);\n\ return p - (a + t * ab);\n\ }\n\ \n\ ivec2 vectorIndexToUv(int index, ivec2 size)\n\ {\n\ int v = index / size.x;\n\ int u = index - v * size.x;\n\ return ivec2(u, v);\n\ }\n\ \n\ // Drape clamped vector polylines onto the terrain surface. The fragment's\n\ // tile UV picks a grid cell, then only that cell's line segments (packed in\n\ // tile-local UV space) are tested for proximity. Within the line width, the\n\ // vector color is alpha-composited over the terrain (no discard).\n\ vec4 vectorPolylineRender(vec2 vectorUv, vec4 baseColor)\n\ {\n\ // Inverse UV-per-pixel Jacobian: measures line distance in screen pixels so\n\ // width stays constant under anisotropic (oblique) foreshortening.\n\ mat2 screenFromUv = inverse(mat2(dFdx(vectorUv), dFdy(vectorUv)));\n\ int gridWidth = int(texelFetch(u_vectorGridCellIndicesTexture, ivec2(0, 0), 0).r);\n\ int gridHeight = int(texelFetch(u_vectorGridCellIndicesTexture, ivec2(1, 0), 0).r);\n\ int cellX = clamp(int(vectorUv.x * float(gridWidth)), 0, gridWidth - 1);\n\ int cellY = clamp(int(vectorUv.y * float(gridHeight)), 0, gridHeight - 1);\n\ int cellIndex = cellX + cellY * gridWidth;\n\ \n\ int indexEnd = int(texelFetch(u_vectorGridCellIndicesTexture, ivec2(cellIndex + 2, 0), 0).r);\n\ int indexStart = cellIndex == 0\n\ ? 0\n\ : int(texelFetch(u_vectorGridCellIndicesTexture, ivec2(cellIndex + 1, 0), 0).r);\n\ \n\ ivec2 segmentTextureSize = textureSize(u_vectorSegmentTexture, 0);\n\ ivec2 primitiveTextureSize = textureSize(u_vectorWidthTexture, 0);\n\ \n\ for (int i = indexStart; i < indexEnd; i++)\n\ {\n\ ivec2 segmentUv = vectorIndexToUv(i, segmentTextureSize);\n\ vec4 segment = texelFetch(u_vectorSegmentTexture, segmentUv, 0);\n\ \n\ int primitiveIndex = int(texelFetch(u_vectorSegmentPrimitiveIndicesTexture, segmentUv, 0).r);\n\ ivec2 primitiveUv = vectorIndexToUv(primitiveIndex, primitiveTextureSize);\n\ \n\ float lineWidth = texelFetch(u_vectorWidthTexture, primitiveUv, 0).r * 255.0;\n\ \n\ vec2 offsetUv = vectorOffsetToLine(vectorUv, segment);\n\ if (length(screenFromUv * offsetUv) < lineWidth)\n\ {\n\ // Alpha-composite vector over terrain.\n\ vec4 vectorColor = texelFetch(u_vectorColorTexture, primitiveUv, 0);\n\ baseColor = vectorColor * vec4(vectorColor.aaa, 1.0) + baseColor * (1.0 - vectorColor.a);\n\ break;\n\ }\n\ }\n\ \n\ return baseColor;\n\ }\n\ ";