--- /srv/rebuilderd/tmp/rebuilderdXo8ZAp/inputs/organicmaps_2026.09.29-32+ds-2_riscv64.deb +++ /srv/rebuilderd/tmp/rebuilderdXo8ZAp/out/organicmaps_2026.09.29-32+ds-2_riscv64.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2026-10-17 06:34:43.000000 debian-binary │ -rw-r--r-- 0 0 0 1272 2026-10-17 06:34:43.000000 control.tar.xz │ --rw-r--r-- 0 0 0 5066088 2026-10-17 06:34:43.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 5068060 2026-10-17 06:34:43.000000 data.tar.xz ├── control.tar.xz │ ├── control.tar │ │ ├── ./md5sums │ │ │ ├── ./md5sums │ │ │ │┄ Files differ ├── data.tar.xz │ ├── data.tar │ │ ├── ./usr/bin/OrganicMaps │ │ │┄ File has been modified after NT_GNU_BUILD_ID has been applied. │ │ │ ├── readelf --wide --notes {} │ │ │ │ @@ -1,8 +1,8 @@ │ │ │ │ │ │ │ │ Displaying notes found in: .note.gnu.build-id │ │ │ │ Owner Data size Description │ │ │ │ - GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) Build ID: e610f9b5d97cd99feedc633a7d640191c142a3d4 │ │ │ │ + GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) Build ID: 0b14c6f7cdd1c8c433572c0fc0ec44ea78d59162 │ │ │ │ │ │ │ │ Displaying notes found in: .note.ABI-tag │ │ │ │ Owner Data size Description │ │ │ │ GNU 0x00000010 NT_GNU_ABI_TAG (ABI version tag) OS: Linux, ABI: 4.15.0 │ │ │ ├── strings --all --bytes=8 {} │ │ │ │ @@ -1,8 +1,8 @@ │ │ │ │ -/lib/ld-linux-riscv64-lp64d.so.1 │ │ │ │ +b/lib/ld-linux-riscv64-lp64d.so.1 │ │ │ │ _ITM_deregisterTMCloneTable │ │ │ │ _ITM_registerTMCloneTable │ │ │ │ _ZN6google14FlagRegistererC1IiEEPKcS3_S3_PT_S5_ │ │ │ │ _ZN6google16SetVersionStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE │ │ │ │ _ZSt19piecewise_construct │ │ │ │ _ZN6google21ParseCommandLineFlagsEPiPPPcb │ │ │ │ _ZN6google21RegisterFlagValidatorEPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPFbPKcRS6_E │ │ │ │ @@ -11076,15 +11076,15 @@ │ │ │ │ NotFollow │ │ │ │ NotFollowNoPosition │ │ │ │ FollowAndRotate │ │ │ │ UK_England │ │ │ │ UK_Wales │ │ │ │ UK_Scotland │ │ │ │ Isle of Man │ │ │ │ -2026.10.21-0-00000000-Linux │ │ │ │ +2026.10.23-0-00000000-Linux │ │ │ │ .openstreetmap.org │ │ │ │ 162.55.100.169 │ │ │ │ /usr/share/fonts/truetype/roboto/ │ │ │ │ /usr/share/fonts/truetype/droid/ │ │ │ │ /usr/share/fonts/truetype/dejavu/ │ │ │ │ /usr/share/fonts/truetype/ttf-dejavu/ │ │ │ │ /usr/share/fonts/truetype/wqy/ │ │ │ │ @@ -15326,32 +15326,21 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ + in vec3 a_pos; │ │ │ │ + in vec2 a_texCoords; │ │ │ │ + out float v_intensity; │ │ │ │ + uniform mat4 u_transform; │ │ │ │ + uniform mat4 u_normalTransform; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec2 u_texCoordFlipping; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -15373,20 +15362,20 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position, 1) * u_modelView * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ - #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + vec4 position = u_transform * vec4(a_pos, 1.0); │ │ │ │ + v_intensity = a_texCoords.x; │ │ │ │ + gl_Position = position; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ #endif │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ @@ -15395,28 +15384,32 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec3 a_normal; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - out float v_intensity; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ + uniform vec4 u_routeParams; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec4 u_maskColor; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_fakeColor; │ │ │ │ + uniform vec4 u_fakeOutlineColor; │ │ │ │ + uniform vec2 u_fakeBorders; │ │ │ │ + uniform vec2 u_pattern; │ │ │ │ + uniform vec2 u_angleCosSin; │ │ │ │ + uniform float u_arrowHalfWidth; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - const vec4 kNormalizedLightDir = vec4(0.3162, 0.0, 0.9486, 0.0); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -15438,31 +15431,22 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position, 1.0) * u_modelView; │ │ │ │ - vec4 normal = vec4(a_position + a_normal, 1.0) * u_modelView; │ │ │ │ - normal.xyw = (normal * u_projection).xyw; │ │ │ │ - normal.z = normal.z * u_zScale; │ │ │ │ - pos.xyw = (pos * u_projection).xyw; │ │ │ │ - pos.z = a_position.z * u_zScale; │ │ │ │ - vec4 normDir = normal - pos; │ │ │ │ - if (dot(normDir, normDir) != 0.0) │ │ │ │ - v_intensity = max(0.0, -dot(kNormalizedLightDir, normalize(normDir))); │ │ │ │ - else │ │ │ │ - v_intensity = 0.0; │ │ │ │ - gl_Position = u_pivotTransform * pos; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ + vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + if (dot(a_normal, a_normal) != 0.0) │ │ │ │ + vec2 norm = a_normal * u_arrowHalfWidth; │ │ │ │ + transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ + u_modelView, length(norm)); │ │ │ │ v_colorTexCoords = a_colorTexCoords; │ │ │ │ + vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -15470,32 +15454,23 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ + in vec3 a_pos; │ │ │ │ + in vec3 a_normal; │ │ │ │ + in vec2 a_texCoords; │ │ │ │ + out vec3 v_normal; │ │ │ │ + out vec2 v_texCoords; │ │ │ │ + uniform mat4 u_transform; │ │ │ │ + uniform mat4 u_normalTransform; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec2 u_texCoordFlipping; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -15517,90 +15492,22 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position, 1.0) * u_modelView; │ │ │ │ - pos.xyw = (pos * u_projection).xyw; │ │ │ │ - pos.z = a_position.z * u_zScale; │ │ │ │ - gl_Position = u_pivotTransform * pos; │ │ │ │ + vec4 position = u_transform * vec4(a_pos, 1.0); │ │ │ │ + v_normal = normalize((u_normalTransform * vec4(a_normal, 0.0)).xyz); │ │ │ │ + v_texCoords = mix(a_texCoords, 1.0 - a_texCoords, u_texCoordFlipping); │ │ │ │ + gl_Position = position; │ │ │ │ #ifdef VULKAN │ │ │ │ gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ - #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ - #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ - #endif │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - in LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ - in vec2 v_maskTexCoords; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - const float kCellPx = 4.0; // denser than stipple (divides the 16px tile, so cells tile seamlessly) │ │ │ │ - const float kBaseRadiusPx = 0.7; │ │ │ │ - const float kRadiusVar = 0.6; // per-cell radius variation -> irregular sizes │ │ │ │ - const float kJitter = 0.5; // keep kJitter*0.5*kCellPx + maxRadius < kCellPx*0.5 │ │ │ │ - const float kDarken = 0.78; │ │ │ │ - float Hash(vec2 p) │ │ │ │ - p = fract(p * vec2(127.1, 311.7)); │ │ │ │ - p += dot(p, p + 34.23); │ │ │ │ - return fract(p.x * p.y); │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ - void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ - #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ #endif │ │ │ │ - vec2 px = v_maskTexCoords * 16.0; │ │ │ │ - vec2 cell = floor(px / kCellPx); │ │ │ │ - vec2 toCenter = │ │ │ │ - (fract(px / kCellPx) - 0.5) * kCellPx - (vec2(Hash(cell), Hash(cell + 19.7)) - 0.5) * (kJitter * kCellPx); │ │ │ │ - float radius = kBaseRadiusPx * (1.0 - kRadiusVar * 0.5 + kRadiusVar * Hash(cell + 3.7)); │ │ │ │ - float d = length(toCenter); │ │ │ │ - float aa = max(fwidth(px.x), fwidth(px.y)); │ │ │ │ - float coverage = 1.0 - smoothstep(radius - aa, radius + aa, d); │ │ │ │ - color.rgb = ModulateByPatternDots(color.rgb, kDarken, coverage); │ │ │ │ - color.a *= u_opacity; │ │ │ │ - v_FragColor = color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -15608,82 +15515,24 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - in LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ - in vec2 v_maskTexCoords; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec4 v_color; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - const float kCellPx = 8.0; // dot lattice cell (divides the 16px tile, so cells tile seamlessly) │ │ │ │ - const float kRadiusPx = 1.2; // dot radius │ │ │ │ - const float kJitter = 0.55; // keep kJitter*0.5*kCellPx + kRadiusPx < kCellPx*0.5 (dots stay in cell) │ │ │ │ - const float kDarken = 0.80; // surface multiplier under a dot on a light fill (gentle - texture should whisper) │ │ │ │ - float Hash(vec2 p) │ │ │ │ - p = fract(p * vec2(127.1, 311.7)); │ │ │ │ - p += dot(p, p + 34.23); │ │ │ │ - return fract(p.x * p.y); │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ - void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ - #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - #endif │ │ │ │ - vec2 px = v_maskTexCoords * 16.0; │ │ │ │ - vec2 cell = floor(px / kCellPx); │ │ │ │ - vec2 toCenter = │ │ │ │ - (fract(px / kCellPx) - 0.5) * kCellPx - (vec2(Hash(cell), Hash(cell + 19.7)) - 0.5) * (kJitter * kCellPx); │ │ │ │ - float d = length(toCenter); │ │ │ │ - float aa = max(fwidth(px.x), fwidth(px.y)); // continuous coord: no fract-seam derivative spike │ │ │ │ - float coverage = 1.0 - smoothstep(kRadiusPx - aa, kRadiusPx + aa, d); │ │ │ │ - color.rgb = ModulateByPatternDots(color.rgb, kDarken, coverage); │ │ │ │ - color.a *= u_opacity; │ │ │ │ - v_FragColor = color; │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ - #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ - #endif │ │ │ │ - in vec3 a_pos; │ │ │ │ - in vec3 a_normal; │ │ │ │ - out vec3 v_normal; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ + uniform vec4 u_params; │ │ │ │ + uniform float u_lineHalfWidth; │ │ │ │ + uniform float u_maxRadius; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -15705,21 +15554,23 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 position = u_transform * vec4(a_pos, 1.0); │ │ │ │ - v_normal = normalize((u_normalTransform * vec4(a_normal, 0.0)).xyz); │ │ │ │ - gl_Position = position; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ + vec2 normal = a_normal.xy; │ │ │ │ + vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + if (dot(normal, normal) != 0.0) │ │ │ │ + vec2 norm = normal * u_lineHalfWidth; │ │ │ │ + transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ + u_modelView, length(norm)); │ │ │ │ + v_color = a_color; │ │ │ │ + vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -15727,21 +15578,25 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_pos; │ │ │ │ - in vec2 a_texCoords; │ │ │ │ - out float v_intensity; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec3 v_radius; │ │ │ │ + out vec4 v_color; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_params; │ │ │ │ + uniform float u_lineHalfWidth; │ │ │ │ + uniform float u_maxRadius; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -15763,21 +15618,25 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 position = u_transform * vec4(a_pos, 1.0); │ │ │ │ - v_intensity = a_texCoords.x; │ │ │ │ - gl_Position = position; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ + vec2 normal = a_normal.xy; │ │ │ │ + vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + if (dot(normal, normal) != 0.0) │ │ │ │ + vec2 norm = normal * u_lineHalfWidth; │ │ │ │ + transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ + u_modelView, length(norm)); │ │ │ │ + transformedAxisPos += a_normal.zw * u_lineHalfWidth; │ │ │ │ + vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + v_color = a_color; │ │ │ │ + v_radius = vec3(a_normal.zw, u_maxRadius) * u_lineHalfWidth; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -15785,23 +15644,33 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_pos; │ │ │ │ - in vec3 a_normal; │ │ │ │ - in vec2 a_texCoords; │ │ │ │ - out vec3 v_normal; │ │ │ │ - out vec2 v_texCoords; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec2 a_maskTexCoord; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + #endif │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -15823,22 +15692,24 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 position = u_transform * vec4(a_pos, 1.0); │ │ │ │ - v_normal = normalize((u_normalTransform * vec4(a_normal, 0.0)).xyz); │ │ │ │ - v_texCoords = mix(a_texCoords, 1.0 - a_texCoords, u_texCoordFlipping); │ │ │ │ - gl_Position = position; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + vec4 pivot = vec4(a_position.xyz, 1.0) * u_modelView; │ │ │ │ + vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection; │ │ │ │ + gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, │ │ │ │ + a_position.w * u_zScale, offset.xy); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoord); │ │ │ │ + #else │ │ │ │ + v_colorTexCoord = a_colorTexCoord; │ │ │ │ #endif │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -15846,34 +15717,77 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec3 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - out vec3 v_radius; │ │ │ │ + in vec3 v_length; │ │ │ │ + in vec4 v_color; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ + uniform vec4 u_routeParams; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec4 u_maskColor; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_fakeColor; │ │ │ │ + uniform vec4 u_fakeOutlineColor; │ │ │ │ + uniform vec2 u_fakeBorders; │ │ │ │ + uniform vec2 u_pattern; │ │ │ │ + uniform vec2 u_angleCosSin; │ │ │ │ + uniform float u_arrowHalfWidth; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ + const float kAntialiasingThreshold = 0.92; │ │ │ │ + const float kOutlineThreshold1 = 0.81; │ │ │ │ + const float kOutlineThreshold2 = 0.71; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ + void main() │ │ │ │ + if (v_length.x < v_length.z) │ │ │ │ + discard; │ │ │ │ + vec2 coefs = step(v_length.xx, u_fakeBorders); │ │ │ │ + coefs.y = 1.0 - coefs.y; │ │ │ │ + vec4 mainColor = mix(u_color, u_fakeColor, coefs.x); │ │ │ │ + mainColor = mix(mainColor, u_fakeColor, coefs.y); │ │ │ │ + vec4 mainOutlineColor = mix(u_outlineColor, u_fakeOutlineColor, coefs.x); │ │ │ │ + mainOutlineColor = mix(mainOutlineColor, u_fakeOutlineColor, coefs.y); │ │ │ │ + vec4 color = mix(mix(mainColor, vec4(v_color.rgb, 1.0), v_color.a), mainColor, step(u_routeParams.w, 0.0)); │ │ │ │ + color = mix(color, mainOutlineColor, step(kOutlineThreshold1, abs(v_length.y))); │ │ │ │ + color = mix(color, mainOutlineColor, smoothstep(kOutlineThreshold2, kOutlineThreshold1, abs(v_length.y))); │ │ │ │ + color.a *= (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_length.y))); │ │ │ │ + color = vec4(mix(color.rgb, u_maskColor.rgb, u_maskColor.a), color.a); │ │ │ │ + v_FragColor = color; │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ #endif │ │ │ │ + in vec2 a_pos; │ │ │ │ + in vec2 a_tcoord; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + out vec4 v_offset0; │ │ │ │ + out vec4 v_offset1; │ │ │ │ + out vec4 v_offset2; │ │ │ │ + uniform vec4 u_framebufferMetrics; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -15895,23 +15809,19 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 p = vec4(a_position, 1) * u_modelView; │ │ │ │ - vec4 pos = vec4(a_normal.xy, 0, 0) + p; │ │ │ │ - gl_Position = applyPivotTransform(pos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ - #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - v_radius = a_normal; │ │ │ │ + v_colorTexCoords = a_tcoord; │ │ │ │ + v_offset0 = u_framebufferMetrics.xyxy * vec4(-1.0, 0.0, 0.0, -1.0) + a_tcoord.xyxy; │ │ │ │ + v_offset1 = u_framebufferMetrics.xyxy * vec4( 1.0, 0.0, 0.0, 1.0) + a_tcoord.xyxy; │ │ │ │ + v_offset2 = u_framebufferMetrics.xyxy * vec4(-2.0, 0.0, 0.0, -2.0) + a_tcoord.xyxy; │ │ │ │ + gl_Position = vec4(a_pos, 0.0, 1.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -15919,27 +15829,24 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_normal; │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec3 v_radius; │ │ │ │ - out vec4 v_color; │ │ │ │ + in vec2 a_position; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ + uniform vec2 u_position; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_length; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -15961,20 +15868,20 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec3 radius = a_normal * a_position.z; │ │ │ │ - vec4 pos = vec4(a_position.xy, 0, 1) * u_modelView; │ │ │ │ - vec4 shiftedPos = vec4(radius.xy, 0, 0) + pos; │ │ │ │ - gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - v_radius = radius; │ │ │ │ - v_color = a_color; │ │ │ │ + gl_Position = vec4(a_position, 0, 1) * u_modelView * u_projection; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -15983,22 +15890,22 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_colorTexCoords; │ │ │ │ - out vec4 v_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + in vec2 a_maskTexCoords; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ #endif │ │ │ │ + out vec2 v_maskTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ @@ -16031,23 +15938,22 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 p = vec4(a_position, 1) * u_modelView; │ │ │ │ - vec4 pos = vec4(a_normal.xy + a_colorTexCoords.zw, 0, 0) + p; │ │ │ │ - gl_Position = applyPivotTransform(pos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + vec4 pos = vec4(a_position, 1) * u_modelView * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords.xy); │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords.xy; │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #endif │ │ │ │ - v_normal = a_normal; │ │ │ │ + v_maskTexCoords = a_maskTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -16055,34 +15961,22 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_colorTexCoords; │ │ │ │ - out vec4 v_normal; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - #endif │ │ │ │ + #define TILE_BACKGROUND_MAX_COUNT 64 │ │ │ │ + out vec3 v_texCoords; │ │ │ │ + uniform vec4 u_tileCoordsMinMax[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ + uniform vec4 u_textureRectMinMax[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ + uniform int u_textureIndex[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -16104,23 +15998,22 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pivot = vec4(a_position.xyz, 1.0) * u_modelView; │ │ │ │ - vec4 offset = vec4(a_normal.xy + a_colorTexCoords.zw, 0.0, 0.0) * u_projection; │ │ │ │ - gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, 0.0, offset.xy); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords.xy); │ │ │ │ - #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords.xy; │ │ │ │ - #endif │ │ │ │ - v_normal = a_normal; │ │ │ │ + vec2 quadVertex = vec2(gl_VertexID & 1, (gl_VertexID >> 1) & 1); │ │ │ │ + vec4 tileCoordsMinMax = u_tileCoordsMinMax[gl_InstanceID]; │ │ │ │ + vec2 worldPos = mix(tileCoordsMinMax.xy, tileCoordsMinMax.zw, quadVertex); │ │ │ │ + vec4 pos = vec4(worldPos, 0.0, 1.0) * u_modelView * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + vec4 textureRectMinMax = u_textureRectMinMax[gl_InstanceID]; │ │ │ │ + vec2 texUV = mix(textureRectMinMax.xy, textureRectMinMax.zw, quadVertex); │ │ │ │ + v_texCoords = vec3(texUV, float(u_textureIndex[gl_InstanceID])); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -16128,20 +16021,19 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ in vec3 a_normal; │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - in vec4 a_maskTexCoord; │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec3 v_radius; │ │ │ │ + out vec4 v_color; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ @@ -16171,25 +16063,20 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normal.xy; │ │ │ │ - float halfWidth = length(normal); │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - if (halfWidth != 0.0) │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + normal, │ │ │ │ - u_modelView, halfWidth); │ │ │ │ - float uOffset = min(length(vec4(kShapeCoordScalar, 0, 0, 0) * u_modelView) * a_maskTexCoord.x, 1.0); │ │ │ │ - v_colorTexCoord = a_colorTexCoord; │ │ │ │ - v_maskTexCoord = vec2(a_maskTexCoord.y + uOffset * a_maskTexCoord.z, a_maskTexCoord.w); │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + vec3 radius = a_normal * a_position.z; │ │ │ │ + vec4 pos = vec4(a_position.xy, 0, 1) * u_modelView; │ │ │ │ + vec4 shiftedPos = vec4(radius.xy, 0, 0) + pos; │ │ │ │ + gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + v_radius = radius; │ │ │ │ + v_color = a_color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -16197,34 +16084,19 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - in vec2 a_maskTexCoords; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ + in vec2 a_pos; │ │ │ │ + in vec2 a_tcoord; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - out vec2 v_maskTexCoords; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ + out vec4 v_offset; │ │ │ │ + uniform vec4 u_framebufferMetrics; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -16246,22 +16118,17 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position, 1) * u_modelView * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ - #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - v_maskTexCoords = a_maskTexCoords; │ │ │ │ + v_colorTexCoords = a_tcoord; │ │ │ │ + v_offset = u_framebufferMetrics.xyxy * vec4(1.0, 0.0, 0.0, 1.0) + a_tcoord.xyxy; │ │ │ │ + gl_Position = vec4(a_pos, 0.0, 1.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -16269,80 +16136,26 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - in LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ - in vec2 v_maskTexCoords; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ + uniform vec4 u_position; │ │ │ │ + uniform vec2 u_lineParams; │ │ │ │ + uniform float u_accuracy; │ │ │ │ uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - const float kRowPeriodPx = 8.0; // vertical distance between dash rows │ │ │ │ - const float kRowCenterPx = 3.5; // first row center (matches the legacy tile) │ │ │ │ - const float kHalfThickPx = 0.5; // half dash thickness -> ~1px │ │ │ │ - const float kDashPeriodPx = 16.0; // dash + gap length │ │ │ │ - const float kDashHalfPx = 4.0; // half dash length -> 8px dash │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ - void main() │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - LOW_P vec4 color = v_color; │ │ │ │ - #else │ │ │ │ - LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ - #endif │ │ │ │ - vec2 px = v_maskTexCoords * 16.0; │ │ │ │ - float ym = mod(px.y - kRowCenterPx, kRowPeriodPx); │ │ │ │ - float yDist = min(ym, kRowPeriodPx - ym); │ │ │ │ - float aaY = fwidth(px.y); │ │ │ │ - float onRow = 1.0 - smoothstep(kHalfThickPx - aaY, kHalfThickPx + aaY, yDist); │ │ │ │ - float rowIdx = floor((px.y - kRowCenterPx) / kRowPeriodPx + 0.5); │ │ │ │ - float xPhase = px.x + mod(rowIdx, 2.0) * (kDashPeriodPx * 0.5); │ │ │ │ - float xDist = abs(mod(xPhase, kDashPeriodPx) - kDashHalfPx); │ │ │ │ - float aaX = fwidth(px.x); │ │ │ │ - float onDash = 1.0 - smoothstep(kDashHalfPx - aaX, kDashHalfPx + aaX, xDist); │ │ │ │ - color.a *= onRow * onDash * u_opacity; │ │ │ │ - v_FragColor = color; │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ - #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ - #endif │ │ │ │ - in vec2 a_position; │ │ │ │ - in vec2 a_texCoords; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec2 v_texCoords; │ │ │ │ - out vec4 v_color; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_azimut; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -16364,21 +16177,19 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - v_texCoords = a_texCoords; │ │ │ │ - v_color = a_color; │ │ │ │ - gl_Position = vec4(a_position, 0, 1) * u_projection; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ + vec4 position = vec4(u_position.xy, 0.0, 1.0) * u_modelView; │ │ │ │ + vec4 normal = vec4(a_normal * u_accuracy, 0.0, 0.0); │ │ │ │ + position = (position + normal) * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(position, u_pivotTransform, u_position.z * u_zScale); │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -16465,17 +16276,15 @@ │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec4 a_position; │ │ │ │ in vec2 a_normal; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ - in vec2 a_maskTexCoords; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - out vec2 v_maskTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ @@ -16506,18 +16315,22 @@ │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ - vec4 shiftedPos = vec4(a_normal, 0, 0) + pos; │ │ │ │ + float normalLen = length(a_normal); │ │ │ │ + vec4 n = vec4(a_position.xy + a_normal * kShapeCoordScalar, 0.0, 0.0) * u_modelView; │ │ │ │ + vec4 norm = vec4(0.0, 0.0, 0.0, 0.0); │ │ │ │ + if (dot(n, n) != 0.0) │ │ │ │ + norm = normalize(n) * normalLen; │ │ │ │ + vec4 shiftedPos = norm + pos; │ │ │ │ gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ v_colorTexCoords = a_colorTexCoords; │ │ │ │ - v_maskTexCoords = a_maskTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -16528,17 +16341,15 @@ │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec4 a_position; │ │ │ │ in vec2 a_normal; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ - in vec2 a_maskTexCoords; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - out vec2 v_maskTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ @@ -16568,20 +16379,18 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pivot = vec4(a_position.xyz, 1.0) * u_modelView; │ │ │ │ - vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection; │ │ │ │ - gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, │ │ │ │ - a_position.w * u_zScale, offset.xy); │ │ │ │ + vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ + vec4 shiftedPos = vec4(a_normal, 0, 0) + pos; │ │ │ │ + gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ v_colorTexCoords = a_colorTexCoords; │ │ │ │ - v_maskTexCoords = a_maskTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -16589,26 +16398,32 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_normal; │ │ │ │ + in vec3 a_position; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ + #endif │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_position; │ │ │ │ - uniform vec2 u_lineParams; │ │ │ │ - uniform float u_accuracy; │ │ │ │ - uniform float u_zScale; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_azimut; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -16630,26 +16445,27 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - float sinV = sin(u_azimut); │ │ │ │ - float cosV = cos(u_azimut); │ │ │ │ - mat4 rotation; │ │ │ │ - rotation[0] = vec4(cosV, sinV, 0.0, 0.0); │ │ │ │ - rotation[1] = vec4(-sinV, cosV, 0.0, 0.0); │ │ │ │ - rotation[2] = vec4(0.0, 0.0, 1.0, 0.0); │ │ │ │ - rotation[3] = vec4(0.0, 0.0, 0.0, 1.0); │ │ │ │ - vec4 pos = vec4(u_position.xyz, 1.0) * u_modelView; │ │ │ │ - vec4 normal = vec4(a_normal, 0, 0); │ │ │ │ - vec4 shiftedPos = normal * rotation + pos; │ │ │ │ - gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + vec4 pos = vec4(a_position, 1.0) * u_modelView; │ │ │ │ + pos.xyw = (pos * u_projection).xyw; │ │ │ │ + pos.z = a_position.z * u_zScale; │ │ │ │ + gl_Position = u_pivotTransform * pos; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ + #else │ │ │ │ v_colorTexCoords = a_colorTexCoords; │ │ │ │ + #endif │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -16658,25 +16474,32 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec4 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + in vec3 a_normal; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec4 v_radius; │ │ │ │ + out vec4 v_color; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ + uniform vec4 u_routeParams; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec4 u_maskColor; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_fakeColor; │ │ │ │ + uniform vec4 u_fakeOutlineColor; │ │ │ │ + uniform vec2 u_fakeBorders; │ │ │ │ + uniform vec2 u_pattern; │ │ │ │ + uniform vec2 u_angleCosSin; │ │ │ │ + uniform float u_arrowHalfWidth; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -16698,23 +16521,24 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ - float normalLen = length(a_normal); │ │ │ │ - vec4 n = vec4(a_position.xy + a_normal * kShapeCoordScalar, 0.0, 0.0) * u_modelView; │ │ │ │ - vec4 norm = vec4(0.0, 0.0, 0.0, 0.0); │ │ │ │ - if (dot(n, n) != 0.0) │ │ │ │ - norm = normalize(n) * normalLen; │ │ │ │ - vec4 shiftedPos = norm + pos; │ │ │ │ - gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + float r = u_routeParams.x * a_normal.z; │ │ │ │ + vec2 normal = vec2(a_normal.x * u_angleCosSin.x - a_normal.y * u_angleCosSin.y, │ │ │ │ + a_normal.x * u_angleCosSin.y + a_normal.y * u_angleCosSin.x); │ │ │ │ + vec4 radius = vec4(normal.xy * r, r, a_position.w); │ │ │ │ + vec4 pos = vec4(a_position.xy, 0, 1) * u_modelView; │ │ │ │ + vec2 shiftedPos = radius.xy + pos.xy; │ │ │ │ + pos = vec4(shiftedPos, a_position.z, 1.0) * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + v_radius = radius; │ │ │ │ + v_color = a_color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -16722,26 +16546,21 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_position; │ │ │ │ - uniform vec2 u_lineParams; │ │ │ │ - uniform float u_accuracy; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_azimut; │ │ │ │ + in vec3 a_pos; │ │ │ │ + in vec3 a_normal; │ │ │ │ + out vec3 v_normal; │ │ │ │ + uniform mat4 u_transform; │ │ │ │ + uniform mat4 u_normalTransform; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec2 u_texCoordFlipping; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -16763,19 +16582,21 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 position = vec4(u_position.xy, 0.0, 1.0) * u_modelView; │ │ │ │ - vec4 normal = vec4(a_normal * u_accuracy, 0.0, 0.0); │ │ │ │ - position = (position + normal) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(position, u_pivotTransform, u_position.z * u_zScale); │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + vec4 position = u_transform * vec4(a_pos, 1.0); │ │ │ │ + v_normal = normalize((u_normalTransform * vec4(a_normal, 0.0)).xyz); │ │ │ │ + gl_Position = position; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -16783,54 +16604,61 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 v_length; │ │ │ │ - in vec4 v_color; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + in LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ + in vec2 v_maskTexCoords; │ │ │ │ out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_routeParams; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec4 u_maskColor; │ │ │ │ - uniform vec4 u_outlineColor; │ │ │ │ - uniform vec4 u_fakeColor; │ │ │ │ - uniform vec4 u_fakeOutlineColor; │ │ │ │ - uniform vec2 u_fakeBorders; │ │ │ │ - uniform vec2 u_pattern; │ │ │ │ - uniform vec2 u_angleCosSin; │ │ │ │ - uniform float u_arrowHalfWidth; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ - const float kAntialiasingThreshold = 0.92; │ │ │ │ - const float kOutlineThreshold1 = 0.81; │ │ │ │ - const float kOutlineThreshold2 = 0.71; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + const float kCellPx = 4.0; // denser than stipple (divides the 16px tile, so cells tile seamlessly) │ │ │ │ + const float kBaseRadiusPx = 0.7; │ │ │ │ + const float kRadiusVar = 0.6; // per-cell radius variation -> irregular sizes │ │ │ │ + const float kJitter = 0.5; // keep kJitter*0.5*kCellPx + maxRadius < kCellPx*0.5 │ │ │ │ + const float kDarken = 0.78; │ │ │ │ + float Hash(vec2 p) │ │ │ │ + p = fract(p * vec2(127.1, 311.7)); │ │ │ │ + p += dot(p, p + 34.23); │ │ │ │ + return fract(p.x * p.y); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - if (v_length.x < v_length.z) │ │ │ │ - discard; │ │ │ │ - vec2 coefs = step(v_length.xx, u_fakeBorders); │ │ │ │ - coefs.y = 1.0 - coefs.y; │ │ │ │ - vec4 mainColor = mix(u_color, u_fakeColor, coefs.x); │ │ │ │ - mainColor = mix(mainColor, u_fakeColor, coefs.y); │ │ │ │ - vec4 mainOutlineColor = mix(u_outlineColor, u_fakeOutlineColor, coefs.x); │ │ │ │ - mainOutlineColor = mix(mainOutlineColor, u_fakeOutlineColor, coefs.y); │ │ │ │ - vec4 color = mix(mix(mainColor, vec4(v_color.rgb, 1.0), v_color.a), mainColor, step(u_routeParams.w, 0.0)); │ │ │ │ - color = mix(color, mainOutlineColor, step(kOutlineThreshold1, abs(v_length.y))); │ │ │ │ - color = mix(color, mainOutlineColor, smoothstep(kOutlineThreshold2, kOutlineThreshold1, abs(v_length.y))); │ │ │ │ - color.a *= (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_length.y))); │ │ │ │ - color = vec4(mix(color.rgb, u_maskColor.rgb, u_maskColor.a), color.a); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + LOW_P vec4 color = v_color; │ │ │ │ + #else │ │ │ │ + LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + #endif │ │ │ │ + vec2 px = v_maskTexCoords * 16.0; │ │ │ │ + vec2 cell = floor(px / kCellPx); │ │ │ │ + vec2 toCenter = │ │ │ │ + (fract(px / kCellPx) - 0.5) * kCellPx - (vec2(Hash(cell), Hash(cell + 19.7)) - 0.5) * (kJitter * kCellPx); │ │ │ │ + float radius = kBaseRadiusPx * (1.0 - kRadiusVar * 0.5 + kRadiusVar * Hash(cell + 3.7)); │ │ │ │ + float d = length(toCenter); │ │ │ │ + float aa = max(fwidth(px.x), fwidth(px.y)); │ │ │ │ + float coverage = 1.0 - smoothstep(radius - aa, radius + aa, d); │ │ │ │ + color.rgb = ModulateByPatternDots(color.rgb, kDarken, coverage); │ │ │ │ + color.a *= u_opacity; │ │ │ │ v_FragColor = color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ @@ -16839,34 +16667,28 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ + in vec4 a_position; │ │ │ │ in vec2 a_normal; │ │ │ │ - in vec3 a_length; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec3 v_length; │ │ │ │ - out vec4 v_color; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + in vec2 a_maskTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + out vec2 v_maskTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_routeParams; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec4 u_maskColor; │ │ │ │ - uniform vec4 u_outlineColor; │ │ │ │ - uniform vec4 u_fakeColor; │ │ │ │ - uniform vec4 u_fakeOutlineColor; │ │ │ │ - uniform vec2 u_fakeBorders; │ │ │ │ - uniform vec2 u_pattern; │ │ │ │ - uniform vec2 u_angleCosSin; │ │ │ │ - uniform float u_arrowHalfWidth; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -16888,26 +16710,20 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - vec2 len = vec2(a_length.x, a_length.z); │ │ │ │ - if (dot(a_normal, a_normal) != 0.0) │ │ │ │ - vec2 norm = a_normal * u_routeParams.x; │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ - u_modelView, length(norm)); │ │ │ │ - if (u_routeParams.y != 0.0) │ │ │ │ - len = vec2(a_length.x + a_length.y * u_routeParams.y, a_length.z); │ │ │ │ - v_length = vec3(len, u_routeParams.z); │ │ │ │ - v_color = a_color; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + vec4 pivot = vec4(a_position.xyz, 1.0) * u_modelView; │ │ │ │ + vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection; │ │ │ │ + gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, │ │ │ │ + a_position.w * u_zScale, offset.xy); │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ + v_maskTexCoords = a_maskTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -16922,25 +16738,19 @@ │ │ │ │ in vec4 a_position; │ │ │ │ in vec2 a_normal; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_routeParams; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec4 u_maskColor; │ │ │ │ - uniform vec4 u_outlineColor; │ │ │ │ - uniform vec4 u_fakeColor; │ │ │ │ - uniform vec4 u_fakeOutlineColor; │ │ │ │ - uniform vec2 u_fakeBorders; │ │ │ │ - uniform vec2 u_pattern; │ │ │ │ - uniform vec2 u_angleCosSin; │ │ │ │ - uniform float u_arrowHalfWidth; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -16962,22 +16772,19 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - if (dot(a_normal, a_normal) != 0.0) │ │ │ │ - vec2 norm = a_normal * u_arrowHalfWidth; │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ - u_modelView, length(norm)); │ │ │ │ + vec4 pivot = vec4(a_position.xyz, 1.0) * u_modelView; │ │ │ │ + vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection; │ │ │ │ + gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, │ │ │ │ + a_position.w * u_zScale, offset.xy); │ │ │ │ v_colorTexCoords = a_colorTexCoords; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -16985,33 +16792,34 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec3 a_normal; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec4 v_radius; │ │ │ │ - out vec4 v_color; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec4 a_colorTexCoords; │ │ │ │ + out vec4 v_normal; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + #endif │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_routeParams; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec4 u_maskColor; │ │ │ │ - uniform vec4 u_outlineColor; │ │ │ │ - uniform vec4 u_fakeColor; │ │ │ │ - uniform vec4 u_fakeOutlineColor; │ │ │ │ - uniform vec2 u_fakeBorders; │ │ │ │ - uniform vec2 u_pattern; │ │ │ │ - uniform vec2 u_angleCosSin; │ │ │ │ - uniform float u_arrowHalfWidth; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -17033,24 +16841,23 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - float r = u_routeParams.x * a_normal.z; │ │ │ │ - vec2 normal = vec2(a_normal.x * u_angleCosSin.x - a_normal.y * u_angleCosSin.y, │ │ │ │ - a_normal.x * u_angleCosSin.y + a_normal.y * u_angleCosSin.x); │ │ │ │ - vec4 radius = vec4(normal.xy * r, r, a_position.w); │ │ │ │ - vec4 pos = vec4(a_position.xy, 0, 1) * u_modelView; │ │ │ │ - vec2 shiftedPos = radius.xy + pos.xy; │ │ │ │ - pos = vec4(shiftedPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ - v_radius = radius; │ │ │ │ - v_color = a_color; │ │ │ │ + vec4 p = vec4(a_position, 1) * u_modelView; │ │ │ │ + vec4 pos = vec4(a_normal.xy + a_colorTexCoords.zw, 0, 0) + p; │ │ │ │ + gl_Position = applyPivotTransform(pos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords.xy); │ │ │ │ + #else │ │ │ │ + v_colorTexCoords = a_colorTexCoords.xy; │ │ │ │ + #endif │ │ │ │ + v_normal = a_normal; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -17058,25 +16865,34 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec3 a_normal; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ + #endif │ │ │ │ + out vec3 v_radius; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ - uniform vec2 u_position; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_length; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -17098,20 +16914,23 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - gl_Position = vec4(u_position + a_position + u_length * a_normal, 0, 1) * u_projection; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ + vec4 p = vec4(a_position, 1) * u_modelView; │ │ │ │ + vec4 pos = vec4(a_normal.xy, 0, 0) + p; │ │ │ │ + gl_Position = applyPivotTransform(pos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ + #else │ │ │ │ v_colorTexCoords = a_colorTexCoords; │ │ │ │ + #endif │ │ │ │ + v_radius = a_normal; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -17120,36 +16939,24 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - in vec3 a_length; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - #endif │ │ │ │ - out float v_lengthY; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec4 v_offsets; │ │ │ │ + out vec4 v_color; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_position; │ │ │ │ - uniform vec2 u_lineParams; │ │ │ │ - uniform float u_accuracy; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_azimut; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ - const float kAntialiasingThreshold = 0.92; │ │ │ │ + uniform vec4 u_params; │ │ │ │ + uniform float u_lineHalfWidth; │ │ │ │ + uniform float u_maxRadius; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -17171,30 +16978,23 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - vec2 len = vec2(a_length.x, a_length.z); │ │ │ │ - if (dot(a_normal, a_normal) != 0.0) │ │ │ │ - vec2 norm = a_normal * u_lineParams.x; │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ - u_modelView, length(norm)); │ │ │ │ - if (u_lineParams.y != 0.0) │ │ │ │ - len = vec2(a_length.x + a_length.y * u_lineParams.y, a_length.z); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ - #else │ │ │ │ - v_colorTexCoord = a_colorTexCoords; │ │ │ │ - #endif │ │ │ │ - v_lengthY = len.y; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ + vec4 pos = vec4(a_position.xy, 0, 1) * u_modelView; │ │ │ │ + vec2 normal = vec2(a_normal.x * u_params.x - a_normal.y * u_params.y, │ │ │ │ + a_normal.x * u_params.y + a_normal.y * u_params.x); │ │ │ │ + vec2 shiftedPos = normal * u_params.z + pos.xy; │ │ │ │ + pos = vec4(shiftedPos, a_position.z, 1.0) * u_projection; │ │ │ │ gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + vec2 offsets = abs(a_normal.zw); │ │ │ │ + v_offsets = vec4(a_normal.zw, offsets - 1.0); │ │ │ │ + v_color = a_color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -17202,117 +17002,60 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 v_coords; │ │ │ │ - in vec4 v_offset0; │ │ │ │ - in vec4 v_offset1; │ │ │ │ - in vec4 v_offset2; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform vec4 u_framebufferMetrics; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + in LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ - uniform sampler2D u_smaaArea; │ │ │ │ - uniform sampler2D u_smaaSearch; │ │ │ │ - #define SMAA_SEARCHTEX_SIZE vec2(66.0, 33.0) │ │ │ │ - #define SMAA_SEARCHTEX_PACKED_SIZE vec2(64.0, 16.0) │ │ │ │ - #define SMAA_AREATEX_MAX_DISTANCE 16.0 │ │ │ │ - #define SMAA_AREATEX_PIXEL_SIZE (vec2(1.0 / 256.0, 1.0 / 1024.0)) │ │ │ │ - #define SMAALoopBegin(condition) while (condition) { │ │ │ │ - #define SMAALoopEnd } │ │ │ │ - #define SMAASampleLevelZero(tex, coord) textureLod(tex, coord, 0.0) │ │ │ │ - #define SMAASampleLevelZeroOffset(tex, coord, offset) textureLodOffset(tex, coord, 0.0, offset) │ │ │ │ - #define SMAARound(v) round((v)) │ │ │ │ - #define SMAAOffset(x,y) ivec2(x,y) │ │ │ │ - const vec2 kAreaTexMaxDistance = vec2(SMAA_AREATEX_MAX_DISTANCE, SMAA_AREATEX_MAX_DISTANCE); │ │ │ │ - const float kActivationThreshold = 0.8281; │ │ │ │ - float SMAASearchLength(vec2 e, float offset) │ │ │ │ - vec2 scale = SMAA_SEARCHTEX_SIZE * vec2(0.5, -1.0); │ │ │ │ - vec2 bias = SMAA_SEARCHTEX_SIZE * vec2(offset, 1.0); │ │ │ │ - scale += vec2(-1.0, 1.0); │ │ │ │ - bias += vec2( 0.5, -0.5); │ │ │ │ - scale *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE; │ │ │ │ - bias *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE; │ │ │ │ - return SMAASampleLevelZero(u_smaaSearch, scale * e + bias).r; │ │ │ │ - float SMAASearchXLeft(vec2 texcoord, float end) │ │ │ │ - vec2 e = vec2(0.0, 1.0); │ │ │ │ - SMAALoopBegin(texcoord.x > end && e.g > kActivationThreshold && e.r == 0.0) │ │ │ │ - e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ - texcoord = vec2(-2.0, 0.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ - SMAALoopEnd │ │ │ │ - float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e, 0.0); │ │ │ │ - return u_framebufferMetrics.x * offset + texcoord.x; │ │ │ │ - float SMAASearchXRight(vec2 texcoord, float end) │ │ │ │ - vec2 e = vec2(0.0, 1.0); │ │ │ │ - SMAALoopBegin(texcoord.x < end && e.g > kActivationThreshold && e.r == 0.0) │ │ │ │ - e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ - texcoord = vec2(2.0, 0.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ - SMAALoopEnd │ │ │ │ - float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e, 0.5); │ │ │ │ - return -u_framebufferMetrics.x * offset + texcoord.x; │ │ │ │ - float SMAASearchYUp(vec2 texcoord, float end) │ │ │ │ - vec2 e = vec2(1.0, 0.0); │ │ │ │ - SMAALoopBegin(texcoord.y > end && e.r > kActivationThreshold && e.g == 0.0) │ │ │ │ - e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ - texcoord = vec2(0.0, -2.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ - SMAALoopEnd │ │ │ │ - float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e.gr, 0.0); │ │ │ │ - return u_framebufferMetrics.y * offset + texcoord.y; │ │ │ │ - float SMAASearchYDown(vec2 texcoord, float end) │ │ │ │ - vec2 e = vec2(1.0, 0.0); │ │ │ │ - SMAALoopBegin(texcoord.y < end && e.r > kActivationThreshold && e.g == 0.0) │ │ │ │ - e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ - texcoord = vec2(0.0, 2.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ - SMAALoopEnd │ │ │ │ - float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e.gr, 0.5); │ │ │ │ - return -u_framebufferMetrics.y * offset + texcoord.y; │ │ │ │ - vec2 SMAAArea(vec2 dist, float e1, float e2) │ │ │ │ - vec2 texcoord = kAreaTexMaxDistance * SMAARound(4.0 * vec2(e1, e2)) + dist; │ │ │ │ - texcoord = SMAA_AREATEX_PIXEL_SIZE * (texcoord + 0.5); │ │ │ │ - return SMAASampleLevelZero(u_smaaArea, texcoord).rg; │ │ │ │ + #endif │ │ │ │ + in vec2 v_maskTexCoords; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + const float kCellPx = 8.0; // dot lattice cell (divides the 16px tile, so cells tile seamlessly) │ │ │ │ + const float kRadiusPx = 1.2; // dot radius │ │ │ │ + const float kJitter = 0.55; // keep kJitter*0.5*kCellPx + kRadiusPx < kCellPx*0.5 (dots stay in cell) │ │ │ │ + const float kDarken = 0.80; // surface multiplier under a dot on a light fill (gentle - texture should whisper) │ │ │ │ + float Hash(vec2 p) │ │ │ │ + p = fract(p * vec2(127.1, 311.7)); │ │ │ │ + p += dot(p, p + 34.23); │ │ │ │ + return fract(p.x * p.y); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ const float kLighten = 0.075; │ │ │ │ if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ return color + coverage * kLighten; │ │ │ │ return color * mix(1.0, darken, coverage); │ │ │ │ void main() │ │ │ │ - vec4 weights = vec4(0.0, 0.0, 0.0, 0.0); │ │ │ │ - vec2 e = texture(u_colorTex, v_coords.xy).rg; │ │ │ │ - if (e.g > 0.0) // Edge at north │ │ │ │ - vec2 d; │ │ │ │ - vec3 coords; │ │ │ │ - coords.x = SMAASearchXLeft(v_offset0.xy, v_offset2.x); │ │ │ │ - coords.y = v_offset1.y; │ │ │ │ - d.x = coords.x; │ │ │ │ - float e1 = SMAASampleLevelZero(u_colorTex, coords.xy).r; │ │ │ │ - coords.z = SMAASearchXRight(v_offset0.zw, v_offset2.y); │ │ │ │ - d.y = coords.z; │ │ │ │ - vec2 zz = u_framebufferMetrics.zz; │ │ │ │ - d = abs(SMAARound(zz * d - v_coords.zz)); │ │ │ │ - vec2 sqrt_d = sqrt(d); │ │ │ │ - float e2 = SMAASampleLevelZeroOffset(u_colorTex, coords.zy, SMAAOffset(1, 0)).r; │ │ │ │ - weights.rg = SMAAArea(sqrt_d, e1, e2); │ │ │ │ - if (e.r > 0.0) // Edge at west │ │ │ │ - vec2 d; │ │ │ │ - vec3 coords; │ │ │ │ - coords.y = SMAASearchYUp(v_offset1.xy, v_offset2.z); │ │ │ │ - coords.x = v_offset0.x; │ │ │ │ - d.x = coords.y; │ │ │ │ - float e1 = SMAASampleLevelZero(u_colorTex, coords.xy).g; │ │ │ │ - coords.z = SMAASearchYDown(v_offset1.zw, v_offset2.w); │ │ │ │ - d.y = coords.z; │ │ │ │ - vec2 ww = u_framebufferMetrics.ww; │ │ │ │ - d = abs(SMAARound(ww * d - v_coords.ww)); │ │ │ │ - vec2 sqrt_d = sqrt(d); │ │ │ │ - float e2 = SMAASampleLevelZeroOffset(u_colorTex, coords.xz, SMAAOffset(0, 1)).g; │ │ │ │ - weights.ba = SMAAArea(sqrt_d, e1, e2); │ │ │ │ - v_FragColor = weights; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + LOW_P vec4 color = v_color; │ │ │ │ + #else │ │ │ │ + LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ + #endif │ │ │ │ + vec2 px = v_maskTexCoords * 16.0; │ │ │ │ + vec2 cell = floor(px / kCellPx); │ │ │ │ + vec2 toCenter = │ │ │ │ + (fract(px / kCellPx) - 0.5) * kCellPx - (vec2(Hash(cell), Hash(cell + 19.7)) - 0.5) * (kJitter * kCellPx); │ │ │ │ + float d = length(toCenter); │ │ │ │ + float aa = max(fwidth(px.x), fwidth(px.y)); // continuous coord: no fract-seam derivative spike │ │ │ │ + float coverage = 1.0 - smoothstep(kRadiusPx - aa, kRadiusPx + aa, d); │ │ │ │ + color.rgb = ModulateByPatternDots(color.rgb, kDarken, coverage); │ │ │ │ + color.a *= u_opacity; │ │ │ │ + v_FragColor = color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -17320,24 +17063,20 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_pos; │ │ │ │ - in vec2 a_tcoord; │ │ │ │ - out vec4 v_coords; │ │ │ │ - out vec4 v_offset0; │ │ │ │ - out vec4 v_offset1; │ │ │ │ - out vec4 v_offset2; │ │ │ │ - uniform vec4 u_framebufferMetrics; │ │ │ │ - #define SMAA_MAX_SEARCH_STEPS 8.0 │ │ │ │ - const vec4 kMaxSearchSteps = vec4(-2.0 * SMAA_MAX_SEARCH_STEPS, 2.0 * SMAA_MAX_SEARCH_STEPS, │ │ │ │ - -2.0 * SMAA_MAX_SEARCH_STEPS, 2.0 * SMAA_MAX_SEARCH_STEPS); │ │ │ │ + in vec2 a_position; │ │ │ │ + in vec2 a_texCoords; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec2 v_texCoords; │ │ │ │ + out vec4 v_color; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -17359,19 +17098,21 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - v_coords = vec4(a_tcoord, a_tcoord * u_framebufferMetrics.zw); │ │ │ │ - v_offset0 = u_framebufferMetrics.xyxy * vec4(-0.25, -0.125, 1.25, -0.125) + a_tcoord.xyxy; │ │ │ │ - v_offset1 = u_framebufferMetrics.xyxy * vec4(-0.125, -0.25, -0.125, 1.25) + a_tcoord.xyxy; │ │ │ │ - v_offset2 = u_framebufferMetrics.xxyy * kMaxSearchSteps + vec4(v_offset0.xz, v_offset1.yw); │ │ │ │ - gl_Position = vec4(a_pos, 0.0, 1.0); │ │ │ │ + v_texCoords = a_texCoords; │ │ │ │ + v_color = a_color; │ │ │ │ + gl_Position = vec4(a_position, 0, 1) * u_projection; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -17379,72 +17120,37 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 v_colorTexCoords; │ │ │ │ - in vec4 v_offset0; │ │ │ │ - in vec4 v_offset1; │ │ │ │ - in vec4 v_offset2; │ │ │ │ - out vec4 v_FragColor; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #define SMAA_THRESHOLD 0.05 │ │ │ │ - const vec2 kThreshold = vec2(SMAA_THRESHOLD, SMAA_THRESHOLD); │ │ │ │ - #define SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR 2.0 │ │ │ │ - const vec3 kWeights = vec3(0.2126, 0.7152, 0.0722); │ │ │ │ - const float kShapeCoordScalar = 1000.0; │ │ │ │ - LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ - const float kLighten = 0.075; │ │ │ │ - if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ - return color + coverage * kLighten; │ │ │ │ - return color * mix(1.0, darken, coverage); │ │ │ │ - void main() │ │ │ │ - float L = dot(texture(u_colorTex, v_colorTexCoords).rgb, kWeights); │ │ │ │ - float Lleft = dot(texture(u_colorTex, v_offset0.xy).rgb, kWeights); │ │ │ │ - float Ltop = dot(texture(u_colorTex, v_offset0.zw).rgb, kWeights); │ │ │ │ - vec4 delta; │ │ │ │ - delta.xy = abs(L - vec2(Lleft, Ltop)); │ │ │ │ - vec2 edges = step(kThreshold, delta.xy); │ │ │ │ - if (dot(edges, vec2(1.0, 1.0)) == 0.0) │ │ │ │ - discard; │ │ │ │ - float Lright = dot(texture(u_colorTex, v_offset1.xy).rgb, kWeights); │ │ │ │ - float Lbottom = dot(texture(u_colorTex, v_offset1.zw).rgb, kWeights); │ │ │ │ - delta.zw = abs(L - vec2(Lright, Lbottom)); │ │ │ │ - vec2 maxDelta = max(delta.xy, delta.zw); │ │ │ │ - float Lleftleft = dot(texture(u_colorTex, v_offset2.xy).rgb, kWeights); │ │ │ │ - float Ltoptop = dot(texture(u_colorTex, v_offset2.zw).rgb, kWeights); │ │ │ │ - delta.zw = abs(vec2(Lleft, Ltop) - vec2(Lleftleft, Ltoptop)); │ │ │ │ - maxDelta = max(maxDelta.xy, delta.zw); │ │ │ │ - float finalDelta = max(maxDelta.x, maxDelta.y); │ │ │ │ - edges *= step(finalDelta, SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR * delta.xy); │ │ │ │ - v_FragColor = vec4(edges, 0.0, 1.0); │ │ │ │ - #ifdef GL_ES │ │ │ │ - #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ - #define MAXPREC highp │ │ │ │ - #else │ │ │ │ - #define MAXPREC mediump │ │ │ │ - #endif │ │ │ │ - precision MAXPREC float; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec2 a_outlineColorTexCoord; │ │ │ │ + in vec2 a_maskTexCoord; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ #endif │ │ │ │ - in vec2 a_pos; │ │ │ │ - in vec2 a_tcoord; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - out vec4 v_offset0; │ │ │ │ - out vec4 v_offset1; │ │ │ │ - out vec4 v_offset2; │ │ │ │ - uniform vec4 u_framebufferMetrics; │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ + const float BaseDepthShift = -10.0; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -17466,19 +17172,27 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - v_colorTexCoords = a_tcoord; │ │ │ │ - v_offset0 = u_framebufferMetrics.xyxy * vec4(-1.0, 0.0, 0.0, -1.0) + a_tcoord.xyxy; │ │ │ │ - v_offset1 = u_framebufferMetrics.xyxy * vec4( 1.0, 0.0, 0.0, 1.0) + a_tcoord.xyxy; │ │ │ │ - v_offset2 = u_framebufferMetrics.xyxy * vec4(-2.0, 0.0, 0.0, -2.0) + a_tcoord.xyxy; │ │ │ │ - gl_Position = vec4(a_pos, 0.0, 1.0); │ │ │ │ + float isOutline = step(0.5, u_isOutlinePass); │ │ │ │ + float notOutline = 1.0 - isOutline; │ │ │ │ + float depthShift = BaseDepthShift * isOutline; │ │ │ │ + vec4 pos = (vec4(a_position.xyz, 1) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView; │ │ │ │ + vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos; │ │ │ │ + gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + vec2 colorTexCoord = a_colorTexCoord * notOutline + a_outlineColorTexCoord * isOutline; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ + #else │ │ │ │ + v_colorTexCoord = colorTexCoord; │ │ │ │ + #endif │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -17486,19 +17200,34 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_pos; │ │ │ │ - in vec2 a_tcoord; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - out vec4 v_offset; │ │ │ │ - uniform vec4 u_framebufferMetrics; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec3 a_length; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec3 v_length; │ │ │ │ + out vec4 v_color; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_routeParams; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec4 u_maskColor; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_fakeColor; │ │ │ │ + uniform vec4 u_fakeOutlineColor; │ │ │ │ + uniform vec2 u_fakeBorders; │ │ │ │ + uniform vec2 u_pattern; │ │ │ │ + uniform vec2 u_angleCosSin; │ │ │ │ + uniform float u_arrowHalfWidth; │ │ │ │ + uniform float u_opacity; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -17520,17 +17249,26 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - v_colorTexCoords = a_tcoord; │ │ │ │ - v_offset = u_framebufferMetrics.xyxy * vec4(1.0, 0.0, 0.0, 1.0) + a_tcoord.xyxy; │ │ │ │ - gl_Position = vec4(a_pos, 0.0, 1.0); │ │ │ │ + vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + vec2 len = vec2(a_length.x, a_length.z); │ │ │ │ + if (dot(a_normal, a_normal) != 0.0) │ │ │ │ + vec2 norm = a_normal * u_routeParams.x; │ │ │ │ + transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ + u_modelView, length(norm)); │ │ │ │ + if (u_routeParams.y != 0.0) │ │ │ │ + len = vec2(a_length.x + a_length.y * u_routeParams.y, a_length.z); │ │ │ │ + v_length = vec3(len, u_routeParams.z); │ │ │ │ + v_color = a_color; │ │ │ │ + vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -17538,35 +17276,24 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - in vec2 a_maskTexCoord; │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - #endif │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ - uniform mat4 u_modelView; │ │ │ │ - uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ + in vec2 a_pos; │ │ │ │ + in vec2 a_tcoord; │ │ │ │ + out vec4 v_coords; │ │ │ │ + out vec4 v_offset0; │ │ │ │ + out vec4 v_offset1; │ │ │ │ + out vec4 v_offset2; │ │ │ │ + uniform vec4 u_framebufferMetrics; │ │ │ │ + #define SMAA_MAX_SEARCH_STEPS 8.0 │ │ │ │ + const vec4 kMaxSearchSteps = vec4(-2.0 * SMAA_MAX_SEARCH_STEPS, 2.0 * SMAA_MAX_SEARCH_STEPS, │ │ │ │ + -2.0 * SMAA_MAX_SEARCH_STEPS, 2.0 * SMAA_MAX_SEARCH_STEPS); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -17588,23 +17315,19 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ - vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos; │ │ │ │ - gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoord); │ │ │ │ - #else │ │ │ │ - v_colorTexCoord = a_colorTexCoord; │ │ │ │ - #endif │ │ │ │ - v_maskTexCoord = a_maskTexCoord; │ │ │ │ + v_coords = vec4(a_tcoord, a_tcoord * u_framebufferMetrics.zw); │ │ │ │ + v_offset0 = u_framebufferMetrics.xyxy * vec4(-0.25, -0.125, 1.25, -0.125) + a_tcoord.xyxy; │ │ │ │ + v_offset1 = u_framebufferMetrics.xyxy * vec4(-0.125, -0.25, -0.125, 1.25) + a_tcoord.xyxy; │ │ │ │ + v_offset2 = u_framebufferMetrics.xxyy * kMaxSearchSteps + vec4(v_offset0.xz, v_offset1.yw); │ │ │ │ + gl_Position = vec4(a_pos, 0.0, 1.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -17612,33 +17335,25 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - in vec2 a_maskTexCoord; │ │ │ │ - in vec4 a_position; │ │ │ │ + in vec2 a_position; │ │ │ │ in vec2 a_normal; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ - #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - #endif │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ - uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ - uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ + uniform vec2 u_position; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_length; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -17660,24 +17375,20 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pivot = vec4(a_position.xyz, 1.0) * u_modelView; │ │ │ │ - vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection; │ │ │ │ - gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, │ │ │ │ - a_position.w * u_zScale, offset.xy); │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoord); │ │ │ │ - #else │ │ │ │ - v_colorTexCoord = a_colorTexCoord; │ │ │ │ + gl_Position = vec4(u_position + a_position + u_length * a_normal, 0, 1) * u_projection; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ #endif │ │ │ │ - v_maskTexCoord = a_maskTexCoord; │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -17685,37 +17396,86 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - in vec2 a_outlineColorTexCoord; │ │ │ │ - in vec2 a_maskTexCoord; │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - out LOW_P vec4 v_color; │ │ │ │ + in LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ + in vec2 v_maskTexCoords; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ + const float kRowPeriodPx = 8.0; // vertical distance between dash rows │ │ │ │ + const float kRowCenterPx = 3.5; // first row center (matches the legacy tile) │ │ │ │ + const float kHalfThickPx = 0.5; // half dash thickness -> ~1px │ │ │ │ + const float kDashPeriodPx = 16.0; // dash + gap length │ │ │ │ + const float kDashHalfPx = 4.0; // half dash length -> 8px dash │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ + void main() │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ + LOW_P vec4 color = v_color; │ │ │ │ + #else │ │ │ │ + LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ #endif │ │ │ │ - const float BaseDepthShift = -10.0; │ │ │ │ + vec2 px = v_maskTexCoords * 16.0; │ │ │ │ + float ym = mod(px.y - kRowCenterPx, kRowPeriodPx); │ │ │ │ + float yDist = min(ym, kRowPeriodPx - ym); │ │ │ │ + float aaY = fwidth(px.y); │ │ │ │ + float onRow = 1.0 - smoothstep(kHalfThickPx - aaY, kHalfThickPx + aaY, yDist); │ │ │ │ + float rowIdx = floor((px.y - kRowCenterPx) / kRowPeriodPx + 0.5); │ │ │ │ + float xPhase = px.x + mod(rowIdx, 2.0) * (kDashPeriodPx * 0.5); │ │ │ │ + float xDist = abs(mod(xPhase, kDashPeriodPx) - kDashHalfPx); │ │ │ │ + float aaX = fwidth(px.x); │ │ │ │ + float onDash = 1.0 - smoothstep(kDashHalfPx - aaX, kDashHalfPx + aaX, xDist); │ │ │ │ + color.a *= onRow * onDash * u_opacity; │ │ │ │ + v_FragColor = color; │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + uniform mat4 u_modelView; │ │ │ │ + uniform mat4 u_projection; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_position; │ │ │ │ + uniform vec2 u_lineParams; │ │ │ │ + uniform float u_accuracy; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_azimut; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -17737,27 +17497,26 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - float isOutline = step(0.5, u_isOutlinePass); │ │ │ │ - float notOutline = 1.0 - isOutline; │ │ │ │ - float depthShift = BaseDepthShift * isOutline; │ │ │ │ - vec4 pos = (vec4(a_position.xyz, 1) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView; │ │ │ │ - vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos; │ │ │ │ + float sinV = sin(u_azimut); │ │ │ │ + float cosV = cos(u_azimut); │ │ │ │ + mat4 rotation; │ │ │ │ + rotation[0] = vec4(cosV, sinV, 0.0, 0.0); │ │ │ │ + rotation[1] = vec4(-sinV, cosV, 0.0, 0.0); │ │ │ │ + rotation[2] = vec4(0.0, 0.0, 1.0, 0.0); │ │ │ │ + rotation[3] = vec4(0.0, 0.0, 0.0, 1.0); │ │ │ │ + vec4 pos = vec4(u_position.xyz, 1.0) * u_modelView; │ │ │ │ + vec4 normal = vec4(a_normal, 0, 0); │ │ │ │ + vec4 shiftedPos = normal * rotation + pos; │ │ │ │ gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - vec2 colorTexCoord = a_colorTexCoord * notOutline + a_outlineColorTexCoord * isOutline; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ - #else │ │ │ │ - v_colorTexCoord = colorTexCoord; │ │ │ │ - #endif │ │ │ │ - v_maskTexCoord = a_maskTexCoord; │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -17766,15 +17525,14 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec2 a_colorTexCoord; │ │ │ │ - in vec2 a_outlineColorTexCoord; │ │ │ │ in vec2 a_maskTexCoord; │ │ │ │ in vec4 a_position; │ │ │ │ in vec2 a_normal; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ out vec2 v_colorTexCoord; │ │ │ │ @@ -17784,16 +17542,17 @@ │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ - const float kBaseDepthShift = -10.0; │ │ │ │ + #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -17815,25 +17574,21 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - float isOutline = step(0.5, u_isOutlinePass); │ │ │ │ - float depthShift = kBaseDepthShift * isOutline; │ │ │ │ - vec4 pivot = (vec4(a_position.xyz, 1.0) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView; │ │ │ │ - vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection; │ │ │ │ - gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, │ │ │ │ - a_position.w * u_zScale, offset.xy); │ │ │ │ - vec2 colorTexCoord = mix(a_colorTexCoord, a_outlineColorTexCoord, isOutline); │ │ │ │ + vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ + vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos; │ │ │ │ + gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoord); │ │ │ │ #else │ │ │ │ - v_colorTexCoord = colorTexCoord; │ │ │ │ + v_colorTexCoord = a_colorTexCoord; │ │ │ │ #endif │ │ │ │ v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ @@ -17844,35 +17599,36 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - in vec2 a_outlineColorTexCoord; │ │ │ │ in vec2 a_normal; │ │ │ │ - in vec2 a_maskTexCoord; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + in vec3 a_length; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ out LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ out vec2 v_colorTexCoord; │ │ │ │ #endif │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ + out float v_lengthY; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ - uniform vec2 u_position; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ + uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_position; │ │ │ │ + uniform vec2 u_lineParams; │ │ │ │ + uniform float u_accuracy; │ │ │ │ + uniform float u_zScale; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_length; │ │ │ │ + uniform float u_azimut; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ - const float kBaseDepthShift = -10.0; │ │ │ │ + const float kAntialiasingThreshold = 0.92; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -17894,30 +17650,30 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - float isOutline = step(0.5, u_isOutlinePass); │ │ │ │ - float depthShift = kBaseDepthShift * isOutline; │ │ │ │ - vec4 pos = (vec4(a_position, 1.0) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView; │ │ │ │ - vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos; │ │ │ │ - gl_Position = shiftedPos * u_projection; │ │ │ │ - #ifdef VULKAN │ │ │ │ - gl_Position.y = -gl_Position.y; │ │ │ │ - gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ - #endif │ │ │ │ - vec2 colorTexCoord = mix(a_colorTexCoord, a_outlineColorTexCoord, isOutline); │ │ │ │ + vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + vec2 len = vec2(a_length.x, a_length.z); │ │ │ │ + if (dot(a_normal, a_normal) != 0.0) │ │ │ │ + vec2 norm = a_normal * u_lineParams.x; │ │ │ │ + transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ + u_modelView, length(norm)); │ │ │ │ + if (u_lineParams.y != 0.0) │ │ │ │ + len = vec2(a_length.x + a_length.y * u_lineParams.y, a_length.z); │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ #else │ │ │ │ - v_colorTexCoord = colorTexCoord; │ │ │ │ + v_colorTexCoord = a_colorTexCoords; │ │ │ │ #endif │ │ │ │ - v_maskTexCoord = a_maskTexCoord; │ │ │ │ + v_lengthY = len.y; │ │ │ │ + vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -17926,25 +17682,27 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec4 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + out vec3 v_radius; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec2 u_contrastGamma; │ │ │ │ + uniform vec4 u_trafficParams; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_lightArrowColor; │ │ │ │ + uniform vec4 u_darkArrowColor; │ │ │ │ + uniform float u_outline; │ │ │ │ uniform float u_opacity; │ │ │ │ - uniform float u_zScale; │ │ │ │ - uniform float u_interpolation; │ │ │ │ - uniform float u_isOutlinePass; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -17966,18 +17724,28 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ - vec4 shiftedPos = vec4(a_normal, 0, 0) + pos; │ │ │ │ - gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + vec2 normal = a_normal.xy; │ │ │ │ + vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + int index = int(a_position.w); │ │ │ │ + float leftSize = u_lightArrowColor[index]; │ │ │ │ + float rightSize = u_darkArrowColor[index]; │ │ │ │ + if (dot(normal, normal) != 0.0) │ │ │ │ + vec2 norm = normal * 0.5 * (rightSize - leftSize); │ │ │ │ + transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ + u_modelView, length(norm)); │ │ │ │ + v_radius = vec3(a_normal.zw, 1.0) * 0.5 * (leftSize + rightSize); │ │ │ │ + vec2 finalPos = transformedAxisPos + v_radius.xy; │ │ │ │ + v_colorTexCoord = a_colorTexCoord; │ │ │ │ + vec4 pos = vec4(finalPos, a_position.z, 1.0) * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -17985,18 +17753,20 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec3 a_normalAndAnimateOrZ; │ │ │ │ + in vec4 a_texCoords; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec4 v_texCoords; │ │ │ │ + out vec4 v_maskColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ @@ -18026,19 +17796,25 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pivot = vec4(a_position.xyz, 1.0) * u_modelView; │ │ │ │ - vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection; │ │ │ │ - gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, │ │ │ │ - a_position.w * u_zScale, offset.xy); │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + vec2 normal = a_normalAndAnimateOrZ.xy; │ │ │ │ + if (a_normalAndAnimateOrZ.z > 0.0) │ │ │ │ + normal = u_interpolation * normal; │ │ │ │ + vec4 pivot = vec4(a_position, 1.0) * u_modelView; │ │ │ │ + vec4 offset = vec4(normal, 0.0, 0.0) * u_projection; │ │ │ │ + vec4 projectedPivot = pivot * u_projection; │ │ │ │ + gl_Position = applyBillboardPivotTransform(projectedPivot, u_pivotTransform, 0.0, offset.xy); │ │ │ │ + float newZ = projectedPivot.y / projectedPivot.w * 0.5 + 0.5; │ │ │ │ + gl_Position.z = abs(a_normalAndAnimateOrZ.z) * newZ + (1.0 - abs(a_normalAndAnimateOrZ.z)) * gl_Position.z; │ │ │ │ + v_texCoords = a_texCoords; │ │ │ │ + v_maskColor = a_color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18046,24 +17822,36 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec2 a_position; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec2 a_outlineColorTexCoord; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_maskTexCoord; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + #endif │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform vec2 u_position; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_length; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ + const float kBaseDepthShift = -10.0; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -18085,20 +17873,30 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - gl_Position = vec4(a_position, 0, 1) * u_modelView * u_projection; │ │ │ │ + float isOutline = step(0.5, u_isOutlinePass); │ │ │ │ + float depthShift = kBaseDepthShift * isOutline; │ │ │ │ + vec4 pos = (vec4(a_position, 1.0) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView; │ │ │ │ + vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos; │ │ │ │ + gl_Position = shiftedPos * u_projection; │ │ │ │ #ifdef VULKAN │ │ │ │ gl_Position.y = -gl_Position.y; │ │ │ │ gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ #endif │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + vec2 colorTexCoord = mix(a_colorTexCoord, a_outlineColorTexCoord, isOutline); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ + #else │ │ │ │ + v_colorTexCoord = colorTexCoord; │ │ │ │ + #endif │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18106,22 +17904,30 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - #define TILE_BACKGROUND_MAX_COUNT 64 │ │ │ │ - out vec3 v_texCoords; │ │ │ │ - uniform vec4 u_tileCoordsMinMax[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ - uniform vec4 u_textureRectMinMax[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ - uniform int u_textureIndex[TILE_BACKGROUND_MAX_COUNT]; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec4 a_colorTexCoord; │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ + out float v_halfLength; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ + uniform vec4 u_trafficParams; │ │ │ │ + uniform vec4 u_outlineColor; │ │ │ │ + uniform vec4 u_lightArrowColor; │ │ │ │ + uniform vec4 u_darkArrowColor; │ │ │ │ + uniform float u_outline; │ │ │ │ + uniform float u_opacity; │ │ │ │ + const float kArrowVSize = 0.25; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -18143,22 +17949,148 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 quadVertex = vec2(gl_VertexID & 1, (gl_VertexID >> 1) & 1); │ │ │ │ - vec4 tileCoordsMinMax = u_tileCoordsMinMax[gl_InstanceID]; │ │ │ │ - vec2 worldPos = mix(tileCoordsMinMax.xy, tileCoordsMinMax.zw, quadVertex); │ │ │ │ - vec4 pos = vec4(worldPos, 0.0, 1.0) * u_modelView * u_projection; │ │ │ │ + vec2 normal = a_normal.xy; │ │ │ │ + vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + if (dot(normal, normal) != 0.0) │ │ │ │ + vec2 norm = normal * u_trafficParams.x; │ │ │ │ + if (a_normal.z < 0.0) │ │ │ │ + norm = normal * u_trafficParams.y; │ │ │ │ + transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ + u_modelView, length(norm)); │ │ │ │ + float uOffset = length(vec4(kShapeCoordScalar, 0, 0, 0) * u_modelView) * a_normal.w; │ │ │ │ + v_colorTexCoord = a_colorTexCoord.xy; │ │ │ │ + float v = mix(a_colorTexCoord.z, a_colorTexCoord.z + kArrowVSize, 0.5 * a_normal.z + 0.5); │ │ │ │ + v_maskTexCoord = vec2(uOffset * u_trafficParams.z, v) * u_trafficParams.w; │ │ │ │ + v_maskTexCoord.x *= step(a_colorTexCoord.w, v_maskTexCoord.x); │ │ │ │ + v_halfLength = a_normal.z; │ │ │ │ + vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ - vec4 textureRectMinMax = u_textureRectMinMax[gl_InstanceID]; │ │ │ │ - vec2 texUV = mix(textureRectMinMax.xy, textureRectMinMax.zw, quadVertex); │ │ │ │ - v_texCoords = vec3(texUV, float(u_textureIndex[gl_InstanceID])); │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ + in vec4 v_coords; │ │ │ │ + in vec4 v_offset0; │ │ │ │ + in vec4 v_offset1; │ │ │ │ + in vec4 v_offset2; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + uniform vec4 u_framebufferMetrics; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + uniform sampler2D u_smaaArea; │ │ │ │ + uniform sampler2D u_smaaSearch; │ │ │ │ + #define SMAA_SEARCHTEX_SIZE vec2(66.0, 33.0) │ │ │ │ + #define SMAA_SEARCHTEX_PACKED_SIZE vec2(64.0, 16.0) │ │ │ │ + #define SMAA_AREATEX_MAX_DISTANCE 16.0 │ │ │ │ + #define SMAA_AREATEX_PIXEL_SIZE (vec2(1.0 / 256.0, 1.0 / 1024.0)) │ │ │ │ + #define SMAALoopBegin(condition) while (condition) { │ │ │ │ + #define SMAALoopEnd } │ │ │ │ + #define SMAASampleLevelZero(tex, coord) textureLod(tex, coord, 0.0) │ │ │ │ + #define SMAASampleLevelZeroOffset(tex, coord, offset) textureLodOffset(tex, coord, 0.0, offset) │ │ │ │ + #define SMAARound(v) round((v)) │ │ │ │ + #define SMAAOffset(x,y) ivec2(x,y) │ │ │ │ + const vec2 kAreaTexMaxDistance = vec2(SMAA_AREATEX_MAX_DISTANCE, SMAA_AREATEX_MAX_DISTANCE); │ │ │ │ + const float kActivationThreshold = 0.8281; │ │ │ │ + float SMAASearchLength(vec2 e, float offset) │ │ │ │ + vec2 scale = SMAA_SEARCHTEX_SIZE * vec2(0.5, -1.0); │ │ │ │ + vec2 bias = SMAA_SEARCHTEX_SIZE * vec2(offset, 1.0); │ │ │ │ + scale += vec2(-1.0, 1.0); │ │ │ │ + bias += vec2( 0.5, -0.5); │ │ │ │ + scale *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE; │ │ │ │ + bias *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE; │ │ │ │ + return SMAASampleLevelZero(u_smaaSearch, scale * e + bias).r; │ │ │ │ + float SMAASearchXLeft(vec2 texcoord, float end) │ │ │ │ + vec2 e = vec2(0.0, 1.0); │ │ │ │ + SMAALoopBegin(texcoord.x > end && e.g > kActivationThreshold && e.r == 0.0) │ │ │ │ + e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ + texcoord = vec2(-2.0, 0.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ + SMAALoopEnd │ │ │ │ + float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e, 0.0); │ │ │ │ + return u_framebufferMetrics.x * offset + texcoord.x; │ │ │ │ + float SMAASearchXRight(vec2 texcoord, float end) │ │ │ │ + vec2 e = vec2(0.0, 1.0); │ │ │ │ + SMAALoopBegin(texcoord.x < end && e.g > kActivationThreshold && e.r == 0.0) │ │ │ │ + e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ + texcoord = vec2(2.0, 0.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ + SMAALoopEnd │ │ │ │ + float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e, 0.5); │ │ │ │ + return -u_framebufferMetrics.x * offset + texcoord.x; │ │ │ │ + float SMAASearchYUp(vec2 texcoord, float end) │ │ │ │ + vec2 e = vec2(1.0, 0.0); │ │ │ │ + SMAALoopBegin(texcoord.y > end && e.r > kActivationThreshold && e.g == 0.0) │ │ │ │ + e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ + texcoord = vec2(0.0, -2.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ + SMAALoopEnd │ │ │ │ + float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e.gr, 0.0); │ │ │ │ + return u_framebufferMetrics.y * offset + texcoord.y; │ │ │ │ + float SMAASearchYDown(vec2 texcoord, float end) │ │ │ │ + vec2 e = vec2(1.0, 0.0); │ │ │ │ + SMAALoopBegin(texcoord.y < end && e.r > kActivationThreshold && e.g == 0.0) │ │ │ │ + e = SMAASampleLevelZero(u_colorTex, texcoord).rg; │ │ │ │ + texcoord = vec2(0.0, 2.0) * u_framebufferMetrics.xy + texcoord; │ │ │ │ + SMAALoopEnd │ │ │ │ + float offset = 3.25 - (255.0 / 127.0) * SMAASearchLength(e.gr, 0.5); │ │ │ │ + return -u_framebufferMetrics.y * offset + texcoord.y; │ │ │ │ + vec2 SMAAArea(vec2 dist, float e1, float e2) │ │ │ │ + vec2 texcoord = kAreaTexMaxDistance * SMAARound(4.0 * vec2(e1, e2)) + dist; │ │ │ │ + texcoord = SMAA_AREATEX_PIXEL_SIZE * (texcoord + 0.5); │ │ │ │ + return SMAASampleLevelZero(u_smaaArea, texcoord).rg; │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ + void main() │ │ │ │ + vec4 weights = vec4(0.0, 0.0, 0.0, 0.0); │ │ │ │ + vec2 e = texture(u_colorTex, v_coords.xy).rg; │ │ │ │ + if (e.g > 0.0) // Edge at north │ │ │ │ + vec2 d; │ │ │ │ + vec3 coords; │ │ │ │ + coords.x = SMAASearchXLeft(v_offset0.xy, v_offset2.x); │ │ │ │ + coords.y = v_offset1.y; │ │ │ │ + d.x = coords.x; │ │ │ │ + float e1 = SMAASampleLevelZero(u_colorTex, coords.xy).r; │ │ │ │ + coords.z = SMAASearchXRight(v_offset0.zw, v_offset2.y); │ │ │ │ + d.y = coords.z; │ │ │ │ + vec2 zz = u_framebufferMetrics.zz; │ │ │ │ + d = abs(SMAARound(zz * d - v_coords.zz)); │ │ │ │ + vec2 sqrt_d = sqrt(d); │ │ │ │ + float e2 = SMAASampleLevelZeroOffset(u_colorTex, coords.zy, SMAAOffset(1, 0)).r; │ │ │ │ + weights.rg = SMAAArea(sqrt_d, e1, e2); │ │ │ │ + if (e.r > 0.0) // Edge at west │ │ │ │ + vec2 d; │ │ │ │ + vec3 coords; │ │ │ │ + coords.y = SMAASearchYUp(v_offset1.xy, v_offset2.z); │ │ │ │ + coords.x = v_offset0.x; │ │ │ │ + d.x = coords.y; │ │ │ │ + float e1 = SMAASampleLevelZero(u_colorTex, coords.xy).g; │ │ │ │ + coords.z = SMAASearchYDown(v_offset1.zw, v_offset2.w); │ │ │ │ + d.y = coords.z; │ │ │ │ + vec2 ww = u_framebufferMetrics.ww; │ │ │ │ + d = abs(SMAARound(ww * d - v_coords.ww)); │ │ │ │ + vec2 sqrt_d = sqrt(d); │ │ │ │ + float e2 = SMAASampleLevelZeroOffset(u_colorTex, coords.xz, SMAAOffset(0, 1)).g; │ │ │ │ + weights.ba = SMAAArea(sqrt_d, e1, e2); │ │ │ │ + v_FragColor = weights; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18167,29 +18099,27 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_colorTexCoord; │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - out vec2 v_maskTexCoord; │ │ │ │ - out float v_halfLength; │ │ │ │ + in vec3 a_normalAndAnimateOrZ; │ │ │ │ + in vec4 a_texCoords; │ │ │ │ + in vec4 a_color; │ │ │ │ + out vec4 v_texCoords; │ │ │ │ + out vec4 v_maskColor; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_trafficParams; │ │ │ │ - uniform vec4 u_outlineColor; │ │ │ │ - uniform vec4 u_lightArrowColor; │ │ │ │ - uniform vec4 u_darkArrowColor; │ │ │ │ - uniform float u_outline; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ - const float kArrowVSize = 0.25; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -18211,30 +18141,25 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normal.xy; │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - if (dot(normal, normal) != 0.0) │ │ │ │ - vec2 norm = normal * u_trafficParams.x; │ │ │ │ - if (a_normal.z < 0.0) │ │ │ │ - norm = normal * u_trafficParams.y; │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ - u_modelView, length(norm)); │ │ │ │ - float uOffset = length(vec4(kShapeCoordScalar, 0, 0, 0) * u_modelView) * a_normal.w; │ │ │ │ - v_colorTexCoord = a_colorTexCoord.xy; │ │ │ │ - float v = mix(a_colorTexCoord.z, a_colorTexCoord.z + kArrowVSize, 0.5 * a_normal.z + 0.5); │ │ │ │ - v_maskTexCoord = vec2(uOffset * u_trafficParams.z, v) * u_trafficParams.w; │ │ │ │ - v_maskTexCoord.x *= step(a_colorTexCoord.w, v_maskTexCoord.x); │ │ │ │ - v_halfLength = a_normal.z; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + vec2 normal = a_normalAndAnimateOrZ.xy; │ │ │ │ + if (a_normalAndAnimateOrZ.z > 0.0) │ │ │ │ + normal = u_interpolation * normal; │ │ │ │ + vec4 p = vec4(a_position, 1.0) * u_modelView; │ │ │ │ + vec4 pos = vec4(normal, 0.0, 0.0) + p; │ │ │ │ + vec4 projectedPivot = p * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + float newZ = projectedPivot.y / projectedPivot.w * 0.5 + 0.5; │ │ │ │ + gl_Position.z = abs(a_normalAndAnimateOrZ.z) * newZ + (1.0 - abs(a_normalAndAnimateOrZ.z)) * gl_Position.z; │ │ │ │ + v_texCoords = a_texCoords; │ │ │ │ + v_maskColor = a_color; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18242,28 +18167,79 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec4 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ - out vec2 v_colorTexCoord; │ │ │ │ - out vec3 v_radius; │ │ │ │ + in vec2 v_colorTexCoords; │ │ │ │ + in vec4 v_offset0; │ │ │ │ + in vec4 v_offset1; │ │ │ │ + in vec4 v_offset2; │ │ │ │ + out vec4 v_FragColor; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #define SMAA_THRESHOLD 0.05 │ │ │ │ + const vec2 kThreshold = vec2(SMAA_THRESHOLD, SMAA_THRESHOLD); │ │ │ │ + #define SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR 2.0 │ │ │ │ + const vec3 kWeights = vec3(0.2126, 0.7152, 0.0722); │ │ │ │ + const float kShapeCoordScalar = 1000.0; │ │ │ │ + LOW_P vec3 ModulateByPatternDots(LOW_P vec3 color, float darken, float coverage) │ │ │ │ + const float kLighten = 0.075; │ │ │ │ + if (dot(color, vec3(0.2126, 0.7152, 0.0722)) < 0.5) │ │ │ │ + return color + coverage * kLighten; │ │ │ │ + return color * mix(1.0, darken, coverage); │ │ │ │ + void main() │ │ │ │ + float L = dot(texture(u_colorTex, v_colorTexCoords).rgb, kWeights); │ │ │ │ + float Lleft = dot(texture(u_colorTex, v_offset0.xy).rgb, kWeights); │ │ │ │ + float Ltop = dot(texture(u_colorTex, v_offset0.zw).rgb, kWeights); │ │ │ │ + vec4 delta; │ │ │ │ + delta.xy = abs(L - vec2(Lleft, Ltop)); │ │ │ │ + vec2 edges = step(kThreshold, delta.xy); │ │ │ │ + if (dot(edges, vec2(1.0, 1.0)) == 0.0) │ │ │ │ + discard; │ │ │ │ + float Lright = dot(texture(u_colorTex, v_offset1.xy).rgb, kWeights); │ │ │ │ + float Lbottom = dot(texture(u_colorTex, v_offset1.zw).rgb, kWeights); │ │ │ │ + delta.zw = abs(L - vec2(Lright, Lbottom)); │ │ │ │ + vec2 maxDelta = max(delta.xy, delta.zw); │ │ │ │ + float Lleftleft = dot(texture(u_colorTex, v_offset2.xy).rgb, kWeights); │ │ │ │ + float Ltoptop = dot(texture(u_colorTex, v_offset2.zw).rgb, kWeights); │ │ │ │ + delta.zw = abs(vec2(Lleft, Ltop) - vec2(Lleftleft, Ltoptop)); │ │ │ │ + maxDelta = max(maxDelta.xy, delta.zw); │ │ │ │ + float finalDelta = max(maxDelta.x, maxDelta.y); │ │ │ │ + edges *= step(finalDelta, SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR * delta.xy); │ │ │ │ + v_FragColor = vec4(edges, 0.0, 1.0); │ │ │ │ + #ifdef GL_ES │ │ │ │ + #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ + #define MAXPREC highp │ │ │ │ + #else │ │ │ │ + #define MAXPREC mediump │ │ │ │ + #endif │ │ │ │ + precision MAXPREC float; │ │ │ │ + #define LOW_P lowp │ │ │ │ + #define MEDIUM_P mediump │ │ │ │ + #define HIGH_P highp │ │ │ │ + #else │ │ │ │ + #define LOW_P │ │ │ │ + #define MEDIUM_P │ │ │ │ + #define HIGH_P │ │ │ │ + #endif │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec3 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + out float v_intensity; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_trafficParams; │ │ │ │ - uniform vec4 u_outlineColor; │ │ │ │ - uniform vec4 u_lightArrowColor; │ │ │ │ - uniform vec4 u_darkArrowColor; │ │ │ │ - uniform float u_outline; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + const vec4 kNormalizedLightDir = vec4(0.3162, 0.0, 0.9486, 0.0); │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -18285,28 +18261,31 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normal.xy; │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - int index = int(a_position.w); │ │ │ │ - float leftSize = u_lightArrowColor[index]; │ │ │ │ - float rightSize = u_darkArrowColor[index]; │ │ │ │ - if (dot(normal, normal) != 0.0) │ │ │ │ - vec2 norm = normal * 0.5 * (rightSize - leftSize); │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ - u_modelView, length(norm)); │ │ │ │ - v_radius = vec3(a_normal.zw, 1.0) * 0.5 * (leftSize + rightSize); │ │ │ │ - vec2 finalPos = transformedAxisPos + v_radius.xy; │ │ │ │ - v_colorTexCoord = a_colorTexCoord; │ │ │ │ - vec4 pos = vec4(finalPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + vec4 pos = vec4(a_position, 1.0) * u_modelView; │ │ │ │ + vec4 normal = vec4(a_position + a_normal, 1.0) * u_modelView; │ │ │ │ + normal.xyw = (normal * u_projection).xyw; │ │ │ │ + normal.z = normal.z * u_zScale; │ │ │ │ + pos.xyw = (pos * u_projection).xyw; │ │ │ │ + pos.z = a_position.z * u_zScale; │ │ │ │ + vec4 normDir = normal - pos; │ │ │ │ + if (dot(normDir, normDir) != 0.0) │ │ │ │ + v_intensity = max(0.0, -dot(kNormalizedLightDir, normalize(normDir))); │ │ │ │ + else │ │ │ │ + v_intensity = 0.0; │ │ │ │ + gl_Position = u_pivotTransform * pos; │ │ │ │ + #ifdef VULKAN │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ + #endif │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18374,24 +18353,35 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec4 v_color; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec2 a_outlineColorTexCoord; │ │ │ │ + in vec2 a_maskTexCoord; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + #endif │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_params; │ │ │ │ - uniform float u_lineHalfWidth; │ │ │ │ - uniform float u_maxRadius; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + const float kBaseDepthShift = -10.0; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -18413,23 +18403,27 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normal.xy; │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - if (dot(normal, normal) != 0.0) │ │ │ │ - vec2 norm = normal * u_lineHalfWidth; │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ - u_modelView, length(norm)); │ │ │ │ - v_color = a_color; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + float isOutline = step(0.5, u_isOutlinePass); │ │ │ │ + float depthShift = kBaseDepthShift * isOutline; │ │ │ │ + vec4 pivot = (vec4(a_position.xyz, 1.0) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView; │ │ │ │ + vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection; │ │ │ │ + gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, │ │ │ │ + a_position.w * u_zScale, offset.xy); │ │ │ │ + vec2 colorTexCoord = mix(a_colorTexCoord, a_outlineColorTexCoord, isOutline); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ + #else │ │ │ │ + v_colorTexCoord = colorTexCoord; │ │ │ │ + #endif │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18437,25 +18431,28 @@ │ │ │ │ #define MEDIUM_P mediump │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ - in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec3 v_radius; │ │ │ │ - out vec4 v_color; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + in vec2 a_maskTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + out vec2 v_maskTexCoords; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_params; │ │ │ │ - uniform float u_lineHalfWidth; │ │ │ │ - uniform float u_maxRadius; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -18477,25 +18474,19 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normal.xy; │ │ │ │ - vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ - if (dot(normal, normal) != 0.0) │ │ │ │ - vec2 norm = normal * u_lineHalfWidth; │ │ │ │ - transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm, │ │ │ │ - u_modelView, length(norm)); │ │ │ │ - transformedAxisPos += a_normal.zw * u_lineHalfWidth; │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ - v_color = a_color; │ │ │ │ - v_radius = vec3(a_normal.zw, u_maxRadius) * u_lineHalfWidth; │ │ │ │ + vec4 pos = vec4(a_position.xyz, 1) * u_modelView; │ │ │ │ + vec4 shiftedPos = vec4(a_normal, 0, 0) + pos; │ │ │ │ + gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ + v_maskTexCoords = a_maskTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18504,24 +18495,31 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec4 a_normal; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec4 v_offsets; │ │ │ │ - out vec4 v_color; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + #endif │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ - uniform vec4 u_params; │ │ │ │ - uniform float u_lineHalfWidth; │ │ │ │ - uniform float u_maxRadius; │ │ │ │ + uniform vec2 u_contrastGamma; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_zScale; │ │ │ │ + uniform float u_interpolation; │ │ │ │ + uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -18543,23 +18541,21 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec4 pos = vec4(a_position.xy, 0, 1) * u_modelView; │ │ │ │ - vec2 normal = vec2(a_normal.x * u_params.x - a_normal.y * u_params.y, │ │ │ │ - a_normal.x * u_params.y + a_normal.y * u_params.x); │ │ │ │ - vec2 shiftedPos = normal * u_params.z + pos.xy; │ │ │ │ - pos = vec4(shiftedPos, a_position.z, 1.0) * u_projection; │ │ │ │ + vec4 pos = vec4(a_position, 1) * u_modelView * u_projection; │ │ │ │ gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ - vec2 offsets = abs(a_normal.zw); │ │ │ │ - v_offsets = vec4(a_normal.zw, offsets - 1.0); │ │ │ │ - v_color = a_color; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ + #else │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ + #endif │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18568,27 +18564,33 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec3 a_normalAndAnimateOrZ; │ │ │ │ - in vec4 a_texCoords; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec4 v_texCoords; │ │ │ │ - out vec4 v_maskColor; │ │ │ │ + in vec4 a_normal; │ │ │ │ + in vec4 a_colorTexCoords; │ │ │ │ + out vec4 v_normal; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ + #endif │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ uniform float u_isOutlinePass; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + uniform sampler2D u_colorTex; │ │ │ │ + #endif │ │ │ │ const float kShapeCoordScalar = 1000.0; │ │ │ │ vec4 applyPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ) │ │ │ │ vec4 transformedPivot = pivot; │ │ │ │ float w = transformedPivot.w; │ │ │ │ transformedPivot.xyw = (pivotTransform * vec4(transformedPivot.xy, pivotRealZ, w)).xyw; │ │ │ │ transformedPivot.z *= transformedPivot.w / w; │ │ │ │ #ifdef VULKAN │ │ │ │ @@ -18610,25 +18612,23 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normalAndAnimateOrZ.xy; │ │ │ │ - if (a_normalAndAnimateOrZ.z > 0.0) │ │ │ │ - normal = u_interpolation * normal; │ │ │ │ - vec4 p = vec4(a_position, 1.0) * u_modelView; │ │ │ │ - vec4 pos = vec4(normal, 0.0, 0.0) + p; │ │ │ │ - vec4 projectedPivot = p * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - float newZ = projectedPivot.y / projectedPivot.w * 0.5 + 0.5; │ │ │ │ - gl_Position.z = abs(a_normalAndAnimateOrZ.z) * newZ + (1.0 - abs(a_normalAndAnimateOrZ.z)) * gl_Position.z; │ │ │ │ - v_texCoords = a_texCoords; │ │ │ │ - v_maskColor = a_color; │ │ │ │ + vec4 pivot = vec4(a_position.xyz, 1.0) * u_modelView; │ │ │ │ + vec4 offset = vec4(a_normal.xy + a_colorTexCoords.zw, 0.0, 0.0) * u_projection; │ │ │ │ + gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, 0.0, offset.xy); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords.xy); │ │ │ │ + #else │ │ │ │ + v_colorTexCoords = a_colorTexCoords.xy; │ │ │ │ + #endif │ │ │ │ + v_normal = a_normal; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -18637,19 +18637,19 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec3 a_normalAndAnimateOrZ; │ │ │ │ - in vec4 a_texCoords; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec4 v_texCoords; │ │ │ │ - out vec4 v_maskColor; │ │ │ │ + in vec3 a_normal; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + in vec4 a_maskTexCoord; │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + out vec2 v_maskTexCoord; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec2 u_contrastGamma; │ │ │ │ uniform float u_opacity; │ │ │ │ uniform float u_zScale; │ │ │ │ uniform float u_interpolation; │ │ │ │ @@ -18679,25 +18679,25 @@ │ │ │ │ vec2 p = (vec4(shiftedPos, 0.0, 1.0) * modelView).xy; │ │ │ │ vec2 d = p - originalAxisPos; │ │ │ │ if (dot(d, d) != 0.0) │ │ │ │ return originalAxisPos + normalize(d) * halfWidth; │ │ │ │ else │ │ │ │ return originalAxisPos; │ │ │ │ void main() │ │ │ │ - vec2 normal = a_normalAndAnimateOrZ.xy; │ │ │ │ - if (a_normalAndAnimateOrZ.z > 0.0) │ │ │ │ - normal = u_interpolation * normal; │ │ │ │ - vec4 pivot = vec4(a_position, 1.0) * u_modelView; │ │ │ │ - vec4 offset = vec4(normal, 0.0, 0.0) * u_projection; │ │ │ │ - vec4 projectedPivot = pivot * u_projection; │ │ │ │ - gl_Position = applyBillboardPivotTransform(projectedPivot, u_pivotTransform, 0.0, offset.xy); │ │ │ │ - float newZ = projectedPivot.y / projectedPivot.w * 0.5 + 0.5; │ │ │ │ - gl_Position.z = abs(a_normalAndAnimateOrZ.z) * newZ + (1.0 - abs(a_normalAndAnimateOrZ.z)) * gl_Position.z; │ │ │ │ - v_texCoords = a_texCoords; │ │ │ │ - v_maskColor = a_color; │ │ │ │ + vec2 normal = a_normal.xy; │ │ │ │ + float halfWidth = length(normal); │ │ │ │ + vec2 transformedAxisPos = (vec4(a_position.xy, 0.0, 1.0) * u_modelView).xy; │ │ │ │ + if (halfWidth != 0.0) │ │ │ │ + transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + normal, │ │ │ │ + u_modelView, halfWidth); │ │ │ │ + float uOffset = min(length(vec4(kShapeCoordScalar, 0, 0, 0) * u_modelView) * a_maskTexCoord.x, 1.0); │ │ │ │ + v_colorTexCoord = a_colorTexCoord; │ │ │ │ + v_maskTexCoord = vec2(a_maskTexCoord.y + uOffset * a_maskTexCoord.z, a_maskTexCoord.w); │ │ │ │ + vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ + gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ *ZN2dp12DrapeRoutine3RunIZNS_6vulkan19VulkanObjectManager23CollectObjectsForThreadERSt6vectorINS2_12VulkanObjectESaIS5_EEEUlvE_EESt10shared_ptrINS0_6ResultEEOT_EUlvE_ │ │ │ │ N2dp18HWTextureAllocatorE │ │ │ │ N2dp14MeshObjectImplE │ │ │ │ N2dp6vulkan22VulkanTextureAllocatorE │ │ │ │ N2dp6vulkan13VulkanTextureE │ │ │ │ N2dp6vulkan20VulkanMeshObjectImplE │ │ │ │ N2dp21VertexArrayBufferImplE │ │ │ ├── objdump --line-numbers --disassemble --demangle --reloc --no-show-raw-insn --section=.text {} │ │ │ │ @@ -2344179,16 +2344179,16 @@ │ │ │ │ auipc a1,0x1e4 │ │ │ │ addi a1,a1,-766 # 8e0d98 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab55c> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 1672(ra) │ │ │ │ addi a5,sp,57 │ │ │ │ auipc a4,0x26e │ │ │ │ addi a4,a4,-1226 │ │ │ │ - auipc a3,0x280 │ │ │ │ - addi a3,a3,1878 │ │ │ │ + auipc a3,0x289 │ │ │ │ + addi a3,a3,-2042 │ │ │ │ addi a2,sp,88 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1072 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,121 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344203,16 +2344203,16 @@ │ │ │ │ auipc a1,0x1e4 │ │ │ │ addi a1,a1,-820 # 8e0dc0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab584> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 1578(ra) │ │ │ │ addi a5,sp,121 │ │ │ │ auipc a4,0x26e │ │ │ │ addi a4,a4,384 │ │ │ │ - auipc a3,0x293 │ │ │ │ - addi a3,a3,328 │ │ │ │ + auipc a3,0x284 │ │ │ │ + addi a3,a3,864 │ │ │ │ addi a2,sp,152 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1086 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,185 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344227,16 +2344227,16 @@ │ │ │ │ auipc a1,0x1e4 │ │ │ │ addi a1,a1,-874 # 8e0de8 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab5ac> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 1484(ra) │ │ │ │ addi a5,sp,185 │ │ │ │ auipc a4,0x26e │ │ │ │ addi a4,a4,1426 │ │ │ │ - auipc a3,0x285 │ │ │ │ - addi a3,a3,-590 │ │ │ │ + auipc a3,0x298 │ │ │ │ + addi a3,a3,1154 │ │ │ │ addi a2,sp,216 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1100 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,249 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344251,16 +2344251,16 @@ │ │ │ │ auipc a1,0x1e4 │ │ │ │ addi a1,a1,-928 # 8e0e10 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab5d4> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 1390(ra) │ │ │ │ addi a5,sp,249 │ │ │ │ auipc a4,0x26f │ │ │ │ addi a4,a4,-1524 │ │ │ │ - auipc a3,0x299 │ │ │ │ - addi a3,a3,1996 │ │ │ │ + auipc a3,0x295 │ │ │ │ + addi a3,a3,124 │ │ │ │ addi a2,sp,280 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1114 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,313 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344275,16 +2344275,16 @@ │ │ │ │ auipc a1,0x1e4 │ │ │ │ addi a1,a1,-1022 # 8e0e10 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab5d4> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 1296(ra) │ │ │ │ addi a5,sp,313 │ │ │ │ auipc a4,0x26f │ │ │ │ addi a4,a4,-1618 │ │ │ │ - auipc a3,0x299 │ │ │ │ - addi a3,a3,1902 │ │ │ │ + auipc a3,0x295 │ │ │ │ + addi a3,a3,30 │ │ │ │ addi a2,sp,344 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1128 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,377 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344299,16 +2344299,16 @@ │ │ │ │ auipc a1,0x1e4 │ │ │ │ addi a1,a1,-1076 # 8e0e38 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab5fc> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 1202(ra) │ │ │ │ addi a5,sp,377 │ │ │ │ auipc a4,0x26f │ │ │ │ addi a4,a4,-296 │ │ │ │ - auipc a3,0x291 │ │ │ │ - addi a3,a3,-936 │ │ │ │ + auipc a3,0x28b │ │ │ │ + addi a3,a3,1608 │ │ │ │ addi a2,sp,408 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1142 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,441 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344324,15 +2344324,15 @@ │ │ │ │ addi a1,a1,-1170 # 8e0e38 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab5fc> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 1108(ra) │ │ │ │ addi a5,sp,441 │ │ │ │ auipc a4,0x26f │ │ │ │ addi a4,a4,-390 │ │ │ │ auipc a3,0x28f │ │ │ │ - addi a3,a3,1738 │ │ │ │ + addi a3,a3,1058 │ │ │ │ addi a2,sp,472 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1156 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,505 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344348,15 +2344348,15 @@ │ │ │ │ addi a1,a1,-1208 # 8e0e70 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab634> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 1014(ra) │ │ │ │ addi a5,sp,505 │ │ │ │ auipc a4,0x26f │ │ │ │ addi a4,a4,1044 │ │ │ │ auipc a3,0x292 │ │ │ │ - addi a3,a3,844 │ │ │ │ + addi a3,a3,364 │ │ │ │ addi a2,sp,536 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1170 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,569 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344372,15 +2344372,15 @@ │ │ │ │ addi a1,a1,-1302 # 8e0e70 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab634> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 920(ra) │ │ │ │ addi a5,sp,569 │ │ │ │ auipc a4,0x26f │ │ │ │ addi a4,a4,950 │ │ │ │ auipc a3,0x292 │ │ │ │ - addi a3,a3,750 │ │ │ │ + addi a3,a3,270 │ │ │ │ addi a2,sp,600 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1184 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,633 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344395,16 +2344395,16 @@ │ │ │ │ auipc a1,0x1e4 │ │ │ │ addi a1,a1,-1356 # 8e0e98 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab65c> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 826(ra) │ │ │ │ addi a5,sp,633 │ │ │ │ auipc a4,0x270 │ │ │ │ addi a4,a4,-1752 │ │ │ │ - auipc a3,0x27a │ │ │ │ - addi a3,a3,1040 │ │ │ │ + auipc a3,0x299 │ │ │ │ + addi a3,a3,-1136 │ │ │ │ addi a2,sp,664 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1198 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,697 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344417,18 +2344417,18 @@ │ │ │ │ addi a0,a5,-1 │ │ │ │ addi a2,s0,-2048 │ │ │ │ auipc a1,0x1e4 │ │ │ │ addi a1,a1,-1410 # 8e0ec0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab684> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 732(ra) │ │ │ │ addi a5,sp,697 │ │ │ │ - auipc a4,0x27d │ │ │ │ - addi a4,a4,-934 │ │ │ │ - auipc a3,0x282 │ │ │ │ - addi a3,a3,1026 │ │ │ │ + auipc a4,0x28a │ │ │ │ + addi a4,a4,778 │ │ │ │ + auipc a3,0x280 │ │ │ │ + addi a3,a3,-1310 │ │ │ │ addi a2,sp,728 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1212 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,761 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344441,18 +2344441,18 @@ │ │ │ │ addi a0,a5,-1 │ │ │ │ addi a2,s0,-2048 │ │ │ │ auipc a1,0x1e4 │ │ │ │ addi a1,a1,-1480 # 8e0ed8 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab69c> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 638(ra) │ │ │ │ addi a5,sp,761 │ │ │ │ - auipc a4,0x27c │ │ │ │ - addi a4,a4,756 │ │ │ │ - auipc a3,0x282 │ │ │ │ - addi a3,a3,932 │ │ │ │ + auipc a4,0x286 │ │ │ │ + addi a4,a4,1884 │ │ │ │ + auipc a3,0x280 │ │ │ │ + addi a3,a3,-1404 │ │ │ │ addi a2,sp,792 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1226 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,825 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344467,16 +2344467,16 @@ │ │ │ │ auipc a1,0x1e4 │ │ │ │ addi a1,a1,-1550 # 8e0ef0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab6b4> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 544(ra) │ │ │ │ addi a5,sp,825 │ │ │ │ auipc a4,0x270 │ │ │ │ addi a4,a4,-746 │ │ │ │ - auipc a3,0x282 │ │ │ │ - addi a3,a3,838 │ │ │ │ + auipc a3,0x280 │ │ │ │ + addi a3,a3,-1498 │ │ │ │ addi a2,sp,856 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1240 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,889 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344491,16 +2344491,16 @@ │ │ │ │ auipc a1,0x1e4 │ │ │ │ addi a1,a1,-1732 # 8e0e98 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab65c> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 450(ra) │ │ │ │ addi a5,sp,889 │ │ │ │ auipc a4,0x26f │ │ │ │ addi a4,a4,1968 │ │ │ │ - auipc a3,0x27a │ │ │ │ - addi a3,a3,664 │ │ │ │ + auipc a3,0x299 │ │ │ │ + addi a3,a3,-1512 │ │ │ │ addi a2,sp,920 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1254 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,953 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344515,16 +2344515,16 @@ │ │ │ │ auipc a1,0x1e4 │ │ │ │ addi a1,a1,-1706 # 8e0f10 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab6d4> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 356(ra) │ │ │ │ addi a5,sp,953 │ │ │ │ auipc a4,0x270 │ │ │ │ addi a4,a4,874 │ │ │ │ - auipc a3,0x27b │ │ │ │ - addi a3,a3,-1014 │ │ │ │ + auipc a3,0x296 │ │ │ │ + addi a3,a3,-134 │ │ │ │ addi a2,sp,984 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1268 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,1017 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344539,16 +2344539,16 @@ │ │ │ │ auipc a1,0x1e4 │ │ │ │ addi a1,a1,-1920 # 8e0e98 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab65c> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 262(ra) │ │ │ │ addi a5,sp,1017 │ │ │ │ auipc a4,0x26f │ │ │ │ addi a4,a4,1780 │ │ │ │ - auipc a3,0x27b │ │ │ │ - addi a3,a3,1796 │ │ │ │ + auipc a3,0x284 │ │ │ │ + addi a3,a3,1916 │ │ │ │ addi a2,sp,1048 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1284 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,1081 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344563,16 +2344563,16 @@ │ │ │ │ auipc a1,0x1e4 │ │ │ │ addi a1,a1,-816 # 8e1348 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3abb0c> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 166(ra) │ │ │ │ addi a5,sp,1081 │ │ │ │ auipc a4,0x270 │ │ │ │ addi a4,a4,1892 │ │ │ │ - auipc a3,0x284 │ │ │ │ - addi a3,a3,-716 │ │ │ │ + auipc a3,0x283 │ │ │ │ + addi a3,a3,-1948 │ │ │ │ addi a2,sp,1112 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1300 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,1145 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344587,16 +2344587,16 @@ │ │ │ │ auipc a1,0x1e4 │ │ │ │ addi a1,a1,-1928 # 8e0f50 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab714> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr 70(ra) │ │ │ │ addi a5,sp,1145 │ │ │ │ auipc a4,0x271 │ │ │ │ addi a4,a4,-1036 │ │ │ │ - auipc a3,0x298 │ │ │ │ - addi a3,a3,-548 │ │ │ │ + auipc a3,0x27d │ │ │ │ + addi a3,a3,-1972 │ │ │ │ addi a2,sp,1176 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1316 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,1209 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344611,16 +2344611,16 @@ │ │ │ │ auipc a1,0x1e4 │ │ │ │ addi a1,a1,-1984 # 8e0f78 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab73c> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -26(ra) │ │ │ │ addi a5,sp,1209 │ │ │ │ auipc a4,0x271 │ │ │ │ addi a4,a4,12 │ │ │ │ - auipc a3,0x281 │ │ │ │ - addi a3,a3,1428 │ │ │ │ + auipc a3,0x29a │ │ │ │ + addi a3,a3,-876 │ │ │ │ addi a2,sp,1240 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1332 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,1273 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344635,16 +2344635,16 @@ │ │ │ │ auipc a1,0x1e3 │ │ │ │ addi a1,a1,1576 # 8e0dc0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab584> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -122(ra) │ │ │ │ addi a5,sp,1273 │ │ │ │ auipc a4,0x26e │ │ │ │ addi a4,a4,-1316 │ │ │ │ - auipc a3,0x286 │ │ │ │ - addi a3,a3,1396 │ │ │ │ + auipc a3,0x283 │ │ │ │ + addi a3,a3,668 │ │ │ │ addi a2,sp,1304 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1348 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,1337 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344659,16 +2344659,16 @@ │ │ │ │ auipc a1,0x1e3 │ │ │ │ addi a1,a1,1696 # 8e0e98 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab65c> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -218(ra) │ │ │ │ addi a5,sp,1337 │ │ │ │ auipc a4,0x26f │ │ │ │ addi a4,a4,1300 │ │ │ │ - auipc a3,0x27a │ │ │ │ - addi a3,a3,-4 │ │ │ │ + auipc a3,0x298 │ │ │ │ + addi a3,a3,1916 │ │ │ │ addi a2,sp,1368 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1364 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,1401 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344683,16 +2344683,16 @@ │ │ │ │ auipc a1,0x1e4 │ │ │ │ addi a1,a1,-1248 # 8e1378 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3abb3c> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -314(ra) │ │ │ │ addi a5,sp,1401 │ │ │ │ auipc a4,0x271 │ │ │ │ addi a4,a4,980 │ │ │ │ - auipc a3,0x27f │ │ │ │ - addi a3,a3,-1060 │ │ │ │ + auipc a3,0x289 │ │ │ │ + addi a3,a3,-1380 │ │ │ │ addi a2,sp,1432 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1380 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,1465 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344707,16 +2344707,16 @@ │ │ │ │ auipc a1,0x1e3 │ │ │ │ addi a1,a1,1760 # 8e0f98 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab75c> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -410(ra) │ │ │ │ addi a5,sp,1465 │ │ │ │ auipc a4,0x272 │ │ │ │ addi a4,a4,-1604 │ │ │ │ - auipc a3,0x282 │ │ │ │ - addi a3,a3,-116 │ │ │ │ + auipc a3,0x27f │ │ │ │ + addi a3,a3,1644 │ │ │ │ addi a2,sp,1496 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1396 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,1529 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344729,18 +2344729,18 @@ │ │ │ │ addi a0,a5,-1 │ │ │ │ addi a2,s0,-2048 │ │ │ │ auipc a1,0x1e3 │ │ │ │ addi a1,a1,1688 # 8e0fb0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab774> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -506(ra) │ │ │ │ addi a5,sp,1529 │ │ │ │ - auipc a4,0x283 │ │ │ │ - addi a4,a4,-1692 │ │ │ │ - auipc a3,0x282 │ │ │ │ - addi a3,a3,-212 │ │ │ │ + auipc a4,0x28e │ │ │ │ + addi a4,a4,-1364 │ │ │ │ + auipc a3,0x27f │ │ │ │ + addi a3,a3,1548 │ │ │ │ addi a2,sp,1560 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1412 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,1593 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344755,16 +2344755,16 @@ │ │ │ │ auipc a1,0x1e3 │ │ │ │ addi a1,a1,1640 # 8e0fe0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab7a4> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -602(ra) │ │ │ │ addi a5,sp,1593 │ │ │ │ auipc a4,0x272 │ │ │ │ addi a4,a4,12 │ │ │ │ - auipc a3,0x294 │ │ │ │ - addi a3,a3,-1116 │ │ │ │ + auipc a3,0x27f │ │ │ │ + addi a3,a3,-852 │ │ │ │ addi a2,sp,1624 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1428 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,1657 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344779,16 +2344779,16 @@ │ │ │ │ auipc a1,0x1e3 │ │ │ │ addi a1,a1,1584 # 8e1008 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab7cc> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -698(ra) │ │ │ │ addi a5,sp,1657 │ │ │ │ auipc a4,0x272 │ │ │ │ addi a4,a4,1012 │ │ │ │ - auipc a3,0x28a │ │ │ │ - addi a3,a3,444 │ │ │ │ + auipc a3,0x28d │ │ │ │ + addi a3,a3,180 │ │ │ │ addi a2,sp,1688 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1444 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,1721 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344803,16 +2344803,16 @@ │ │ │ │ auipc a1,0x1e3 │ │ │ │ addi a1,a1,1528 # 8e1030 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab7f4> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -794(ra) │ │ │ │ addi a5,sp,1721 │ │ │ │ auipc a4,0x272 │ │ │ │ addi a4,a4,2012 │ │ │ │ - auipc a3,0x287 │ │ │ │ - addi a3,a3,-780 │ │ │ │ + auipc a3,0x282 │ │ │ │ + addi a3,a3,-1244 │ │ │ │ addi a2,sp,1752 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1460 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ lui a5,0x1 │ │ │ │ addi a5,a5,-280 │ │ │ │ @@ -2344834,16 +2344834,16 @@ │ │ │ │ auipc a1,0x1e3 │ │ │ │ addi a1,a1,1418 # 8e1030 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab7f4> │ │ │ │ mv s7,a5 │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -906(ra) │ │ │ │ auipc a4,0x272 │ │ │ │ addi a4,a4,1904 │ │ │ │ - auipc a3,0x286 │ │ │ │ - addi a3,a3,-2048 │ │ │ │ + auipc a3,0x28e │ │ │ │ + addi a3,a3,480 │ │ │ │ addi a2,s7,-2048 │ │ │ │ addi a1,s8,-2048 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1488 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ lui a5,0x1 │ │ │ │ addi a5,a5,-216 │ │ │ │ @@ -2344863,16 +2344863,16 @@ │ │ │ │ addi a2,s0,-2048 │ │ │ │ auipc a1,0x1e3 │ │ │ │ addi a1,a1,1372 # 8e1070 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab834> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -1014(ra) │ │ │ │ auipc a4,0x273 │ │ │ │ addi a4,a4,-1148 │ │ │ │ - auipc a3,0x28b │ │ │ │ - addi a3,a3,-1612 │ │ │ │ + auipc a3,0x28f │ │ │ │ + addi a3,a3,1620 │ │ │ │ addi a2,s1,-2048 │ │ │ │ addi a1,s6,-2048 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1516 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ lui a5,0x1 │ │ │ │ addi a5,a5,-152 │ │ │ │ @@ -2344892,16 +2344892,16 @@ │ │ │ │ addi a2,s0,-2048 │ │ │ │ auipc a1,0x1e3 │ │ │ │ addi a1,a1,1304 # 8e1098 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab85c> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -1122(ra) │ │ │ │ auipc a4,0x273 │ │ │ │ addi a4,a4,176 │ │ │ │ - auipc a3,0x297 │ │ │ │ - addi a3,a3,-240 │ │ │ │ + auipc a3,0x27c │ │ │ │ + addi a3,a3,-1664 │ │ │ │ addi a2,s2,-2048 │ │ │ │ addi a1,s3,-2048 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1544 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a5,sp,1977 │ │ │ │ addi a0,a5,-1 │ │ │ │ @@ -2344915,16 +2344915,16 @@ │ │ │ │ auipc a1,0x1e3 │ │ │ │ addi a1,a1,1256 # 8e10c0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab884> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -1210(ra) │ │ │ │ addi a5,sp,1977 │ │ │ │ auipc a4,0x273 │ │ │ │ addi a4,a4,836 │ │ │ │ - auipc a3,0x298 │ │ │ │ - addi a3,a3,916 │ │ │ │ + auipc a3,0x289 │ │ │ │ + addi a3,a3,348 │ │ │ │ addi a2,sp,2008 │ │ │ │ addi a1,a5,-1 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1556 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,2040 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2344938,18 +2344938,18 @@ │ │ │ │ addi a2,s0,-2048 │ │ │ │ add s0,a4,a5 │ │ │ │ mv a0,s0 │ │ │ │ auipc a1,0x1e3 │ │ │ │ addi a1,a1,1198 # 8e10e8 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3ab8ac> │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -1308(ra) │ │ │ │ - auipc a4,0x287 │ │ │ │ - addi a4,a4,1150 │ │ │ │ - auipc a3,0x288 │ │ │ │ - addi a3,a3,-754 │ │ │ │ + auipc a4,0x27e │ │ │ │ + addi a4,a4,-1946 │ │ │ │ + auipc a3,0x28c │ │ │ │ + addi a3,a3,-1970 │ │ │ │ mv a2,s0 │ │ │ │ addi a1,sp,2040 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1568 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,57 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2344965,16 +2344965,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -1398(ra) │ │ │ │ addi a2,sp,89 │ │ │ │ addi a1,sp,57 │ │ │ │ auipc a4,0x273 │ │ │ │ addi a4,a4,1804 │ │ │ │ - auipc a3,0x288 │ │ │ │ - addi a3,a3,-852 │ │ │ │ + auipc a3,0x28b │ │ │ │ + addi a3,a3,2028 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1588 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,121 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2344990,16 +2344990,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -1498(ra) │ │ │ │ addi a2,sp,153 │ │ │ │ addi a1,sp,121 │ │ │ │ auipc a4,0x274 │ │ │ │ addi a4,a4,-440 │ │ │ │ - auipc a3,0x289 │ │ │ │ - addi a3,a3,-1984 │ │ │ │ + auipc a3,0x27a │ │ │ │ + addi a3,a3,920 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1608 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,185 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345015,16 +2345015,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -1598(ra) │ │ │ │ addi a2,sp,217 │ │ │ │ addi a1,sp,185 │ │ │ │ auipc a4,0x274 │ │ │ │ addi a4,a4,916 │ │ │ │ - auipc a3,0x289 │ │ │ │ - addi a3,a3,772 │ │ │ │ + auipc a3,0x285 │ │ │ │ + addi a3,a3,-1372 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1628 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,249 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345040,16 +2345040,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -1698(ra) │ │ │ │ addi a2,sp,281 │ │ │ │ addi a1,sp,249 │ │ │ │ auipc a4,0x275 │ │ │ │ addi a4,a4,-1544 │ │ │ │ - auipc a3,0x27f │ │ │ │ - addi a3,a3,176 │ │ │ │ + auipc a3,0x280 │ │ │ │ + addi a3,a3,1552 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1648 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,313 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345065,16 +2345065,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -1798(ra) │ │ │ │ addi a2,sp,345 │ │ │ │ addi a1,sp,313 │ │ │ │ auipc a4,0x26e │ │ │ │ addi a4,a4,-620 │ │ │ │ - auipc a3,0x299 │ │ │ │ - addi a3,a3,-1196 │ │ │ │ + auipc a3,0x294 │ │ │ │ + addi a3,a3,1028 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1668 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,377 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345090,16 +2345090,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bc │ │ │ │ jalr -1898(ra) │ │ │ │ addi a2,sp,409 │ │ │ │ addi a1,sp,377 │ │ │ │ auipc a4,0x26e │ │ │ │ addi a4,a4,-720 │ │ │ │ - auipc a3,0x299 │ │ │ │ - addi a3,a3,-1296 │ │ │ │ + auipc a3,0x294 │ │ │ │ + addi a3,a3,928 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1688 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,441 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345165,16 +2345165,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 1898(ra) │ │ │ │ addi a2,sp,601 │ │ │ │ addi a1,sp,569 │ │ │ │ auipc a4,0x276 │ │ │ │ addi a4,a4,780 │ │ │ │ - auipc a3,0x27d │ │ │ │ - addi a3,a3,-1572 │ │ │ │ + auipc a3,0x285 │ │ │ │ + addi a3,a3,892 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1748 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,633 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345190,16 +2345190,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 1798(ra) │ │ │ │ addi a2,sp,665 │ │ │ │ addi a1,sp,633 │ │ │ │ auipc a4,0x276 │ │ │ │ addi a4,a4,1720 │ │ │ │ - auipc a3,0x27e │ │ │ │ - addi a3,a3,-1320 │ │ │ │ + auipc a3,0x27b │ │ │ │ + addi a3,a3,-1120 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1768 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,697 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345215,16 +2345215,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 1698(ra) │ │ │ │ addi a2,sp,729 │ │ │ │ addi a1,sp,697 │ │ │ │ auipc a4,0x277 │ │ │ │ addi a4,a4,-1324 │ │ │ │ - auipc a3,0x27d │ │ │ │ - addi a3,a3,468 │ │ │ │ + auipc a3,0x279 │ │ │ │ + addi a3,a3,1908 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1788 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,761 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345240,16 +2345240,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 1598(ra) │ │ │ │ addi a2,sp,793 │ │ │ │ addi a1,sp,761 │ │ │ │ auipc a4,0x277 │ │ │ │ addi a4,a4,-504 │ │ │ │ - auipc a3,0x27d │ │ │ │ - addi a3,a3,368 │ │ │ │ + auipc a3,0x279 │ │ │ │ + addi a3,a3,1808 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1808 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,825 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345265,16 +2345265,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 1498(ra) │ │ │ │ addi a2,sp,857 │ │ │ │ addi a1,sp,825 │ │ │ │ auipc a4,0x26d │ │ │ │ addi a4,a4,-1404 │ │ │ │ - auipc a3,0x280 │ │ │ │ - addi a3,a3,252 │ │ │ │ + auipc a3,0x298 │ │ │ │ + addi a3,a3,2044 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1828 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,889 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345290,16 +2345290,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 1398(ra) │ │ │ │ addi a2,sp,921 │ │ │ │ addi a1,sp,889 │ │ │ │ auipc a4,0x26d │ │ │ │ addi a4,a4,200 │ │ │ │ - auipc a3,0x293 │ │ │ │ - addi a3,a3,-1584 │ │ │ │ + auipc a3,0x287 │ │ │ │ + addi a3,a3,-688 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1848 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,953 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345315,16 +2345315,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 1298(ra) │ │ │ │ addi a2,sp,985 │ │ │ │ addi a1,sp,953 │ │ │ │ auipc a4,0x26d │ │ │ │ addi a4,a4,1236 │ │ │ │ - auipc a3,0x284 │ │ │ │ - addi a3,a3,1684 │ │ │ │ + auipc a3,0x286 │ │ │ │ + addi a3,a3,748 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1868 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,1017 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345340,16 +2345340,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 1198(ra) │ │ │ │ addi a2,sp,1049 │ │ │ │ addi a1,sp,1017 │ │ │ │ auipc a4,0x26e │ │ │ │ addi a4,a4,-1720 │ │ │ │ - auipc a3,0x299 │ │ │ │ - addi a3,a3,472 │ │ │ │ + auipc a3,0x290 │ │ │ │ + addi a3,a3,1832 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1888 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,1081 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345365,16 +2345365,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 1098(ra) │ │ │ │ addi a2,sp,1113 │ │ │ │ addi a1,sp,1081 │ │ │ │ auipc a4,0x26e │ │ │ │ addi a4,a4,-1820 │ │ │ │ - auipc a3,0x299 │ │ │ │ - addi a3,a3,372 │ │ │ │ + auipc a3,0x290 │ │ │ │ + addi a3,a3,1732 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1908 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,1145 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345390,16 +2345390,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 998(ra) │ │ │ │ addi a2,sp,1177 │ │ │ │ addi a1,sp,1145 │ │ │ │ auipc a4,0x26e │ │ │ │ addi a4,a4,-1920 │ │ │ │ - auipc a3,0x299 │ │ │ │ - addi a3,a3,272 │ │ │ │ + auipc a3,0x290 │ │ │ │ + addi a3,a3,1632 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1928 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,1209 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345415,16 +2345415,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 898(ra) │ │ │ │ addi a2,sp,1241 │ │ │ │ addi a1,sp,1209 │ │ │ │ auipc a4,0x26e │ │ │ │ addi a4,a4,-2020 │ │ │ │ - auipc a3,0x299 │ │ │ │ - addi a3,a3,172 │ │ │ │ + auipc a3,0x290 │ │ │ │ + addi a3,a3,1532 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1948 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,1273 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345440,16 +2345440,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 798(ra) │ │ │ │ addi a2,sp,1305 │ │ │ │ addi a1,sp,1273 │ │ │ │ auipc a4,0x26e │ │ │ │ addi a4,a4,-704 │ │ │ │ - auipc a3,0x290 │ │ │ │ - addi a3,a3,1680 │ │ │ │ + auipc a3,0x296 │ │ │ │ + addi a3,a3,1520 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1968 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,1337 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345465,16 +2345465,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 698(ra) │ │ │ │ addi a2,sp,1369 │ │ │ │ addi a1,sp,1337 │ │ │ │ auipc a4,0x26e │ │ │ │ addi a4,a4,-804 │ │ │ │ - auipc a3,0x28f │ │ │ │ - addi a3,a3,-92 │ │ │ │ + auipc a3,0x27c │ │ │ │ + addi a3,a3,1396 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-1988 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,1401 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345490,16 +2345490,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 598(ra) │ │ │ │ addi a2,sp,1433 │ │ │ │ addi a1,sp,1401 │ │ │ │ auipc a4,0x277 │ │ │ │ addi a4,a4,-568 │ │ │ │ - auipc a3,0x294 │ │ │ │ - addi a3,a3,976 │ │ │ │ + auipc a3,0x292 │ │ │ │ + addi a3,a3,-1136 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-2008 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,1465 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345516,15 +2345516,15 @@ │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 498(ra) │ │ │ │ addi a2,sp,1497 │ │ │ │ addi a1,sp,1465 │ │ │ │ auipc a4,0x277 │ │ │ │ addi a4,a4,1292 │ │ │ │ auipc a3,0x296 │ │ │ │ - addi a3,a3,-1036 │ │ │ │ + addi a3,a3,-1188 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-2028 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,1529 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345540,16 +2345540,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 398(ra) │ │ │ │ addi a2,sp,1561 │ │ │ │ addi a1,sp,1529 │ │ │ │ auipc a4,0x278 │ │ │ │ addi a4,a4,-1752 │ │ │ │ - auipc a3,0x295 │ │ │ │ - addi a3,a3,-56 │ │ │ │ + auipc a3,0x290 │ │ │ │ + addi a3,a3,-1984 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a6 │ │ │ │ addi a0,a0,-2048 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,1593 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345565,16 +2345565,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 298(ra) │ │ │ │ addi a2,sp,1625 │ │ │ │ addi a1,sp,1593 │ │ │ │ auipc a4,0x278 │ │ │ │ addi a4,a4,-332 │ │ │ │ - auipc a3,0x294 │ │ │ │ - addi a3,a3,-2012 │ │ │ │ + auipc a3,0x27f │ │ │ │ + addi a3,a3,860 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a5 │ │ │ │ addi a0,a0,2028 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,1657 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345590,16 +2345590,16 @@ │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 198(ra) │ │ │ │ addi a2,sp,1689 │ │ │ │ addi a1,sp,1657 │ │ │ │ auipc a4,0x278 │ │ │ │ addi a4,a4,384 │ │ │ │ - auipc a3,0x293 │ │ │ │ - addi a3,a3,1984 │ │ │ │ + auipc a3,0x27f │ │ │ │ + addi a3,a3,760 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a5 │ │ │ │ addi a0,a0,2008 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a0,sp,1721 │ │ │ │ addi a2,s0,-2048 │ │ │ │ @@ -2345613,18 +2345613,18 @@ │ │ │ │ auipc a1,0x1e3 │ │ │ │ addi a1,a1,-720 # 8e13e8 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3abbac> │ │ │ │ addi a0,a0,2047 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 98(ra) │ │ │ │ addi a2,sp,1753 │ │ │ │ addi a1,sp,1721 │ │ │ │ - auipc a4,0x28d │ │ │ │ - addi a4,a4,-1636 │ │ │ │ - auipc a3,0x28d │ │ │ │ - addi a3,a3,460 │ │ │ │ + auipc a4,0x294 │ │ │ │ + addi a4,a4,1604 │ │ │ │ + auipc a3,0x27d │ │ │ │ + addi a3,a3,1644 │ │ │ │ addi a2,a2,2047 │ │ │ │ addi a1,a1,2047 │ │ │ │ auipc a0,0x4a5 │ │ │ │ addi a0,a0,1988 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a2,s0,-2048 │ │ │ │ auipc a1,0x1e3 │ │ │ │ @@ -2345634,18 +2345634,18 @@ │ │ │ │ jalr 32(ra) │ │ │ │ addi a2,s0,-2048 │ │ │ │ auipc a1,0x1e3 │ │ │ │ addi a1,a1,-762 # 8e1418 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3abbdc> │ │ │ │ mv a0,s7 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr 10(ra) │ │ │ │ - auipc a4,0x28b │ │ │ │ - addi a4,a4,-1492 │ │ │ │ + auipc a4,0x292 │ │ │ │ + addi a4,a4,1556 │ │ │ │ auipc a3,0x28c │ │ │ │ - addi a3,a3,-204 │ │ │ │ + addi a3,a3,-1684 │ │ │ │ mv a2,s7 │ │ │ │ mv a1,s8 │ │ │ │ auipc a0,0x4a5 │ │ │ │ addi a0,a0,1992 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a2,s0,-2048 │ │ │ │ auipc a1,0x1e3 │ │ │ │ @@ -2345657,16 +2345657,16 @@ │ │ │ │ auipc a1,0x1e3 │ │ │ │ addi a1,a1,-790 # 8e1448 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3abc0c> │ │ │ │ mv a0,s1 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr -66(ra) │ │ │ │ auipc a4,0x278 │ │ │ │ addi a4,a4,952 │ │ │ │ - auipc a3,0x28e │ │ │ │ - addi a3,a3,-1496 │ │ │ │ + auipc a3,0x280 │ │ │ │ + addi a3,a3,1520 │ │ │ │ mv a2,s1 │ │ │ │ mv a1,s6 │ │ │ │ auipc a0,0x4a5 │ │ │ │ addi a0,a0,1996 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ addi a2,s0,-2048 │ │ │ │ auipc a1,0x1e3 │ │ │ │ @@ -2345678,16 +2345678,16 @@ │ │ │ │ auipc a1,0x1e3 │ │ │ │ addi a1,a1,-834 # 8e1468 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x3abc2c> │ │ │ │ mv a0,s2 │ │ │ │ auipc ra,0xff9bb │ │ │ │ jalr -142(ra) │ │ │ │ auipc a4,0x279 │ │ │ │ addi a4,a4,-1308 │ │ │ │ - auipc a3,0x282 │ │ │ │ - addi a3,a3,916 │ │ │ │ + auipc a3,0x28a │ │ │ │ + addi a3,a3,-1892 │ │ │ │ mv a2,s2 │ │ │ │ mv a1,s3 │ │ │ │ auipc a0,0x4a5 │ │ │ │ addi a0,a0,2000 │ │ │ │ jal 7049de std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x1cf1a2> │ │ │ │ auipc a2,0x49c │ │ │ │ addi a2,a2,-1988 │ │ │ │ @@ -2702284,15 +2702284,15 @@ │ │ │ │ ld ra,8(sp) │ │ │ │ sd a2,8(s0) │ │ │ │ mv a0,s0 │ │ │ │ ld s0,0(sp) │ │ │ │ addi sp,sp,16 │ │ │ │ ret │ │ │ │ lui a0,0x40 │ │ │ │ - addi a0,a0,-1123 │ │ │ │ + addi a0,a0,-1121 │ │ │ │ ret │ │ │ │ addi sp,sp,-48 │ │ │ │ li a3,0 │ │ │ │ li a1,17 │ │ │ │ auipc a2,0xda │ │ │ │ addi a2,a2,1614 # 8d3810 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x39dfd4> │ │ │ │ sd s0,32(sp) │ │ │ ├── .rodata │ │ │ │┄ Timeout exceeded; details may be incomplete. │ │ │ ├── .eh_frame_hdr │ │ │ │┄ Timeout exceeded; details may be incomplete. │ │ │ ├── .eh_frame │ │ │ │┄ Timeout exceeded; details may be incomplete. │ │ │ ├── .gcc_except_table │ │ │ │┄ Timeout exceeded; details may be incomplete. │ │ │ ├── .tbss │ │ │ │┄ Timeout exceeded; details may be incomplete. │ │ │ ├── .preinit_array │ │ │ │┄ Timeout exceeded; details may be incomplete. │ │ │ ├── .init_array │ │ │ │┄ Timeout exceeded; details may be incomplete. │ │ │ ├── .fini_array │ │ │ │┄ Timeout exceeded; details may be incomplete. │ │ │ ├── .data.rel.ro │ │ │ │┄ Timeout exceeded; details may be incomplete. │ │ │ ├── .got │ │ │ │┄ Timeout exceeded; details may be incomplete. │ │ │ ├── .got.plt │ │ │ │┄ Timeout exceeded; details may be incomplete. │ │ │ ├── .data │ │ │ │┄ Timeout exceeded; details may be incomplete. │ │ │ ├── .qtversion │ │ │ │┄ Timeout exceeded; details may be incomplete. │ │ │ ├── .bss │ │ │ │┄ Timeout exceeded; details may be incomplete. │ │ │ ├── .riscv.attributes │ │ │ │┄ Timeout exceeded; details may be incomplete. │ │ │ ├── .gnu_debuglink │ │ │ │┄ Timeout exceeded; details may be incomplete. │ │ │ ├── .shstrtab │ │ │ │┄ Timeout exceeded; details may be incomplete.