--- /srv/rebuilderd/tmp/rebuilderdMPx09b/inputs/organicmaps_2026.09.29-32+ds-1_loong64.deb +++ /srv/rebuilderd/tmp/rebuilderdMPx09b/out/organicmaps_2026.09.29-32+ds-1_loong64.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2026-10-12 09:00:12.000000 debian-binary │ -rw-r--r-- 0 0 0 1240 2026-10-12 09:00:12.000000 control.tar.xz │ --rw-r--r-- 0 0 0 4691488 2026-10-12 09:00:12.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 4692032 2026-10-12 09:00:12.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: 8733e588c45caeaa93c72566f66e679d828dd1ef │ │ │ │ + GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) Build ID: 0260db5ccddaa5f6a7a6c07580f96e15a8b9f5b2 │ │ │ │ │ │ │ │ Displaying notes found in: .note.ABI-tag │ │ │ │ Owner Data size Description │ │ │ │ GNU 0x00000010 NT_GNU_ABI_TAG (ABI version tag) OS: Linux, ABI: 5.19.0 │ │ │ ├── strings --all --bytes=8 {} │ │ │ │ @@ -9236,15 +9236,15 @@ │ │ │ │ PendingPosition │ │ │ │ NotFollow │ │ │ │ NotFollowNoPosition │ │ │ │ FollowAndRotate │ │ │ │ UK_England │ │ │ │ UK_Scotland │ │ │ │ Isle of Man │ │ │ │ -2026.10.12-0-00000000-Linux │ │ │ │ +2026.10.18-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/ │ │ │ │ @@ -13456,32 +13456,98 @@ │ │ │ │ #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; │ │ │ │ + in vec4 a_position; │ │ │ │ + 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 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 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 │ │ │ │ + transformedPivot.y = -transformedPivot.y; │ │ │ │ + transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return transformedPivot; │ │ │ │ + vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ + float logicZ = pivot.z / pivot.w; │ │ │ │ + vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ + vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ + vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ + #ifdef VULKAN │ │ │ │ + position.y = -position.y; │ │ │ │ + position.z = (position.z + position.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return position; │ │ │ │ + vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ + 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); │ │ │ │ + #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 │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + #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; │ │ │ │ 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 │ │ │ │ @@ -13503,21 +13569,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 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 │ │ │ │ + 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; │ │ │ │ - #endif │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -13525,28 +13588,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 vec3 a_normal; │ │ │ │ + in vec4 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ + in vec2 a_maskTexCoords; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - out float v_intensity; │ │ │ │ + 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; │ │ │ │ - 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 │ │ │ │ @@ -13568,31 +13631,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, 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 │ │ │ │ + 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; │ │ │ │ @@ -13601,31 +13652,27 @@ │ │ │ │ #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 │ │ │ │ + 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; │ │ │ │ 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 │ │ │ │ @@ -13647,27 +13694,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 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 │ │ │ │ + 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; │ │ │ │ @@ -13675,62 +13720,64 @@ │ │ │ │ #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 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 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); │ │ │ │ + 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 │ │ │ │ + transformedPivot.y = -transformedPivot.y; │ │ │ │ + transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ #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; │ │ │ │ + return transformedPivot; │ │ │ │ + vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ + float logicZ = pivot.z / pivot.w; │ │ │ │ + vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ + vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ + vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ + #ifdef VULKAN │ │ │ │ + position.y = -position.y; │ │ │ │ + position.z = (position.z + position.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return position; │ │ │ │ + vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ + 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; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -13799,79 +13846,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 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 │ │ │ │ - transformedPivot.y = -transformedPivot.y; │ │ │ │ - transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return transformedPivot; │ │ │ │ - vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ - float logicZ = pivot.z / pivot.w; │ │ │ │ - vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ - vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ - vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ - #ifdef VULKAN │ │ │ │ - position.y = -position.y; │ │ │ │ - position.z = (position.z + position.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return position; │ │ │ │ - vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ - 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 │ │ │ │ - #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 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 vec4 v_offsets; │ │ │ │ + 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 │ │ │ │ @@ -13893,21 +13886,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_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 │ │ │ │ + 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; │ │ │ │ @@ -13915,23 +13910,20 @@ │ │ │ │ #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_position; │ │ │ │ in vec2 a_texCoords; │ │ │ │ - out vec3 v_normal; │ │ │ │ + in vec4 a_color; │ │ │ │ out vec2 v_texCoords; │ │ │ │ - uniform mat4 u_transform; │ │ │ │ - uniform mat4 u_normalTransform; │ │ │ │ - uniform vec4 u_color; │ │ │ │ - uniform vec2 u_texCoordFlipping; │ │ │ │ + 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 │ │ │ │ @@ -13953,21 +13945,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 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; │ │ │ │ + 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; │ │ │ │ + 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 │ │ │ │ @@ -13976,34 +13967,33 @@ │ │ │ │ #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 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 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; │ │ │ │ - #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 │ │ │ │ @@ -14025,23 +14015,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 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; │ │ │ │ + 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; │ │ │ │ @@ -14049,62 +14040,55 @@ │ │ │ │ #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 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; │ │ │ │ + const float kAntialiasingThreshold = 0.92; │ │ │ │ + const float kOutlineThreshold1 = 0.81; │ │ │ │ + const float kOutlineThreshold2 = 0.71; │ │ │ │ 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 │ │ │ │ - transformedPivot.y = -transformedPivot.y; │ │ │ │ - transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return transformedPivot; │ │ │ │ - vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ - float logicZ = pivot.z / pivot.w; │ │ │ │ - vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ - vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ - vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ - #ifdef VULKAN │ │ │ │ - position.y = -position.y; │ │ │ │ - position.z = (position.z + position.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return position; │ │ │ │ - vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ - 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; │ │ │ │ + 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() │ │ │ │ - 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; │ │ │ │ + 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; │ │ │ │ @@ -14112,72 +14096,62 @@ │ │ │ │ #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; │ │ │ │ + in LOW_P vec4 v_color; │ │ │ │ #else │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ + 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; │ │ │ │ - #ifdef ENABLE_VTF │ │ │ │ - uniform sampler2D u_colorTex; │ │ │ │ - #endif │ │ │ │ + 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; │ │ │ │ - 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 │ │ │ │ - transformedPivot.y = -transformedPivot.y; │ │ │ │ - transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return transformedPivot; │ │ │ │ - vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ - float logicZ = pivot.z / pivot.w; │ │ │ │ - vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ - vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ - vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ - #ifdef VULKAN │ │ │ │ - position.y = -position.y; │ │ │ │ - position.z = (position.z + position.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return position; │ │ │ │ - vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ - 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; │ │ │ │ + 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 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); │ │ │ │ + LOW_P vec4 color = v_color; │ │ │ │ #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords.xy; │ │ │ │ + LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords); │ │ │ │ #endif │ │ │ │ - v_normal = a_normal; │ │ │ │ + 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; │ │ │ │ @@ -14186,33 +14160,33 @@ │ │ │ │ #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 │ │ │ │ + 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 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; │ │ │ │ - #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 │ │ │ │ @@ -14234,23 +14208,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() │ │ │ │ - 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 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; │ │ │ │ @@ -14258,20 +14235,20 @@ │ │ │ │ #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 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; │ │ │ │ @@ -14301,25 +14278,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); │ │ │ │ + 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; │ │ │ │ @@ -14327,34 +14299,33 @@ │ │ │ │ #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; │ │ │ │ + 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_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ #endif │ │ │ │ - out vec2 v_maskTexCoords; │ │ │ │ + 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 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 │ │ │ │ @@ -14376,22 +14347,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, 1) * u_modelView * 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); │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ - v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoord); │ │ │ │ #else │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + v_colorTexCoord = a_colorTexCoord; │ │ │ │ #endif │ │ │ │ - v_maskTexCoords = a_maskTexCoords; │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -14399,80 +14372,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 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 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 │ │ │ │ - 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; │ │ │ │ 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 │ │ │ │ @@ -14494,21 +14413,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 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; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -14516,22 +14433,24 @@ │ │ │ │ #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 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; │ │ │ │ @@ -14564,27 +14483,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_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); │ │ │ │ + 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 │ │ │ │ - vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection; │ │ │ │ - gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ + v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -14592,28 +14507,32 @@ │ │ │ │ #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 vec3 a_position; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ - in vec2 a_maskTexCoords; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - out vec2 v_maskTexCoords; │ │ │ │ + #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 │ │ │ │ @@ -14635,19 +14554,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() │ │ │ │ - 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); │ │ │ │ + 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; │ │ │ │ - v_maskTexCoords = a_maskTexCoords; │ │ │ │ + #endif │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -14655,28 +14582,28 @@ │ │ │ │ #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 vec3 a_position; │ │ │ │ + in vec3 a_normal; │ │ │ │ in vec2 a_colorTexCoords; │ │ │ │ - in vec2 a_maskTexCoords; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - out vec2 v_maskTexCoords; │ │ │ │ + out float v_intensity; │ │ │ │ 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 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 │ │ │ │ @@ -14698,87 +14625,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() │ │ │ │ - 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; │ │ │ │ - #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 │ │ │ │ - transformedPivot.y = -transformedPivot.y; │ │ │ │ - transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return transformedPivot; │ │ │ │ - vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ - float logicZ = pivot.z / pivot.w; │ │ │ │ - vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ - vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ - vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 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 │ │ │ │ - position.y = -position.y; │ │ │ │ - position.z = (position.z + position.w) / 2.0; │ │ │ │ + gl_Position.y = -gl_Position.y; │ │ │ │ + gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5; │ │ │ │ #endif │ │ │ │ - return position; │ │ │ │ - vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ - 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); │ │ │ │ v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ @@ -14787,26 +14657,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 vec2 a_normal; │ │ │ │ - in vec2 a_colorTexCoords; │ │ │ │ + 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 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 │ │ │ │ @@ -14828,23 +14706,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 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; │ │ │ │ + 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; │ │ │ │ @@ -14852,26 +14730,33 @@ │ │ │ │ #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; │ │ │ │ + in vec3 a_position; │ │ │ │ + in vec3 a_normal; │ │ │ │ + in vec2 a_colorTexCoord; │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + out LOW_P vec4 v_color; │ │ │ │ + #else │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ + #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 │ │ │ │ @@ -14893,75 +14778,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() │ │ │ │ - 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; │ │ │ │ - #define LOW_P lowp │ │ │ │ - #define MEDIUM_P mediump │ │ │ │ - #define HIGH_P highp │ │ │ │ + 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); │ │ │ │ + #ifdef ENABLE_VTF │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoord); │ │ │ │ #else │ │ │ │ - #define LOW_P │ │ │ │ - #define MEDIUM_P │ │ │ │ - #define HIGH_P │ │ │ │ + v_colorTexCoord = a_colorTexCoord; │ │ │ │ #endif │ │ │ │ - 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 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 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; │ │ │ │ + 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; │ │ │ │ @@ -14970,33 +14807,33 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec2 a_normal; │ │ │ │ - in vec3 a_length; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec3 v_length; │ │ │ │ - out vec4 v_color; │ │ │ │ + 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 │ │ │ │ @@ -15018,26 +14855,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_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.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; │ │ │ │ @@ -15045,32 +14879,19 @@ │ │ │ │ #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; │ │ │ │ + in vec2 a_pos; │ │ │ │ + in vec2 a_tcoord; │ │ │ │ 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 float u_opacity; │ │ │ │ + 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 │ │ │ │ @@ -15092,22 +14913,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() │ │ │ │ - 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); │ │ │ │ + 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; │ │ │ │ @@ -15115,72 +14931,59 @@ │ │ │ │ #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; │ │ │ │ + #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; │ │ │ │ + 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; │ │ │ │ - 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 │ │ │ │ - transformedPivot.y = -transformedPivot.y; │ │ │ │ - transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return transformedPivot; │ │ │ │ - vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ - float logicZ = pivot.z / pivot.w; │ │ │ │ - vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ - vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ - vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ - #ifdef VULKAN │ │ │ │ - position.y = -position.y; │ │ │ │ - position.z = (position.z + position.w) / 2.0; │ │ │ │ - #endif │ │ │ │ - return position; │ │ │ │ - vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ - 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; │ │ │ │ + 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 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 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; │ │ │ │ @@ -15188,25 +14991,21 @@ │ │ │ │ #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 vec2 a_colorTexCoords; │ │ │ │ - out vec2 v_colorTexCoords; │ │ │ │ - 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; │ │ │ │ + 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 │ │ │ │ @@ -15228,20 +15027,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() │ │ │ │ - gl_Position = vec4(u_position + a_position + u_length * a_normal, 0, 1) * u_projection; │ │ │ │ + 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; │ │ │ │ + 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; │ │ │ │ @@ -15250,36 +15050,31 @@ │ │ │ │ #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; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ #endif │ │ │ │ - out float v_lengthY; │ │ │ │ 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 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 │ │ │ │ @@ -15301,30 +15096,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() │ │ │ │ - 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); │ │ │ │ + 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_colorTexCoord = a_colorTexCoords; │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #endif │ │ │ │ - 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; │ │ │ │ @@ -15450,24 +15236,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 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 vec3 a_position; │ │ │ │ + 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; │ │ │ │ + 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 │ │ │ │ @@ -15489,19 +15285,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() │ │ │ │ - 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); │ │ │ │ + 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; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -15509,50 +15308,55 @@ │ │ │ │ #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); │ │ │ │ + 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; │ │ │ │ - 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); │ │ │ │ + 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 │ │ │ │ + transformedPivot.y = -transformedPivot.y; │ │ │ │ + transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return transformedPivot; │ │ │ │ + vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ + float logicZ = pivot.z / pivot.w; │ │ │ │ + vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ + vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ + vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ + #ifdef VULKAN │ │ │ │ + position.y = -position.y; │ │ │ │ + position.z = (position.z + position.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return position; │ │ │ │ + vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ + 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 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); │ │ │ │ + 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; │ │ │ │ @@ -15560,21 +15364,25 @@ │ │ │ │ #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; │ │ │ │ + in vec2 a_position; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - out vec4 v_offset0; │ │ │ │ - out vec4 v_offset1; │ │ │ │ - out vec4 v_offset2; │ │ │ │ - uniform vec4 u_framebufferMetrics; │ │ │ │ + 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; │ │ │ │ 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 │ │ │ │ @@ -15596,19 +15404,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() │ │ │ │ - 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); │ │ │ │ + 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_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -15616,19 +15425,26 @@ │ │ │ │ #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; │ │ │ │ + in vec2 a_normal; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ out vec2 v_colorTexCoords; │ │ │ │ - out vec4 v_offset; │ │ │ │ - uniform vec4 u_framebufferMetrics; │ │ │ │ + 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 │ │ │ │ @@ -15650,17 +15466,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); │ │ │ │ + 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); │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -15668,35 +15493,37 @@ │ │ │ │ #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 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 vec2 v_maskTexCoord; │ │ │ │ + out float v_lengthY; │ │ │ │ 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; │ │ │ │ + uniform float u_opacity; │ │ │ │ + uniform float u_azimut; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ + 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 │ │ │ │ @@ -15718,23 +15545,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() │ │ │ │ - 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); │ │ │ │ + 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_colorTexCoord); │ │ │ │ + v_color = texture(u_colorTex, a_colorTexCoords); │ │ │ │ #else │ │ │ │ - v_colorTexCoord = a_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; │ │ │ │ @@ -15742,33 +15576,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 vec3 a_normal; │ │ │ │ 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 │ │ │ │ + in vec4 a_maskTexCoord; │ │ │ │ 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 │ │ │ │ @@ -15790,24 +15619,86 @@ │ │ │ │ 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 │ │ │ │ + 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); │ │ │ │ + #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 │ │ │ │ - v_maskTexCoord = a_maskTexCoord; │ │ │ │ + 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 │ │ │ │ + transformedPivot.y = -transformedPivot.y; │ │ │ │ + transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return transformedPivot; │ │ │ │ + vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ + float logicZ = pivot.z / pivot.w; │ │ │ │ + vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ + vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ + vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ + #ifdef VULKAN │ │ │ │ + position.y = -position.y; │ │ │ │ + position.z = (position.z + position.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return position; │ │ │ │ + vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ + 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; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -15815,37 +15706,36 @@ │ │ │ │ #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_colorTexCoord; │ │ │ │ in vec2 a_outlineColorTexCoord; │ │ │ │ - in vec2 a_maskTexCoord; │ │ │ │ - in vec4 a_position; │ │ │ │ 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 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; │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ uniform sampler2D u_colorTex; │ │ │ │ #endif │ │ │ │ - const float BaseDepthShift = -10.0; │ │ │ │ + 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 │ │ │ │ @@ -15868,20 +15758,23 @@ │ │ │ │ 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; │ │ │ │ + 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 = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0); │ │ │ │ - vec2 colorTexCoord = a_colorTexCoord * notOutline + a_outlineColorTexCoord * isOutline; │ │ │ │ + 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); │ │ │ │ #ifdef ENABLE_VTF │ │ │ │ v_color = texture(u_colorTex, colorTexCoord); │ │ │ │ #else │ │ │ │ v_colorTexCoord = colorTexCoord; │ │ │ │ #endif │ │ │ │ v_maskTexCoord = a_maskTexCoord; │ │ │ │ #ifdef GL_ES │ │ │ │ @@ -15973,36 +15866,24 @@ │ │ │ │ #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_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; │ │ │ │ + in vec2 a_position; │ │ │ │ + in vec2 a_colorTexCoords; │ │ │ │ + out vec2 v_colorTexCoords; │ │ │ │ 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 │ │ │ │ @@ -16024,30 +15905,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() │ │ │ │ - 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; │ │ │ │ + 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 │ │ │ │ - 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; │ │ │ │ + v_colorTexCoords = a_colorTexCoords; │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -16055,26 +15926,22 @@ │ │ │ │ #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; │ │ │ │ + #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; │ │ │ │ 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 │ │ │ │ @@ -16096,18 +15963,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.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 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; │ │ │ │ @@ -16115,18 +15986,70 @@ │ │ │ │ #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 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_normal; │ │ │ │ + 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; │ │ │ │ @@ -16156,19 +16079,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); │ │ │ │ - v_colorTexCoords = a_colorTexCoords; │ │ │ │ + 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; │ │ │ │ @@ -16176,24 +16100,24 @@ │ │ │ │ #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; │ │ │ │ - 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; │ │ │ │ + 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 │ │ │ │ @@ -16215,20 +16139,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() │ │ │ │ - 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; │ │ │ │ + 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; │ │ │ │ @@ -16236,22 +16159,25 @@ │ │ │ │ #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_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 │ │ │ │ @@ -16273,22 +16199,83 @@ │ │ │ │ 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_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); │ │ │ │ - vec4 textureRectMinMax = u_textureRectMinMax[gl_InstanceID]; │ │ │ │ - vec2 texUV = mix(textureRectMinMax.xy, textureRectMinMax.zw, quadVertex); │ │ │ │ - v_texCoords = vec3(texUV, float(u_textureIndex[gl_InstanceID])); │ │ │ │ + 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; │ │ │ │ + #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; │ │ │ │ + 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 │ │ │ │ + transformedPivot.y = -transformedPivot.y; │ │ │ │ + transformedPivot.z = (transformedPivot.z + transformedPivot.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return transformedPivot; │ │ │ │ + vec4 applyBillboardPivotTransform(vec4 pivot, mat4 pivotTransform, float pivotRealZ, vec2 offset) │ │ │ │ + float logicZ = pivot.z / pivot.w; │ │ │ │ + vec4 transformedPivot = pivotTransform * vec4(pivot.xy, pivotRealZ, pivot.w); │ │ │ │ + vec4 scale = pivotTransform * vec4(1.0, -1.0, 0.0, 1.0); │ │ │ │ + vec4 position = vec4(transformedPivot.xy / transformedPivot.w, logicZ, 1.0) + vec4(offset / scale.w * scale.x, 0.0, 0.0); │ │ │ │ + #ifdef VULKAN │ │ │ │ + position.y = -position.y; │ │ │ │ + position.z = (position.z + position.w) / 2.0; │ │ │ │ + #endif │ │ │ │ + return position; │ │ │ │ + vec2 calcLineTransformedAxisPos(vec2 originalAxisPos, vec2 shiftedPos, mat4 modelView, float halfWidth) │ │ │ │ + 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 │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -16297,29 +16284,33 @@ │ │ │ │ #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_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 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; │ │ │ │ + #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 │ │ │ │ @@ -16341,30 +16332,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_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 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; │ │ │ │ @@ -16373,26 +16357,30 @@ │ │ │ │ #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 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_trafficParams; │ │ │ │ + uniform vec4 u_routeParams; │ │ │ │ + uniform vec4 u_color; │ │ │ │ + uniform vec4 u_maskColor; │ │ │ │ uniform vec4 u_outlineColor; │ │ │ │ - uniform vec4 u_lightArrowColor; │ │ │ │ - uniform vec4 u_darkArrowColor; │ │ │ │ - uniform float u_outline; │ │ │ │ + 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; │ │ │ │ @@ -16415,27 +16403,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() │ │ │ │ - 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); │ │ │ │ + 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_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; │ │ │ │ + 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 │ │ │ │ @@ -16445,25 +16427,29 @@ │ │ │ │ #define HIGH_P highp │ │ │ │ #else │ │ │ │ #define LOW_P │ │ │ │ #define MEDIUM_P │ │ │ │ #define HIGH_P │ │ │ │ #endif │ │ │ │ in vec3 a_position; │ │ │ │ - in vec2 a_colorTexCoord; │ │ │ │ + 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 │ │ │ │ @@ -16485,17 +16471,29 @@ │ │ │ │ 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; │ │ │ │ - v_colorTexCoord = a_colorTexCoord; │ │ │ │ gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0); │ │ │ │ #ifdef GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ @@ -16504,24 +16502,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 vec4 a_normal; │ │ │ │ - in vec4 a_color; │ │ │ │ - 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; │ │ │ │ + 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 │ │ │ │ @@ -16543,23 +16540,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() │ │ │ │ - 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); │ │ │ │ + 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 GL_ES │ │ │ │ #ifdef GL_FRAGMENT_PRECISION_HIGH │ │ │ │ #define MAXPREC highp │ │ │ │ #else │ │ │ │ #define MAXPREC mediump │ │ │ │ #endif │ │ │ │ precision MAXPREC float; │ │ │ │ @@ -16568,24 +16564,25 @@ │ │ │ │ #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 vec2 a_colorTexCoord; │ │ │ │ + out vec2 v_colorTexCoord; │ │ │ │ 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 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 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 │ │ │ │ @@ -16607,25 +16604,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() │ │ │ │ - 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; │ │ │ │ + v_colorTexCoord = a_colorTexCoord; │ │ │ │ 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; │ │ │ │ @@ -16636,15 +16626,14 @@ │ │ │ │ #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; │ │ │ │ uniform mat4 u_modelView; │ │ │ │ uniform mat4 u_projection; │ │ │ │ uniform mat4 u_pivotTransform; │ │ │ │ uniform vec4 u_params; │ │ │ │ uniform float u_lineHalfWidth; │ │ │ │ uniform float u_maxRadius; │ │ │ │ @@ -16673,23 +16662,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 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); │ │ │ │ + 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; │ │ │ │ @@ -16743,20 +16732,20 @@ │ │ │ │ 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); │ │ │ │ + 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; │ │ │ │ + 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 │ │ │ │ @@ -16766,28 +16755,37 @@ │ │ │ │ #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_normalAndAnimateOrZ; │ │ │ │ - in vec4 a_texCoords; │ │ │ │ - in vec4 a_color; │ │ │ │ - out vec4 v_texCoords; │ │ │ │ - out vec4 v_maskColor; │ │ │ │ + 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 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 │ │ │ │ @@ -16809,25 +16807,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_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; │ │ │ │ + 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; │ │ │ │ *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 {} │ │ │ │ @@ -2424082,16 +2424082,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 64 │ │ │ │ bl -9335044 │ │ │ │ ld.d $a2, $sp, 64 │ │ │ │ ld.d $a1, $sp, 48 │ │ │ │ pcalau12i $a4, 802 │ │ │ │ addi.d $a4, $a4, 1440 │ │ │ │ - pcalau12i $a3, 821 │ │ │ │ - addi.d $a3, $a3, 656 │ │ │ │ + pcalau12i $a3, 827 │ │ │ │ + addi.d $a3, $a3, -1744 │ │ │ │ pcalau12i $a0, 1375 │ │ │ │ addi.d $a0, $a0, -840 │ │ │ │ bl 41336 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 600 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 662 │ │ │ │ addi.d $a1, $a1, -1928 │ │ │ │ @@ -2424105,16 +2424105,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 96 │ │ │ │ bl -9335136 │ │ │ │ ld.d $a2, $sp, 96 │ │ │ │ ld.d $a1, $sp, 80 │ │ │ │ pcalau12i $a4, 803 │ │ │ │ addi.d $a4, $a4, -944 │ │ │ │ - pcalau12i $a3, 840 │ │ │ │ - addi.d $a3, $a3, -688 │ │ │ │ + pcalau12i $a3, 816 │ │ │ │ + addi.d $a3, $a3, -432 │ │ │ │ pcalau12i $a0, 1375 │ │ │ │ addi.d $a0, $a0, -760 │ │ │ │ bl 41244 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 664 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 662 │ │ │ │ addi.d $a1, $a1, -1896 │ │ │ │ @@ -2424128,16 +2424128,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 128 │ │ │ │ bl -9335228 │ │ │ │ ld.d $a2, $sp, 128 │ │ │ │ ld.d $a1, $sp, 112 │ │ │ │ pcalau12i $a4, 803 │ │ │ │ addi.d $a4, $a4, 192 │ │ │ │ - pcalau12i $a3, 826 │ │ │ │ - addi.d $a3, $a3, -1584 │ │ │ │ + pcalau12i $a3, 816 │ │ │ │ + addi.d $a3, $a3, 1936 │ │ │ │ pcalau12i $a0, 1375 │ │ │ │ addi.d $a0, $a0, -680 │ │ │ │ bl 41152 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 728 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 662 │ │ │ │ addi.d $a1, $a1, -1848 │ │ │ │ @@ -2424151,16 +2424151,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 160 │ │ │ │ bl -9335320 │ │ │ │ ld.d $a2, $sp, 160 │ │ │ │ ld.d $a1, $sp, 144 │ │ │ │ pcalau12i $a4, 803 │ │ │ │ addi.d $a4, $a4, 1440 │ │ │ │ - pcalau12i $a3, 846 │ │ │ │ - addi.d $a3, $a3, 1200 │ │ │ │ + pcalau12i $a3, 817 │ │ │ │ + addi.d $a3, $a3, 304 │ │ │ │ pcalau12i $a0, 1375 │ │ │ │ addi.d $a0, $a0, -600 │ │ │ │ bl 41060 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 792 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 662 │ │ │ │ addi.d $a1, $a1, -1848 │ │ │ │ @@ -2424174,16 +2424174,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 192 │ │ │ │ bl -9335412 │ │ │ │ ld.d $a2, $sp, 192 │ │ │ │ ld.d $a1, $sp, 176 │ │ │ │ pcalau12i $a4, 803 │ │ │ │ addi.d $a4, $a4, 1440 │ │ │ │ - pcalau12i $a3, 846 │ │ │ │ - addi.d $a3, $a3, 1200 │ │ │ │ + pcalau12i $a3, 817 │ │ │ │ + addi.d $a3, $a3, 304 │ │ │ │ pcalau12i $a0, 1375 │ │ │ │ addi.d $a0, $a0, -520 │ │ │ │ bl 40968 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 856 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 662 │ │ │ │ addi.d $a1, $a1, -1816 │ │ │ │ @@ -2424197,16 +2424197,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 224 │ │ │ │ bl -9335504 │ │ │ │ ld.d $a2, $sp, 224 │ │ │ │ ld.d $a1, $sp, 208 │ │ │ │ pcalau12i $a4, 804 │ │ │ │ addi.d $a4, $a4, -1232 │ │ │ │ - pcalau12i $a3, 838 │ │ │ │ - addi.d $a3, $a3, -1584 │ │ │ │ + pcalau12i $a3, 847 │ │ │ │ + addi.d $a3, $a3, -336 │ │ │ │ pcalau12i $a0, 1375 │ │ │ │ addi.d $a0, $a0, -440 │ │ │ │ bl 40876 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 920 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1776 │ │ │ │ @@ -2424220,16 +2424220,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 256 │ │ │ │ bl -9335596 │ │ │ │ ld.d $a2, $sp, 256 │ │ │ │ ld.d $a1, $sp, 240 │ │ │ │ pcalau12i $a4, 803 │ │ │ │ addi.d $a4, $a4, -1232 │ │ │ │ - pcalau12i $a3, 835 │ │ │ │ - addi.d $a3, $a3, 1168 │ │ │ │ + pcalau12i $a3, 824 │ │ │ │ + addi.d $a3, $a3, -1824 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, -360 │ │ │ │ bl 40784 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 984 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1760 │ │ │ │ @@ -2424243,16 +2424243,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 288 │ │ │ │ bl -9335688 │ │ │ │ ld.d $a2, $sp, 288 │ │ │ │ ld.d $a1, $sp, 272 │ │ │ │ pcalau12i $a4, 803 │ │ │ │ addi.d $a4, $a4, 304 │ │ │ │ - pcalau12i $a3, 838 │ │ │ │ - addi.d $a3, $a3, 384 │ │ │ │ + pcalau12i $a3, 836 │ │ │ │ + addi.d $a3, $a3, -1504 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, -280 │ │ │ │ bl 40692 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 1048 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1760 │ │ │ │ @@ -2424266,16 +2424266,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 320 │ │ │ │ bl -9335780 │ │ │ │ ld.d $a2, $sp, 320 │ │ │ │ ld.d $a1, $sp, 304 │ │ │ │ pcalau12i $a4, 803 │ │ │ │ addi.d $a4, $a4, 304 │ │ │ │ - pcalau12i $a3, 838 │ │ │ │ - addi.d $a3, $a3, 384 │ │ │ │ + pcalau12i $a3, 836 │ │ │ │ + addi.d $a3, $a3, -1504 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, -200 │ │ │ │ bl 40600 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 1112 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1712 │ │ │ │ @@ -2424289,16 +2424289,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 336 │ │ │ │ bl -9335872 │ │ │ │ ld.d $a2, $sp, 336 │ │ │ │ ld.d $a1, $sp, 328 │ │ │ │ pcalau12i $a4, 803 │ │ │ │ addi.d $a4, $a4, 1792 │ │ │ │ - pcalau12i $a3, 814 │ │ │ │ - addi.d $a3, $a3, 640 │ │ │ │ + pcalau12i $a3, 829 │ │ │ │ + addi.d $a3, $a3, 768 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, -120 │ │ │ │ bl 40508 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 1176 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1680 │ │ │ │ @@ -2424311,17 +2424311,17 @@ │ │ │ │ addi.d $a1, $a1, -1656 │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 352 │ │ │ │ bl -9335964 │ │ │ │ ld.d $a2, $sp, 352 │ │ │ │ ld.d $a1, $sp, 344 │ │ │ │ pcalau12i $a4, 817 │ │ │ │ - addi.d $a4, $a4, -1232 │ │ │ │ - pcalau12i $a3, 822 │ │ │ │ - addi.d $a3, $a3, 768 │ │ │ │ + addi.d $a4, $a4, 1568 │ │ │ │ + pcalau12i $a3, 831 │ │ │ │ + addi.d $a3, $a3, 480 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, -40 │ │ │ │ bl 40416 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 1240 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1680 │ │ │ │ @@ -2424333,18 +2424333,18 @@ │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1632 │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 368 │ │ │ │ bl -9336056 │ │ │ │ ld.d $a2, $sp, 368 │ │ │ │ ld.d $a1, $sp, 360 │ │ │ │ - pcalau12i $a4, 816 │ │ │ │ - addi.d $a4, $a4, 544 │ │ │ │ - pcalau12i $a3, 822 │ │ │ │ - addi.d $a3, $a3, 768 │ │ │ │ + pcalau12i $a4, 820 │ │ │ │ + addi.d $a4, $a4, 1392 │ │ │ │ + pcalau12i $a3, 831 │ │ │ │ + addi.d $a3, $a3, 480 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 40 │ │ │ │ bl 40324 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 1304 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1680 │ │ │ │ @@ -2424358,16 +2424358,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 384 │ │ │ │ bl -9336148 │ │ │ │ ld.d $a2, $sp, 384 │ │ │ │ ld.d $a1, $sp, 376 │ │ │ │ pcalau12i $a4, 804 │ │ │ │ addi.d $a4, $a4, -1008 │ │ │ │ - pcalau12i $a3, 822 │ │ │ │ - addi.d $a3, $a3, 768 │ │ │ │ + pcalau12i $a3, 831 │ │ │ │ + addi.d $a3, $a3, 480 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 120 │ │ │ │ bl 40232 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 1368 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1712 │ │ │ │ @@ -2424381,16 +2424381,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 400 │ │ │ │ bl -9336240 │ │ │ │ ld.d $a2, $sp, 400 │ │ │ │ ld.d $a1, $sp, 392 │ │ │ │ pcalau12i $a4, 803 │ │ │ │ addi.d $a4, $a4, 1792 │ │ │ │ - pcalau12i $a3, 814 │ │ │ │ - addi.d $a3, $a3, 640 │ │ │ │ + pcalau12i $a3, 829 │ │ │ │ + addi.d $a3, $a3, 768 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 200 │ │ │ │ bl 40140 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 1432 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1592 │ │ │ │ @@ -2424404,16 +2424404,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 416 │ │ │ │ bl -9336332 │ │ │ │ ld.d $a2, $sp, 416 │ │ │ │ ld.d $a1, $sp, 408 │ │ │ │ pcalau12i $a4, 804 │ │ │ │ addi.d $a4, $a4, 800 │ │ │ │ - pcalau12i $a3, 815 │ │ │ │ - addi.d $a3, $a3, -944 │ │ │ │ + pcalau12i $a3, 825 │ │ │ │ + addi.d $a3, $a3, -560 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 280 │ │ │ │ bl 40048 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 1496 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1560 │ │ │ │ @@ -2424427,16 +2424427,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 432 │ │ │ │ bl -9336424 │ │ │ │ ld.d $a2, $sp, 432 │ │ │ │ ld.d $a1, $sp, 424 │ │ │ │ pcalau12i $a4, 803 │ │ │ │ addi.d $a4, $a4, 1792 │ │ │ │ - pcalau12i $a3, 815 │ │ │ │ - addi.d $a3, $a3, 1968 │ │ │ │ + pcalau12i $a3, 824 │ │ │ │ + addi.d $a3, $a3, 864 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 360 │ │ │ │ bl 39956 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 1560 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -520 │ │ │ │ @@ -2424450,16 +2424450,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 448 │ │ │ │ bl -9336516 │ │ │ │ ld.d $a2, $sp, 448 │ │ │ │ ld.d $a1, $sp, 440 │ │ │ │ pcalau12i $a4, 804 │ │ │ │ addi.d $a4, $a4, 2016 │ │ │ │ - pcalau12i $a3, 824 │ │ │ │ - addi.d $a3, $a3, -400 │ │ │ │ + pcalau12i $a3, 826 │ │ │ │ + addi.d $a3, $a3, 912 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 440 │ │ │ │ bl 39864 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 1624 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1536 │ │ │ │ @@ -2424473,16 +2424473,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 464 │ │ │ │ bl -9336608 │ │ │ │ ld.d $a2, $sp, 464 │ │ │ │ ld.d $a1, $sp, 456 │ │ │ │ pcalau12i $a4, 805 │ │ │ │ addi.d $a4, $a4, -816 │ │ │ │ - pcalau12i $a3, 844 │ │ │ │ - addi.d $a3, $a3, -32 │ │ │ │ + pcalau12i $a3, 840 │ │ │ │ + addi.d $a3, $a3, 288 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 520 │ │ │ │ bl 39772 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 1688 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1488 │ │ │ │ @@ -2424496,16 +2424496,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 480 │ │ │ │ bl -9336700 │ │ │ │ ld.d $a2, $sp, 480 │ │ │ │ ld.d $a1, $sp, 472 │ │ │ │ pcalau12i $a4, 805 │ │ │ │ addi.d $a4, $a4, 336 │ │ │ │ - pcalau12i $a3, 821 │ │ │ │ - addi.d $a3, $a3, 1920 │ │ │ │ + pcalau12i $a3, 834 │ │ │ │ + addi.d $a3, $a3, 1312 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 600 │ │ │ │ bl 39680 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 1752 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1456 │ │ │ │ @@ -2424516,16 +2424516,16 @@ │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1912 │ │ │ │ addi.d $a0, $sp, 1784 │ │ │ │ bl -9336784 │ │ │ │ ld.d $a1, $sp, 488 │ │ │ │ pcalau12i $a4, 802 │ │ │ │ addi.d $a4, $a4, -944 │ │ │ │ - pcalau12i $a3, 826 │ │ │ │ - addi.d $a3, $a3, 2016 │ │ │ │ + pcalau12i $a3, 817 │ │ │ │ + addi.d $a3, $a3, -1024 │ │ │ │ addi.d $a2, $sp, 1784 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 680 │ │ │ │ bl 39596 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1712 │ │ │ │ @@ -2424537,16 +2424537,16 @@ │ │ │ │ addi.d $a1, $a1, -1696 │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 8 │ │ │ │ bl -9336868 │ │ │ │ ld.d $a2, $sp, 8 │ │ │ │ pcalau12i $a4, 803 │ │ │ │ addi.d $a4, $a4, 1792 │ │ │ │ - pcalau12i $a3, 814 │ │ │ │ - addi.d $a3, $a3, 640 │ │ │ │ + pcalau12i $a3, 829 │ │ │ │ + addi.d $a3, $a3, 768 │ │ │ │ addi.d $a1, $sp, 1816 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 760 │ │ │ │ bl 39512 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 1880 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ @@ -2424561,16 +2424561,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 40 │ │ │ │ bl -9336960 │ │ │ │ ld.d $a2, $sp, 40 │ │ │ │ ld.d $a1, $sp, 32 │ │ │ │ pcalau12i $a4, 805 │ │ │ │ addi.d $a4, $a4, 1600 │ │ │ │ - pcalau12i $a3, 819 │ │ │ │ - addi.d $a3, $a3, -304 │ │ │ │ + pcalau12i $a3, 841 │ │ │ │ + addi.d $a3, $a3, 1184 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 840 │ │ │ │ bl 39420 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 1944 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1680 │ │ │ │ @@ -2424584,16 +2424584,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 72 │ │ │ │ bl -9337052 │ │ │ │ ld.d $a2, $sp, 72 │ │ │ │ ld.d $a1, $sp, 56 │ │ │ │ pcalau12i $a4, 806 │ │ │ │ addi.d $a4, $a4, -880 │ │ │ │ - pcalau12i $a3, 822 │ │ │ │ - addi.d $a3, $a3, 768 │ │ │ │ + pcalau12i $a3, 831 │ │ │ │ + addi.d $a3, $a3, 480 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 920 │ │ │ │ bl 39328 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 2008 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1680 │ │ │ │ @@ -2424605,18 +2424605,18 @@ │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1416 │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 104 │ │ │ │ bl -9337144 │ │ │ │ ld.d $a2, $sp, 104 │ │ │ │ ld.d $a1, $sp, 88 │ │ │ │ - pcalau12i $a4, 823 │ │ │ │ - addi.d $a4, $a4, -720 │ │ │ │ - pcalau12i $a3, 822 │ │ │ │ - addi.d $a3, $a3, 768 │ │ │ │ + pcalau12i $a4, 828 │ │ │ │ + addi.d $a4, $a4, 400 │ │ │ │ + pcalau12i $a3, 831 │ │ │ │ + addi.d $a3, $a3, 480 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 1000 │ │ │ │ bl 39236 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 2047 │ │ │ │ addi.d $t0, $t0, 25 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ @@ -2424632,16 +2424632,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 136 │ │ │ │ bl -9337244 │ │ │ │ ld.d $a2, $sp, 136 │ │ │ │ ld.d $a1, $sp, 120 │ │ │ │ pcalau12i $a4, 806 │ │ │ │ addi.d $a4, $a4, 928 │ │ │ │ - pcalau12i $a3, 840 │ │ │ │ - addi.d $a3, $a3, 48 │ │ │ │ + pcalau12i $a3, 837 │ │ │ │ + addi.d $a3, $a3, 464 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 1080 │ │ │ │ bl 39136 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 2047 │ │ │ │ addi.d $t0, $t0, 89 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ @@ -2424657,16 +2424657,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 168 │ │ │ │ bl -9337344 │ │ │ │ ld.d $a2, $sp, 168 │ │ │ │ ld.d $a1, $sp, 152 │ │ │ │ pcalau12i $a4, 806 │ │ │ │ addi.d $a4, $a4, 2032 │ │ │ │ - pcalau12i $a3, 830 │ │ │ │ - addi.d $a3, $a3, 1664 │ │ │ │ + pcalau12i $a3, 832 │ │ │ │ + addi.d $a3, $a3, 1296 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 1160 │ │ │ │ bl 39036 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 2047 │ │ │ │ addi.d $t0, $t0, 153 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ @@ -2424682,16 +2424682,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 200 │ │ │ │ bl -9337444 │ │ │ │ ld.d $a2, $sp, 200 │ │ │ │ ld.d $a1, $sp, 184 │ │ │ │ pcalau12i $a4, 807 │ │ │ │ addi.d $a4, $a4, -960 │ │ │ │ - pcalau12i $a3, 827 │ │ │ │ - addi.d $a3, $a3, 512 │ │ │ │ + pcalau12i $a3, 835 │ │ │ │ + addi.d $a3, $a3, 160 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 1240 │ │ │ │ bl 38936 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 2047 │ │ │ │ addi.d $t0, $t0, 217 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ @@ -2424707,16 +2424707,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 232 │ │ │ │ bl -9337544 │ │ │ │ ld.d $a2, $sp, 232 │ │ │ │ ld.d $a1, $sp, 216 │ │ │ │ pcalau12i $a4, 807 │ │ │ │ addi.d $a4, $a4, -960 │ │ │ │ - pcalau12i $a3, 826 │ │ │ │ - addi.d $a3, $a3, -656 │ │ │ │ + pcalau12i $a3, 833 │ │ │ │ + addi.d $a3, $a3, -448 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 1320 │ │ │ │ bl 38836 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 2047 │ │ │ │ addi.d $t0, $t0, 281 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ @@ -2424732,16 +2424732,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 264 │ │ │ │ bl -9337644 │ │ │ │ ld.d $a2, $sp, 264 │ │ │ │ ld.d $a1, $sp, 248 │ │ │ │ pcalau12i $a4, 807 │ │ │ │ addi.d $a4, $a4, 192 │ │ │ │ - pcalau12i $a3, 831 │ │ │ │ - addi.d $a3, $a3, -80 │ │ │ │ + pcalau12i $a3, 834 │ │ │ │ + addi.d $a3, $a3, -1872 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 1400 │ │ │ │ bl 38736 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 2047 │ │ │ │ addi.d $t0, $t0, 345 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ @@ -2424757,16 +2424757,16 @@ │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 296 │ │ │ │ bl -9337744 │ │ │ │ ld.d $a2, $sp, 296 │ │ │ │ ld.d $a1, $sp, 280 │ │ │ │ pcalau12i $a4, 807 │ │ │ │ addi.d $a4, $a4, 1632 │ │ │ │ - pcalau12i $a3, 843 │ │ │ │ - addi.d $a3, $a3, 1456 │ │ │ │ + pcalau12i $a3, 845 │ │ │ │ + addi.d $a3, $a3, -1664 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 1480 │ │ │ │ bl 38636 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $t0, $sp, 2047 │ │ │ │ addi.d $t0, $t0, 409 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ @@ -2424780,16 +2424780,16 @@ │ │ │ │ addi.d $a1, $a1, -1144 │ │ │ │ addi.d $a0, $a0, 441 │ │ │ │ bl -9337836 │ │ │ │ ld.d $a1, $sp, 312 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ pcalau12i $a4, 808 │ │ │ │ addi.d $a4, $a4, -1712 │ │ │ │ - pcalau12i $a3, 845 │ │ │ │ - addi.d $a3, $a3, -1376 │ │ │ │ + pcalau12i $a3, 818 │ │ │ │ + addi.d $a3, $a3, -224 │ │ │ │ addi.d $a2, $a2, 441 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 1560 │ │ │ │ bl 38540 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ @@ -2424800,18 +2424800,18 @@ │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 661 │ │ │ │ addi.d $a1, $a1, -1104 │ │ │ │ addi.d $a0, $a0, 505 │ │ │ │ bl -9337924 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ - pcalau12i $a4, 828 │ │ │ │ - addi.d $a4, $a4, -1152 │ │ │ │ - pcalau12i $a3, 828 │ │ │ │ - addi.d $a3, $a3, 1056 │ │ │ │ + pcalau12i $a4, 820 │ │ │ │ + addi.d $a4, $a4, -816 │ │ │ │ + pcalau12i $a3, 821 │ │ │ │ + addi.d $a3, $a3, -384 │ │ │ │ addi.d $a2, $a2, 505 │ │ │ │ addi.d $a1, $a1, 473 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 1640 │ │ │ │ bl 38448 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2424825,16 +2424825,16 @@ │ │ │ │ addi.d $a1, $a1, -1088 │ │ │ │ addi.d $a0, $a0, 569 │ │ │ │ bl -9338016 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 808 │ │ │ │ addi.d $a4, $a4, -544 │ │ │ │ - pcalau12i $a3, 828 │ │ │ │ - addi.d $a3, $a3, 1056 │ │ │ │ + pcalau12i $a3, 821 │ │ │ │ + addi.d $a3, $a3, -384 │ │ │ │ addi.d $a2, $a2, 569 │ │ │ │ addi.d $a1, $a1, 537 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 1720 │ │ │ │ bl 38356 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2424848,16 +2424848,16 @@ │ │ │ │ addi.d $a1, $a1, -1056 │ │ │ │ addi.d $a0, $a0, 633 │ │ │ │ bl -9338108 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 808 │ │ │ │ addi.d $a4, $a4, 1408 │ │ │ │ - pcalau12i $a3, 829 │ │ │ │ - addi.d $a3, $a3, 32 │ │ │ │ + pcalau12i $a3, 842 │ │ │ │ + addi.d $a3, $a3, -288 │ │ │ │ addi.d $a2, $a2, 633 │ │ │ │ addi.d $a1, $a1, 601 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 1800 │ │ │ │ bl 38264 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2424871,16 +2424871,16 @@ │ │ │ │ addi.d $a1, $a1, -1016 │ │ │ │ addi.d $a0, $a0, 697 │ │ │ │ bl -9338200 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 809 │ │ │ │ addi.d $a4, $a4, -1232 │ │ │ │ - pcalau12i $a3, 830 │ │ │ │ - addi.d $a3, $a3, -1200 │ │ │ │ + pcalau12i $a3, 819 │ │ │ │ + addi.d $a3, $a3, 416 │ │ │ │ addi.d $a2, $a2, 697 │ │ │ │ addi.d $a1, $a1, 665 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 1880 │ │ │ │ bl 38172 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2424894,16 +2424894,16 @@ │ │ │ │ addi.d $a1, $a1, -968 │ │ │ │ addi.d $a0, $a0, 761 │ │ │ │ bl -9338292 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 809 │ │ │ │ addi.d $a4, $a4, 512 │ │ │ │ - pcalau12i $a3, 820 │ │ │ │ - addi.d $a3, $a3, -1776 │ │ │ │ + pcalau12i $a3, 839 │ │ │ │ + addi.d $a3, $a3, -624 │ │ │ │ addi.d $a2, $a2, 761 │ │ │ │ addi.d $a1, $a1, 729 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 1960 │ │ │ │ bl 38080 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2424917,16 +2424917,16 @@ │ │ │ │ addi.d $a1, $a1, -1832 │ │ │ │ addi.d $a0, $a0, 825 │ │ │ │ bl -9338384 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 802 │ │ │ │ addi.d $a4, $a4, 1440 │ │ │ │ - pcalau12i $a3, 845 │ │ │ │ - addi.d $a3, $a3, 1200 │ │ │ │ + pcalau12i $a3, 816 │ │ │ │ + addi.d $a3, $a3, 304 │ │ │ │ addi.d $a2, $a2, 825 │ │ │ │ addi.d $a1, $a1, 793 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, 2040 │ │ │ │ bl 37988 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2424940,16 +2424940,16 @@ │ │ │ │ addi.d $a1, $a1, -1832 │ │ │ │ addi.d $a0, $a0, 889 │ │ │ │ bl -9338476 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 802 │ │ │ │ addi.d $a4, $a4, 1440 │ │ │ │ - pcalau12i $a3, 845 │ │ │ │ - addi.d $a3, $a3, 1200 │ │ │ │ + pcalau12i $a3, 816 │ │ │ │ + addi.d $a3, $a3, 304 │ │ │ │ addi.d $a2, $a2, 889 │ │ │ │ addi.d $a1, $a1, 857 │ │ │ │ pcalau12i $a0, 1375 │ │ │ │ addi.d $a0, $a0, -1976 │ │ │ │ bl 37896 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425009,16 +2425009,16 @@ │ │ │ │ addi.d $a1, $a1, -864 │ │ │ │ addi.d $a0, $a0, 1081 │ │ │ │ bl -9338752 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 811 │ │ │ │ addi.d $a4, $a4, -736 │ │ │ │ - pcalau12i $a3, 817 │ │ │ │ - addi.d $a3, $a3, 1072 │ │ │ │ + pcalau12i $a3, 841 │ │ │ │ + addi.d $a3, $a3, -1056 │ │ │ │ addi.d $a2, $a2, 1081 │ │ │ │ addi.d $a1, $a1, 1049 │ │ │ │ pcalau12i $a0, 1375 │ │ │ │ addi.d $a0, $a0, -1736 │ │ │ │ bl 37620 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425032,16 +2425032,16 @@ │ │ │ │ addi.d $a1, $a1, -824 │ │ │ │ addi.d $a0, $a0, 1145 │ │ │ │ bl -9338844 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 811 │ │ │ │ addi.d $a4, $a4, 304 │ │ │ │ - pcalau12i $a3, 818 │ │ │ │ - addi.d $a3, $a3, 1424 │ │ │ │ + pcalau12i $a3, 843 │ │ │ │ + addi.d $a3, $a3, 1744 │ │ │ │ addi.d $a2, $a2, 1145 │ │ │ │ addi.d $a1, $a1, 1113 │ │ │ │ pcalau12i $a0, 1375 │ │ │ │ addi.d $a0, $a0, -1656 │ │ │ │ bl 37528 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425055,16 +2425055,16 @@ │ │ │ │ addi.d $a1, $a1, -776 │ │ │ │ addi.d $a0, $a0, 1209 │ │ │ │ bl -9338936 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 811 │ │ │ │ addi.d $a4, $a4, 1456 │ │ │ │ - pcalau12i $a3, 818 │ │ │ │ - addi.d $a3, $a3, -784 │ │ │ │ + pcalau12i $a3, 829 │ │ │ │ + addi.d $a3, $a3, -1440 │ │ │ │ addi.d $a2, $a2, 1209 │ │ │ │ addi.d $a1, $a1, 1177 │ │ │ │ pcalau12i $a0, 1375 │ │ │ │ addi.d $a0, $a0, -1576 │ │ │ │ bl 37436 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425078,16 +2425078,16 @@ │ │ │ │ addi.d $a1, $a1, -752 │ │ │ │ addi.d $a0, $a0, 1273 │ │ │ │ bl -9339028 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 812 │ │ │ │ addi.d $a4, $a4, -1712 │ │ │ │ - pcalau12i $a3, 818 │ │ │ │ - addi.d $a3, $a3, -784 │ │ │ │ + pcalau12i $a3, 829 │ │ │ │ + addi.d $a3, $a3, -1440 │ │ │ │ addi.d $a2, $a2, 1273 │ │ │ │ addi.d $a1, $a1, 1241 │ │ │ │ pcalau12i $a0, 1375 │ │ │ │ addi.d $a0, $a0, -1496 │ │ │ │ bl 37344 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425101,16 +2425101,16 @@ │ │ │ │ addi.d $a1, $a1, -1952 │ │ │ │ addi.d $a0, $a0, 1337 │ │ │ │ bl -9339120 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 801 │ │ │ │ addi.d $a4, $a4, 1440 │ │ │ │ - pcalau12i $a3, 821 │ │ │ │ - addi.d $a3, $a3, -784 │ │ │ │ + pcalau12i $a3, 827 │ │ │ │ + addi.d $a3, $a3, -272 │ │ │ │ addi.d $a2, $a2, 1337 │ │ │ │ addi.d $a1, $a1, 1305 │ │ │ │ pcalau12i $a0, 1375 │ │ │ │ addi.d $a0, $a0, -1416 │ │ │ │ bl 37252 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425124,16 +2425124,16 @@ │ │ │ │ addi.d $a1, $a1, -1912 │ │ │ │ addi.d $a0, $a0, 1401 │ │ │ │ bl -9339212 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 802 │ │ │ │ addi.d $a4, $a4, -944 │ │ │ │ - pcalau12i $a3, 839 │ │ │ │ - addi.d $a3, $a3, 1680 │ │ │ │ + pcalau12i $a3, 823 │ │ │ │ + addi.d $a3, $a3, -192 │ │ │ │ addi.d $a2, $a2, 1401 │ │ │ │ addi.d $a1, $a1, 1369 │ │ │ │ pcalau12i $a0, 1375 │ │ │ │ addi.d $a0, $a0, -1336 │ │ │ │ bl 37160 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425147,16 +2425147,16 @@ │ │ │ │ addi.d $a1, $a1, -1872 │ │ │ │ addi.d $a0, $a0, 1465 │ │ │ │ bl -9339304 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 802 │ │ │ │ addi.d $a4, $a4, 192 │ │ │ │ - pcalau12i $a3, 825 │ │ │ │ - addi.d $a3, $a3, 880 │ │ │ │ + pcalau12i $a3, 822 │ │ │ │ + addi.d $a3, $a3, -1408 │ │ │ │ addi.d $a2, $a2, 1465 │ │ │ │ addi.d $a1, $a1, 1433 │ │ │ │ pcalau12i $a0, 1375 │ │ │ │ addi.d $a0, $a0, -1256 │ │ │ │ bl 37068 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425170,16 +2425170,16 @@ │ │ │ │ addi.d $a1, $a1, -1832 │ │ │ │ addi.d $a0, $a0, 1529 │ │ │ │ bl -9339396 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 802 │ │ │ │ addi.d $a4, $a4, 1440 │ │ │ │ - pcalau12i $a3, 846 │ │ │ │ - addi.d $a3, $a3, -128 │ │ │ │ + pcalau12i $a3, 845 │ │ │ │ + addi.d $a3, $a3, 944 │ │ │ │ addi.d $a2, $a2, 1529 │ │ │ │ addi.d $a1, $a1, 1497 │ │ │ │ pcalau12i $a0, 1375 │ │ │ │ addi.d $a0, $a0, -1176 │ │ │ │ bl 36976 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425193,16 +2425193,16 @@ │ │ │ │ addi.d $a1, $a1, -1832 │ │ │ │ addi.d $a0, $a0, 1593 │ │ │ │ bl -9339488 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 802 │ │ │ │ addi.d $a4, $a4, 1440 │ │ │ │ - pcalau12i $a3, 846 │ │ │ │ - addi.d $a3, $a3, -128 │ │ │ │ + pcalau12i $a3, 845 │ │ │ │ + addi.d $a3, $a3, 944 │ │ │ │ addi.d $a2, $a2, 1593 │ │ │ │ addi.d $a1, $a1, 1561 │ │ │ │ pcalau12i $a0, 1375 │ │ │ │ addi.d $a0, $a0, -1096 │ │ │ │ bl 36884 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425216,16 +2425216,16 @@ │ │ │ │ addi.d $a1, $a1, -1832 │ │ │ │ addi.d $a0, $a0, 1657 │ │ │ │ bl -9339580 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 802 │ │ │ │ addi.d $a4, $a4, 1440 │ │ │ │ - pcalau12i $a3, 846 │ │ │ │ - addi.d $a3, $a3, -128 │ │ │ │ + pcalau12i $a3, 845 │ │ │ │ + addi.d $a3, $a3, 944 │ │ │ │ addi.d $a2, $a2, 1657 │ │ │ │ addi.d $a1, $a1, 1625 │ │ │ │ pcalau12i $a0, 1375 │ │ │ │ addi.d $a0, $a0, -1016 │ │ │ │ bl 36792 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425239,16 +2425239,16 @@ │ │ │ │ addi.d $a1, $a1, -1832 │ │ │ │ addi.d $a0, $a0, 1721 │ │ │ │ bl -9339672 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 801 │ │ │ │ addi.d $a4, $a4, 1440 │ │ │ │ - pcalau12i $a3, 845 │ │ │ │ - addi.d $a3, $a3, -128 │ │ │ │ + pcalau12i $a3, 844 │ │ │ │ + addi.d $a3, $a3, 944 │ │ │ │ addi.d $a2, $a2, 1721 │ │ │ │ addi.d $a1, $a1, 1689 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, -936 │ │ │ │ bl 36700 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425262,16 +2425262,16 @@ │ │ │ │ addi.d $a1, $a1, -1792 │ │ │ │ addi.d $a0, $a0, 1785 │ │ │ │ bl -9339764 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 802 │ │ │ │ addi.d $a4, $a4, -1232 │ │ │ │ - pcalau12i $a3, 836 │ │ │ │ - addi.d $a3, $a3, 1440 │ │ │ │ + pcalau12i $a3, 835 │ │ │ │ + addi.d $a3, $a3, 1520 │ │ │ │ addi.d $a2, $a2, 1785 │ │ │ │ addi.d $a1, $a1, 1753 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, -856 │ │ │ │ bl 36608 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425285,16 +2425285,16 @@ │ │ │ │ addi.d $a1, $a1, -1792 │ │ │ │ addi.d $a0, $a0, 1849 │ │ │ │ bl -9339856 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 802 │ │ │ │ addi.d $a4, $a4, -1232 │ │ │ │ - pcalau12i $a3, 835 │ │ │ │ - addi.d $a3, $a3, -240 │ │ │ │ + pcalau12i $a3, 821 │ │ │ │ + addi.d $a3, $a3, 1152 │ │ │ │ addi.d $a2, $a2, 1849 │ │ │ │ addi.d $a1, $a1, 1817 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, -776 │ │ │ │ bl 36516 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425308,16 +2425308,16 @@ │ │ │ │ addi.d $a1, $a1, -544 │ │ │ │ addi.d $a0, $a0, 1913 │ │ │ │ bl -9339948 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 811 │ │ │ │ addi.d $a4, $a4, -768 │ │ │ │ - pcalau12i $a3, 840 │ │ │ │ - addi.d $a3, $a3, 944 │ │ │ │ + pcalau12i $a3, 842 │ │ │ │ + addi.d $a3, $a3, -1520 │ │ │ │ addi.d $a2, $a2, 1913 │ │ │ │ addi.d $a1, $a1, 1881 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, -696 │ │ │ │ bl 36424 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425331,16 +2425331,16 @@ │ │ │ │ addi.d $a1, $a1, -504 │ │ │ │ addi.d $a0, $a0, 1977 │ │ │ │ bl -9340040 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 811 │ │ │ │ addi.d $a4, $a4, 1200 │ │ │ │ - pcalau12i $a3, 842 │ │ │ │ - addi.d $a3, $a3, -960 │ │ │ │ + pcalau12i $a3, 843 │ │ │ │ + addi.d $a3, $a3, 16 │ │ │ │ addi.d $a2, $a2, 1977 │ │ │ │ addi.d $a1, $a1, 1945 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, -616 │ │ │ │ bl 36332 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ addi.d $a0, $sp, 2047 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425354,16 +2425354,16 @@ │ │ │ │ addi.d $a1, $a1, -456 │ │ │ │ addi.d $a0, $a0, 2041 │ │ │ │ bl -9340132 │ │ │ │ addi.d $a2, $sp, 2047 │ │ │ │ addi.d $a1, $sp, 2047 │ │ │ │ pcalau12i $a4, 812 │ │ │ │ addi.d $a4, $a4, -1744 │ │ │ │ - pcalau12i $a3, 841 │ │ │ │ - addi.d $a3, $a3, 112 │ │ │ │ + pcalau12i $a3, 813 │ │ │ │ + addi.d $a3, $a3, 640 │ │ │ │ addi.d $a2, $a2, 2041 │ │ │ │ addi.d $a1, $a1, 2009 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, -536 │ │ │ │ bl 36240 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ lu12i.w $t0, 1 │ │ │ │ ori $t0, $t0, 0x18 │ │ │ │ @@ -2425382,16 +2425382,16 @@ │ │ │ │ lu12i.w $t0, 1 │ │ │ │ ori $t0, $t0, 0x38 │ │ │ │ add.d $a2, $sp, $t0 │ │ │ │ lu12i.w $t0, 1 │ │ │ │ ori $t0, $t0, 0x18 │ │ │ │ pcalau12i $a4, 812 │ │ │ │ addi.d $a4, $a4, -224 │ │ │ │ - pcalau12i $a3, 840 │ │ │ │ - addi.d $a3, $a3, -1744 │ │ │ │ + pcalau12i $a3, 837 │ │ │ │ + addi.d $a3, $a3, -1328 │ │ │ │ add.d $a1, $sp, $t0 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, -456 │ │ │ │ bl 36132 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ lu12i.w $t0, 1 │ │ │ │ ori $t0, $t0, 0x58 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425409,16 +2425409,16 @@ │ │ │ │ lu12i.w $t0, 1 │ │ │ │ ori $t0, $t0, 0x78 │ │ │ │ add.d $a2, $sp, $t0 │ │ │ │ lu12i.w $t0, 1 │ │ │ │ ori $t0, $t0, 0x58 │ │ │ │ pcalau12i $a4, 812 │ │ │ │ addi.d $a4, $a4, 592 │ │ │ │ - pcalau12i $a3, 840 │ │ │ │ - addi.d $a3, $a3, -1744 │ │ │ │ + pcalau12i $a3, 837 │ │ │ │ + addi.d $a3, $a3, -1328 │ │ │ │ add.d $a1, $sp, $t0 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, -376 │ │ │ │ bl 36024 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ lu12i.w $t0, 1 │ │ │ │ ori $t0, $t0, 0x98 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425434,18 +2425434,18 @@ │ │ │ │ add.d $a0, $sp, $t0 │ │ │ │ bl -9340448 │ │ │ │ lu12i.w $t0, 1 │ │ │ │ ori $t0, $t0, 0xb8 │ │ │ │ add.d $a2, $sp, $t0 │ │ │ │ lu12i.w $t0, 1 │ │ │ │ ori $t0, $t0, 0x98 │ │ │ │ - pcalau12i $a4, 833 │ │ │ │ - addi.d $a4, $a4, -1216 │ │ │ │ - pcalau12i $a3, 833 │ │ │ │ - addi.d $a3, $a3, 896 │ │ │ │ + pcalau12i $a4, 837 │ │ │ │ + addi.d $a4, $a4, 1360 │ │ │ │ + pcalau12i $a3, 831 │ │ │ │ + addi.d $a3, $a3, -1008 │ │ │ │ add.d $a1, $sp, $t0 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, -296 │ │ │ │ bl 35916 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ lu12i.w $t0, 1 │ │ │ │ ori $t0, $t0, 0xd8 │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ @@ -2425461,18 +2425461,18 @@ │ │ │ │ addi.d $a2, $sp, 504 │ │ │ │ pcalau12i $a1, 660 │ │ │ │ addi.d $a1, $a1, -288 │ │ │ │ move $a0, $t0 │ │ │ │ st.d $t0, $sp, 16 │ │ │ │ bl -9340572 │ │ │ │ ld.d $a2, $sp, 16 │ │ │ │ - pcalau12i $a4, 831 │ │ │ │ - addi.d $a4, $a4, -992 │ │ │ │ - pcalau12i $a3, 832 │ │ │ │ - addi.d $a3, $a3, 304 │ │ │ │ + pcalau12i $a4, 829 │ │ │ │ + addi.d $a4, $a4, -816 │ │ │ │ + pcalau12i $a3, 838 │ │ │ │ + addi.d $a3, $a3, 1808 │ │ │ │ move $a1, $s8 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, -216 │ │ │ │ bl 35808 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ lu12i.w $t0, 1 │ │ │ │ ori $t0, $t0, 0x118 │ │ │ │ add.d $t0, $sp, $t0 │ │ │ │ @@ -2425490,16 +2425490,16 @@ │ │ │ │ add.d $a0, $sp, $t0 │ │ │ │ stptr.d $s7, $sp, 4528 │ │ │ │ add.d $s7, $sp, $t0 │ │ │ │ bl -9340680 │ │ │ │ ld.d $a1, $sp, 24 │ │ │ │ pcalau12i $a4, 812 │ │ │ │ addi.d $a4, $a4, 1424 │ │ │ │ - pcalau12i $a3, 834 │ │ │ │ - addi.d $a3, $a3, -896 │ │ │ │ + pcalau12i $a3, 827 │ │ │ │ + addi.d $a3, $a3, -1664 │ │ │ │ move $a2, $s7 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, -136 │ │ │ │ bl 35700 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ lu12i.w $t0, 1 │ │ │ │ ori $t0, $t0, 0x158 │ │ │ │ stptr.d $s2, $sp, 4568 │ │ │ │ @@ -2425520,16 +2425520,16 @@ │ │ │ │ addi.d $a1, $a1, -208 │ │ │ │ move $a0, $s3 │ │ │ │ stptr.d $fp, $sp, 4592 │ │ │ │ move $fp, $s3 │ │ │ │ bl -9340804 │ │ │ │ pcalau12i $a4, 813 │ │ │ │ addi.d $a4, $a4, -752 │ │ │ │ - pcalau12i $a3, 822 │ │ │ │ - addi.d $a3, $a3, 1536 │ │ │ │ + pcalau12i $a3, 818 │ │ │ │ + addi.d $a3, $a3, -1744 │ │ │ │ move $a2, $s3 │ │ │ │ move $a1, $s2 │ │ │ │ pcalau12i $a0, 1374 │ │ │ │ addi.d $a0, $a0, -56 │ │ │ │ bl 35576 # 9c6fa0 std::__format::__do_vformat_to(std::__format::_Sink_iter, std::basic_string_view >, std::basic_format_context, char>&)@@Base+0x28ab40> │ │ │ │ pcalau12i $a2, 1367 │ │ │ │ addi.d $a2, $a2, 1624 │ │ │ │ @@ -2798265,15 +2798265,15 @@ │ │ │ │ move $a0, $s0 │ │ │ │ ldptr.d $s0, $sp, 0 │ │ │ │ addi.d $sp, $sp, 16 │ │ │ │ ret │ │ │ │ nop │ │ │ │ nop │ │ │ │ lu12i.w $a0, 63 │ │ │ │ - ori $a0, $a0, 0xb94 │ │ │ │ + ori $a0, $a0, 0xb9a │ │ │ │ ret │ │ │ │ nop │ │ │ │ addi.d $sp, $sp, -16 │ │ │ │ move $a3, $zero │ │ │ │ li.w $a1, 17 │ │ │ │ pcaddi $a2, 288643 │ │ │ │ stptr.d $s0, $sp, 0 │ │ │ ├── readelf --wide --decompress --hex-dump=.rodata {} │ │ │ │ @@ -19462,15 +19462,15 @@ │ │ │ │ 0x00c5d430 466f6c6c 6f770000 466f6c6c 6f77416e Follow..FollowAn │ │ │ │ 0x00c5d440 64526f74 61746500 50656e64 696e6700 dRotate.Pending. │ │ │ │ 0x00c5d450 554b5f45 6e676c61 6e640000 00000000 UK_England...... │ │ │ │ 0x00c5d460 554b5f53 636f746c 616e6400 00000000 UK_Scotland..... │ │ │ │ 0x00c5d470 49736c65 206f6620 4d616e00 00000000 Isle of Man..... │ │ │ │ 0x00c5d480 53414a53 414a0000 46414641 46410000 SAJSAJ..FAFAFA.. │ │ │ │ 0x00c5d490 25456300 00000000 32303236 2e31302e %Ec.....2026.10. │ │ │ │ - 0x00c5d4a0 31322d30 2d303030 30303030 302d4c69 12-0-00000000-Li │ │ │ │ + 0x00c5d4a0 31382d30 2d303030 30303030 302d4c69 18-0-00000000-Li │ │ │ │ 0x00c5d4b0 6e757800 00000000 2e6f7065 6e737472 nux......openstr │ │ │ │ 0x00c5d4c0 6565746d 61702e6f 72670000 00000000 eetmap.org...... │ │ │ │ 0x00c5d4d0 3136322e 35352e31 30302e31 36390000 162.55.100.169.. │ │ │ │ 0x00c5d4e0 2f757372 2f736861 72652f66 6f6e7473 /usr/share/fonts │ │ │ │ 0x00c5d4f0 2f747275 65747970 652f726f 626f746f /truetype/roboto │ │ │ │ 0x00c5d500 2f000000 00000000 2f757372 2f736861 /......./usr/sha │ │ │ │ 0x00c5d510 72652f66 6f6e7473 2f747275 65747970 re/fonts/truetyp │ │ │ │ @@ -55801,8313 +55801,8313 @@ │ │ │ │ 0x00ceb360 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ 0x00ceb370 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ 0x00ceb380 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ 0x00ceb390 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ 0x00ceb3a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ 0x00ceb3b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ 0x00ceb3c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00ceb3d0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00ceb3e0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00ceb3f0 72546578 436f6f72 64733b20 0a202023 rTexCoords; . # │ │ │ │ - 0x00ceb400 69666465 6620454e 41424c45 5f565446 ifdef ENABLE_VTF │ │ │ │ - 0x00ceb410 200a2020 6f757420 4c4f575f 50207665 . out LOW_P ve │ │ │ │ - 0x00ceb420 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ - 0x00ceb430 656c7365 200a2020 6f757420 76656332 else . out vec2 │ │ │ │ - 0x00ceb440 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ - 0x00ceb450 733b200a 20202365 6e646966 200a2020 s; . #endif . │ │ │ │ - 0x00ceb460 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00ceb470 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00ceb480 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00ceb490 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00ceb4a0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00ceb4b0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00ceb4c0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00ceb4d0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00ceb4e0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00ceb4f0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00ceb500 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00ceb510 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00ceb520 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00ceb530 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00ceb540 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00ceb550 50617373 3b200a20 20236966 64656620 Pass; . #ifdef │ │ │ │ - 0x00ceb560 454e4142 4c455f56 5446200a 2020756e ENABLE_VTF . un │ │ │ │ - 0x00ceb570 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ - 0x00ceb580 755f636f 6c6f7254 65783b20 0a202023 u_colorTex; . # │ │ │ │ - 0x00ceb590 656e6469 66200a20 20636f6e 73742066 endif . const f │ │ │ │ - 0x00ceb5a0 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ - 0x00ceb5b0 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ - 0x00ceb5c0 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ - 0x00ceb5d0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00ceb5e0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00ceb5f0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00ceb600 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ - 0x00ceb610 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ - 0x00ceb620 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ - 0x00ceb630 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ - 0x00ceb640 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ - 0x00ceb650 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ - 0x00ceb660 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00ceb670 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ - 0x00ceb680 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ - 0x00ceb690 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00ceb6a0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00ceb6b0 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ - 0x00ceb6c0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00ceb6d0 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ - 0x00ceb6e0 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ - 0x00ceb6f0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00ceb700 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00ceb710 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ - 0x00ceb720 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ - 0x00ceb730 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00ceb740 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ - 0x00ceb750 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ - 0x00ceb760 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ - 0x00ceb770 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ - 0x00ceb780 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ - 0x00ceb790 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ - 0x00ceb7a0 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ - 0x00ceb7b0 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ - 0x00ceb7c0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00ceb7d0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00ceb7e0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00ceb7f0 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ - 0x00ceb800 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ - 0x00ceb810 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ - 0x00ceb820 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ - 0x00ceb830 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ - 0x00ceb840 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00ceb850 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00ceb860 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ - 0x00ceb870 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ - 0x00ceb880 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ - 0x00ceb890 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ - 0x00ceb8a0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00ceb8b0 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ - 0x00ceb8c0 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ - 0x00ceb8d0 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ - 0x00ceb8e0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00ceb8f0 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ - 0x00ceb900 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ - 0x00ceb910 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ - 0x00ceb920 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ - 0x00ceb930 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ - 0x00ceb940 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00ceb950 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ - 0x00ceb960 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ - 0x00ceb970 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ - 0x00ceb980 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ - 0x00ceb990 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ - 0x00ceb9a0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00ceb9b0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00ceb9c0 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ - 0x00ceb9d0 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ - 0x00ceb9e0 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ - 0x00ceb9f0 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ - 0x00ceba00 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ - 0x00ceba10 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ - 0x00ceba20 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ - 0x00ceba30 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ - 0x00ceba40 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ - 0x00ceba50 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ - 0x00ceba60 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ - 0x00ceba70 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ - 0x00ceba80 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ - 0x00ceba90 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00cebaa0 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ - 0x00cebab0 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ - 0x00cebac0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00cebad0 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ - 0x00cebae0 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ - 0x00cebaf0 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ - 0x00cebb00 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00cebb10 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ - 0x00cebb20 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00cebb30 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ - 0x00cebb40 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ - 0x00cebb50 696f6e2c 20312920 2a20755f 6d6f6465 ion, 1) * u_mode │ │ │ │ - 0x00cebb60 6c566965 77202a20 755f7072 6f6a6563 lView * u_projec │ │ │ │ - 0x00cebb70 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ - 0x00cebb80 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ - 0x00cebb90 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ - 0x00cebba0 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ - 0x00cebbb0 726d2c20 302e3029 3b200a20 20236966 rm, 0.0); . #if │ │ │ │ - 0x00cebbc0 64656620 454e4142 4c455f56 5446200a def ENABLE_VTF . │ │ │ │ - 0x00cebbd0 20202020 765f636f 6c6f7220 3d207465 v_color = te │ │ │ │ - 0x00cebbe0 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ - 0x00cebbf0 2c20615f 636f6c6f 72546578 436f6f72 , a_colorTexCoor │ │ │ │ - 0x00cebc00 6473293b 200a2020 23656c73 65200a20 ds); . #else . │ │ │ │ - 0x00cebc10 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00cebc20 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ - 0x00cebc30 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ - 0x00cebc40 66200a20 207d200a 00000000 00000000 f . } ......... │ │ │ │ - 0x00cebc50 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cebc60 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cebc70 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cebc80 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cebc90 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cebca0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cebcb0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cebcc0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cebcd0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cebce0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cebcf0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cebd00 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cebd10 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cebd20 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cebd30 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cebd40 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cebd50 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cebd60 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cebd70 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cebd80 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cebd90 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cebda0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00cebdb0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00cebdc0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00cebdd0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00cebde0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00cebdf0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00cebe00 20206f75 7420666c 6f617420 765f696e out float v_in │ │ │ │ - 0x00cebe10 74656e73 6974793b 200a2020 756e6966 tensity; . unif │ │ │ │ - 0x00cebe20 6f726d20 6d617434 20755f6d 6f64656c orm mat4 u_model │ │ │ │ - 0x00cebe30 56696577 3b200a20 20756e69 666f726d View; . uniform │ │ │ │ - 0x00cebe40 206d6174 3420755f 70726f6a 65637469 mat4 u_projecti │ │ │ │ - 0x00cebe50 6f6e3b20 0a202075 6e69666f 726d206d on; . uniform m │ │ │ │ - 0x00cebe60 61743420 755f7069 766f7454 72616e73 at4 u_pivotTrans │ │ │ │ - 0x00cebe70 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ - 0x00cebe80 20766563 3220755f 636f6e74 72617374 vec2 u_contrast │ │ │ │ - 0x00cebe90 47616d6d 613b200a 2020756e 69666f72 Gamma; . unifor │ │ │ │ - 0x00cebea0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00cebeb0 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ - 0x00cebec0 6f617420 755f7a53 63616c65 3b200a20 oat u_zScale; . │ │ │ │ - 0x00cebed0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00cebee0 5f696e74 6572706f 6c617469 6f6e3b20 _interpolation; │ │ │ │ - 0x00cebef0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00cebf00 20755f69 734f7574 6c696e65 50617373 u_isOutlinePass │ │ │ │ - 0x00cebf10 3b200a20 20636f6e 73742076 65633420 ; . const vec4 │ │ │ │ - 0x00cebf20 6b4e6f72 6d616c69 7a65644c 69676874 kNormalizedLight │ │ │ │ - 0x00cebf30 44697220 3d207665 63342830 2e333136 Dir = vec4(0.316 │ │ │ │ - 0x00cebf40 322c2030 2e302c20 302e3934 38362c20 2, 0.0, 0.9486, │ │ │ │ - 0x00cebf50 302e3029 3b200a20 20636f6e 73742066 0.0); . const f │ │ │ │ - 0x00cebf60 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ - 0x00cebf70 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ - 0x00cebf80 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ - 0x00cebf90 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00cebfa0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00cebfb0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00cebfc0 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ - 0x00cebfd0 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ - 0x00cebfe0 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ - 0x00cebff0 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ - 0x00cec000 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ - 0x00cec010 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ - 0x00cec020 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cec030 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ - 0x00cec040 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ - 0x00cec050 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cec060 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00cec070 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ - 0x00cec080 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00cec090 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ - 0x00cec0a0 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ - 0x00cec0b0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00cec0c0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00cec0d0 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ - 0x00cec0e0 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ - 0x00cec0f0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cec100 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ - 0x00cec110 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ - 0x00cec120 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ - 0x00cec130 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ - 0x00cec140 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ - 0x00cec150 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ - 0x00cec160 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ - 0x00cec170 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ - 0x00cec180 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00cec190 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00cec1a0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00cec1b0 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ - 0x00cec1c0 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ - 0x00cec1d0 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ - 0x00cec1e0 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ - 0x00cec1f0 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ - 0x00cec200 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cec210 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00cec220 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ - 0x00cec230 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ - 0x00cec240 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ - 0x00cec250 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ - 0x00cec260 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00cec270 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ - 0x00cec280 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ - 0x00cec290 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ - 0x00cec2a0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00cec2b0 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ - 0x00cec2c0 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ - 0x00cec2d0 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ - 0x00cec2e0 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ - 0x00cec2f0 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ - 0x00cec300 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00cec310 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ - 0x00cec320 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ - 0x00cec330 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ - 0x00cec340 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ - 0x00cec350 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ - 0x00cec360 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00cec370 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00cec380 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ - 0x00cec390 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ - 0x00cec3a0 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ - 0x00cec3b0 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ - 0x00cec3c0 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ - 0x00cec3d0 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ - 0x00cec3e0 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ - 0x00cec3f0 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ - 0x00cec400 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ - 0x00cec410 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ - 0x00cec420 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ - 0x00cec430 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ - 0x00cec440 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ - 0x00cec450 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00cec460 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ - 0x00cec470 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ - 0x00cec480 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00cec490 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ - 0x00cec4a0 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ - 0x00cec4b0 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ - 0x00cec4c0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00cec4d0 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ - 0x00cec4e0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00cec4f0 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ - 0x00cec500 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ - 0x00cec510 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ - 0x00cec520 64656c56 6965773b 200a2020 20207665 delView; . ve │ │ │ │ - 0x00cec530 6334206e 6f726d61 6c203d20 76656334 c4 normal = vec4 │ │ │ │ - 0x00cec540 28615f70 6f736974 696f6e20 2b20615f (a_position + a_ │ │ │ │ - 0x00cec550 6e6f726d 616c2c20 312e3029 202a2075 normal, 1.0) * u │ │ │ │ - 0x00cec560 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ - 0x00cec570 206e6f72 6d616c2e 78797720 3d20286e normal.xyw = (n │ │ │ │ - 0x00cec580 6f726d61 6c202a20 755f7072 6f6a6563 ormal * u_projec │ │ │ │ - 0x00cec590 74696f6e 292e7879 773b200a 20202020 tion).xyw; . │ │ │ │ - 0x00cec5a0 6e6f726d 616c2e7a 203d206e 6f726d61 normal.z = norma │ │ │ │ - 0x00cec5b0 6c2e7a20 2a20755f 7a536361 6c653b20 l.z * u_zScale; │ │ │ │ - 0x00cec5c0 0a202020 20706f73 2e787977 203d2028 . pos.xyw = ( │ │ │ │ - 0x00cec5d0 706f7320 2a20755f 70726f6a 65637469 pos * u_projecti │ │ │ │ - 0x00cec5e0 6f6e292e 7879773b 200a2020 2020706f on).xyw; . po │ │ │ │ - 0x00cec5f0 732e7a20 3d20615f 706f7369 74696f6e s.z = a_position │ │ │ │ - 0x00cec600 2e7a202a 20755f7a 5363616c 653b200a .z * u_zScale; . │ │ │ │ - 0x00cec610 20202020 76656334 206e6f72 6d446972 vec4 normDir │ │ │ │ - 0x00cec620 203d206e 6f726d61 6c202d20 706f733b = normal - pos; │ │ │ │ - 0x00cec630 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ - 0x00cec640 726d4469 722c206e 6f726d44 69722920 rmDir, normDir) │ │ │ │ - 0x00cec650 213d2030 2e302920 0a202020 20202076 != 0.0) . v │ │ │ │ - 0x00cec660 5f696e74 656e7369 7479203d 206d6178 _intensity = max │ │ │ │ - 0x00cec670 28302e30 2c202d64 6f74286b 4e6f726d (0.0, -dot(kNorm │ │ │ │ - 0x00cec680 616c697a 65644c69 67687444 69722c20 alizedLightDir, │ │ │ │ - 0x00cec690 6e6f726d 616c697a 65286e6f 726d4469 normalize(normDi │ │ │ │ - 0x00cec6a0 72292929 3b200a20 20202065 6c736520 r))); . else │ │ │ │ - 0x00cec6b0 0a202020 20202076 5f696e74 656e7369 . v_intensi │ │ │ │ - 0x00cec6c0 7479203d 20302e30 3b200a20 20202067 ty = 0.0; . g │ │ │ │ - 0x00cec6d0 6c5f506f 73697469 6f6e203d 20755f70 l_Position = u_p │ │ │ │ - 0x00cec6e0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00cec6f0 706f733b 200a2020 23696664 65662056 pos; . #ifdef V │ │ │ │ - 0x00cec700 554c4b41 4e200a20 20202067 6c5f506f ULKAN . gl_Po │ │ │ │ - 0x00cec710 73697469 6f6e2e79 203d202d 676c5f50 sition.y = -gl_P │ │ │ │ - 0x00cec720 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ - 0x00cec730 676c5f50 6f736974 696f6e2e 7a203d20 gl_Position.z = │ │ │ │ - 0x00cec740 28676c5f 506f7369 74696f6e 2e7a2020 (gl_Position.z │ │ │ │ - 0x00cec750 2b20676c 5f506f73 6974696f 6e2e7729 + gl_Position.w) │ │ │ │ - 0x00cec760 202a2030 2e353b20 0a202023 656e6469 * 0.5; . #endi │ │ │ │ - 0x00cec770 66200a20 20202076 5f636f6c 6f725465 f . v_colorTe │ │ │ │ - 0x00cec780 78436f6f 72647320 3d20615f 636f6c6f xCoords = a_colo │ │ │ │ - 0x00cec790 72546578 436f6f72 64733b20 0a20207d rTexCoords; . } │ │ │ │ - 0x00cec7a0 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00cec7b0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cec7c0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cec7d0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cec7e0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cec7f0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cec800 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cec810 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cec820 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cec830 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cec840 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cec850 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cec860 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cec870 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cec880 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cec890 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cec8a0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cec8b0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cec8c0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cec8d0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cec8e0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cec8f0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cec900 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00cec910 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00cec920 72546578 436f6f72 64733b20 0a202023 rTexCoords; . # │ │ │ │ - 0x00cec930 69666465 6620454e 41424c45 5f565446 ifdef ENABLE_VTF │ │ │ │ - 0x00cec940 200a2020 6f757420 4c4f575f 50207665 . out LOW_P ve │ │ │ │ - 0x00cec950 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ - 0x00cec960 656c7365 200a2020 6f757420 76656332 else . out vec2 │ │ │ │ - 0x00cec970 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ - 0x00cec980 733b200a 20202365 6e646966 200a2020 s; . #endif . │ │ │ │ - 0x00cec990 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00cec9a0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00cec9b0 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00cec9c0 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00cec9d0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00cec9e0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00cec9f0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00ceca00 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00ceca10 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00ceca20 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00ceca30 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00ceca40 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00ceca50 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00ceca60 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00ceca70 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00ceca80 50617373 3b200a20 20236966 64656620 Pass; . #ifdef │ │ │ │ - 0x00ceca90 454e4142 4c455f56 5446200a 2020756e ENABLE_VTF . un │ │ │ │ - 0x00cecaa0 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ - 0x00cecab0 755f636f 6c6f7254 65783b20 0a202023 u_colorTex; . # │ │ │ │ - 0x00cecac0 656e6469 66200a20 20636f6e 73742066 endif . const f │ │ │ │ - 0x00cecad0 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ - 0x00cecae0 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ - 0x00cecaf0 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ - 0x00cecb00 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00cecb10 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00cecb20 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00cecb30 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ - 0x00cecb40 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ - 0x00cecb50 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ - 0x00cecb60 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ - 0x00cecb70 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ - 0x00cecb80 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ - 0x00cecb90 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cecba0 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ - 0x00cecbb0 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ - 0x00cecbc0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cecbd0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00cecbe0 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ - 0x00cecbf0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00cecc00 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ - 0x00cecc10 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ - 0x00cecc20 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00cecc30 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00cecc40 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ - 0x00cecc50 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ - 0x00cecc60 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cecc70 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ - 0x00cecc80 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ - 0x00cecc90 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ - 0x00cecca0 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ - 0x00ceccb0 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ - 0x00ceccc0 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ - 0x00ceccd0 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ - 0x00cecce0 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ - 0x00ceccf0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00cecd00 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00cecd10 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00cecd20 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ - 0x00cecd30 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ - 0x00cecd40 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ - 0x00cecd50 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ - 0x00cecd60 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ - 0x00cecd70 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cecd80 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00cecd90 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ - 0x00cecda0 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ - 0x00cecdb0 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ - 0x00cecdc0 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ - 0x00cecdd0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00cecde0 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ - 0x00cecdf0 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ - 0x00cece00 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ - 0x00cece10 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00cece20 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ - 0x00cece30 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ - 0x00cece40 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ - 0x00cece50 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ - 0x00cece60 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ - 0x00cece70 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00cece80 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ - 0x00cece90 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ - 0x00cecea0 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ - 0x00ceceb0 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ - 0x00cecec0 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ - 0x00ceced0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00cecee0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00cecef0 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ - 0x00cecf00 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ - 0x00cecf10 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ - 0x00cecf20 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ - 0x00cecf30 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ - 0x00cecf40 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ - 0x00cecf50 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ - 0x00cecf60 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ - 0x00cecf70 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ - 0x00cecf80 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ - 0x00cecf90 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ - 0x00cecfa0 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ - 0x00cecfb0 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ - 0x00cecfc0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00cecfd0 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ - 0x00cecfe0 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ - 0x00cecff0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00ced000 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ - 0x00ced010 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ - 0x00ced020 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ - 0x00ced030 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00ced040 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ - 0x00ced050 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ - 0x00ced060 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ - 0x00ced070 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ - 0x00ced080 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ - 0x00ced090 64656c56 6965773b 200a2020 2020706f delView; . po │ │ │ │ - 0x00ced0a0 732e7879 77203d20 28706f73 202a2075 s.xyw = (pos * u │ │ │ │ - 0x00ced0b0 5f70726f 6a656374 696f6e29 2e787977 _projection).xyw │ │ │ │ - 0x00ced0c0 3b200a20 20202070 6f732e7a 203d2061 ; . pos.z = a │ │ │ │ - 0x00ced0d0 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ - 0x00ced0e0 7a536361 6c653b20 0a202020 20676c5f zScale; . gl_ │ │ │ │ - 0x00ced0f0 506f7369 74696f6e 203d2075 5f706976 Position = u_piv │ │ │ │ - 0x00ced100 6f745472 616e7366 6f726d20 2a20706f otTransform * po │ │ │ │ - 0x00ced110 733b200a 20202369 66646566 2056554c s; . #ifdef VUL │ │ │ │ - 0x00ced120 4b414e20 0a202020 20676c5f 506f7369 KAN . gl_Posi │ │ │ │ - 0x00ced130 74696f6e 2e79203d 202d676c 5f506f73 tion.y = -gl_Pos │ │ │ │ - 0x00ced140 6974696f 6e2e793b 200a2020 2020676c ition.y; . gl │ │ │ │ - 0x00ced150 5f506f73 6974696f 6e2e7a20 3d202867 _Position.z = (g │ │ │ │ - 0x00ced160 6c5f506f 73697469 6f6e2e7a 20202b20 l_Position.z + │ │ │ │ - 0x00ced170 676c5f50 6f736974 696f6e2e 7729202a gl_Position.w) * │ │ │ │ - 0x00ced180 20302e35 3b200a20 2023656e 64696620 0.5; . #endif │ │ │ │ - 0x00ced190 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ - 0x00ced1a0 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ - 0x00ced1b0 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ - 0x00ced1c0 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ - 0x00ced1d0 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ - 0x00ced1e0 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ - 0x00ced1f0 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ - 0x00ced200 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00ced210 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ - 0x00ced220 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00ced230 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00ced240 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00ced250 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00ced260 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00ced270 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00ced280 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00ced290 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00ced2a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00ced2b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00ced2c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00ced2d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00ced2e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00ced2f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00ced300 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00ced310 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00ced320 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00ced330 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00ced340 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00ced350 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00ced360 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00ced370 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00ced380 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00ced390 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00ced3a0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00ced3b0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00ced3c0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00ced3d0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00ced3e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00ced3f0 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ - 0x00ced400 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ - 0x00ced410 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ - 0x00ced420 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00ced430 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00ced440 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00ced450 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00ced460 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00ced470 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00ced480 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00ced490 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00ced4a0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00ced4b0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00ced4c0 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00ced4d0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00ced4e0 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00ced4f0 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00ced500 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00ced510 50617373 3b200a20 20636f6e 73742066 Pass; . const f │ │ │ │ - 0x00ced520 6c6f6174 206b4365 6c6c5078 203d2034 loat kCellPx = 4 │ │ │ │ - 0x00ced530 2e303b20 20202020 2020202f 2f206465 .0; // de │ │ │ │ - 0x00ced540 6e736572 20746861 6e207374 6970706c nser than stippl │ │ │ │ - 0x00ced550 65202864 69766964 65732074 68652031 e (divides the 1 │ │ │ │ - 0x00ced560 36707820 74696c65 2c20736f 2063656c 6px tile, so cel │ │ │ │ - 0x00ced570 6c732074 696c6520 7365616d 6c657373 ls tile seamless │ │ │ │ - 0x00ced580 6c792920 0a202063 6f6e7374 20666c6f ly) . const flo │ │ │ │ - 0x00ced590 6174206b 42617365 52616469 75735078 at kBaseRadiusPx │ │ │ │ - 0x00ced5a0 203d2030 2e373b20 0a202063 6f6e7374 = 0.7; . const │ │ │ │ - 0x00ced5b0 20666c6f 6174206b 52616469 75735661 float kRadiusVa │ │ │ │ - 0x00ced5c0 72203d20 302e363b 20202020 202f2f20 r = 0.6; // │ │ │ │ - 0x00ced5d0 7065722d 63656c6c 20726164 69757320 per-cell radius │ │ │ │ - 0x00ced5e0 76617269 6174696f 6e202d3e 20697272 variation -> irr │ │ │ │ - 0x00ced5f0 6567756c 61722073 697a6573 200a2020 egular sizes . │ │ │ │ - 0x00ced600 636f6e73 7420666c 6f617420 6b4a6974 const float kJit │ │ │ │ - 0x00ced610 74657220 3d20302e 353b2020 20202020 ter = 0.5; │ │ │ │ - 0x00ced620 20202f2f 206b6565 70206b4a 69747465 // keep kJitte │ │ │ │ - 0x00ced630 722a302e 352a6b43 656c6c50 78202b20 r*0.5*kCellPx + │ │ │ │ - 0x00ced640 6d617852 61646975 73203c20 6b43656c maxRadius < kCel │ │ │ │ - 0x00ced650 6c50782a 302e3520 0a202063 6f6e7374 lPx*0.5 . const │ │ │ │ - 0x00ced660 20666c6f 6174206b 4461726b 656e203d float kDarken = │ │ │ │ - 0x00ced670 20302e37 383b200a 2020666c 6f617420 0.78; . float │ │ │ │ - 0x00ced680 48617368 28766563 32207029 200a2020 Hash(vec2 p) . │ │ │ │ - 0x00ced690 7b200a20 20202070 203d2066 72616374 { . p = fract │ │ │ │ - 0x00ced6a0 2870202a 20766563 32283132 372e312c (p * vec2(127.1, │ │ │ │ - 0x00ced6b0 20333131 2e372929 3b200a20 20202070 311.7)); . p │ │ │ │ - 0x00ced6c0 202b3d20 646f7428 702c2070 202b2033 += dot(p, p + 3 │ │ │ │ - 0x00ced6d0 342e3233 293b200a 20202020 72657475 4.23); . retu │ │ │ │ - 0x00ced6e0 726e2066 72616374 28702e78 202a2070 rn fract(p.x * p │ │ │ │ - 0x00ced6f0 2e79293b 200a2020 7d200a20 20636f6e .y); . } . con │ │ │ │ - 0x00ced700 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00ced710 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00ced720 302e303b 200a2020 4c4f575f 50207665 0.0; . LOW_P ve │ │ │ │ - 0x00ced730 6333204d 6f64756c 61746542 79506174 c3 ModulateByPat │ │ │ │ - 0x00ced740 7465726e 446f7473 284c4f57 5f502076 ternDots(LOW_P v │ │ │ │ - 0x00ced750 65633320 636f6c6f 722c2066 6c6f6174 ec3 color, float │ │ │ │ - 0x00ced760 20646172 6b656e2c 20666c6f 61742063 darken, float c │ │ │ │ - 0x00ced770 6f766572 61676529 200a2020 7b200a20 overage) . { . │ │ │ │ - 0x00ced780 20202063 6f6e7374 20666c6f 6174206b const float k │ │ │ │ - 0x00ced790 4c696768 74656e20 3d20302e 3037353b Lighten = 0.075; │ │ │ │ - 0x00ced7a0 200a2020 20206966 2028646f 7428636f . if (dot(co │ │ │ │ - 0x00ced7b0 6c6f722c 20766563 3328302e 32313236 lor, vec3(0.2126 │ │ │ │ - 0x00ced7c0 2c20302e 37313532 2c20302e 30373232 , 0.7152, 0.0722 │ │ │ │ - 0x00ced7d0 2929203c 20302e35 29200a20 20202020 )) < 0.5) . │ │ │ │ - 0x00ced7e0 20726574 75726e20 636f6c6f 72202b20 return color + │ │ │ │ - 0x00ced7f0 636f7665 72616765 202a206b 4c696768 coverage * kLigh │ │ │ │ - 0x00ced800 74656e3b 200a2020 20207265 7475726e ten; . return │ │ │ │ - 0x00ced810 20636f6c 6f72202a 206d6978 28312e30 color * mix(1.0 │ │ │ │ - 0x00ced820 2c206461 726b656e 2c20636f 76657261 , darken, covera │ │ │ │ - 0x00ced830 6765293b 200a2020 7d200a20 20766f69 ge); . } . voi │ │ │ │ - 0x00ced840 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ - 0x00ced850 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ - 0x00ced860 5446200a 20202020 4c4f575f 50207665 TF . LOW_P ve │ │ │ │ - 0x00ced870 63342063 6f6c6f72 203d2076 5f636f6c c4 color = v_col │ │ │ │ - 0x00ced880 6f723b20 0a202023 656c7365 200a2020 or; . #else . │ │ │ │ - 0x00ced890 20204c4f 575f5020 76656334 20636f6c LOW_P vec4 col │ │ │ │ - 0x00ced8a0 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ - 0x00ced8b0 6f6c6f72 5465782c 20765f63 6f6c6f72 olorTex, v_color │ │ │ │ - 0x00ced8c0 54657843 6f6f7264 73293b20 0a202023 TexCoords); . # │ │ │ │ - 0x00ced8d0 656e6469 66200a20 20202076 65633220 endif . vec2 │ │ │ │ - 0x00ced8e0 7078203d 20765f6d 61736b54 6578436f px = v_maskTexCo │ │ │ │ - 0x00ced8f0 6f726473 202a2031 362e303b 200a2020 ords * 16.0; . │ │ │ │ - 0x00ced900 20207665 63322063 656c6c20 3d20666c vec2 cell = fl │ │ │ │ - 0x00ced910 6f6f7228 7078202f 206b4365 6c6c5078 oor(px / kCellPx │ │ │ │ - 0x00ced920 293b200a 20202020 76656332 20746f43 ); . vec2 toC │ │ │ │ - 0x00ced930 656e7465 72203d20 0a202020 20202020 enter = . │ │ │ │ - 0x00ced940 20286672 61637428 7078202f 206b4365 (fract(px / kCe │ │ │ │ - 0x00ced950 6c6c5078 29202d20 302e3529 202a206b llPx) - 0.5) * k │ │ │ │ - 0x00ced960 43656c6c 5078202d 20287665 63322848 CellPx - (vec2(H │ │ │ │ - 0x00ced970 61736828 63656c6c 292c2048 61736828 ash(cell), Hash( │ │ │ │ - 0x00ced980 63656c6c 202b2031 392e3729 29202d20 cell + 19.7)) - │ │ │ │ - 0x00ced990 302e3529 202a2028 6b4a6974 74657220 0.5) * (kJitter │ │ │ │ - 0x00ced9a0 2a206b43 656c6c50 78293b20 0a202020 * kCellPx); . │ │ │ │ - 0x00ced9b0 20666c6f 61742072 61646975 73203d20 float radius = │ │ │ │ - 0x00ced9c0 6b426173 65526164 69757350 78202a20 kBaseRadiusPx * │ │ │ │ - 0x00ced9d0 28312e30 202d206b 52616469 75735661 (1.0 - kRadiusVa │ │ │ │ - 0x00ced9e0 72202a20 302e3520 2b206b52 61646975 r * 0.5 + kRadiu │ │ │ │ - 0x00ced9f0 73566172 202a2048 61736828 63656c6c sVar * Hash(cell │ │ │ │ - 0x00ceda00 202b2033 2e372929 3b200a20 20202066 + 3.7)); . f │ │ │ │ - 0x00ceda10 6c6f6174 2064203d 206c656e 67746828 loat d = length( │ │ │ │ - 0x00ceda20 746f4365 6e746572 293b200a 20202020 toCenter); . │ │ │ │ - 0x00ceda30 666c6f61 74206161 203d206d 61782866 float aa = max(f │ │ │ │ - 0x00ceda40 77696474 68287078 2e78292c 20667769 width(px.x), fwi │ │ │ │ - 0x00ceda50 64746828 70782e79 29293b20 0a202020 dth(px.y)); . │ │ │ │ - 0x00ceda60 20666c6f 61742063 6f766572 61676520 float coverage │ │ │ │ - 0x00ceda70 3d20312e 30202d20 736d6f6f 74687374 = 1.0 - smoothst │ │ │ │ - 0x00ceda80 65702872 61646975 73202d20 61612c20 ep(radius - aa, │ │ │ │ - 0x00ceda90 72616469 7573202b 2061612c 2064293b radius + aa, d); │ │ │ │ - 0x00cedaa0 200a2020 2020636f 6c6f722e 72676220 . color.rgb │ │ │ │ - 0x00cedab0 3d204d6f 64756c61 74654279 50617474 = ModulateByPatt │ │ │ │ - 0x00cedac0 65726e44 6f747328 636f6c6f 722e7267 ernDots(color.rg │ │ │ │ - 0x00cedad0 622c206b 4461726b 656e2c20 636f7665 b, kDarken, cove │ │ │ │ - 0x00cedae0 72616765 293b200a 20202020 636f6c6f rage); . colo │ │ │ │ - 0x00cedaf0 722e6120 2a3d2075 5f6f7061 63697479 r.a *= u_opacity │ │ │ │ - 0x00cedb00 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ - 0x00cedb10 6f72203d 20636f6c 6f723b20 0a20207d or = color; . } │ │ │ │ - 0x00cedb20 200a0000 00000000 00000000 00000000 ............... │ │ │ │ - 0x00cedb30 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cedb40 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cedb50 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cedb60 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cedb70 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cedb80 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cedb90 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cedba0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cedbb0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cedbc0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cedbd0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cedbe0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cedbf0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cedc00 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cedc10 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cedc20 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cedc30 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cedc40 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cedc50 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cedc60 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cedc70 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00cedc80 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00cedc90 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00cedca0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00cedcb0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00cedcc0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00cedcd0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00cedce0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00cedcf0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cedd00 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ - 0x00cedd10 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ - 0x00cedd20 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ - 0x00cedd30 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00cedd40 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00cedd50 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00cedd60 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00cedd70 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00cedd80 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00cedd90 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00cedda0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00ceddb0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00ceddc0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00ceddd0 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00cedde0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00ceddf0 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00cede00 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00cede10 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00cede20 50617373 3b200a20 20636f6e 73742066 Pass; . const f │ │ │ │ - 0x00cede30 6c6f6174 206b4365 6c6c5078 203d2038 loat kCellPx = 8 │ │ │ │ - 0x00cede40 2e303b20 20202020 2f2f2064 6f74206c .0; // dot l │ │ │ │ - 0x00cede50 61747469 63652063 656c6c20 28646976 attice cell (div │ │ │ │ - 0x00cede60 69646573 20746865 20313670 78207469 ides the 16px ti │ │ │ │ - 0x00cede70 6c652c20 736f2063 656c6c73 2074696c le, so cells til │ │ │ │ - 0x00cede80 65207365 616d6c65 73736c79 29200a20 e seamlessly) . │ │ │ │ - 0x00cede90 20636f6e 73742066 6c6f6174 206b5261 const float kRa │ │ │ │ - 0x00cedea0 64697573 5078203d 20312e32 3b202020 diusPx = 1.2; │ │ │ │ - 0x00cedeb0 2f2f2064 6f742072 61646975 73200a20 // dot radius . │ │ │ │ - 0x00cedec0 20636f6e 73742066 6c6f6174 206b4a69 const float kJi │ │ │ │ - 0x00ceded0 74746572 203d2030 2e35353b 20202020 tter = 0.55; │ │ │ │ - 0x00cedee0 2f2f206b 65657020 6b4a6974 7465722a // keep kJitter* │ │ │ │ - 0x00cedef0 302e352a 6b43656c 6c507820 2b206b52 0.5*kCellPx + kR │ │ │ │ - 0x00cedf00 61646975 73507820 3c206b43 656c6c50 adiusPx < kCellP │ │ │ │ - 0x00cedf10 782a302e 35202864 6f747320 73746179 x*0.5 (dots stay │ │ │ │ - 0x00cedf20 20696e20 63656c6c 29200a20 20636f6e in cell) . con │ │ │ │ - 0x00cedf30 73742066 6c6f6174 206b4461 726b656e st float kDarken │ │ │ │ - 0x00cedf40 203d2030 2e38303b 20202020 2f2f2073 = 0.80; // s │ │ │ │ - 0x00cedf50 75726661 6365206d 756c7469 706c6965 urface multiplie │ │ │ │ - 0x00cedf60 7220756e 64657220 6120646f 74206f6e r under a dot on │ │ │ │ - 0x00cedf70 2061206c 69676874 2066696c 6c202867 a light fill (g │ │ │ │ - 0x00cedf80 656e746c 65202d20 74657874 75726520 entle - texture │ │ │ │ - 0x00cedf90 73686f75 6c642077 68697370 65722920 should whisper) │ │ │ │ - 0x00cedfa0 0a202066 6c6f6174 20486173 68287665 . float Hash(ve │ │ │ │ - 0x00cedfb0 63322070 29200a20 207b200a 20202020 c2 p) . { . │ │ │ │ - 0x00cedfc0 70203d20 66726163 74287020 2a207665 p = fract(p * ve │ │ │ │ - 0x00cedfd0 63322831 32372e31 2c203331 312e3729 c2(127.1, 311.7) │ │ │ │ - 0x00cedfe0 293b200a 20202020 70202b3d 20646f74 ); . p += dot │ │ │ │ - 0x00cedff0 28702c20 70202b20 33342e32 33293b20 (p, p + 34.23); │ │ │ │ - 0x00cee000 0a202020 20726574 75726e20 66726163 . return frac │ │ │ │ - 0x00cee010 7428702e 78202a20 702e7929 3b200a20 t(p.x * p.y); . │ │ │ │ - 0x00cee020 207d200a 2020636f 6e737420 666c6f61 } . const floa │ │ │ │ - 0x00cee030 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00cee040 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00cee050 204c4f57 5f502076 65633320 4d6f6475 LOW_P vec3 Modu │ │ │ │ - 0x00cee060 6c617465 42795061 74746572 6e446f74 lateByPatternDot │ │ │ │ - 0x00cee070 73284c4f 575f5020 76656333 20636f6c s(LOW_P vec3 col │ │ │ │ - 0x00cee080 6f722c20 666c6f61 74206461 726b656e or, float darken │ │ │ │ - 0x00cee090 2c20666c 6f617420 636f7665 72616765 , float coverage │ │ │ │ - 0x00cee0a0 29200a20 207b200a 20202020 636f6e73 ) . { . cons │ │ │ │ - 0x00cee0b0 7420666c 6f617420 6b4c6967 6874656e t float kLighten │ │ │ │ - 0x00cee0c0 203d2030 2e303735 3b200a20 20202069 = 0.075; . i │ │ │ │ - 0x00cee0d0 66202864 6f742863 6f6c6f72 2c207665 f (dot(color, ve │ │ │ │ - 0x00cee0e0 63332830 2e323132 362c2030 2e373135 c3(0.2126, 0.715 │ │ │ │ - 0x00cee0f0 322c2030 2e303732 32292920 3c20302e 2, 0.0722)) < 0. │ │ │ │ - 0x00cee100 3529200a 20202020 20207265 7475726e 5) . return │ │ │ │ - 0x00cee110 20636f6c 6f72202b 20636f76 65726167 color + coverag │ │ │ │ - 0x00cee120 65202a20 6b4c6967 6874656e 3b200a20 e * kLighten; . │ │ │ │ - 0x00cee130 20202072 65747572 6e20636f 6c6f7220 return color │ │ │ │ - 0x00cee140 2a206d69 7828312e 302c2064 61726b65 * mix(1.0, darke │ │ │ │ - 0x00cee150 6e2c2063 6f766572 61676529 3b200a20 n, coverage); . │ │ │ │ - 0x00cee160 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ - 0x00cee170 29200a20 207b200a 20202369 66646566 ) . { . #ifdef │ │ │ │ - 0x00cee180 20454e41 424c455f 56544620 0a202020 ENABLE_VTF . │ │ │ │ - 0x00cee190 204c4f57 5f502076 65633420 636f6c6f LOW_P vec4 colo │ │ │ │ - 0x00cee1a0 72203d20 765f636f 6c6f723b 200a2020 r = v_color; . │ │ │ │ - 0x00cee1b0 23656c73 65200a20 2020204c 4f575f50 #else . LOW_P │ │ │ │ - 0x00cee1c0 20766563 3420636f 6c6f7220 3d207465 vec4 color = te │ │ │ │ - 0x00cee1d0 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ - 0x00cee1e0 2c20765f 636f6c6f 72546578 436f6f72 , v_colorTexCoor │ │ │ │ - 0x00cee1f0 6473293b 200a2020 23656e64 6966200a ds); . #endif . │ │ │ │ - 0x00cee200 20202020 76656332 20707820 3d20765f vec2 px = v_ │ │ │ │ - 0x00cee210 6d61736b 54657843 6f6f7264 73202a20 maskTexCoords * │ │ │ │ - 0x00cee220 31362e30 3b200a20 20202076 65633220 16.0; . vec2 │ │ │ │ - 0x00cee230 63656c6c 203d2066 6c6f6f72 28707820 cell = floor(px │ │ │ │ - 0x00cee240 2f206b43 656c6c50 78293b20 0a202020 / kCellPx); . │ │ │ │ - 0x00cee250 20766563 3220746f 43656e74 6572203d vec2 toCenter = │ │ │ │ - 0x00cee260 200a2020 20202020 20202866 72616374 . (fract │ │ │ │ - 0x00cee270 28707820 2f206b43 656c6c50 7829202d (px / kCellPx) - │ │ │ │ - 0x00cee280 20302e35 29202a20 6b43656c 6c507820 0.5) * kCellPx │ │ │ │ - 0x00cee290 2d202876 65633228 48617368 2863656c - (vec2(Hash(cel │ │ │ │ - 0x00cee2a0 6c292c20 48617368 2863656c 6c202b20 l), Hash(cell + │ │ │ │ - 0x00cee2b0 31392e37 2929202d 20302e35 29202a20 19.7)) - 0.5) * │ │ │ │ - 0x00cee2c0 286b4a69 74746572 202a206b 43656c6c (kJitter * kCell │ │ │ │ - 0x00cee2d0 5078293b 200a2020 2020666c 6f617420 Px); . float │ │ │ │ - 0x00cee2e0 64203d20 6c656e67 74682874 6f43656e d = length(toCen │ │ │ │ - 0x00cee2f0 74657229 3b200a20 20202066 6c6f6174 ter); . float │ │ │ │ - 0x00cee300 20616120 3d206d61 78286677 69647468 aa = max(fwidth │ │ │ │ - 0x00cee310 2870782e 78292c20 66776964 74682870 (px.x), fwidth(p │ │ │ │ - 0x00cee320 782e7929 293b2020 2f2f2063 6f6e7469 x.y)); // conti │ │ │ │ - 0x00cee330 6e756f75 7320636f 6f72643a 206e6f20 nuous coord: no │ │ │ │ - 0x00cee340 66726163 742d7365 616d2064 65726976 fract-seam deriv │ │ │ │ - 0x00cee350 61746976 65207370 696b6520 0a202020 ative spike . │ │ │ │ - 0x00cee360 20666c6f 61742063 6f766572 61676520 float coverage │ │ │ │ - 0x00cee370 3d20312e 30202d20 736d6f6f 74687374 = 1.0 - smoothst │ │ │ │ - 0x00cee380 6570286b 52616469 75735078 202d2061 ep(kRadiusPx - a │ │ │ │ - 0x00cee390 612c206b 52616469 75735078 202b2061 a, kRadiusPx + a │ │ │ │ - 0x00cee3a0 612c2064 293b200a 20202020 636f6c6f a, d); . colo │ │ │ │ - 0x00cee3b0 722e7267 62203d20 4d6f6475 6c617465 r.rgb = Modulate │ │ │ │ - 0x00cee3c0 42795061 74746572 6e446f74 7328636f ByPatternDots(co │ │ │ │ - 0x00cee3d0 6c6f722e 7267622c 206b4461 726b656e lor.rgb, kDarken │ │ │ │ - 0x00cee3e0 2c20636f 76657261 6765293b 200a2020 , coverage); . │ │ │ │ - 0x00cee3f0 2020636f 6c6f722e 61202a3d 20755f6f color.a *= u_o │ │ │ │ - 0x00cee400 70616369 74793b20 0a202020 20765f46 pacity; . v_F │ │ │ │ - 0x00cee410 72616743 6f6c6f72 203d2063 6f6c6f72 ragColor = color │ │ │ │ - 0x00cee420 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ - 0x00cee430 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cee440 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cee450 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cee460 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cee470 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cee480 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cee490 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cee4a0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cee4b0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cee4c0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cee4d0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cee4e0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cee4f0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cee500 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cee510 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cee520 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cee530 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cee540 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cee550 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cee560 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cee570 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cee580 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ - 0x00cee590 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ - 0x00cee5a0 20206f75 74207665 63332076 5f6e6f72 out vec3 v_nor │ │ │ │ - 0x00cee5b0 6d616c3b 200a2020 756e6966 6f726d20 mal; . uniform │ │ │ │ - 0x00cee5c0 6d617434 20755f74 72616e73 666f726d mat4 u_transform │ │ │ │ - 0x00cee5d0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00cee5e0 3420755f 6e6f726d 616c5472 616e7366 4 u_normalTransf │ │ │ │ - 0x00cee5f0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00cee600 76656334 20755f63 6f6c6f72 3b200a20 vec4 u_color; . │ │ │ │ - 0x00cee610 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ - 0x00cee620 74657843 6f6f7264 466c6970 70696e67 texCoordFlipping │ │ │ │ - 0x00cee630 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ - 0x00cee640 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ - 0x00cee650 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ - 0x00cee660 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ - 0x00cee670 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ - 0x00cee680 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ - 0x00cee690 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ - 0x00cee6a0 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ - 0x00cee6b0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00cee6c0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00cee6d0 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ - 0x00cee6e0 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ - 0x00cee6f0 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ - 0x00cee700 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00cee710 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ - 0x00cee720 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ - 0x00cee730 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ - 0x00cee740 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ - 0x00cee750 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ - 0x00cee760 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ - 0x00cee770 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cee780 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ - 0x00cee790 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ - 0x00cee7a0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00cee7b0 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ - 0x00cee7c0 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ - 0x00cee7d0 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00cee7e0 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ - 0x00cee7f0 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ - 0x00cee800 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ - 0x00cee810 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00cee820 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ - 0x00cee830 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ - 0x00cee840 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ - 0x00cee850 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00cee860 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00cee870 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00cee880 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00cee890 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ - 0x00cee8a0 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ - 0x00cee8b0 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ - 0x00cee8c0 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ - 0x00cee8d0 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ - 0x00cee8e0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00cee8f0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00cee900 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ - 0x00cee910 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ - 0x00cee920 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ - 0x00cee930 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ - 0x00cee940 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ - 0x00cee950 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ - 0x00cee960 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ - 0x00cee970 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ - 0x00cee980 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00cee990 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ - 0x00cee9a0 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ - 0x00cee9b0 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ - 0x00cee9c0 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ - 0x00cee9d0 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ - 0x00cee9e0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00cee9f0 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ - 0x00ceea00 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ - 0x00ceea10 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ - 0x00ceea20 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ - 0x00ceea30 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ - 0x00ceea40 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ - 0x00ceea50 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ - 0x00ceea60 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ - 0x00ceea70 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ - 0x00ceea80 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ - 0x00ceea90 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ - 0x00ceeaa0 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ - 0x00ceeab0 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ - 0x00ceeac0 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ - 0x00ceead0 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ - 0x00ceeae0 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ - 0x00ceeaf0 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ - 0x00ceeb00 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ - 0x00ceeb10 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ - 0x00ceeb20 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ - 0x00ceeb30 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ - 0x00ceeb40 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ - 0x00ceeb50 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ - 0x00ceeb60 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00ceeb70 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ - 0x00ceeb80 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ - 0x00ceeb90 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ - 0x00ceeba0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00ceebb0 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ - 0x00ceebc0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00ceebd0 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ - 0x00ceebe0 6f6e203d 20755f74 72616e73 666f726d on = u_transform │ │ │ │ - 0x00ceebf0 202a2076 65633428 615f706f 732c2031 * vec4(a_pos, 1 │ │ │ │ - 0x00ceec00 2e30293b 200a2020 2020765f 6e6f726d .0); . v_norm │ │ │ │ - 0x00ceec10 616c203d 206e6f72 6d616c69 7a652828 al = normalize(( │ │ │ │ - 0x00ceec20 755f6e6f 726d616c 5472616e 73666f72 u_normalTransfor │ │ │ │ - 0x00ceec30 6d202a20 76656334 28615f6e 6f726d61 m * vec4(a_norma │ │ │ │ - 0x00ceec40 6c2c2030 2e302929 2e78797a 293b200a l, 0.0)).xyz); . │ │ │ │ - 0x00ceec50 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ - 0x00ceec60 3d20706f 73697469 6f6e3b20 0a202023 = position; . # │ │ │ │ - 0x00ceec70 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00ceec80 2020676c 5f506f73 6974696f 6e2e7920 gl_Position.y │ │ │ │ - 0x00ceec90 3d202d67 6c5f506f 73697469 6f6e2e79 = -gl_Position.y │ │ │ │ - 0x00ceeca0 3b200a20 20202067 6c5f506f 73697469 ; . gl_Positi │ │ │ │ - 0x00ceecb0 6f6e2e7a 203d2028 676c5f50 6f736974 on.z = (gl_Posit │ │ │ │ - 0x00ceecc0 696f6e2e 7a202b20 676c5f50 6f736974 ion.z + gl_Posit │ │ │ │ - 0x00ceecd0 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ - 0x00ceece0 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ - 0x00ceecf0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00ceed00 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00ceed10 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00ceed20 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00ceed30 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00ceed40 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00ceed50 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00ceed60 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00ceed70 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00ceed80 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00ceed90 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00ceeda0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00ceedb0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00ceedc0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00ceedd0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00ceede0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00ceedf0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00ceee00 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00ceee10 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00ceee20 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00ceee30 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00ceee40 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ - 0x00ceee50 76656332 20615f74 6578436f 6f726473 vec2 a_texCoords │ │ │ │ - 0x00ceee60 3b200a20 206f7574 20666c6f 61742076 ; . out float v │ │ │ │ - 0x00ceee70 5f696e74 656e7369 74793b20 0a202075 _intensity; . u │ │ │ │ - 0x00ceee80 6e69666f 726d206d 61743420 755f7472 niform mat4 u_tr │ │ │ │ - 0x00ceee90 616e7366 6f726d3b 200a2020 756e6966 ansform; . unif │ │ │ │ - 0x00ceeea0 6f726d20 6d617434 20755f6e 6f726d61 orm mat4 u_norma │ │ │ │ - 0x00ceeeb0 6c547261 6e73666f 726d3b20 0a202075 lTransform; . u │ │ │ │ - 0x00ceeec0 6e69666f 726d2076 65633420 755f636f niform vec4 u_co │ │ │ │ - 0x00ceeed0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00ceeee0 76656332 20755f74 6578436f 6f726446 vec2 u_texCoordF │ │ │ │ - 0x00ceeef0 6c697070 696e673b 200a2020 636f6e73 lipping; . cons │ │ │ │ - 0x00ceef00 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00ceef10 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00ceef20 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ - 0x00ceef30 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00ceef40 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00ceef50 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00ceef60 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00ceef70 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ - 0x00ceef80 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00ceef90 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ - 0x00ceefa0 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ - 0x00ceefb0 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ - 0x00ceefc0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00ceefd0 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ - 0x00ceefe0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00ceeff0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00cef000 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00cef010 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ - 0x00cef020 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cef030 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ - 0x00cef040 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ - 0x00cef050 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00cef060 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00cef070 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ - 0x00cef080 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ - 0x00cef090 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00cef0a0 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ - 0x00cef0b0 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ - 0x00cef0c0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cef0d0 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00cef0e0 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00cef0f0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cef100 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ - 0x00cef110 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00cef120 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00cef130 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00cef140 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00cef150 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ - 0x00cef160 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ - 0x00cef170 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ - 0x00cef180 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ - 0x00cef190 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ - 0x00cef1a0 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00cef1b0 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ - 0x00cef1c0 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ - 0x00cef1d0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00cef1e0 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ - 0x00cef1f0 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ - 0x00cef200 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00cef210 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ - 0x00cef220 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ - 0x00cef230 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ - 0x00cef240 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00cef250 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ - 0x00cef260 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ - 0x00cef270 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ - 0x00cef280 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ - 0x00cef290 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ - 0x00cef2a0 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ - 0x00cef2b0 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ - 0x00cef2c0 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ - 0x00cef2d0 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ - 0x00cef2e0 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ - 0x00cef2f0 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ - 0x00cef300 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ - 0x00cef310 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00cef320 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ - 0x00cef330 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ - 0x00cef340 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ - 0x00cef350 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ - 0x00cef360 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ - 0x00cef370 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ - 0x00cef380 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ - 0x00cef390 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ - 0x00cef3a0 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ - 0x00cef3b0 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ - 0x00cef3c0 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ - 0x00cef3d0 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ - 0x00cef3e0 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ - 0x00cef3f0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00cef400 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ - 0x00cef410 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ - 0x00cef420 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ - 0x00cef430 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ - 0x00cef440 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ - 0x00cef450 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ - 0x00cef460 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00cef470 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00cef480 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ - 0x00cef490 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00cef4a0 20706f73 6974696f 6e203d20 755f7472 position = u_tr │ │ │ │ - 0x00cef4b0 616e7366 6f726d20 2a207665 63342861 ansform * vec4(a │ │ │ │ - 0x00cef4c0 5f706f73 2c20312e 30293b20 0a202020 _pos, 1.0); . │ │ │ │ - 0x00cef4d0 20765f69 6e74656e 73697479 203d2061 v_intensity = a │ │ │ │ - 0x00cef4e0 5f746578 436f6f72 64732e78 3b200a20 _texCoords.x; . │ │ │ │ - 0x00cef4f0 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ - 0x00cef500 20706f73 6974696f 6e3b200a 20202369 position; . #i │ │ │ │ - 0x00cef510 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ - 0x00cef520 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ - 0x00cef530 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ - 0x00cef540 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ - 0x00cef550 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ - 0x00cef560 6f6e2e7a 202b2067 6c5f506f 73697469 on.z + gl_Positi │ │ │ │ - 0x00cef570 6f6e2e77 29202a20 302e353b 200a2020 on.w) * 0.5; . │ │ │ │ - 0x00cef580 23656e64 6966200a 20207d20 0a000000 #endif . } .... │ │ │ │ - 0x00cef590 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cef5a0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cef5b0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cef5c0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cef5d0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cef5e0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cef5f0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cef600 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cef610 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cef620 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cef630 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cef640 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cef650 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cef660 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cef670 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cef680 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cef690 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cef6a0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cef6b0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cef6c0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cef6d0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cef6e0 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ - 0x00cef6f0 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ - 0x00cef700 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ - 0x00cef710 6f6f7264 733b200a 20206f75 74207665 oords; . out ve │ │ │ │ - 0x00cef720 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ - 0x00cef730 6f757420 76656332 20765f74 6578436f out vec2 v_texCo │ │ │ │ - 0x00cef740 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ - 0x00cef750 206d6174 3420755f 7472616e 73666f72 mat4 u_transfor │ │ │ │ - 0x00cef760 6d3b200a 2020756e 69666f72 6d206d61 m; . uniform ma │ │ │ │ - 0x00cef770 74342075 5f6e6f72 6d616c54 72616e73 t4 u_normalTrans │ │ │ │ - 0x00cef780 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ - 0x00cef790 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ - 0x00cef7a0 2020756e 69666f72 6d207665 63322075 uniform vec2 u │ │ │ │ - 0x00cef7b0 5f746578 436f6f72 64466c69 7070696e _texCoordFlippin │ │ │ │ - 0x00cef7c0 673b200a 2020636f 6e737420 666c6f61 g; . const floa │ │ │ │ - 0x00cef7d0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00cef7e0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00cef7f0 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ - 0x00cef800 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00cef810 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00cef820 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00cef830 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ - 0x00cef840 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ - 0x00cef850 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00cef860 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ - 0x00cef870 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ - 0x00cef880 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ - 0x00cef890 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00cef8a0 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ - 0x00cef8b0 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ - 0x00cef8c0 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ - 0x00cef8d0 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ - 0x00cef8e0 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ - 0x00cef8f0 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ - 0x00cef900 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cef910 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ - 0x00cef920 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ - 0x00cef930 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cef940 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ - 0x00cef950 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ - 0x00cef960 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00cef970 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ - 0x00cef980 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ - 0x00cef990 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ - 0x00cef9a0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00cef9b0 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ - 0x00cef9c0 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ - 0x00cef9d0 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ - 0x00cef9e0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00cef9f0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00cefa00 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00cefa10 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00cefa20 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ - 0x00cefa30 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ - 0x00cefa40 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ - 0x00cefa50 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ - 0x00cefa60 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ - 0x00cefa70 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00cefa80 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00cefa90 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ - 0x00cefaa0 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ - 0x00cefab0 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ - 0x00cefac0 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ - 0x00cefad0 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ - 0x00cefae0 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ - 0x00cefaf0 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ - 0x00cefb00 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ - 0x00cefb10 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00cefb20 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ - 0x00cefb30 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ - 0x00cefb40 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ - 0x00cefb50 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ - 0x00cefb60 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ - 0x00cefb70 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ - 0x00cefb80 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ - 0x00cefb90 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ - 0x00cefba0 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ - 0x00cefbb0 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ - 0x00cefbc0 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ - 0x00cefbd0 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ - 0x00cefbe0 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ - 0x00cefbf0 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ - 0x00cefc00 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ - 0x00cefc10 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ - 0x00cefc20 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ - 0x00cefc30 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ - 0x00cefc40 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ - 0x00cefc50 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ - 0x00cefc60 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ - 0x00cefc70 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ - 0x00cefc80 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ - 0x00cefc90 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ - 0x00cefca0 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ - 0x00cefcb0 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ - 0x00cefcc0 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ - 0x00cefcd0 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ - 0x00cefce0 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ - 0x00cefcf0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00cefd00 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ - 0x00cefd10 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ - 0x00cefd20 20202020 656c7365 200a2020 20202020 else . │ │ │ │ - 0x00cefd30 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00cefd40 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ - 0x00cefd50 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00cefd60 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ - 0x00cefd70 696f6e20 3d20755f 7472616e 73666f72 ion = u_transfor │ │ │ │ - 0x00cefd80 6d202a20 76656334 28615f70 6f732c20 m * vec4(a_pos, │ │ │ │ - 0x00cefd90 312e3029 3b200a20 20202076 5f6e6f72 1.0); . v_nor │ │ │ │ - 0x00cefda0 6d616c20 3d206e6f 726d616c 697a6528 mal = normalize( │ │ │ │ - 0x00cefdb0 28755f6e 6f726d61 6c547261 6e73666f (u_normalTransfo │ │ │ │ - 0x00cefdc0 726d202a 20766563 3428615f 6e6f726d rm * vec4(a_norm │ │ │ │ - 0x00cefdd0 616c2c20 302e3029 292e7879 7a293b20 al, 0.0)).xyz); │ │ │ │ - 0x00cefde0 0a202020 20765f74 6578436f 6f726473 . v_texCoords │ │ │ │ - 0x00cefdf0 203d206d 69782861 5f746578 436f6f72 = mix(a_texCoor │ │ │ │ - 0x00cefe00 64732c20 312e3020 2d20615f 74657843 ds, 1.0 - a_texC │ │ │ │ - 0x00cefe10 6f6f7264 732c2075 5f746578 436f6f72 oords, u_texCoor │ │ │ │ - 0x00cefe20 64466c69 7070696e 67293b20 0a202020 dFlipping); . │ │ │ │ - 0x00cefe30 20676c5f 506f7369 74696f6e 203d2070 gl_Position = p │ │ │ │ - 0x00cefe40 6f736974 696f6e3b 200a2020 23696664 osition; . #ifd │ │ │ │ - 0x00cefe50 65662056 554c4b41 4e200a20 20202067 ef VULKAN . g │ │ │ │ - 0x00cefe60 6c5f506f 73697469 6f6e2e79 203d202d l_Position.y = - │ │ │ │ - 0x00cefe70 676c5f50 6f736974 696f6e2e 793b200a gl_Position.y; . │ │ │ │ - 0x00cefe80 20202020 676c5f50 6f736974 696f6e2e gl_Position. │ │ │ │ - 0x00cefe90 7a203d20 28676c5f 506f7369 74696f6e z = (gl_Position │ │ │ │ - 0x00cefea0 2e7a202b 20676c5f 506f7369 74696f6e .z + gl_Position │ │ │ │ - 0x00cefeb0 2e772920 2a20302e 353b200a 20202365 .w) * 0.5; . #e │ │ │ │ - 0x00cefec0 6e646966 200a2020 7d200a00 00000000 ndif . } ...... │ │ │ │ - 0x00cefed0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cefee0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cefef0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00ceff00 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00ceff10 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00ceff20 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00ceff30 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00ceff40 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00ceff50 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00ceff60 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00ceff70 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00ceff80 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00ceff90 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00ceffa0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00ceffb0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00ceffc0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00ceffd0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00ceffe0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cefff0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cf0000 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cf0010 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cf0020 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00cf0030 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00cf0040 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00cf0050 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00cf0060 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00cf0070 455f5654 46200a20 206f7574 204c4f57 E_VTF . out LOW │ │ │ │ - 0x00cf0080 5f502076 65633420 765f636f 6c6f723b _P vec4 v_color; │ │ │ │ - 0x00cf0090 200a2020 23656c73 65200a20 206f7574 . #else . out │ │ │ │ - 0x00cf00a0 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ - 0x00cf00b0 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ - 0x00cf00c0 66200a20 206f7574 20766563 3320765f f . out vec3 v_ │ │ │ │ - 0x00cf00d0 72616469 75733b20 0a202075 6e69666f radius; . unifo │ │ │ │ - 0x00cf00e0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00cf00f0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00cf0100 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00cf0110 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00cf0120 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00cf0130 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00cf0140 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00cf0150 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00cf0160 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00cf0170 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00cf0180 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00cf0190 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00cf01a0 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00cf01b0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00cf01c0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00cf01d0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00cf01e0 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ - 0x00cf01f0 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ - 0x00cf0200 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ - 0x00cf0210 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00cf0220 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00cf0230 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00cf0240 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00cf0250 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00cf0260 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00cf0270 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00cf0280 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00cf0290 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00cf02a0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00cf02b0 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00cf02c0 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00cf02d0 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00cf02e0 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00cf02f0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00cf0300 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00cf0310 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00cf0320 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00cf0330 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00cf0340 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00cf0350 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cf0360 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00cf0370 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00cf0380 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00cf0390 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00cf03a0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00cf03b0 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00cf03c0 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00cf03d0 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00cf03e0 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00cf03f0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00cf0400 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00cf0410 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00cf0420 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00cf0430 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00cf0440 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00cf0450 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00cf0460 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00cf0470 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00cf0480 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00cf0490 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00cf04a0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00cf04b0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00cf04c0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00cf04d0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00cf04e0 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00cf04f0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00cf0500 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00cf0510 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00cf0520 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00cf0530 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00cf0540 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00cf0550 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00cf0560 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00cf0570 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00cf0580 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00cf0590 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00cf05a0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00cf05b0 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00cf05c0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00cf05d0 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00cf05e0 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00cf05f0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00cf0600 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00cf0610 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00cf0620 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00cf0630 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00cf0640 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00cf0650 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00cf0660 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00cf0670 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00cf0680 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00cf0690 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00cf06a0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00cf06b0 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00cf06c0 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00cf06d0 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00cf06e0 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00cf06f0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00cf0700 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00cf0710 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00cf0720 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00cf0730 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00cf0740 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00cf0750 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00cf0760 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00cf0770 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00cf0780 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00cf0790 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00cf07a0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00cf07b0 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ - 0x00cf07c0 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ - 0x00cf07d0 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ - 0x00cf07e0 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ - 0x00cf07f0 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ - 0x00cf0800 2c20302c 20302920 2b20703b 200a2020 , 0, 0) + p; . │ │ │ │ - 0x00cf0810 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00cf0820 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00cf0830 6f726d28 706f7320 2a20755f 70726f6a orm(pos * u_proj │ │ │ │ - 0x00cf0840 65637469 6f6e2c20 755f7069 766f7454 ection, u_pivotT │ │ │ │ - 0x00cf0850 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ - 0x00cf0860 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ - 0x00cf0870 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ - 0x00cf0880 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ - 0x00cf0890 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ - 0x00cf08a0 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ - 0x00cf08b0 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ - 0x00cf08c0 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ - 0x00cf08d0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00cf08e0 2023656e 64696620 0a202020 20765f72 #endif . v_r │ │ │ │ - 0x00cf08f0 61646975 73203d20 615f6e6f 726d616c adius = a_normal │ │ │ │ - 0x00cf0900 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ - 0x00cf0910 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cf0920 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cf0930 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cf0940 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cf0950 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cf0960 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cf0970 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cf0980 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cf0990 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cf09a0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cf09b0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cf09c0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cf09d0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cf09e0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cf09f0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cf0a00 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cf0a10 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cf0a20 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cf0a30 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cf0a40 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cf0a50 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cf0a60 63332061 5f6e6f72 6d616c3b 200a2020 c3 a_normal; . │ │ │ │ - 0x00cf0a70 696e2076 65633320 615f706f 73697469 in vec3 a_positi │ │ │ │ - 0x00cf0a80 6f6e3b20 0a202069 6e207665 63342061 on; . in vec4 a │ │ │ │ - 0x00cf0a90 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00cf0aa0 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ - 0x00cf0ab0 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ - 0x00cf0ac0 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ - 0x00cf0ad0 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ - 0x00cf0ae0 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00cf0af0 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00cf0b00 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00cf0b10 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ - 0x00cf0b20 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ - 0x00cf0b30 755f636f 6e747261 73744761 6d6d613b u_contrastGamma; │ │ │ │ - 0x00cf0b40 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00cf0b50 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ - 0x00cf0b60 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00cf0b70 7a536361 6c653b20 0a202075 6e69666f zScale; . unifo │ │ │ │ - 0x00cf0b80 726d2066 6c6f6174 20755f69 6e746572 rm float u_inter │ │ │ │ - 0x00cf0b90 706f6c61 74696f6e 3b200a20 20756e69 polation; . uni │ │ │ │ - 0x00cf0ba0 666f726d 20666c6f 61742075 5f69734f form float u_isO │ │ │ │ - 0x00cf0bb0 75746c69 6e655061 73733b20 0a202063 utlinePass; . c │ │ │ │ - 0x00cf0bc0 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ - 0x00cf0bd0 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ - 0x00cf0be0 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ - 0x00cf0bf0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00cf0c00 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00cf0c10 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00cf0c20 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00cf0c30 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ - 0x00cf0c40 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ - 0x00cf0c50 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ - 0x00cf0c60 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ - 0x00cf0c70 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00cf0c80 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00cf0c90 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ - 0x00cf0ca0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00cf0cb0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00cf0cc0 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ - 0x00cf0cd0 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ - 0x00cf0ce0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00cf0cf0 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ - 0x00cf0d00 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ - 0x00cf0d10 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00cf0d20 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ - 0x00cf0d30 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ - 0x00cf0d40 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00cf0d50 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00cf0d60 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ - 0x00cf0d70 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00cf0d80 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ - 0x00cf0d90 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ - 0x00cf0da0 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00cf0db0 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ - 0x00cf0dc0 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ - 0x00cf0dd0 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ - 0x00cf0de0 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ - 0x00cf0df0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00cf0e00 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00cf0e10 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00cf0e20 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ - 0x00cf0e30 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ - 0x00cf0e40 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ - 0x00cf0e50 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ - 0x00cf0e60 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ - 0x00cf0e70 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ - 0x00cf0e80 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ - 0x00cf0e90 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ - 0x00cf0ea0 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ - 0x00cf0eb0 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ - 0x00cf0ec0 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ - 0x00cf0ed0 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ - 0x00cf0ee0 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ - 0x00cf0ef0 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ - 0x00cf0f00 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ - 0x00cf0f10 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ - 0x00cf0f20 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ - 0x00cf0f30 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ - 0x00cf0f40 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ - 0x00cf0f50 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ - 0x00cf0f60 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ - 0x00cf0f70 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00cf0f80 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ - 0x00cf0f90 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ - 0x00cf0fa0 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ - 0x00cf0fb0 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ - 0x00cf0fc0 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ - 0x00cf0fd0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00cf0fe0 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ - 0x00cf0ff0 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ - 0x00cf1000 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ - 0x00cf1010 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ - 0x00cf1020 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ - 0x00cf1030 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ - 0x00cf1040 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ - 0x00cf1050 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ - 0x00cf1060 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ - 0x00cf1070 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ - 0x00cf1080 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ - 0x00cf1090 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ - 0x00cf10a0 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ - 0x00cf10b0 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ - 0x00cf10c0 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ - 0x00cf10d0 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ - 0x00cf10e0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00cf10f0 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ - 0x00cf1100 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ - 0x00cf1110 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ - 0x00cf1120 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ - 0x00cf1130 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00cf1140 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ - 0x00cf1150 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ - 0x00cf1160 65633320 72616469 7573203d 20615f6e ec3 radius = a_n │ │ │ │ - 0x00cf1170 6f726d61 6c202a20 615f706f 73697469 ormal * a_positi │ │ │ │ - 0x00cf1180 6f6e2e7a 3b200a20 20202076 65633420 on.z; . vec4 │ │ │ │ - 0x00cf1190 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ - 0x00cf11a0 6974696f 6e2e7879 2c20302c 20312920 ition.xy, 0, 1) │ │ │ │ - 0x00cf11b0 2a20755f 6d6f6465 6c566965 773b200a * u_modelView; . │ │ │ │ - 0x00cf11c0 20202020 76656334 20736869 66746564 vec4 shifted │ │ │ │ - 0x00cf11d0 506f7320 3d207665 63342872 61646975 Pos = vec4(radiu │ │ │ │ - 0x00cf11e0 732e7879 2c20302c 20302920 2b20706f s.xy, 0, 0) + po │ │ │ │ - 0x00cf11f0 733b200a 20202020 676c5f50 6f736974 s; . gl_Posit │ │ │ │ - 0x00cf1200 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ - 0x00cf1210 5472616e 73666f72 6d287368 69667465 Transform(shifte │ │ │ │ - 0x00cf1220 64506f73 202a2075 5f70726f 6a656374 dPos * u_project │ │ │ │ - 0x00cf1230 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ - 0x00cf1240 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ - 0x00cf1250 2020765f 72616469 7573203d 20726164 v_radius = rad │ │ │ │ - 0x00cf1260 6975733b 200a2020 2020765f 636f6c6f ius; . v_colo │ │ │ │ - 0x00cf1270 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ - 0x00cf1280 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ - 0x00cf1290 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cf12a0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cf12b0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cf12c0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cf12d0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cf12e0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cf12f0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cf1300 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cf1310 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cf1320 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cf1330 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cf1340 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cf1350 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cf1360 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cf1370 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cf1380 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cf1390 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cf13a0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cf13b0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cf13c0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cf13d0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cf13e0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00cf13f0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00cf1400 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00cf1410 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00cf1420 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ - 0x00cf1430 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ - 0x00cf1440 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ - 0x00cf1450 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ - 0x00cf1460 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00cf1470 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ - 0x00cf1480 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00cf1490 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ - 0x00cf14a0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00cf14b0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00cf14c0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00cf14d0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00cf14e0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00cf14f0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00cf1500 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00cf1510 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00cf1520 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00cf1530 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00cf1540 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00cf1550 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00cf1560 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00cf1570 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00cf1580 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00cf1590 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00cf15a0 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ - 0x00cf15b0 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ - 0x00cf15c0 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ - 0x00cf15d0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00cf15e0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00cf15f0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00cf1600 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00cf1610 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00cf1620 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00cf1630 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00cf1640 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00cf1650 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00cf1660 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00cf1670 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00cf1680 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00cf1690 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00cf16a0 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00cf16b0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00cf16c0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00cf16d0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00cf16e0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00cf16f0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00cf1700 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00cf1710 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cf1720 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00cf1730 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00cf1740 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00cf1750 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00cf1760 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00cf1770 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00cf1780 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00cf1790 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00cf17a0 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00cf17b0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00cf17c0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00cf17d0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00cf17e0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00cf17f0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00cf1800 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00cf1810 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00cf1820 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00cf1830 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00cf1840 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00cf1850 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00cf1860 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00cf1870 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00cf1880 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00cf1890 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00cf18a0 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00cf18b0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00cf18c0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00cf18d0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00cf18e0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00cf18f0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00cf1900 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00cf1910 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00cf1920 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00cf1930 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00cf1940 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00cf1950 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00cf1960 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00cf1970 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00cf1980 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00cf1990 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00cf19a0 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00cf19b0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00cf19c0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00cf19d0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00cf19e0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00cf19f0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00cf1a00 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00cf1a10 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00cf1a20 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00cf1a30 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00cf1a40 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00cf1a50 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00cf1a60 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00cf1a70 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00cf1a80 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00cf1a90 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00cf1aa0 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00cf1ab0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00cf1ac0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00cf1ad0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00cf1ae0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00cf1af0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00cf1b00 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00cf1b10 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00cf1b20 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00cf1b30 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00cf1b40 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00cf1b50 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00cf1b60 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00cf1b70 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ - 0x00cf1b80 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ - 0x00cf1b90 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ - 0x00cf1ba0 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ - 0x00cf1bb0 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ - 0x00cf1bc0 202b2061 5f636f6c 6f725465 78436f6f + a_colorTexCoo │ │ │ │ - 0x00cf1bd0 7264732e 7a772c20 302c2030 29202b20 rds.zw, 0, 0) + │ │ │ │ - 0x00cf1be0 703b200a 20202020 676c5f50 6f736974 p; . gl_Posit │ │ │ │ - 0x00cf1bf0 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ - 0x00cf1c00 5472616e 73666f72 6d28706f 73202a20 Transform(pos * │ │ │ │ - 0x00cf1c10 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ - 0x00cf1c20 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00cf1c30 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00cf1c40 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ - 0x00cf1c50 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ - 0x00cf1c60 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ - 0x00cf1c70 636f6c6f 72546578 436f6f72 64732e78 colorTexCoords.x │ │ │ │ - 0x00cf1c80 79293b20 0a202023 656c7365 200a2020 y); . #else . │ │ │ │ - 0x00cf1c90 2020765f 636f6c6f 72546578 436f6f72 v_colorTexCoor │ │ │ │ - 0x00cf1ca0 6473203d 20615f63 6f6c6f72 54657843 ds = a_colorTexC │ │ │ │ - 0x00cf1cb0 6f6f7264 732e7879 3b200a20 2023656e oords.xy; . #en │ │ │ │ - 0x00cf1cc0 64696620 0a202020 20765f6e 6f726d61 dif . v_norma │ │ │ │ - 0x00cf1cd0 6c203d20 615f6e6f 726d616c 3b200a20 l = a_normal; . │ │ │ │ - 0x00cf1ce0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00cf1cf0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cf1d00 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cf1d10 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cf1d20 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cf1d30 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cf1d40 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cf1d50 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cf1d60 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cf1d70 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cf1d80 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cf1d90 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cf1da0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cf1db0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cf1dc0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cf1dd0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cf1de0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cf1df0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cf1e00 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cf1e10 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cf1e20 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cf1e30 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cf1e40 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00cf1e50 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00cf1e60 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00cf1e70 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00cf1e80 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ - 0x00cf1e90 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ - 0x00cf1ea0 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ - 0x00cf1eb0 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ - 0x00cf1ec0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00cf1ed0 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ - 0x00cf1ee0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00cf1ef0 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ - 0x00cf1f00 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00cf1f10 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00cf1f20 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00cf1f30 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00cf1f40 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00cf1f50 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00cf1f60 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00cf1f70 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00cf1f80 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00cf1f90 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00cf1fa0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00cf1fb0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00cf1fc0 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00cf1fd0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00cf1fe0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00cf1ff0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00cf2000 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ - 0x00cf2010 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ - 0x00cf2020 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ - 0x00cf2030 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00cf2040 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00cf2050 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00cf2060 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00cf2070 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00cf2080 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00cf2090 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00cf20a0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00cf20b0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00cf20c0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00cf20d0 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00cf20e0 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00cf20f0 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00cf2100 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00cf2110 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00cf2120 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00cf2130 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00cf2140 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00cf2150 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00cf2160 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00cf2170 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cf2180 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00cf2190 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00cf21a0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00cf21b0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00cf21c0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00cf21d0 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00cf21e0 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00cf21f0 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00cf2200 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00cf2210 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00cf2220 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00cf2230 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00cf2240 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00cf2250 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00cf2260 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00cf2270 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00cf2280 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00cf2290 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00cf22a0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00cf22b0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00cf22c0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00cf22d0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00cf22e0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00cf22f0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00cf2300 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00cf2310 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00cf2320 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00cf2330 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00cf2340 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00cf2350 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00cf2360 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00cf2370 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00cf2380 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00cf2390 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00cf23a0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00cf23b0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00cf23c0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00cf23d0 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00cf23e0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00cf23f0 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00cf2400 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00cf2410 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00cf2420 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00cf2430 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00cf2440 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00cf2450 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00cf2460 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00cf2470 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00cf2480 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00cf2490 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00cf24a0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00cf24b0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00cf24c0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00cf24d0 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00cf24e0 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00cf24f0 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00cf2500 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00cf2510 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00cf2520 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00cf2530 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00cf2540 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00cf2550 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00cf2560 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00cf2570 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00cf2580 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00cf2590 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00cf25a0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00cf25b0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00cf25c0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00cf25d0 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ - 0x00cf25e0 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ - 0x00cf25f0 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ - 0x00cf2600 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ - 0x00cf2610 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ - 0x00cf2620 3428615f 6e6f726d 616c2e78 79202b20 4(a_normal.xy + │ │ │ │ - 0x00cf2630 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ - 0x00cf2640 2e7a772c 20302e30 2c20302e 3029202a .zw, 0.0, 0.0) * │ │ │ │ - 0x00cf2650 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00cf2660 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ - 0x00cf2670 3d206170 706c7942 696c6c62 6f617264 = applyBillboard │ │ │ │ - 0x00cf2680 5069766f 74547261 6e73666f 726d2870 PivotTransform(p │ │ │ │ - 0x00cf2690 69766f74 202a2075 5f70726f 6a656374 ivot * u_project │ │ │ │ - 0x00cf26a0 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ - 0x00cf26b0 73666f72 6d2c2030 2e302c20 6f666673 sform, 0.0, offs │ │ │ │ - 0x00cf26c0 65742e78 79293b20 0a202023 69666465 et.xy); . #ifde │ │ │ │ - 0x00cf26d0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00cf26e0 2020765f 636f6c6f 72203d20 74657874 v_color = text │ │ │ │ - 0x00cf26f0 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00cf2700 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ - 0x00cf2710 2e787929 3b200a20 2023656c 7365200a .xy); . #else . │ │ │ │ - 0x00cf2720 20202020 765f636f 6c6f7254 6578436f v_colorTexCo │ │ │ │ - 0x00cf2730 6f726473 203d2061 5f636f6c 6f725465 ords = a_colorTe │ │ │ │ - 0x00cf2740 78436f6f 7264732e 78793b20 0a202023 xCoords.xy; . # │ │ │ │ - 0x00cf2750 656e6469 66200a20 20202076 5f6e6f72 endif . v_nor │ │ │ │ - 0x00cf2760 6d616c20 3d20615f 6e6f726d 616c3b20 mal = a_normal; │ │ │ │ - 0x00cf2770 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00cf2780 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cf2790 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cf27a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cf27b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cf27c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cf27d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cf27e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cf27f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cf2800 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cf2810 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cf2820 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cf2830 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cf2840 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cf2850 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cf2860 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cf2870 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cf2880 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cf2890 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cf28a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cf28b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cf28c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cf28d0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00cf28e0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00cf28f0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00cf2900 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ - 0x00cf2910 0a202069 6e207665 63342061 5f6d6173 . in vec4 a_mas │ │ │ │ - 0x00cf2920 6b546578 436f6f72 643b200a 20206f75 kTexCoord; . ou │ │ │ │ - 0x00cf2930 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ - 0x00cf2940 78436f6f 72643b20 0a20206f 75742076 xCoord; . out v │ │ │ │ - 0x00cf2950 65633220 765f6d61 736b5465 78436f6f ec2 v_maskTexCoo │ │ │ │ - 0x00cf2960 72643b20 0a202075 6e69666f 726d206d rd; . uniform m │ │ │ │ - 0x00cf2970 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ - 0x00cf2980 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00cf2990 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00cf29a0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00cf29b0 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ - 0x00cf29c0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00cf29d0 20755f63 6f6e7472 61737447 616d6d61 u_contrastGamma │ │ │ │ - 0x00cf29e0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00cf29f0 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ - 0x00cf2a00 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00cf2a10 5f7a5363 616c653b 200a2020 756e6966 _zScale; . unif │ │ │ │ - 0x00cf2a20 6f726d20 666c6f61 7420755f 696e7465 orm float u_inte │ │ │ │ - 0x00cf2a30 72706f6c 6174696f 6e3b200a 2020756e rpolation; . un │ │ │ │ - 0x00cf2a40 69666f72 6d20666c 6f617420 755f6973 iform float u_is │ │ │ │ - 0x00cf2a50 4f75746c 696e6550 6173733b 200a2020 OutlinePass; . │ │ │ │ - 0x00cf2a60 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ - 0x00cf2a70 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ - 0x00cf2a80 31303030 2e303b20 0a202076 65633420 1000.0; . vec4 │ │ │ │ - 0x00cf2a90 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00cf2aa0 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ - 0x00cf2ab0 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ - 0x00cf2ac0 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ - 0x00cf2ad0 5265616c 5a29200a 20207b20 0a202020 RealZ) . { . │ │ │ │ - 0x00cf2ae0 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ - 0x00cf2af0 64506976 6f74203d 20706976 6f743b20 dPivot = pivot; │ │ │ │ - 0x00cf2b00 0a202020 20666c6f 61742077 203d2074 . float w = t │ │ │ │ - 0x00cf2b10 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cf2b20 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ - 0x00cf2b30 6d656450 69766f74 2e787977 203d2028 medPivot.xyw = ( │ │ │ │ - 0x00cf2b40 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00cf2b50 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ - 0x00cf2b60 64506976 6f742e78 792c2070 69766f74 dPivot.xy, pivot │ │ │ │ - 0x00cf2b70 5265616c 5a2c2077 29292e78 79773b20 RealZ, w)).xyw; │ │ │ │ - 0x00cf2b80 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00cf2b90 5069766f 742e7a20 2a3d2074 72616e73 Pivot.z *= trans │ │ │ │ - 0x00cf2ba0 666f726d 65645069 766f742e 77202f20 formedPivot.w / │ │ │ │ - 0x00cf2bb0 773b200a 20202369 66646566 2056554c w; . #ifdef VUL │ │ │ │ - 0x00cf2bc0 4b414e20 0a202020 20747261 6e73666f KAN . transfo │ │ │ │ - 0x00cf2bd0 726d6564 5069766f 742e7920 3d202d74 rmedPivot.y = -t │ │ │ │ - 0x00cf2be0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cf2bf0 793b200a 20202020 7472616e 73666f72 y; . transfor │ │ │ │ - 0x00cf2c00 6d656450 69766f74 2e7a203d 20287472 medPivot.z = (tr │ │ │ │ - 0x00cf2c10 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00cf2c20 20202b20 7472616e 73666f72 6d656450 + transformedP │ │ │ │ - 0x00cf2c30 69766f74 2e772920 2f20322e 303b200a ivot.w) / 2.0; . │ │ │ │ - 0x00cf2c40 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ - 0x00cf2c50 7475726e 20747261 6e73666f 726d6564 turn transformed │ │ │ │ - 0x00cf2c60 5069766f 743b200a 20207d20 0a202076 Pivot; . } . v │ │ │ │ - 0x00cf2c70 65633420 6170706c 7942696c 6c626f61 ec4 applyBillboa │ │ │ │ - 0x00cf2c80 72645069 766f7454 72616e73 666f726d rdPivotTransform │ │ │ │ - 0x00cf2c90 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00cf2ca0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00cf2cb0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00cf2cc0 6c5a2c20 76656332 206f6666 73657429 lZ, vec2 offset) │ │ │ │ - 0x00cf2cd0 200a2020 7b200a20 20202066 6c6f6174 . { . float │ │ │ │ - 0x00cf2ce0 206c6f67 69635a20 3d207069 766f742e logicZ = pivot. │ │ │ │ - 0x00cf2cf0 7a202f20 7069766f 742e773b 200a2020 z / pivot.w; . │ │ │ │ - 0x00cf2d00 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00cf2d10 65645069 766f7420 3d207069 766f7454 edPivot = pivotT │ │ │ │ - 0x00cf2d20 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ - 0x00cf2d30 7069766f 742e7879 2c207069 766f7452 pivot.xy, pivotR │ │ │ │ - 0x00cf2d40 65616c5a 2c207069 766f742e 77293b20 ealZ, pivot.w); │ │ │ │ - 0x00cf2d50 0a202020 20766563 34207363 616c6520 . vec4 scale │ │ │ │ - 0x00cf2d60 3d207069 766f7454 72616e73 666f726d = pivotTransform │ │ │ │ - 0x00cf2d70 202a2076 65633428 312e302c 202d312e * vec4(1.0, -1. │ │ │ │ - 0x00cf2d80 302c2030 2e302c20 312e3029 3b200a20 0, 0.0, 1.0); . │ │ │ │ - 0x00cf2d90 20202076 65633420 706f7369 74696f6e vec4 position │ │ │ │ - 0x00cf2da0 203d2076 65633428 7472616e 73666f72 = vec4(transfor │ │ │ │ - 0x00cf2db0 6d656450 69766f74 2e787920 2f207472 medPivot.xy / tr │ │ │ │ - 0x00cf2dc0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00cf2dd0 2c206c6f 6769635a 2c20312e 3029202b , logicZ, 1.0) + │ │ │ │ - 0x00cf2de0 20766563 34286f66 66736574 202f2073 vec4(offset / s │ │ │ │ - 0x00cf2df0 63616c65 2e77202a 20736361 6c652e78 cale.w * scale.x │ │ │ │ - 0x00cf2e00 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ - 0x00cf2e10 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ - 0x00cf2e20 20202070 6f736974 696f6e2e 79203d20 position.y = │ │ │ │ - 0x00cf2e30 2d706f73 6974696f 6e2e793b 200a2020 -position.y; . │ │ │ │ - 0x00cf2e40 2020706f 73697469 6f6e2e7a 203d2028 position.z = ( │ │ │ │ - 0x00cf2e50 706f7369 74696f6e 2e7a2020 2b20706f position.z + po │ │ │ │ - 0x00cf2e60 73697469 6f6e2e77 29202f20 322e303b sition.w) / 2.0; │ │ │ │ - 0x00cf2e70 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00cf2e80 72657475 726e2070 6f736974 696f6e3b return position; │ │ │ │ - 0x00cf2e90 200a2020 7d200a20 20766563 32206361 . } . vec2 ca │ │ │ │ - 0x00cf2ea0 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ - 0x00cf2eb0 64417869 73506f73 28766563 32206f72 dAxisPos(vec2 or │ │ │ │ - 0x00cf2ec0 6967696e 616c4178 6973506f 732c2076 iginalAxisPos, v │ │ │ │ - 0x00cf2ed0 65633220 73686966 74656450 6f732c20 ec2 shiftedPos, │ │ │ │ - 0x00cf2ee0 6d617434 206d6f64 656c5669 65772c20 mat4 modelView, │ │ │ │ - 0x00cf2ef0 666c6f61 74206861 6c665769 64746829 float halfWidth) │ │ │ │ - 0x00cf2f00 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ - 0x00cf2f10 70203d20 28766563 34287368 69667465 p = (vec4(shifte │ │ │ │ - 0x00cf2f20 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ - 0x00cf2f30 2a206d6f 64656c56 69657729 2e78793b * modelView).xy; │ │ │ │ - 0x00cf2f40 200a2020 20207665 63322064 203d2070 . vec2 d = p │ │ │ │ - 0x00cf2f50 202d206f 72696769 6e616c41 78697350 - originalAxisP │ │ │ │ - 0x00cf2f60 6f733b20 0a202020 20696620 28646f74 os; . if (dot │ │ │ │ - 0x00cf2f70 28642c20 64292021 3d20302e 3029200a (d, d) != 0.0) . │ │ │ │ - 0x00cf2f80 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00cf2f90 67696e61 6c417869 73506f73 202b206e ginalAxisPos + n │ │ │ │ - 0x00cf2fa0 6f726d61 6c697a65 28642920 2a206861 ormalize(d) * ha │ │ │ │ - 0x00cf2fb0 6c665769 6474683b 200a2020 2020656c lfWidth; . el │ │ │ │ - 0x00cf2fc0 7365200a 20202020 20207265 7475726e se . return │ │ │ │ - 0x00cf2fd0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00cf2fe0 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ - 0x00cf2ff0 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ - 0x00cf3000 76656332 206e6f72 6d616c20 3d20615f vec2 normal = a_ │ │ │ │ - 0x00cf3010 6e6f726d 616c2e78 793b200a 20202020 normal.xy; . │ │ │ │ - 0x00cf3020 666c6f61 74206861 6c665769 64746820 float halfWidth │ │ │ │ - 0x00cf3030 3d206c65 6e677468 286e6f72 6d616c29 = length(normal) │ │ │ │ - 0x00cf3040 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ - 0x00cf3050 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ - 0x00cf3060 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ - 0x00cf3070 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ - 0x00cf3080 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ - 0x00cf3090 793b200a 20202020 69662028 68616c66 y; . if (half │ │ │ │ - 0x00cf30a0 57696474 6820213d 20302e30 29200a20 Width != 0.0) . │ │ │ │ - 0x00cf30b0 2020207b 200a2020 20202020 7472616e { . tran │ │ │ │ - 0x00cf30c0 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ - 0x00cf30d0 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ - 0x00cf30e0 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ - 0x00cf30f0 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ - 0x00cf3100 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ - 0x00cf3110 6e6f726d 616c2c20 0a202020 20202020 normal, . │ │ │ │ - 0x00cf3120 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00cf3130 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00cf3140 20202020 20202020 20202020 20202075 u │ │ │ │ - 0x00cf3150 5f6d6f64 656c5669 65772c20 68616c66 _modelView, half │ │ │ │ - 0x00cf3160 57696474 68293b20 0a202020 207d200a Width); . } . │ │ │ │ - 0x00cf3170 20202020 666c6f61 7420754f 66667365 float uOffse │ │ │ │ - 0x00cf3180 74203d20 6d696e28 6c656e67 74682876 t = min(length(v │ │ │ │ - 0x00cf3190 65633428 6b536861 7065436f 6f726453 ec4(kShapeCoordS │ │ │ │ - 0x00cf31a0 63616c61 722c2030 2c20302c 20302920 calar, 0, 0, 0) │ │ │ │ - 0x00cf31b0 2a20755f 6d6f6465 6c566965 7729202a * u_modelView) * │ │ │ │ - 0x00cf31c0 20615f6d 61736b54 6578436f 6f72642e a_maskTexCoord. │ │ │ │ - 0x00cf31d0 782c2031 2e30293b 200a2020 2020765f x, 1.0); . v_ │ │ │ │ - 0x00cf31e0 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ - 0x00cf31f0 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ - 0x00cf3200 200a2020 2020765f 6d61736b 54657843 . v_maskTexC │ │ │ │ - 0x00cf3210 6f6f7264 203d2076 65633228 615f6d61 oord = vec2(a_ma │ │ │ │ - 0x00cf3220 736b5465 78436f6f 72642e79 202b2075 skTexCoord.y + u │ │ │ │ - 0x00cf3230 4f666673 6574202a 20615f6d 61736b54 Offset * a_maskT │ │ │ │ - 0x00cf3240 6578436f 6f72642e 7a2c2061 5f6d6173 exCoord.z, a_mas │ │ │ │ - 0x00cf3250 6b546578 436f6f72 642e7729 3b200a20 kTexCoord.w); . │ │ │ │ - 0x00cf3260 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ - 0x00cf3270 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ - 0x00cf3280 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ - 0x00cf3290 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ - 0x00cf32a0 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ - 0x00cf32b0 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00cf32c0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00cf32d0 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ - 0x00cf32e0 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ - 0x00cf32f0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00cf3300 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cf3310 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cf3320 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cf3330 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cf3340 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cf3350 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cf3360 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cf3370 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cf3380 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cf3390 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cf33a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cf33b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cf33c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cf33d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cf33e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cf33f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cf3400 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cf3410 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cf3420 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cf3430 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cf3440 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cf3450 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00cf3460 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00cf3470 72546578 436f6f72 64733b20 0a202069 rTexCoords; . i │ │ │ │ - 0x00cf3480 6e207665 63322061 5f6d6173 6b546578 n vec2 a_maskTex │ │ │ │ - 0x00cf3490 436f6f72 64733b20 0a202023 69666465 Coords; . #ifde │ │ │ │ - 0x00cf34a0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00cf34b0 6f757420 4c4f575f 50207665 63342076 out LOW_P vec4 v │ │ │ │ - 0x00cf34c0 5f636f6c 6f723b20 0a202023 656c7365 _color; . #else │ │ │ │ - 0x00cf34d0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00cf34e0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00cf34f0 20202365 6e646966 200a2020 6f757420 #endif . out │ │ │ │ - 0x00cf3500 76656332 20765f6d 61736b54 6578436f vec2 v_maskTexCo │ │ │ │ - 0x00cf3510 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ - 0x00cf3520 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ - 0x00cf3530 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ - 0x00cf3540 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ - 0x00cf3550 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00cf3560 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ - 0x00cf3570 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ - 0x00cf3580 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ - 0x00cf3590 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ - 0x00cf35a0 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00cf35b0 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00cf35c0 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ - 0x00cf35d0 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ - 0x00cf35e0 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ - 0x00cf35f0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00cf3600 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ - 0x00cf3610 20202369 66646566 20454e41 424c455f #ifdef ENABLE_ │ │ │ │ - 0x00cf3620 56544620 0a202075 6e69666f 726d2073 VTF . uniform s │ │ │ │ - 0x00cf3630 616d706c 65723244 20755f63 6f6c6f72 ampler2D u_color │ │ │ │ - 0x00cf3640 5465783b 200a2020 23656e64 6966200a Tex; . #endif . │ │ │ │ - 0x00cf3650 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ - 0x00cf3660 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ - 0x00cf3670 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ - 0x00cf3680 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ - 0x00cf3690 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00cf36a0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00cf36b0 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00cf36c0 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ - 0x00cf36d0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00cf36e0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00cf36f0 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ - 0x00cf3700 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cf3710 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ - 0x00cf3720 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ - 0x00cf3730 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ - 0x00cf3740 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ - 0x00cf3750 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ - 0x00cf3760 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ - 0x00cf3770 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00cf3780 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ - 0x00cf3790 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ - 0x00cf37a0 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ - 0x00cf37b0 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ - 0x00cf37c0 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ - 0x00cf37d0 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ - 0x00cf37e0 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ - 0x00cf37f0 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ - 0x00cf3800 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cf3810 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ - 0x00cf3820 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ - 0x00cf3830 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00cf3840 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ - 0x00cf3850 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ - 0x00cf3860 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ - 0x00cf3870 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ - 0x00cf3880 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00cf3890 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00cf38a0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00cf38b0 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ - 0x00cf38c0 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ - 0x00cf38d0 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ - 0x00cf38e0 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ - 0x00cf38f0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00cf3900 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00cf3910 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00cf3920 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ - 0x00cf3930 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ - 0x00cf3940 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ - 0x00cf3950 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ - 0x00cf3960 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ - 0x00cf3970 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ - 0x00cf3980 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ - 0x00cf3990 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ - 0x00cf39a0 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ - 0x00cf39b0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cf39c0 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ - 0x00cf39d0 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ - 0x00cf39e0 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ - 0x00cf39f0 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ - 0x00cf3a00 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00cf3a10 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ - 0x00cf3a20 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ - 0x00cf3a30 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ - 0x00cf3a40 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ - 0x00cf3a50 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ - 0x00cf3a60 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00cf3a70 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ - 0x00cf3a80 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ - 0x00cf3a90 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ - 0x00cf3aa0 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ - 0x00cf3ab0 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ - 0x00cf3ac0 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ - 0x00cf3ad0 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ - 0x00cf3ae0 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ - 0x00cf3af0 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ - 0x00cf3b00 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ - 0x00cf3b10 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ - 0x00cf3b20 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ - 0x00cf3b30 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ - 0x00cf3b40 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ - 0x00cf3b50 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ - 0x00cf3b60 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ - 0x00cf3b70 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00cf3b80 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ - 0x00cf3b90 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ - 0x00cf3ba0 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ - 0x00cf3bb0 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ - 0x00cf3bc0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00cf3bd0 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ - 0x00cf3be0 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00cf3bf0 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ - 0x00cf3c00 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ - 0x00cf3c10 202a2075 5f6d6f64 656c5669 6577202a * u_modelView * │ │ │ │ - 0x00cf3c20 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00cf3c30 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ - 0x00cf3c40 3d206170 706c7950 69766f74 5472616e = applyPivotTran │ │ │ │ - 0x00cf3c50 73666f72 6d28706f 732c2075 5f706976 sform(pos, u_piv │ │ │ │ - 0x00cf3c60 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ - 0x00cf3c70 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ - 0x00cf3c80 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ - 0x00cf3c90 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ - 0x00cf3ca0 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ - 0x00cf3cb0 6f725465 78436f6f 72647329 3b200a20 orTexCoords); . │ │ │ │ - 0x00cf3cc0 2023656c 7365200a 20202020 765f636f #else . v_co │ │ │ │ - 0x00cf3cd0 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ - 0x00cf3ce0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00cf3cf0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00cf3d00 765f6d61 736b5465 78436f6f 72647320 v_maskTexCoords │ │ │ │ - 0x00cf3d10 3d20615f 6d61736b 54657843 6f6f7264 = a_maskTexCoord │ │ │ │ - 0x00cf3d20 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ - 0x00cf3d30 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cf3d40 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cf3d50 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cf3d60 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cf3d70 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cf3d80 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cf3d90 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cf3da0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cf3db0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cf3dc0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cf3dd0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cf3de0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cf3df0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cf3e00 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cf3e10 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cf3e20 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cf3e30 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cf3e40 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cf3e50 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cf3e60 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cf3e70 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ - 0x00cf3e80 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ - 0x00cf3e90 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ - 0x00cf3ea0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00cf3eb0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ - 0x00cf3ec0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00cf3ed0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ - 0x00cf3ee0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ - 0x00cf3ef0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cf3f00 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ - 0x00cf3f10 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ - 0x00cf3f20 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ - 0x00cf3f30 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00cf3f40 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00cf3f50 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00cf3f60 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00cf3f70 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00cf3f80 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00cf3f90 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00cf3fa0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00cf3fb0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ - 0x00cf3fc0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ - 0x00cf3fd0 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ - 0x00cf3fe0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00cf3ff0 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ - 0x00cf4000 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ - 0x00cf4010 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ - 0x00cf4020 50617373 3b200a20 20636f6e 73742066 Pass; . const f │ │ │ │ - 0x00cf4030 6c6f6174 206b526f 77506572 696f6450 loat kRowPeriodP │ │ │ │ - 0x00cf4040 78203d20 382e303b 20202020 2f2f2076 x = 8.0; // v │ │ │ │ - 0x00cf4050 65727469 63616c20 64697374 616e6365 ertical distance │ │ │ │ - 0x00cf4060 20626574 7765656e 20646173 6820726f between dash ro │ │ │ │ - 0x00cf4070 7773200a 2020636f 6e737420 666c6f61 ws . const floa │ │ │ │ - 0x00cf4080 74206b52 6f774365 6e746572 5078203d t kRowCenterPx = │ │ │ │ - 0x00cf4090 20332e35 3b202020 202f2f20 66697273 3.5; // firs │ │ │ │ - 0x00cf40a0 7420726f 77206365 6e746572 20286d61 t row center (ma │ │ │ │ - 0x00cf40b0 74636865 73207468 65206c65 67616379 tches the legacy │ │ │ │ - 0x00cf40c0 2074696c 6529200a 2020636f 6e737420 tile) . const │ │ │ │ - 0x00cf40d0 666c6f61 74206b48 616c6654 6869636b float kHalfThick │ │ │ │ - 0x00cf40e0 5078203d 20302e35 3b202020 202f2f20 Px = 0.5; // │ │ │ │ - 0x00cf40f0 68616c66 20646173 68207468 69636b6e half dash thickn │ │ │ │ - 0x00cf4100 65737320 2d3e207e 31707820 0a202063 ess -> ~1px . c │ │ │ │ - 0x00cf4110 6f6e7374 20666c6f 6174206b 44617368 onst float kDash │ │ │ │ - 0x00cf4120 50657269 6f645078 203d2031 362e303b PeriodPx = 16.0; │ │ │ │ - 0x00cf4130 20202f2f 20646173 68202b20 67617020 // dash + gap │ │ │ │ - 0x00cf4140 6c656e67 7468200a 2020636f 6e737420 length . const │ │ │ │ - 0x00cf4150 666c6f61 74206b44 61736848 616c6650 float kDashHalfP │ │ │ │ - 0x00cf4160 78203d20 342e303b 20202020 202f2f20 x = 4.0; // │ │ │ │ - 0x00cf4170 68616c66 20646173 68206c65 6e677468 half dash length │ │ │ │ - 0x00cf4180 202d3e20 38707820 64617368 200a2020 -> 8px dash . │ │ │ │ - 0x00cf4190 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ - 0x00cf41a0 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ - 0x00cf41b0 31303030 2e303b20 0a20204c 4f575f50 1000.0; . LOW_P │ │ │ │ - 0x00cf41c0 20766563 33204d6f 64756c61 74654279 vec3 ModulateBy │ │ │ │ - 0x00cf41d0 50617474 65726e44 6f747328 4c4f575f PatternDots(LOW_ │ │ │ │ - 0x00cf41e0 50207665 63332063 6f6c6f72 2c20666c P vec3 color, fl │ │ │ │ - 0x00cf41f0 6f617420 6461726b 656e2c20 666c6f61 oat darken, floa │ │ │ │ - 0x00cf4200 7420636f 76657261 67652920 0a20207b t coverage) . { │ │ │ │ - 0x00cf4210 200a2020 2020636f 6e737420 666c6f61 . const floa │ │ │ │ - 0x00cf4220 74206b4c 69676874 656e203d 20302e30 t kLighten = 0.0 │ │ │ │ - 0x00cf4230 37353b20 0a202020 20696620 28646f74 75; . if (dot │ │ │ │ - 0x00cf4240 28636f6c 6f722c20 76656333 28302e32 (color, vec3(0.2 │ │ │ │ - 0x00cf4250 3132362c 20302e37 3135322c 20302e30 126, 0.7152, 0.0 │ │ │ │ - 0x00cf4260 37323229 29203c20 302e3529 200a2020 722)) < 0.5) . │ │ │ │ - 0x00cf4270 20202020 72657475 726e2063 6f6c6f72 return color │ │ │ │ - 0x00cf4280 202b2063 6f766572 61676520 2a206b4c + coverage * kL │ │ │ │ - 0x00cf4290 69676874 656e3b20 0a202020 20726574 ighten; . ret │ │ │ │ - 0x00cf42a0 75726e20 636f6c6f 72202a20 6d697828 urn color * mix( │ │ │ │ - 0x00cf42b0 312e302c 20646172 6b656e2c 20636f76 1.0, darken, cov │ │ │ │ - 0x00cf42c0 65726167 65293b20 0a20207d 200a2020 erage); . } . │ │ │ │ - 0x00cf42d0 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00cf42e0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00cf42f0 455f5654 46200a20 2020204c 4f575f50 E_VTF . LOW_P │ │ │ │ - 0x00cf4300 20766563 3420636f 6c6f7220 3d20765f vec4 color = v_ │ │ │ │ - 0x00cf4310 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ - 0x00cf4320 0a202020 204c4f57 5f502076 65633420 . LOW_P vec4 │ │ │ │ - 0x00cf4330 636f6c6f 72203d20 74657874 75726528 color = texture( │ │ │ │ - 0x00cf4340 755f636f 6c6f7254 65782c20 765f636f u_colorTex, v_co │ │ │ │ - 0x00cf4350 6c6f7254 6578436f 6f726473 293b200a lorTexCoords); . │ │ │ │ - 0x00cf4360 20202365 6e646966 200a2020 20207665 #endif . ve │ │ │ │ - 0x00cf4370 63322070 78203d20 765f6d61 736b5465 c2 px = v_maskTe │ │ │ │ - 0x00cf4380 78436f6f 72647320 2a203136 2e303b20 xCoords * 16.0; │ │ │ │ - 0x00cf4390 0a202020 20666c6f 61742079 6d203d20 . float ym = │ │ │ │ - 0x00cf43a0 6d6f6428 70782e79 202d206b 526f7743 mod(px.y - kRowC │ │ │ │ - 0x00cf43b0 656e7465 7250782c 206b526f 77506572 enterPx, kRowPer │ │ │ │ - 0x00cf43c0 696f6450 78293b20 0a202020 20666c6f iodPx); . flo │ │ │ │ - 0x00cf43d0 61742079 44697374 203d206d 696e2879 at yDist = min(y │ │ │ │ - 0x00cf43e0 6d2c206b 526f7750 6572696f 64507820 m, kRowPeriodPx │ │ │ │ - 0x00cf43f0 2d20796d 293b200a 20202020 666c6f61 - ym); . floa │ │ │ │ - 0x00cf4400 74206161 59203d20 66776964 74682870 t aaY = fwidth(p │ │ │ │ - 0x00cf4410 782e7929 3b200a20 20202066 6c6f6174 x.y); . float │ │ │ │ - 0x00cf4420 206f6e52 6f77203d 20312e30 202d2073 onRow = 1.0 - s │ │ │ │ - 0x00cf4430 6d6f6f74 68737465 70286b48 616c6654 moothstep(kHalfT │ │ │ │ - 0x00cf4440 6869636b 5078202d 20616159 2c206b48 hickPx - aaY, kH │ │ │ │ - 0x00cf4450 616c6654 6869636b 5078202b 20616159 alfThickPx + aaY │ │ │ │ - 0x00cf4460 2c207944 69737429 3b200a20 20202066 , yDist); . f │ │ │ │ - 0x00cf4470 6c6f6174 20726f77 49647820 3d20666c loat rowIdx = fl │ │ │ │ - 0x00cf4480 6f6f7228 2870782e 79202d20 6b526f77 oor((px.y - kRow │ │ │ │ - 0x00cf4490 43656e74 65725078 29202f20 6b526f77 CenterPx) / kRow │ │ │ │ - 0x00cf44a0 50657269 6f645078 202b2030 2e35293b PeriodPx + 0.5); │ │ │ │ - 0x00cf44b0 200a2020 2020666c 6f617420 78506861 . float xPha │ │ │ │ - 0x00cf44c0 7365203d 2070782e 78202b20 6d6f6428 se = px.x + mod( │ │ │ │ - 0x00cf44d0 726f7749 64782c20 322e3029 202a2028 rowIdx, 2.0) * ( │ │ │ │ - 0x00cf44e0 6b446173 68506572 696f6450 78202a20 kDashPeriodPx * │ │ │ │ - 0x00cf44f0 302e3529 3b200a20 20202066 6c6f6174 0.5); . float │ │ │ │ - 0x00cf4500 20784469 7374203d 20616273 286d6f64 xDist = abs(mod │ │ │ │ - 0x00cf4510 28785068 6173652c 206b4461 73685065 (xPhase, kDashPe │ │ │ │ - 0x00cf4520 72696f64 50782920 2d206b44 61736848 riodPx) - kDashH │ │ │ │ - 0x00cf4530 616c6650 78293b20 0a202020 20666c6f alfPx); . flo │ │ │ │ - 0x00cf4540 61742061 6158203d 20667769 64746828 at aaX = fwidth( │ │ │ │ - 0x00cf4550 70782e78 293b200a 20202020 666c6f61 px.x); . floa │ │ │ │ - 0x00cf4560 74206f6e 44617368 203d2031 2e30202d t onDash = 1.0 - │ │ │ │ - 0x00cf4570 20736d6f 6f746873 74657028 6b446173 smoothstep(kDas │ │ │ │ - 0x00cf4580 6848616c 66507820 2d206161 582c206b hHalfPx - aaX, k │ │ │ │ - 0x00cf4590 44617368 48616c66 5078202b 20616158 DashHalfPx + aaX │ │ │ │ - 0x00cf45a0 2c207844 69737429 3b200a20 20202063 , xDist); . c │ │ │ │ - 0x00cf45b0 6f6c6f72 2e61202a 3d206f6e 526f7720 olor.a *= onRow │ │ │ │ - 0x00cf45c0 2a206f6e 44617368 202a2075 5f6f7061 * onDash * u_opa │ │ │ │ - 0x00cf45d0 63697479 3b200a20 20202076 5f467261 city; . v_Fra │ │ │ │ - 0x00cf45e0 67436f6c 6f72203d 20636f6c 6f723b20 gColor = color; │ │ │ │ - 0x00cf45f0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00cf4600 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cf4610 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cf4620 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cf4630 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cf4640 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cf4650 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cf4660 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cf4670 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cf4680 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cf4690 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cf46a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cf46b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cf46c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cf46d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cf46e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cf46f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cf4700 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cf4710 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cf4720 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cf4730 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cf4740 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cf4750 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ - 0x00cf4760 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ - 0x00cf4770 6f6f7264 733b200a 2020696e 20766563 oords; . in vec │ │ │ │ - 0x00cf4780 3420615f 636f6c6f 723b200a 20206f75 4 a_color; . ou │ │ │ │ - 0x00cf4790 74207665 63322076 5f746578 436f6f72 t vec2 v_texCoor │ │ │ │ - 0x00cf47a0 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ - 0x00cf47b0 765f636f 6c6f723b 200a2020 756e6966 v_color; . unif │ │ │ │ - 0x00cf47c0 6f726d20 6d617434 20755f70 726f6a65 orm mat4 u_proje │ │ │ │ - 0x00cf47d0 6374696f 6e3b200a 2020636f 6e737420 ction; . const │ │ │ │ - 0x00cf47e0 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00cf47f0 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00cf4800 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ - 0x00cf4810 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00cf4820 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00cf4830 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00cf4840 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ - 0x00cf4850 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00cf4860 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cf4870 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ - 0x00cf4880 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ - 0x00cf4890 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ - 0x00cf48a0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00cf48b0 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ - 0x00cf48c0 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ - 0x00cf48d0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cf48e0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00cf48f0 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ - 0x00cf4900 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cf4910 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ - 0x00cf4920 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ - 0x00cf4930 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ - 0x00cf4940 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00cf4950 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ - 0x00cf4960 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ - 0x00cf4970 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00cf4980 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ - 0x00cf4990 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ - 0x00cf49a0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00cf49b0 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ - 0x00cf49c0 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ - 0x00cf49d0 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ - 0x00cf49e0 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ - 0x00cf49f0 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ - 0x00cf4a00 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ - 0x00cf4a10 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ - 0x00cf4a20 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ - 0x00cf4a30 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ - 0x00cf4a40 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ - 0x00cf4a50 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ - 0x00cf4a60 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ - 0x00cf4a70 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ - 0x00cf4a80 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cf4a90 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ - 0x00cf4aa0 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ - 0x00cf4ab0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00cf4ac0 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ - 0x00cf4ad0 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ - 0x00cf4ae0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00cf4af0 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ - 0x00cf4b00 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ - 0x00cf4b10 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ - 0x00cf4b20 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00cf4b30 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ - 0x00cf4b40 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ - 0x00cf4b50 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ - 0x00cf4b60 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ - 0x00cf4b70 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ - 0x00cf4b80 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ - 0x00cf4b90 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ - 0x00cf4ba0 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ - 0x00cf4bb0 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ - 0x00cf4bc0 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ - 0x00cf4bd0 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ - 0x00cf4be0 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00cf4bf0 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00cf4c00 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ - 0x00cf4c10 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ - 0x00cf4c20 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ - 0x00cf4c30 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ - 0x00cf4c40 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ - 0x00cf4c50 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ - 0x00cf4c60 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ - 0x00cf4c70 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ - 0x00cf4c80 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ - 0x00cf4c90 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ - 0x00cf4ca0 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ - 0x00cf4cb0 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ - 0x00cf4cc0 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ - 0x00cf4cd0 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00cf4ce0 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ - 0x00cf4cf0 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ - 0x00cf4d00 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00cf4d10 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ - 0x00cf4d20 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ - 0x00cf4d30 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ - 0x00cf4d40 20202020 72657475 726e206f 72696769 return origi │ │ │ │ - 0x00cf4d50 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ - 0x00cf4d60 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ - 0x00cf4d70 0a20207b 200a2020 2020765f 74657843 . { . v_texC │ │ │ │ - 0x00cf4d80 6f6f7264 73203d20 615f7465 78436f6f oords = a_texCoo │ │ │ │ - 0x00cf4d90 7264733b 200a2020 2020765f 636f6c6f rds; . v_colo │ │ │ │ - 0x00cf4da0 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ - 0x00cf4db0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00cf4dc0 76656334 28615f70 6f736974 696f6e2c vec4(a_position, │ │ │ │ - 0x00cf4dd0 20302c20 3129202a 20755f70 726f6a65 0, 1) * u_proje │ │ │ │ - 0x00cf4de0 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ - 0x00cf4df0 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ - 0x00cf4e00 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ - 0x00cf4e10 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ - 0x00cf4e20 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ - 0x00cf4e30 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ - 0x00cf4e40 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ - 0x00cf4e50 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ - 0x00cf4e60 64696620 0a20207d 200a0000 00000000 dif . } ....... │ │ │ │ - 0x00cf4e70 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cf4e80 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cf4e90 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cf4ea0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cf4eb0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cf4ec0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cf4ed0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cf4ee0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cf4ef0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cf4f00 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cf4f10 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cf4f20 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cf4f30 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cf4f40 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cf4f50 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cf4f60 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cf4f70 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cf4f80 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cf4f90 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cf4fa0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cf4fb0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cf4fc0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00cf4fd0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00cf4fe0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00cf4ff0 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ - 0x00cf5000 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ - 0x00cf5010 5f565446 200a2020 6f757420 4c4f575f _VTF . out LOW_ │ │ │ │ - 0x00cf5020 50207665 63342076 5f636f6c 6f723b20 P vec4 v_color; │ │ │ │ - 0x00cf5030 0a202023 656c7365 200a2020 6f757420 . #else . out │ │ │ │ - 0x00cf5040 76656332 20765f63 6f6c6f72 54657843 vec2 v_colorTexC │ │ │ │ - 0x00cf5050 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ - 0x00cf5060 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00cf5070 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ - 0x00cf5080 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ - 0x00cf5090 726f6a65 6374696f 6e3b200a 2020756e rojection; . un │ │ │ │ - 0x00cf50a0 69666f72 6d206d61 74342075 5f706976 iform mat4 u_piv │ │ │ │ - 0x00cf50b0 6f745472 616e7366 6f726d3b 200a2020 otTransform; . │ │ │ │ - 0x00cf50c0 756e6966 6f726d20 76656332 20755f63 uniform vec2 u_c │ │ │ │ - 0x00cf50d0 6f6e7472 61737447 616d6d61 3b200a20 ontrastGamma; . │ │ │ │ - 0x00cf50e0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00cf50f0 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ - 0x00cf5100 666f726d 20666c6f 61742075 5f7a5363 form float u_zSc │ │ │ │ - 0x00cf5110 616c653b 200a2020 756e6966 6f726d20 ale; . uniform │ │ │ │ - 0x00cf5120 666c6f61 7420755f 696e7465 72706f6c float u_interpol │ │ │ │ - 0x00cf5130 6174696f 6e3b200a 2020756e 69666f72 ation; . unifor │ │ │ │ - 0x00cf5140 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ - 0x00cf5150 696e6550 6173733b 200a2020 23696664 inePass; . #ifd │ │ │ │ - 0x00cf5160 65662045 4e41424c 455f5654 46200a20 ef ENABLE_VTF . │ │ │ │ - 0x00cf5170 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ - 0x00cf5180 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ - 0x00cf5190 20202365 6e646966 200a2020 636f6e73 #endif . cons │ │ │ │ - 0x00cf51a0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00cf51b0 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00cf51c0 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ - 0x00cf51d0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00cf51e0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00cf51f0 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00cf5200 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00cf5210 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ - 0x00cf5220 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00cf5230 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ - 0x00cf5240 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ - 0x00cf5250 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ - 0x00cf5260 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00cf5270 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ - 0x00cf5280 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00cf5290 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00cf52a0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00cf52b0 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ - 0x00cf52c0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cf52d0 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ - 0x00cf52e0 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ - 0x00cf52f0 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00cf5300 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00cf5310 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ - 0x00cf5320 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ - 0x00cf5330 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00cf5340 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ - 0x00cf5350 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ - 0x00cf5360 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cf5370 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00cf5380 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00cf5390 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cf53a0 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ - 0x00cf53b0 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00cf53c0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00cf53d0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00cf53e0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00cf53f0 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ - 0x00cf5400 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ - 0x00cf5410 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ - 0x00cf5420 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ - 0x00cf5430 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ - 0x00cf5440 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00cf5450 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ - 0x00cf5460 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ - 0x00cf5470 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00cf5480 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ - 0x00cf5490 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ - 0x00cf54a0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00cf54b0 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ - 0x00cf54c0 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ - 0x00cf54d0 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ - 0x00cf54e0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00cf54f0 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ - 0x00cf5500 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ - 0x00cf5510 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ - 0x00cf5520 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ - 0x00cf5530 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ - 0x00cf5540 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ - 0x00cf5550 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ - 0x00cf5560 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ - 0x00cf5570 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ - 0x00cf5580 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ - 0x00cf5590 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ - 0x00cf55a0 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ - 0x00cf55b0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00cf55c0 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ - 0x00cf55d0 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ - 0x00cf55e0 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ - 0x00cf55f0 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ - 0x00cf5600 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ - 0x00cf5610 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ - 0x00cf5620 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ - 0x00cf5630 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ - 0x00cf5640 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ - 0x00cf5650 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ - 0x00cf5660 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ - 0x00cf5670 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ - 0x00cf5680 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ - 0x00cf5690 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00cf56a0 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ - 0x00cf56b0 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ - 0x00cf56c0 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ - 0x00cf56d0 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ - 0x00cf56e0 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ - 0x00cf56f0 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ - 0x00cf5700 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00cf5710 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00cf5720 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ - 0x00cf5730 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00cf5740 206e6f72 6d616c20 3d20615f 6e6f726d normal = a_norm │ │ │ │ - 0x00cf5750 616c2e78 793b200a 20202020 666c6f61 al.xy; . floa │ │ │ │ - 0x00cf5760 74206861 6c665769 64746820 3d206c65 t halfWidth = le │ │ │ │ - 0x00cf5770 6e677468 286e6f72 6d616c29 3b200a20 ngth(normal); . │ │ │ │ - 0x00cf5780 20202076 65633220 7472616e 73666f72 vec2 transfor │ │ │ │ - 0x00cf5790 6d656441 78697350 6f73203d 20287665 medAxisPos = (ve │ │ │ │ - 0x00cf57a0 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ - 0x00cf57b0 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ - 0x00cf57c0 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ - 0x00cf57d0 20202020 69662028 68616c66 57696474 if (halfWidt │ │ │ │ - 0x00cf57e0 6820213d 20302e30 29200a20 2020207b h != 0.0) . { │ │ │ │ - 0x00cf57f0 200a2020 20202020 7472616e 73666f72 . transfor │ │ │ │ - 0x00cf5800 6d656441 78697350 6f73203d 2063616c medAxisPos = cal │ │ │ │ - 0x00cf5810 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ - 0x00cf5820 41786973 506f7328 7472616e 73666f72 AxisPos(transfor │ │ │ │ - 0x00cf5830 6d656441 78697350 6f732c20 615f706f medAxisPos, a_po │ │ │ │ - 0x00cf5840 73697469 6f6e2e78 79202b20 6e6f726d sition.xy + norm │ │ │ │ - 0x00cf5850 616c2c20 0a202020 20202020 20202020 al, . │ │ │ │ - 0x00cf5860 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00cf5870 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00cf5880 20202020 20202020 20202075 5f6d6f64 u_mod │ │ │ │ - 0x00cf5890 656c5669 65772c20 68616c66 57696474 elView, halfWidt │ │ │ │ - 0x00cf58a0 68293b20 0a202020 207d200a 20202369 h); . } . #i │ │ │ │ - 0x00cf58b0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00cf58c0 0a202020 20765f63 6f6c6f72 203d2074 . v_color = t │ │ │ │ - 0x00cf58d0 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ - 0x00cf58e0 782c2061 5f636f6c 6f725465 78436f6f x, a_colorTexCoo │ │ │ │ - 0x00cf58f0 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ - 0x00cf5900 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00cf5910 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ - 0x00cf5920 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ - 0x00cf5930 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ - 0x00cf5940 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00cf5950 41786973 506f732c 20615f70 6f736974 AxisPos, a_posit │ │ │ │ - 0x00cf5960 696f6e2e 7a2c2031 2e302920 2a20755f ion.z, 1.0) * u_ │ │ │ │ - 0x00cf5970 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ - 0x00cf5980 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ - 0x00cf5990 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00cf59a0 726d2870 6f732c20 755f7069 766f7454 rm(pos, u_pivotT │ │ │ │ - 0x00cf59b0 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ - 0x00cf59c0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00cf59d0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cf59e0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cf59f0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cf5a00 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cf5a10 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cf5a20 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cf5a30 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cf5a40 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cf5a50 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cf5a60 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cf5a70 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cf5a80 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cf5a90 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cf5aa0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cf5ab0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cf5ac0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cf5ad0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cf5ae0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cf5af0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cf5b00 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cf5b10 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cf5b20 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00cf5b30 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00cf5b40 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00cf5b50 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00cf5b60 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ - 0x00cf5b70 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ - 0x00cf5b80 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ - 0x00cf5b90 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ - 0x00cf5ba0 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ - 0x00cf5bb0 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ - 0x00cf5bc0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00cf5bd0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00cf5be0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00cf5bf0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00cf5c00 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00cf5c10 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00cf5c20 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00cf5c30 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00cf5c40 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00cf5c50 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00cf5c60 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00cf5c70 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00cf5c80 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00cf5c90 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00cf5ca0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00cf5cb0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00cf5cc0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00cf5cd0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00cf5ce0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00cf5cf0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00cf5d00 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00cf5d10 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00cf5d20 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00cf5d30 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00cf5d40 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00cf5d50 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00cf5d60 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00cf5d70 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00cf5d80 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00cf5d90 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00cf5da0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00cf5db0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00cf5dc0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00cf5dd0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00cf5de0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00cf5df0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cf5e00 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00cf5e10 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00cf5e20 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00cf5e30 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00cf5e40 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00cf5e50 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00cf5e60 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00cf5e70 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00cf5e80 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00cf5e90 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00cf5ea0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00cf5eb0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00cf5ec0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00cf5ed0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00cf5ee0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00cf5ef0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00cf5f00 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00cf5f10 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00cf5f20 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00cf5f30 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00cf5f40 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00cf5f50 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00cf5f60 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00cf5f70 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00cf5f80 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00cf5f90 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00cf5fa0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00cf5fb0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00cf5fc0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00cf5fd0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00cf5fe0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00cf5ff0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00cf6000 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00cf6010 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00cf6020 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00cf6030 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00cf6040 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00cf6050 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00cf6060 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00cf6070 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00cf6080 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00cf6090 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00cf60a0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00cf60b0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00cf60c0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00cf60d0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00cf60e0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00cf60f0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00cf6100 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00cf6110 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00cf6120 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00cf6130 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00cf6140 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00cf6150 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00cf6160 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00cf6170 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00cf6180 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00cf6190 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00cf61a0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00cf61b0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00cf61c0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00cf61d0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00cf61e0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00cf61f0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00cf6200 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00cf6210 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00cf6220 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00cf6230 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00cf6240 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00cf6250 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ - 0x00cf6260 65633428 615f706f 73697469 6f6e2e78 ec4(a_position.x │ │ │ │ - 0x00cf6270 797a2c20 3129202a 20755f6d 6f64656c yz, 1) * u_model │ │ │ │ - 0x00cf6280 56696577 3b200a20 20202076 65633420 View; . vec4 │ │ │ │ - 0x00cf6290 73686966 74656450 6f73203d 20766563 shiftedPos = vec │ │ │ │ - 0x00cf62a0 3428615f 6e6f726d 616c2c20 302c2030 4(a_normal, 0, 0 │ │ │ │ - 0x00cf62b0 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ - 0x00cf62c0 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ - 0x00cf62d0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00cf62e0 73686966 74656450 6f73202a 20755f70 shiftedPos * u_p │ │ │ │ - 0x00cf62f0 726f6a65 6374696f 6e2c2075 5f706976 rojection, u_piv │ │ │ │ - 0x00cf6300 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ - 0x00cf6310 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ - 0x00cf6320 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ - 0x00cf6330 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00cf6340 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ - 0x00cf6350 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ - 0x00cf6360 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ - 0x00cf6370 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cf6380 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cf6390 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cf63a0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cf63b0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cf63c0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cf63d0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cf63e0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cf63f0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cf6400 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cf6410 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cf6420 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cf6430 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cf6440 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cf6450 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cf6460 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cf6470 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cf6480 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cf6490 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cf64a0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cf64b0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cf64c0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00cf64d0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00cf64e0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00cf64f0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00cf6500 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ - 0x00cf6510 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ - 0x00cf6520 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ - 0x00cf6530 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ - 0x00cf6540 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ - 0x00cf6550 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ - 0x00cf6560 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00cf6570 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00cf6580 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00cf6590 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00cf65a0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00cf65b0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00cf65c0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00cf65d0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00cf65e0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ - 0x00cf65f0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00cf6600 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00cf6610 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00cf6620 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ - 0x00cf6630 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00cf6640 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ - 0x00cf6650 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00cf6660 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00cf6670 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00cf6680 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00cf6690 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00cf66a0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00cf66b0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00cf66c0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00cf66d0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00cf66e0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00cf66f0 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00cf6700 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00cf6710 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00cf6720 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00cf6730 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00cf6740 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00cf6750 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00cf6760 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00cf6770 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00cf6780 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00cf6790 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cf67a0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00cf67b0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00cf67c0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00cf67d0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00cf67e0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00cf67f0 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00cf6800 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00cf6810 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00cf6820 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00cf6830 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00cf6840 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00cf6850 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00cf6860 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00cf6870 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00cf6880 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00cf6890 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00cf68a0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00cf68b0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00cf68c0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00cf68d0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00cf68e0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00cf68f0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00cf6900 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00cf6910 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00cf6920 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00cf6930 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00cf6940 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00cf6950 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00cf6960 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00cf6970 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00cf6980 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00cf6990 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00cf69a0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00cf69b0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00cf69c0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00cf69d0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00cf69e0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00cf69f0 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00cf6a00 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00cf6a10 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00cf6a20 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00cf6a30 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00cf6a40 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00cf6a50 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00cf6a60 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00cf6a70 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00cf6a80 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00cf6a90 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00cf6aa0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00cf6ab0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00cf6ac0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00cf6ad0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00cf6ae0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00cf6af0 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00cf6b00 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00cf6b10 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00cf6b20 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00cf6b30 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00cf6b40 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00cf6b50 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00cf6b60 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00cf6b70 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00cf6b80 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00cf6b90 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00cf6ba0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00cf6bb0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00cf6bc0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00cf6bd0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00cf6be0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00cf6bf0 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ - 0x00cf6c00 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ - 0x00cf6c10 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ - 0x00cf6c20 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ - 0x00cf6c30 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ - 0x00cf6c40 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ - 0x00cf6c50 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ - 0x00cf6c60 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ - 0x00cf6c70 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ - 0x00cf6c80 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00cf6c90 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ - 0x00cf6ca0 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ - 0x00cf6cb0 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ - 0x00cf6cc0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00cf6cd0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00cf6ce0 20202020 20202020 20202020 2020615f a_ │ │ │ │ - 0x00cf6cf0 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ - 0x00cf6d00 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ - 0x00cf6d10 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ - 0x00cf6d20 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ - 0x00cf6d30 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00cf6d40 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ - 0x00cf6d50 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ - 0x00cf6d60 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ - 0x00cf6d70 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cf6d80 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cf6d90 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cf6da0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cf6db0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cf6dc0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cf6dd0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cf6de0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cf6df0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cf6e00 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cf6e10 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cf6e20 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cf6e30 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cf6e40 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cf6e50 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cf6e60 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cf6e70 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cf6e80 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cf6e90 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cf6ea0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cf6eb0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cf6ec0 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ - 0x00cf6ed0 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ - 0x00cf6ee0 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ - 0x00cf6ef0 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ - 0x00cf6f00 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ - 0x00cf6f10 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00cf6f20 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00cf6f30 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00cf6f40 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00cf6f50 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00cf6f60 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00cf6f70 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ - 0x00cf6f80 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00cf6f90 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ - 0x00cf6fa0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00cf6fb0 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ - 0x00cf6fc0 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ - 0x00cf6fd0 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ - 0x00cf6fe0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00cf6ff0 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ - 0x00cf7000 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ - 0x00cf7010 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00cf7020 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00cf7030 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ - 0x00cf7040 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00cf7050 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00cf7060 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00cf7070 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00cf7080 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ - 0x00cf7090 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00cf70a0 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ - 0x00cf70b0 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ - 0x00cf70c0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cf70d0 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ - 0x00cf70e0 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ - 0x00cf70f0 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ - 0x00cf7100 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ - 0x00cf7110 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ - 0x00cf7120 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ - 0x00cf7130 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00cf7140 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ - 0x00cf7150 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ - 0x00cf7160 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ - 0x00cf7170 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ - 0x00cf7180 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ - 0x00cf7190 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cf71a0 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ - 0x00cf71b0 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ - 0x00cf71c0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cf71d0 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ - 0x00cf71e0 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ - 0x00cf71f0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00cf7200 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ - 0x00cf7210 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ - 0x00cf7220 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ - 0x00cf7230 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ - 0x00cf7240 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00cf7250 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00cf7260 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00cf7270 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ - 0x00cf7280 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ - 0x00cf7290 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ - 0x00cf72a0 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ - 0x00cf72b0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00cf72c0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00cf72d0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00cf72e0 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ - 0x00cf72f0 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ - 0x00cf7300 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ - 0x00cf7310 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00cf7320 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ - 0x00cf7330 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ - 0x00cf7340 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ - 0x00cf7350 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ - 0x00cf7360 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ - 0x00cf7370 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cf7380 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ - 0x00cf7390 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ - 0x00cf73a0 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ - 0x00cf73b0 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ - 0x00cf73c0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00cf73d0 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ - 0x00cf73e0 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ - 0x00cf73f0 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ - 0x00cf7400 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ - 0x00cf7410 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ - 0x00cf7420 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00cf7430 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ - 0x00cf7440 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ - 0x00cf7450 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ - 0x00cf7460 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ - 0x00cf7470 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ - 0x00cf7480 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ - 0x00cf7490 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ - 0x00cf74a0 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ - 0x00cf74b0 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00cf74c0 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ - 0x00cf74d0 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ - 0x00cf74e0 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ - 0x00cf74f0 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ - 0x00cf7500 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ - 0x00cf7510 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ - 0x00cf7520 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ - 0x00cf7530 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00cf7540 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ - 0x00cf7550 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ - 0x00cf7560 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ - 0x00cf7570 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ - 0x00cf7580 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00cf7590 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ - 0x00cf75a0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00cf75b0 20666c6f 61742073 696e5620 3d207369 float sinV = si │ │ │ │ - 0x00cf75c0 6e28755f 617a696d 7574293b 200a2020 n(u_azimut); . │ │ │ │ - 0x00cf75d0 2020666c 6f617420 636f7356 203d2063 float cosV = c │ │ │ │ - 0x00cf75e0 6f732875 5f617a69 6d757429 3b200a20 os(u_azimut); . │ │ │ │ - 0x00cf75f0 2020206d 61743420 726f7461 74696f6e mat4 rotation │ │ │ │ - 0x00cf7600 3b200a20 20202072 6f746174 696f6e5b ; . rotation[ │ │ │ │ - 0x00cf7610 305d203d 20766563 3428636f 73562c20 0] = vec4(cosV, │ │ │ │ - 0x00cf7620 73696e56 2c20302e 302c2030 2e30293b sinV, 0.0, 0.0); │ │ │ │ - 0x00cf7630 200a2020 2020726f 74617469 6f6e5b31 . rotation[1 │ │ │ │ - 0x00cf7640 5d203d20 76656334 282d7369 6e562c20 ] = vec4(-sinV, │ │ │ │ - 0x00cf7650 636f7356 2c20302e 302c2030 2e30293b cosV, 0.0, 0.0); │ │ │ │ - 0x00cf7660 200a2020 2020726f 74617469 6f6e5b32 . rotation[2 │ │ │ │ - 0x00cf7670 5d203d20 76656334 28302e30 2c20302e ] = vec4(0.0, 0. │ │ │ │ - 0x00cf7680 302c2031 2e302c20 302e3029 3b200a20 0, 1.0, 0.0); . │ │ │ │ - 0x00cf7690 20202072 6f746174 696f6e5b 335d203d rotation[3] = │ │ │ │ - 0x00cf76a0 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ - 0x00cf76b0 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ - 0x00cf76c0 76656334 20706f73 203d2076 65633428 vec4 pos = vec4( │ │ │ │ - 0x00cf76d0 755f706f 73697469 6f6e2e78 797a2c20 u_position.xyz, │ │ │ │ - 0x00cf76e0 312e3029 202a2075 5f6d6f64 656c5669 1.0) * u_modelVi │ │ │ │ - 0x00cf76f0 65773b20 0a202020 20766563 34206e6f ew; . vec4 no │ │ │ │ - 0x00cf7700 726d616c 203d2076 65633428 615f6e6f rmal = vec4(a_no │ │ │ │ - 0x00cf7710 726d616c 2c20302c 2030293b 200a2020 rmal, 0, 0); . │ │ │ │ - 0x00cf7720 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ - 0x00cf7730 73203d20 6e6f726d 616c202a 20726f74 s = normal * rot │ │ │ │ - 0x00cf7740 6174696f 6e202b20 706f733b 200a2020 ation + pos; . │ │ │ │ - 0x00cf7750 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00cf7760 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00cf7770 6f726d28 73686966 74656450 6f73202a orm(shiftedPos * │ │ │ │ - 0x00cf7780 20755f70 726f6a65 6374696f 6e2c2075 u_projection, u │ │ │ │ - 0x00cf7790 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ - 0x00cf77a0 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ - 0x00cf77b0 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ - 0x00cf77c0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00cf77d0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00cf77e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cf77f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cf7800 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cf7810 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cf7820 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cf7830 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cf7840 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cf7850 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cf7860 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cf7870 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cf7880 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cf7890 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cf78a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cf78b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cf78c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cf78d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cf78e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cf78f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cf7900 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cf7910 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cf7920 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cf7930 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00cf7940 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00cf7950 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00cf7960 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00cf7970 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00cf7980 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00cf7990 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00cf79a0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00cf79b0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00cf79c0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00cf79d0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00cf79e0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00cf79f0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00cf7a00 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00cf7a10 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00cf7a20 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00cf7a30 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00cf7a40 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00cf7a50 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00cf7a60 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00cf7a70 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00cf7a80 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00cf7a90 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00cf7aa0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00cf7ab0 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00cf7ac0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00cf7ad0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00cf7ae0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00cf7af0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00cf7b00 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00cf7b10 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cf7b20 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00cf7b30 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00cf7b40 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00cf7b50 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00cf7b60 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00cf7b70 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00cf7b80 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00cf7b90 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00cf7ba0 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00cf7bb0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cf7bc0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00cf7bd0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00cf7be0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00cf7bf0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00cf7c00 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00cf7c10 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00cf7c20 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00cf7c30 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00cf7c40 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00cf7c50 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cf7c60 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00cf7c70 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00cf7c80 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cf7c90 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00cf7ca0 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00cf7cb0 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00cf7cc0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00cf7cd0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00cf7ce0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00cf7cf0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00cf7d00 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00cf7d10 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00cf7d20 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00cf7d30 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00cf7d40 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00cf7d50 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00cf7d60 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00cf7d70 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00cf7d80 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00cf7d90 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00cf7da0 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00cf7db0 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00cf7dc0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00cf7dd0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00cf7de0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00cf7df0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00cf7e00 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00cf7e10 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00cf7e20 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00cf7e30 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00cf7e40 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00cf7e50 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00cf7e60 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00cf7e70 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00cf7e80 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00cf7e90 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00cf7ea0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00cf7eb0 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00cf7ec0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00cf7ed0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00cf7ee0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00cf7ef0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00cf7f00 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00cf7f10 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00cf7f20 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00cf7f30 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00cf7f40 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00cf7f50 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00cf7f60 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00cf7f70 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00cf7f80 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00cf7f90 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00cf7fa0 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00cf7fb0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00cf7fc0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00cf7fd0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00cf7fe0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00cf7ff0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00cf8000 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00cf8010 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00cf8020 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00cf8030 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ - 0x00cf8040 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ - 0x00cf8050 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ - 0x00cf8060 2020666c 6f617420 6e6f726d 616c4c65 float normalLe │ │ │ │ - 0x00cf8070 6e203d20 6c656e67 74682861 5f6e6f72 n = length(a_nor │ │ │ │ - 0x00cf8080 6d616c29 3b200a20 20202076 65633420 mal); . vec4 │ │ │ │ - 0x00cf8090 6e203d20 76656334 28615f70 6f736974 n = vec4(a_posit │ │ │ │ - 0x00cf80a0 696f6e2e 7879202b 20615f6e 6f726d61 ion.xy + a_norma │ │ │ │ - 0x00cf80b0 6c202a20 6b536861 7065436f 6f726453 l * kShapeCoordS │ │ │ │ - 0x00cf80c0 63616c61 722c2030 2e302c20 302e3029 calar, 0.0, 0.0) │ │ │ │ - 0x00cf80d0 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ - 0x00cf80e0 0a202020 20766563 34206e6f 726d203d . vec4 norm = │ │ │ │ - 0x00cf80f0 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ - 0x00cf8100 302e302c 20302e30 293b200a 20202020 0.0, 0.0); . │ │ │ │ - 0x00cf8110 69662028 646f7428 6e2c206e 2920213d if (dot(n, n) != │ │ │ │ - 0x00cf8120 20302e30 29200a20 20202020 206e6f72 0.0) . nor │ │ │ │ - 0x00cf8130 6d203d20 6e6f726d 616c697a 65286e29 m = normalize(n) │ │ │ │ - 0x00cf8140 202a206e 6f726d61 6c4c656e 3b200a20 * normalLen; . │ │ │ │ - 0x00cf8150 20202076 65633420 73686966 74656450 vec4 shiftedP │ │ │ │ - 0x00cf8160 6f73203d 206e6f72 6d202b20 706f733b os = norm + pos; │ │ │ │ - 0x00cf8170 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ - 0x00cf8180 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ - 0x00cf8190 616e7366 6f726d28 73686966 74656450 ansform(shiftedP │ │ │ │ - 0x00cf81a0 6f73202a 20755f70 726f6a65 6374696f os * u_projectio │ │ │ │ - 0x00cf81b0 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ - 0x00cf81c0 6f726d2c 20302e30 293b200a 20202020 orm, 0.0); . │ │ │ │ - 0x00cf81d0 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ - 0x00cf81e0 203d2061 5f636f6c 6f725465 78436f6f = a_colorTexCoo │ │ │ │ - 0x00cf81f0 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ - 0x00cf8200 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cf8210 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cf8220 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cf8230 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cf8240 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cf8250 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cf8260 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cf8270 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cf8280 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cf8290 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cf82a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cf82b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cf82c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cf82d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cf82e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cf82f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cf8300 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cf8310 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cf8320 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cf8330 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cf8340 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cf8350 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ - 0x00cf8360 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ - 0x00cf8370 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ - 0x00cf8380 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ - 0x00cf8390 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ - 0x00cf83a0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00cf83b0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00cf83c0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00cf83d0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00cf83e0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00cf83f0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00cf8400 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ - 0x00cf8410 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00cf8420 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ - 0x00cf8430 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00cf8440 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ - 0x00cf8450 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ - 0x00cf8460 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ - 0x00cf8470 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00cf8480 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ - 0x00cf8490 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ - 0x00cf84a0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00cf84b0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00cf84c0 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ - 0x00cf84d0 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00cf84e0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00cf84f0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00cf8500 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00cf8510 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ - 0x00cf8520 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00cf8530 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ - 0x00cf8540 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ - 0x00cf8550 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cf8560 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ - 0x00cf8570 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ - 0x00cf8580 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ - 0x00cf8590 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ - 0x00cf85a0 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ - 0x00cf85b0 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ - 0x00cf85c0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00cf85d0 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ - 0x00cf85e0 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ - 0x00cf85f0 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ - 0x00cf8600 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ - 0x00cf8610 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ - 0x00cf8620 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cf8630 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ - 0x00cf8640 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ - 0x00cf8650 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cf8660 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ - 0x00cf8670 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ - 0x00cf8680 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00cf8690 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ - 0x00cf86a0 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ - 0x00cf86b0 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ - 0x00cf86c0 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ - 0x00cf86d0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00cf86e0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00cf86f0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00cf8700 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ - 0x00cf8710 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ - 0x00cf8720 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ - 0x00cf8730 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ - 0x00cf8740 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00cf8750 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00cf8760 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00cf8770 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ - 0x00cf8780 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ - 0x00cf8790 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ - 0x00cf87a0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00cf87b0 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ - 0x00cf87c0 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ - 0x00cf87d0 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ - 0x00cf87e0 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ - 0x00cf87f0 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ - 0x00cf8800 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cf8810 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ - 0x00cf8820 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ - 0x00cf8830 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ - 0x00cf8840 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ - 0x00cf8850 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00cf8860 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ - 0x00cf8870 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ - 0x00cf8880 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ - 0x00cf8890 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ - 0x00cf88a0 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ - 0x00cf88b0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00cf88c0 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ - 0x00cf88d0 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ - 0x00cf88e0 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ - 0x00cf88f0 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ - 0x00cf8900 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ - 0x00cf8910 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ - 0x00cf8920 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ - 0x00cf8930 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ - 0x00cf8940 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00cf8950 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ - 0x00cf8960 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ - 0x00cf8970 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ - 0x00cf8980 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ - 0x00cf8990 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ - 0x00cf89a0 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ - 0x00cf89b0 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ - 0x00cf89c0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00cf89d0 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ - 0x00cf89e0 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ - 0x00cf89f0 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ - 0x00cf8a00 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ - 0x00cf8a10 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00cf8a20 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ - 0x00cf8a30 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00cf8a40 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ - 0x00cf8a50 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ - 0x00cf8a60 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ - 0x00cf8a70 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ - 0x00cf8a80 20202076 65633420 6e6f726d 616c203d vec4 normal = │ │ │ │ - 0x00cf8a90 20766563 3428615f 6e6f726d 616c202a vec4(a_normal * │ │ │ │ - 0x00cf8aa0 20755f61 63637572 6163792c 20302e30 u_accuracy, 0.0 │ │ │ │ - 0x00cf8ab0 2c20302e 30293b20 0a202020 20706f73 , 0.0); . pos │ │ │ │ - 0x00cf8ac0 6974696f 6e203d20 28706f73 6974696f ition = (positio │ │ │ │ - 0x00cf8ad0 6e202b20 6e6f726d 616c2920 2a20755f n + normal) * u_ │ │ │ │ - 0x00cf8ae0 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ - 0x00cf8af0 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ - 0x00cf8b00 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00cf8b10 726d2870 6f736974 696f6e2c 20755f70 rm(position, u_p │ │ │ │ - 0x00cf8b20 69766f74 5472616e 73666f72 6d2c2075 ivotTransform, u │ │ │ │ - 0x00cf8b30 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ - 0x00cf8b40 7a536361 6c65293b 200a2020 2020765f zScale); . v_ │ │ │ │ - 0x00cf8b50 636f6c6f 72546578 436f6f72 6473203d colorTexCoords = │ │ │ │ - 0x00cf8b60 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ - 0x00cf8b70 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ - 0x00cf8b80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cf8b90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cf8ba0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cf8bb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cf8bc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cf8bd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cf8be0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cf8bf0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cf8c00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cf8c10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cf8c20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cf8c30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cf8c40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cf8c50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cf8c60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cf8c70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cf8c80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cf8c90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cf8ca0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cf8cb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cf8cc0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cf8cd0 63332076 5f6c656e 6774683b 200a2020 c3 v_length; . │ │ │ │ - 0x00cf8ce0 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ - 0x00cf8cf0 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ - 0x00cf8d00 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ - 0x00cf8d10 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00cf8d20 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00cf8d30 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00cf8d40 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00cf8d50 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00cf8d60 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00cf8d70 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ - 0x00cf8d80 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ - 0x00cf8d90 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ - 0x00cf8da0 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00cf8db0 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ - 0x00cf8dc0 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ - 0x00cf8dd0 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ - 0x00cf8de0 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ - 0x00cf8df0 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ - 0x00cf8e00 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ - 0x00cf8e10 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ - 0x00cf8e20 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ - 0x00cf8e30 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ - 0x00cf8e40 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ - 0x00cf8e50 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ - 0x00cf8e60 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ - 0x00cf8e70 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ - 0x00cf8e80 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ - 0x00cf8e90 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ - 0x00cf8ea0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ - 0x00cf8eb0 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ - 0x00cf8ec0 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ - 0x00cf8ed0 67546872 6573686f 6c64203d 20302e39 gThreshold = 0.9 │ │ │ │ - 0x00cf8ee0 323b200a 2020636f 6e737420 666c6f61 2; . const floa │ │ │ │ - 0x00cf8ef0 74206b4f 75746c69 6e655468 72657368 t kOutlineThresh │ │ │ │ - 0x00cf8f00 6f6c6431 203d2030 2e38313b 200a2020 old1 = 0.81; . │ │ │ │ - 0x00cf8f10 636f6e73 7420666c 6f617420 6b4f7574 const float kOut │ │ │ │ - 0x00cf8f20 6c696e65 54687265 73686f6c 6432203d lineThreshold2 = │ │ │ │ - 0x00cf8f30 20302e37 313b200a 2020636f 6e737420 0.71; . const │ │ │ │ - 0x00cf8f40 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00cf8f50 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00cf8f60 3b200a20 204c4f57 5f502076 65633320 ; . LOW_P vec3 │ │ │ │ - 0x00cf8f70 4d6f6475 6c617465 42795061 74746572 ModulateByPatter │ │ │ │ - 0x00cf8f80 6e446f74 73284c4f 575f5020 76656333 nDots(LOW_P vec3 │ │ │ │ - 0x00cf8f90 20636f6c 6f722c20 666c6f61 74206461 color, float da │ │ │ │ - 0x00cf8fa0 726b656e 2c20666c 6f617420 636f7665 rken, float cove │ │ │ │ - 0x00cf8fb0 72616765 29200a20 207b200a 20202020 rage) . { . │ │ │ │ - 0x00cf8fc0 636f6e73 7420666c 6f617420 6b4c6967 const float kLig │ │ │ │ - 0x00cf8fd0 6874656e 203d2030 2e303735 3b200a20 hten = 0.075; . │ │ │ │ - 0x00cf8fe0 20202069 66202864 6f742863 6f6c6f72 if (dot(color │ │ │ │ - 0x00cf8ff0 2c207665 63332830 2e323132 362c2030 , vec3(0.2126, 0 │ │ │ │ - 0x00cf9000 2e373135 322c2030 2e303732 32292920 .7152, 0.0722)) │ │ │ │ - 0x00cf9010 3c20302e 3529200a 20202020 20207265 < 0.5) . re │ │ │ │ - 0x00cf9020 7475726e 20636f6c 6f72202b 20636f76 turn color + cov │ │ │ │ - 0x00cf9030 65726167 65202a20 6b4c6967 6874656e erage * kLighten │ │ │ │ - 0x00cf9040 3b200a20 20202072 65747572 6e20636f ; . return co │ │ │ │ - 0x00cf9050 6c6f7220 2a206d69 7828312e 302c2064 lor * mix(1.0, d │ │ │ │ - 0x00cf9060 61726b65 6e2c2063 6f766572 61676529 arken, coverage) │ │ │ │ - 0x00cf9070 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ - 0x00cf9080 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ - 0x00cf9090 69662028 765f6c65 6e677468 2e78203c if (v_length.x < │ │ │ │ - 0x00cf90a0 20765f6c 656e6774 682e7a29 200a2020 v_length.z) . │ │ │ │ - 0x00cf90b0 20202020 64697363 6172643b 200a2020 discard; . │ │ │ │ - 0x00cf90c0 20207665 63322063 6f656673 203d2073 vec2 coefs = s │ │ │ │ - 0x00cf90d0 74657028 765f6c65 6e677468 2e78782c tep(v_length.xx, │ │ │ │ - 0x00cf90e0 20755f66 616b6542 6f726465 7273293b u_fakeBorders); │ │ │ │ - 0x00cf90f0 200a2020 2020636f 6566732e 79203d20 . coefs.y = │ │ │ │ - 0x00cf9100 312e3020 2d20636f 6566732e 793b200a 1.0 - coefs.y; . │ │ │ │ - 0x00cf9110 20202020 76656334 206d6169 6e436f6c vec4 mainCol │ │ │ │ - 0x00cf9120 6f72203d 206d6978 28755f63 6f6c6f72 or = mix(u_color │ │ │ │ - 0x00cf9130 2c20755f 66616b65 436f6c6f 722c2063 , u_fakeColor, c │ │ │ │ - 0x00cf9140 6f656673 2e78293b 200a2020 20206d61 oefs.x); . ma │ │ │ │ - 0x00cf9150 696e436f 6c6f7220 3d206d69 78286d61 inColor = mix(ma │ │ │ │ - 0x00cf9160 696e436f 6c6f722c 20755f66 616b6543 inColor, u_fakeC │ │ │ │ - 0x00cf9170 6f6c6f72 2c20636f 6566732e 79293b20 olor, coefs.y); │ │ │ │ - 0x00cf9180 0a202020 20766563 34206d61 696e4f75 . vec4 mainOu │ │ │ │ - 0x00cf9190 746c696e 65436f6c 6f72203d 206d6978 tlineColor = mix │ │ │ │ - 0x00cf91a0 28755f6f 75746c69 6e65436f 6c6f722c (u_outlineColor, │ │ │ │ - 0x00cf91b0 20755f66 616b654f 75746c69 6e65436f u_fakeOutlineCo │ │ │ │ - 0x00cf91c0 6c6f722c 20636f65 66732e78 293b200a lor, coefs.x); . │ │ │ │ - 0x00cf91d0 20202020 6d61696e 4f75746c 696e6543 mainOutlineC │ │ │ │ - 0x00cf91e0 6f6c6f72 203d206d 6978286d 61696e4f olor = mix(mainO │ │ │ │ - 0x00cf91f0 75746c69 6e65436f 6c6f722c 20755f66 utlineColor, u_f │ │ │ │ - 0x00cf9200 616b654f 75746c69 6e65436f 6c6f722c akeOutlineColor, │ │ │ │ - 0x00cf9210 20636f65 66732e79 293b200a 20202020 coefs.y); . │ │ │ │ - 0x00cf9220 76656334 20636f6c 6f72203d 206d6978 vec4 color = mix │ │ │ │ - 0x00cf9230 286d6978 286d6169 6e436f6c 6f722c20 (mix(mainColor, │ │ │ │ - 0x00cf9240 76656334 28765f63 6f6c6f72 2e726762 vec4(v_color.rgb │ │ │ │ - 0x00cf9250 2c20312e 30292c20 765f636f 6c6f722e , 1.0), v_color. │ │ │ │ - 0x00cf9260 61292c20 6d61696e 436f6c6f 722c2073 a), mainColor, s │ │ │ │ - 0x00cf9270 74657028 755f726f 75746550 6172616d tep(u_routeParam │ │ │ │ - 0x00cf9280 732e772c 20302e30 29293b20 0a202020 s.w, 0.0)); . │ │ │ │ - 0x00cf9290 20636f6c 6f72203d 206d6978 28636f6c color = mix(col │ │ │ │ - 0x00cf92a0 6f722c20 6d61696e 4f75746c 696e6543 or, mainOutlineC │ │ │ │ - 0x00cf92b0 6f6c6f72 2c207374 6570286b 4f75746c olor, step(kOutl │ │ │ │ - 0x00cf92c0 696e6554 68726573 686f6c64 312c2061 ineThreshold1, a │ │ │ │ - 0x00cf92d0 62732876 5f6c656e 6774682e 79292929 bs(v_length.y))) │ │ │ │ - 0x00cf92e0 3b200a20 20202063 6f6c6f72 203d206d ; . color = m │ │ │ │ - 0x00cf92f0 69782863 6f6c6f72 2c206d61 696e4f75 ix(color, mainOu │ │ │ │ - 0x00cf9300 746c696e 65436f6c 6f722c20 736d6f6f tlineColor, smoo │ │ │ │ - 0x00cf9310 74687374 6570286b 4f75746c 696e6554 thstep(kOutlineT │ │ │ │ - 0x00cf9320 68726573 686f6c64 322c206b 4f75746c hreshold2, kOutl │ │ │ │ - 0x00cf9330 696e6554 68726573 686f6c64 312c2061 ineThreshold1, a │ │ │ │ - 0x00cf9340 62732876 5f6c656e 6774682e 79292929 bs(v_length.y))) │ │ │ │ - 0x00cf9350 3b200a20 20202063 6f6c6f72 2e61202a ; . color.a * │ │ │ │ - 0x00cf9360 3d202831 2e30202d 20736d6f 6f746873 = (1.0 - smooths │ │ │ │ - 0x00cf9370 74657028 6b416e74 69616c69 6173696e tep(kAntialiasin │ │ │ │ - 0x00cf9380 67546872 6573686f 6c642c20 312e302c gThreshold, 1.0, │ │ │ │ - 0x00cf9390 20616273 28765f6c 656e6774 682e7929 abs(v_length.y) │ │ │ │ - 0x00cf93a0 29293b20 0a202020 20636f6c 6f72203d )); . color = │ │ │ │ - 0x00cf93b0 20766563 34286d69 7828636f 6c6f722e vec4(mix(color. │ │ │ │ - 0x00cf93c0 7267622c 20755f6d 61736b43 6f6c6f72 rgb, u_maskColor │ │ │ │ - 0x00cf93d0 2e726762 2c20755f 6d61736b 436f6c6f .rgb, u_maskColo │ │ │ │ - 0x00cf93e0 722e6129 2c20636f 6c6f722e 61293b20 r.a), color.a); │ │ │ │ - 0x00cf93f0 0a202020 20765f46 72616743 6f6c6f72 . v_FragColor │ │ │ │ - 0x00cf9400 203d2063 6f6c6f72 3b200a20 207d200a = color; . } . │ │ │ │ - 0x00cf9410 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00cf9420 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cf9430 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cf9440 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cf9450 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cf9460 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cf9470 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cf9480 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cf9490 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cf94a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cf94b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cf94c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cf94d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cf94e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cf94f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cf9500 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cf9510 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cf9520 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cf9530 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cf9540 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cf9550 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cf9560 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cf9570 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00cf9580 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00cf9590 616c3b20 0a202069 6e207665 63332061 al; . in vec3 a │ │ │ │ - 0x00cf95a0 5f6c656e 6774683b 200a2020 696e2076 _length; . in v │ │ │ │ - 0x00cf95b0 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ - 0x00cf95c0 6f757420 76656333 20765f6c 656e6774 out vec3 v_lengt │ │ │ │ - 0x00cf95d0 683b200a 20206f75 74207665 63342076 h; . out vec4 v │ │ │ │ - 0x00cf95e0 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ - 0x00cf95f0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00cf9600 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00cf9610 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00cf9620 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00cf9630 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00cf9640 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00cf9650 76656334 20755f72 6f757465 50617261 vec4 u_routePara │ │ │ │ - 0x00cf9660 6d733b20 0a202075 6e69666f 726d2076 ms; . uniform v │ │ │ │ - 0x00cf9670 65633420 755f636f 6c6f723b 200a2020 ec4 u_color; . │ │ │ │ - 0x00cf9680 756e6966 6f726d20 76656334 20755f6d uniform vec4 u_m │ │ │ │ - 0x00cf9690 61736b43 6f6c6f72 3b200a20 20756e69 askColor; . uni │ │ │ │ - 0x00cf96a0 666f726d 20766563 3420755f 6f75746c form vec4 u_outl │ │ │ │ - 0x00cf96b0 696e6543 6f6c6f72 3b200a20 20756e69 ineColor; . uni │ │ │ │ - 0x00cf96c0 666f726d 20766563 3420755f 66616b65 form vec4 u_fake │ │ │ │ - 0x00cf96d0 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ - 0x00cf96e0 6d207665 63342075 5f66616b 654f7574 m vec4 u_fakeOut │ │ │ │ - 0x00cf96f0 6c696e65 436f6c6f 723b200a 2020756e lineColor; . un │ │ │ │ - 0x00cf9700 69666f72 6d207665 63322075 5f66616b iform vec2 u_fak │ │ │ │ - 0x00cf9710 65426f72 64657273 3b200a20 20756e69 eBorders; . uni │ │ │ │ - 0x00cf9720 666f726d 20766563 3220755f 70617474 form vec2 u_patt │ │ │ │ - 0x00cf9730 65726e3b 200a2020 756e6966 6f726d20 ern; . uniform │ │ │ │ - 0x00cf9740 76656332 20755f61 6e676c65 436f7353 vec2 u_angleCosS │ │ │ │ - 0x00cf9750 696e3b20 0a202075 6e69666f 726d2066 in; . uniform f │ │ │ │ - 0x00cf9760 6c6f6174 20755f61 72726f77 48616c66 loat u_arrowHalf │ │ │ │ - 0x00cf9770 57696474 683b200a 2020756e 69666f72 Width; . unifor │ │ │ │ - 0x00cf9780 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00cf9790 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ - 0x00cf97a0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00cf97b0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00cf97c0 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ - 0x00cf97d0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00cf97e0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00cf97f0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00cf9800 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ - 0x00cf9810 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ - 0x00cf9820 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00cf9830 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ - 0x00cf9840 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ - 0x00cf9850 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ - 0x00cf9860 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00cf9870 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ - 0x00cf9880 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ - 0x00cf9890 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ - 0x00cf98a0 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ - 0x00cf98b0 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ - 0x00cf98c0 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ - 0x00cf98d0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cf98e0 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ - 0x00cf98f0 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ - 0x00cf9900 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cf9910 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ - 0x00cf9920 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ - 0x00cf9930 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00cf9940 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ - 0x00cf9950 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ - 0x00cf9960 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ - 0x00cf9970 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00cf9980 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ - 0x00cf9990 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ - 0x00cf99a0 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ - 0x00cf99b0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00cf99c0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00cf99d0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00cf99e0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00cf99f0 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ - 0x00cf9a00 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ - 0x00cf9a10 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ - 0x00cf9a20 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ - 0x00cf9a30 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ - 0x00cf9a40 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00cf9a50 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00cf9a60 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ - 0x00cf9a70 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ - 0x00cf9a80 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ - 0x00cf9a90 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ - 0x00cf9aa0 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ - 0x00cf9ab0 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ - 0x00cf9ac0 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ - 0x00cf9ad0 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ - 0x00cf9ae0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00cf9af0 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ - 0x00cf9b00 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ - 0x00cf9b10 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ - 0x00cf9b20 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ - 0x00cf9b30 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ - 0x00cf9b40 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ - 0x00cf9b50 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ - 0x00cf9b60 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ - 0x00cf9b70 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ - 0x00cf9b80 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ - 0x00cf9b90 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ - 0x00cf9ba0 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ - 0x00cf9bb0 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ - 0x00cf9bc0 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ - 0x00cf9bd0 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ - 0x00cf9be0 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ - 0x00cf9bf0 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ - 0x00cf9c00 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ - 0x00cf9c10 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ - 0x00cf9c20 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ - 0x00cf9c30 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ - 0x00cf9c40 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ - 0x00cf9c50 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ - 0x00cf9c60 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ - 0x00cf9c70 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ - 0x00cf9c80 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ - 0x00cf9c90 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ - 0x00cf9ca0 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ - 0x00cf9cb0 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ - 0x00cf9cc0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00cf9cd0 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ - 0x00cf9ce0 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ - 0x00cf9cf0 20202020 656c7365 200a2020 20202020 else . │ │ │ │ - 0x00cf9d00 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00cf9d10 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ - 0x00cf9d20 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00cf9d30 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ - 0x00cf9d40 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ - 0x00cf9d50 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ - 0x00cf9d60 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ - 0x00cf9d70 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ - 0x00cf9d80 3b200a20 20202076 65633220 6c656e20 ; . vec2 len │ │ │ │ - 0x00cf9d90 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ - 0x00cf9da0 782c2061 5f6c656e 6774682e 7a293b20 x, a_length.z); │ │ │ │ - 0x00cf9db0 0a202020 20696620 28646f74 28615f6e . if (dot(a_n │ │ │ │ - 0x00cf9dc0 6f726d61 6c2c2061 5f6e6f72 6d616c29 ormal, a_normal) │ │ │ │ - 0x00cf9dd0 20213d20 302e3029 200a2020 20207b20 != 0.0) . { │ │ │ │ - 0x00cf9de0 0a202020 20202076 65633220 6e6f726d . vec2 norm │ │ │ │ - 0x00cf9df0 203d2061 5f6e6f72 6d616c20 2a20755f = a_normal * u_ │ │ │ │ - 0x00cf9e00 726f7574 65506172 616d732e 783b200a routeParams.x; . │ │ │ │ - 0x00cf9e10 20202020 20207472 616e7366 6f726d65 transforme │ │ │ │ - 0x00cf9e20 64417869 73506f73 203d2063 616c634c dAxisPos = calcL │ │ │ │ - 0x00cf9e30 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ - 0x00cf9e40 6973506f 73287472 616e7366 6f726d65 isPos(transforme │ │ │ │ - 0x00cf9e50 64417869 73506f73 2c20615f 706f7369 dAxisPos, a_posi │ │ │ │ - 0x00cf9e60 74696f6e 2e787920 2b206e6f 726d2c20 tion.xy + norm, │ │ │ │ - 0x00cf9e70 0a202020 20202020 20202020 20202020 . │ │ │ │ - 0x00cf9e80 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00cf9e90 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00cf9ea0 20202020 20202075 5f6d6f64 656c5669 u_modelVi │ │ │ │ - 0x00cf9eb0 65772c20 6c656e67 7468286e 6f726d29 ew, length(norm) │ │ │ │ - 0x00cf9ec0 293b200a 20202020 20206966 2028755f ); . if (u_ │ │ │ │ - 0x00cf9ed0 726f7574 65506172 616d732e 7920213d routeParams.y != │ │ │ │ - 0x00cf9ee0 20302e30 29200a20 20202020 2020206c 0.0) . l │ │ │ │ - 0x00cf9ef0 656e203d 20766563 3228615f 6c656e67 en = vec2(a_leng │ │ │ │ - 0x00cf9f00 74682e78 202b2061 5f6c656e 6774682e th.x + a_length. │ │ │ │ - 0x00cf9f10 79202a20 755f726f 75746550 6172616d y * u_routeParam │ │ │ │ - 0x00cf9f20 732e792c 20615f6c 656e6774 682e7a29 s.y, a_length.z) │ │ │ │ - 0x00cf9f30 3b200a20 2020207d 200a2020 2020765f ; . } . v_ │ │ │ │ - 0x00cf9f40 6c656e67 7468203d 20766563 33286c65 length = vec3(le │ │ │ │ - 0x00cf9f50 6e2c2075 5f726f75 74655061 72616d73 n, u_routeParams │ │ │ │ - 0x00cf9f60 2e7a293b 200a2020 2020765f 636f6c6f .z); . v_colo │ │ │ │ - 0x00cf9f70 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ - 0x00cf9f80 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ - 0x00cf9f90 34287472 616e7366 6f726d65 64417869 4(transformedAxi │ │ │ │ - 0x00cf9fa0 73506f73 2c20615f 706f7369 74696f6e sPos, a_position │ │ │ │ - 0x00cf9fb0 2e7a2c20 312e3029 202a2075 5f70726f .z, 1.0) * u_pro │ │ │ │ - 0x00cf9fc0 6a656374 696f6e3b 200a2020 2020676c jection; . gl │ │ │ │ - 0x00cf9fd0 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ - 0x00cf9fe0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00cf9ff0 706f732c 20755f70 69766f74 5472616e pos, u_pivotTran │ │ │ │ - 0x00cfa000 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ - 0x00cfa010 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ - 0x00cfa020 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cfa030 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cfa040 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cfa050 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cfa060 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cfa070 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cfa080 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cfa090 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cfa0a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cfa0b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cfa0c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cfa0d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cfa0e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cfa0f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cfa100 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cfa110 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cfa120 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cfa130 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cfa140 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cfa150 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cfa160 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cfa170 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00cfa180 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00cfa190 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00cfa1a0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00cfa1b0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00cfa1c0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00cfa1d0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00cfa1e0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00cfa1f0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00cfa200 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00cfa210 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00cfa220 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00cfa230 6e69666f 726d2076 65633420 755f726f niform vec4 u_ro │ │ │ │ - 0x00cfa240 75746550 6172616d 733b200a 2020756e uteParams; . un │ │ │ │ - 0x00cfa250 69666f72 6d207665 63342075 5f636f6c iform vec4 u_col │ │ │ │ - 0x00cfa260 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ - 0x00cfa270 65633420 755f6d61 736b436f 6c6f723b ec4 u_maskColor; │ │ │ │ - 0x00cfa280 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00cfa290 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ - 0x00cfa2a0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00cfa2b0 20755f66 616b6543 6f6c6f72 3b200a20 u_fakeColor; . │ │ │ │ - 0x00cfa2c0 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ - 0x00cfa2d0 66616b65 4f75746c 696e6543 6f6c6f72 fakeOutlineColor │ │ │ │ - 0x00cfa2e0 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00cfa2f0 3220755f 66616b65 426f7264 6572733b 2 u_fakeBorders; │ │ │ │ - 0x00cfa300 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ - 0x00cfa310 20755f70 61747465 726e3b20 0a202075 u_pattern; . u │ │ │ │ - 0x00cfa320 6e69666f 726d2076 65633220 755f616e niform vec2 u_an │ │ │ │ - 0x00cfa330 676c6543 6f735369 6e3b200a 2020756e gleCosSin; . un │ │ │ │ - 0x00cfa340 69666f72 6d20666c 6f617420 755f6172 iform float u_ar │ │ │ │ - 0x00cfa350 726f7748 616c6657 69647468 3b200a20 rowHalfWidth; . │ │ │ │ - 0x00cfa360 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00cfa370 5f6f7061 63697479 3b200a20 20636f6e _opacity; . con │ │ │ │ - 0x00cfa380 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00cfa390 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00cfa3a0 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ - 0x00cfa3b0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00cfa3c0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00cfa3d0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00cfa3e0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00cfa3f0 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ - 0x00cfa400 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00cfa410 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ - 0x00cfa420 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ - 0x00cfa430 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ - 0x00cfa440 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00cfa450 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ - 0x00cfa460 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00cfa470 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00cfa480 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00cfa490 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ - 0x00cfa4a0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00cfa4b0 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ - 0x00cfa4c0 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ - 0x00cfa4d0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00cfa4e0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00cfa4f0 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ - 0x00cfa500 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ - 0x00cfa510 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00cfa520 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ - 0x00cfa530 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ - 0x00cfa540 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cfa550 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ - 0x00cfa560 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00cfa570 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ - 0x00cfa580 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ - 0x00cfa590 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ - 0x00cfa5a0 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00cfa5b0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00cfa5c0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00cfa5d0 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ - 0x00cfa5e0 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ - 0x00cfa5f0 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ - 0x00cfa600 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ - 0x00cfa610 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ - 0x00cfa620 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00cfa630 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ - 0x00cfa640 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ - 0x00cfa650 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00cfa660 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ - 0x00cfa670 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ - 0x00cfa680 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00cfa690 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ - 0x00cfa6a0 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ - 0x00cfa6b0 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ - 0x00cfa6c0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00cfa6d0 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ - 0x00cfa6e0 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ - 0x00cfa6f0 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ - 0x00cfa700 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ - 0x00cfa710 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ - 0x00cfa720 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ - 0x00cfa730 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ - 0x00cfa740 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ - 0x00cfa750 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ - 0x00cfa760 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ - 0x00cfa770 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ - 0x00cfa780 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ - 0x00cfa790 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00cfa7a0 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ - 0x00cfa7b0 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ - 0x00cfa7c0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ - 0x00cfa7d0 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ - 0x00cfa7e0 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ - 0x00cfa7f0 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ - 0x00cfa800 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ - 0x00cfa810 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ - 0x00cfa820 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ - 0x00cfa830 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ - 0x00cfa840 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ - 0x00cfa850 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ - 0x00cfa860 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ - 0x00cfa870 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00cfa880 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ - 0x00cfa890 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ - 0x00cfa8a0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00cfa8b0 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ - 0x00cfa8c0 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ - 0x00cfa8d0 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ - 0x00cfa8e0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00cfa8f0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00cfa900 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ - 0x00cfa910 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ - 0x00cfa920 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ - 0x00cfa930 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ - 0x00cfa940 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ - 0x00cfa950 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ - 0x00cfa960 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ - 0x00cfa970 2028646f 7428615f 6e6f726d 616c2c20 (dot(a_normal, │ │ │ │ - 0x00cfa980 615f6e6f 726d616c 2920213d 20302e30 a_normal) != 0.0 │ │ │ │ - 0x00cfa990 29200a20 2020207b 200a2020 20202020 ) . { . │ │ │ │ - 0x00cfa9a0 76656332 206e6f72 6d203d20 615f6e6f vec2 norm = a_no │ │ │ │ - 0x00cfa9b0 726d616c 202a2075 5f617272 6f774861 rmal * u_arrowHa │ │ │ │ - 0x00cfa9c0 6c665769 6474683b 200a2020 20202020 lfWidth; . │ │ │ │ - 0x00cfa9d0 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ - 0x00cfa9e0 6f73203d 2063616c 634c696e 65547261 os = calcLineTra │ │ │ │ - 0x00cfa9f0 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ - 0x00cfaa00 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ - 0x00cfaa10 6f732c20 615f706f 73697469 6f6e2e78 os, a_position.x │ │ │ │ - 0x00cfaa20 79202b20 6e6f726d 2c200a20 20202020 y + norm, . │ │ │ │ - 0x00cfaa30 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00cfaa40 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00cfaa50 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00cfaa60 20755f6d 6f64656c 56696577 2c206c65 u_modelView, le │ │ │ │ - 0x00cfaa70 6e677468 286e6f72 6d29293b 200a2020 ngth(norm)); . │ │ │ │ - 0x00cfaa80 20207d20 0a202020 20765f63 6f6c6f72 } . v_color │ │ │ │ - 0x00cfaa90 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ - 0x00cfaaa0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ - 0x00cfaab0 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ - 0x00cfaac0 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ - 0x00cfaad0 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ - 0x00cfaae0 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ - 0x00cfaaf0 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ - 0x00cfab00 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00cfab10 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00cfab20 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ - 0x00cfab30 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ - 0x00cfab40 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00cfab50 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cfab60 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cfab70 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cfab80 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cfab90 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cfaba0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cfabb0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cfabc0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cfabd0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cfabe0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cfabf0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cfac00 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cfac10 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cfac20 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cfac30 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cfac40 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cfac50 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cfac60 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cfac70 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cfac80 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cfac90 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cfaca0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00cfacb0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00cfacc0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00cfacd0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00cface0 65633420 765f7261 64697573 3b200a20 ec4 v_radius; . │ │ │ │ - 0x00cfacf0 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ - 0x00cfad00 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ - 0x00cfad10 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ - 0x00cfad20 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00cfad30 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00cfad40 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00cfad50 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ - 0x00cfad60 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00cfad70 755f726f 75746550 6172616d 733b200a u_routeParams; . │ │ │ │ - 0x00cfad80 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ - 0x00cfad90 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ - 0x00cfada0 726d2076 65633420 755f6d61 736b436f rm vec4 u_maskCo │ │ │ │ - 0x00cfadb0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00cfadc0 76656334 20755f6f 75746c69 6e65436f vec4 u_outlineCo │ │ │ │ - 0x00cfadd0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00cfade0 76656334 20755f66 616b6543 6f6c6f72 vec4 u_fakeColor │ │ │ │ - 0x00cfadf0 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00cfae00 3420755f 66616b65 4f75746c 696e6543 4 u_fakeOutlineC │ │ │ │ - 0x00cfae10 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00cfae20 20766563 3220755f 66616b65 426f7264 vec2 u_fakeBord │ │ │ │ - 0x00cfae30 6572733b 200a2020 756e6966 6f726d20 ers; . uniform │ │ │ │ - 0x00cfae40 76656332 20755f70 61747465 726e3b20 vec2 u_pattern; │ │ │ │ - 0x00cfae50 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ - 0x00cfae60 755f616e 676c6543 6f735369 6e3b200a u_angleCosSin; . │ │ │ │ - 0x00cfae70 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00cfae80 755f6172 726f7748 616c6657 69647468 u_arrowHalfWidth │ │ │ │ - 0x00cfae90 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00cfaea0 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ - 0x00cfaeb0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00cfaec0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00cfaed0 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ - 0x00cfaee0 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00cfaef0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00cfaf00 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00cfaf10 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00cfaf20 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ - 0x00cfaf30 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00cfaf40 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ - 0x00cfaf50 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ - 0x00cfaf60 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cfaf70 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ - 0x00cfaf80 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ - 0x00cfaf90 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ - 0x00cfafa0 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ - 0x00cfafb0 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ - 0x00cfafc0 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ - 0x00cfafd0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00cfafe0 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ - 0x00cfaff0 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ - 0x00cfb000 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ - 0x00cfb010 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ - 0x00cfb020 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ - 0x00cfb030 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cfb040 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ - 0x00cfb050 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ - 0x00cfb060 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cfb070 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ - 0x00cfb080 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ - 0x00cfb090 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00cfb0a0 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ - 0x00cfb0b0 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ - 0x00cfb0c0 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ - 0x00cfb0d0 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ - 0x00cfb0e0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00cfb0f0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00cfb100 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00cfb110 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ - 0x00cfb120 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ - 0x00cfb130 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ - 0x00cfb140 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ - 0x00cfb150 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00cfb160 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00cfb170 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00cfb180 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ - 0x00cfb190 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ - 0x00cfb1a0 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ - 0x00cfb1b0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00cfb1c0 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ - 0x00cfb1d0 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ - 0x00cfb1e0 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ - 0x00cfb1f0 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ - 0x00cfb200 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ - 0x00cfb210 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cfb220 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ - 0x00cfb230 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ - 0x00cfb240 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ - 0x00cfb250 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ - 0x00cfb260 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00cfb270 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ - 0x00cfb280 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ - 0x00cfb290 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ - 0x00cfb2a0 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ - 0x00cfb2b0 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ - 0x00cfb2c0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00cfb2d0 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ - 0x00cfb2e0 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ - 0x00cfb2f0 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ - 0x00cfb300 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ - 0x00cfb310 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ - 0x00cfb320 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ - 0x00cfb330 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ - 0x00cfb340 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ - 0x00cfb350 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00cfb360 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ - 0x00cfb370 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ - 0x00cfb380 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ - 0x00cfb390 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ - 0x00cfb3a0 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ - 0x00cfb3b0 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ - 0x00cfb3c0 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ - 0x00cfb3d0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00cfb3e0 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ - 0x00cfb3f0 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ - 0x00cfb400 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ - 0x00cfb410 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ - 0x00cfb420 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00cfb430 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ - 0x00cfb440 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00cfb450 20666c6f 61742072 203d2075 5f726f75 float r = u_rou │ │ │ │ - 0x00cfb460 74655061 72616d73 2e78202a 20615f6e teParams.x * a_n │ │ │ │ - 0x00cfb470 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ - 0x00cfb480 6332206e 6f726d61 6c203d20 76656332 c2 normal = vec2 │ │ │ │ - 0x00cfb490 28615f6e 6f726d61 6c2e7820 2a20755f (a_normal.x * u_ │ │ │ │ - 0x00cfb4a0 616e676c 65436f73 53696e2e 78202d20 angleCosSin.x - │ │ │ │ - 0x00cfb4b0 615f6e6f 726d616c 2e79202a 20755f61 a_normal.y * u_a │ │ │ │ - 0x00cfb4c0 6e676c65 436f7353 696e2e79 2c200a20 ngleCosSin.y, . │ │ │ │ - 0x00cfb4d0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00cfb4e0 20202020 2020615f 6e6f726d 616c2e78 a_normal.x │ │ │ │ - 0x00cfb4f0 202a2075 5f616e67 6c65436f 7353696e * u_angleCosSin │ │ │ │ - 0x00cfb500 2e79202b 20615f6e 6f726d61 6c2e7920 .y + a_normal.y │ │ │ │ - 0x00cfb510 2a20755f 616e676c 65436f73 53696e2e * u_angleCosSin. │ │ │ │ - 0x00cfb520 78293b20 0a202020 20766563 34207261 x); . vec4 ra │ │ │ │ - 0x00cfb530 64697573 203d2076 65633428 6e6f726d dius = vec4(norm │ │ │ │ - 0x00cfb540 616c2e78 79202a20 722c2072 2c20615f al.xy * r, r, a_ │ │ │ │ - 0x00cfb550 706f7369 74696f6e 2e77293b 200a2020 position.w); . │ │ │ │ - 0x00cfb560 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ - 0x00cfb570 3428615f 706f7369 74696f6e 2e78792c 4(a_position.xy, │ │ │ │ - 0x00cfb580 20302c20 3129202a 20755f6d 6f64656c 0, 1) * u_model │ │ │ │ - 0x00cfb590 56696577 3b200a20 20202076 65633220 View; . vec2 │ │ │ │ - 0x00cfb5a0 73686966 74656450 6f73203d 20726164 shiftedPos = rad │ │ │ │ - 0x00cfb5b0 6975732e 7879202b 20706f73 2e78793b ius.xy + pos.xy; │ │ │ │ - 0x00cfb5c0 200a2020 2020706f 73203d20 76656334 . pos = vec4 │ │ │ │ - 0x00cfb5d0 28736869 66746564 506f732c 20615f70 (shiftedPos, a_p │ │ │ │ - 0x00cfb5e0 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ - 0x00cfb5f0 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ - 0x00cfb600 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ - 0x00cfb610 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ - 0x00cfb620 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ - 0x00cfb630 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ - 0x00cfb640 30293b20 0a202020 20765f72 61646975 0); . v_radiu │ │ │ │ - 0x00cfb650 73203d20 72616469 75733b20 0a202020 s = radius; . │ │ │ │ - 0x00cfb660 20765f63 6f6c6f72 203d2061 5f636f6c v_color = a_col │ │ │ │ - 0x00cfb670 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ - 0x00cfb680 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cfb690 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cfb6a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cfb6b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cfb6c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cfb6d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cfb6e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cfb6f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cfb700 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cfb710 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cfb720 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cfb730 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cfb740 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cfb750 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cfb760 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cfb770 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cfb780 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cfb790 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cfb7a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cfb7b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cfb7c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cfb7d0 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ - 0x00cfb7e0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00cfb7f0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00cfb800 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00cfb810 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00cfb820 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00cfb830 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00cfb840 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00cfb850 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00cfb860 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00cfb870 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ - 0x00cfb880 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ - 0x00cfb890 69666f72 6d207665 63322075 5f706f73 iform vec2 u_pos │ │ │ │ - 0x00cfb8a0 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ - 0x00cfb8b0 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ - 0x00cfb8c0 696e6550 6173733b 200a2020 756e6966 inePass; . unif │ │ │ │ - 0x00cfb8d0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ - 0x00cfb8e0 6974793b 200a2020 756e6966 6f726d20 ity; . uniform │ │ │ │ - 0x00cfb8f0 666c6f61 7420755f 6c656e67 74683b20 float u_length; │ │ │ │ - 0x00cfb900 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ - 0x00cfb910 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ - 0x00cfb920 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ - 0x00cfb930 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ - 0x00cfb940 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00cfb950 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00cfb960 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00cfb970 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ - 0x00cfb980 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00cfb990 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00cfb9a0 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ - 0x00cfb9b0 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ - 0x00cfb9c0 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ - 0x00cfb9d0 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ - 0x00cfb9e0 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ - 0x00cfb9f0 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ - 0x00cfba00 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ - 0x00cfba10 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ - 0x00cfba20 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ - 0x00cfba30 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ - 0x00cfba40 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00cfba50 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ - 0x00cfba60 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ - 0x00cfba70 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ - 0x00cfba80 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ - 0x00cfba90 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ - 0x00cfbaa0 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ - 0x00cfbab0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00cfbac0 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ - 0x00cfbad0 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ - 0x00cfbae0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00cfbaf0 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ - 0x00cfbb00 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ - 0x00cfbb10 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ - 0x00cfbb20 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ - 0x00cfbb30 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ - 0x00cfbb40 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ - 0x00cfbb50 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ - 0x00cfbb60 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ - 0x00cfbb70 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ - 0x00cfbb80 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ - 0x00cfbb90 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ - 0x00cfbba0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00cfbbb0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00cfbbc0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00cfbbd0 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ - 0x00cfbbe0 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ - 0x00cfbbf0 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ - 0x00cfbc00 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ - 0x00cfbc10 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ - 0x00cfbc20 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ - 0x00cfbc30 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ - 0x00cfbc40 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ - 0x00cfbc50 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ - 0x00cfbc60 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cfbc70 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ - 0x00cfbc80 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ - 0x00cfbc90 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ - 0x00cfbca0 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ - 0x00cfbcb0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00cfbcc0 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ - 0x00cfbcd0 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ - 0x00cfbce0 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ - 0x00cfbcf0 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ - 0x00cfbd00 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ - 0x00cfbd10 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00cfbd20 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ - 0x00cfbd30 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ - 0x00cfbd40 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ - 0x00cfbd50 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ - 0x00cfbd60 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00cfbd70 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ - 0x00cfbd80 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ - 0x00cfbd90 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ - 0x00cfbda0 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ - 0x00cfbdb0 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ - 0x00cfbdc0 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ - 0x00cfbdd0 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ - 0x00cfbde0 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ - 0x00cfbdf0 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ - 0x00cfbe00 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ - 0x00cfbe10 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ - 0x00cfbe20 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ - 0x00cfbe30 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ - 0x00cfbe40 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ - 0x00cfbe50 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ - 0x00cfbe60 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ - 0x00cfbe70 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ - 0x00cfbe80 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ - 0x00cfbe90 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ - 0x00cfbea0 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ - 0x00cfbeb0 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ - 0x00cfbec0 202b2061 5f706f73 6974696f 6e202b20 + a_position + │ │ │ │ - 0x00cfbed0 755f6c65 6e677468 202a2061 5f6e6f72 u_length * a_nor │ │ │ │ - 0x00cfbee0 6d616c2c 20302c20 3129202a 20755f70 mal, 0, 1) * u_p │ │ │ │ - 0x00cfbef0 726f6a65 6374696f 6e3b200a 20202369 rojection; . #i │ │ │ │ - 0x00cfbf00 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ - 0x00cfbf10 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ - 0x00cfbf20 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ - 0x00cfbf30 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ - 0x00cfbf40 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ - 0x00cfbf50 6f6e2e7a 20202b20 676c5f50 6f736974 on.z + gl_Posit │ │ │ │ - 0x00cfbf60 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ - 0x00cfbf70 2023656e 64696620 0a202020 20765f63 #endif . v_c │ │ │ │ - 0x00cfbf80 6f6c6f72 54657843 6f6f7264 73203d20 olorTexCoords = │ │ │ │ - 0x00cfbf90 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ - 0x00cfbfa0 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ - 0x00cfbfb0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cfbfc0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cfbfd0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cfbfe0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cfbff0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cfc000 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cfc010 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cfc020 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cfc030 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cfc040 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cfc050 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cfc060 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cfc070 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cfc080 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cfc090 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cfc0a0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cfc0b0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cfc0c0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cfc0d0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cfc0e0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cfc0f0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cfc100 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00cfc110 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00cfc120 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00cfc130 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00cfc140 200a2020 696e2076 65633320 615f6c65 . in vec3 a_le │ │ │ │ - 0x00cfc150 6e677468 3b200a20 20236966 64656620 ngth; . #ifdef │ │ │ │ - 0x00cfc160 454e4142 4c455f56 5446200a 20206f75 ENABLE_VTF . ou │ │ │ │ - 0x00cfc170 74204c4f 575f5020 76656334 20765f63 t LOW_P vec4 v_c │ │ │ │ - 0x00cfc180 6f6c6f72 3b200a20 2023656c 7365200a olor; . #else . │ │ │ │ - 0x00cfc190 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ - 0x00cfc1a0 6f725465 78436f6f 72643b20 0a202023 orTexCoord; . # │ │ │ │ - 0x00cfc1b0 656e6469 66200a20 206f7574 20666c6f endif . out flo │ │ │ │ - 0x00cfc1c0 61742076 5f6c656e 67746859 3b200a20 at v_lengthY; . │ │ │ │ - 0x00cfc1d0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00cfc1e0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ - 0x00cfc1f0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ - 0x00cfc200 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ - 0x00cfc210 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ - 0x00cfc220 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ - 0x00cfc230 69666f72 6d207665 63342075 5f706f73 iform vec4 u_pos │ │ │ │ - 0x00cfc240 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ - 0x00cfc250 6d207665 63322075 5f6c696e 65506172 m vec2 u_linePar │ │ │ │ - 0x00cfc260 616d733b 200a2020 756e6966 6f726d20 ams; . uniform │ │ │ │ - 0x00cfc270 666c6f61 7420755f 61636375 72616379 float u_accuracy │ │ │ │ - 0x00cfc280 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00cfc290 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ - 0x00cfc2a0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00cfc2b0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00cfc2c0 6f726d20 666c6f61 7420755f 617a696d orm float u_azim │ │ │ │ - 0x00cfc2d0 75743b20 0a202023 69666465 6620454e ut; . #ifdef EN │ │ │ │ - 0x00cfc2e0 41424c45 5f565446 200a2020 756e6966 ABLE_VTF . unif │ │ │ │ - 0x00cfc2f0 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ - 0x00cfc300 636f6c6f 72546578 3b200a20 2023656e colorTex; . #en │ │ │ │ - 0x00cfc310 64696620 0a202063 6f6e7374 20666c6f dif . const flo │ │ │ │ - 0x00cfc320 6174206b 416e7469 616c6961 73696e67 at kAntialiasing │ │ │ │ - 0x00cfc330 54687265 73686f6c 64203d20 302e3932 Threshold = 0.92 │ │ │ │ - 0x00cfc340 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ - 0x00cfc350 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ - 0x00cfc360 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ - 0x00cfc370 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ - 0x00cfc380 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ - 0x00cfc390 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ - 0x00cfc3a0 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ - 0x00cfc3b0 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ - 0x00cfc3c0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00cfc3d0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00cfc3e0 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ - 0x00cfc3f0 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ - 0x00cfc400 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ - 0x00cfc410 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00cfc420 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ - 0x00cfc430 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ - 0x00cfc440 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ - 0x00cfc450 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ - 0x00cfc460 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ - 0x00cfc470 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ - 0x00cfc480 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cfc490 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ - 0x00cfc4a0 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ - 0x00cfc4b0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00cfc4c0 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ - 0x00cfc4d0 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ - 0x00cfc4e0 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00cfc4f0 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ - 0x00cfc500 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ - 0x00cfc510 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ - 0x00cfc520 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00cfc530 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ - 0x00cfc540 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ - 0x00cfc550 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ - 0x00cfc560 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00ceb3d0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00ceb3e0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00ceb3f0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00ceb400 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00ceb410 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00ceb420 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ + 0x00ceb430 6f757420 76656333 20765f72 61646975 out vec3 v_radiu │ │ │ │ + 0x00ceb440 733b200a 2020756e 69666f72 6d206d61 s; . uniform ma │ │ │ │ + 0x00ceb450 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00ceb460 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00ceb470 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00ceb480 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00ceb490 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00ceb4a0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00ceb4b0 755f7472 61666669 63506172 616d733b u_trafficParams; │ │ │ │ + 0x00ceb4c0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00ceb4d0 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ + 0x00ceb4e0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00ceb4f0 20755f6c 69676874 4172726f 77436f6c u_lightArrowCol │ │ │ │ + 0x00ceb500 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ + 0x00ceb510 65633420 755f6461 726b4172 726f7743 ec4 u_darkArrowC │ │ │ │ + 0x00ceb520 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00ceb530 20666c6f 61742075 5f6f7574 6c696e65 float u_outline │ │ │ │ + 0x00ceb540 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00ceb550 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ + 0x00ceb560 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00ceb570 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00ceb580 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00ceb590 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00ceb5a0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00ceb5b0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00ceb5c0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00ceb5d0 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00ceb5e0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00ceb5f0 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00ceb600 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00ceb610 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00ceb620 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00ceb630 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00ceb640 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00ceb650 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00ceb660 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00ceb670 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00ceb680 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00ceb690 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00ceb6a0 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00ceb6b0 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00ceb6c0 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00ceb6d0 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00ceb6e0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00ceb6f0 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00ceb700 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00ceb710 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00ceb720 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00ceb730 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00ceb740 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00ceb750 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00ceb760 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00ceb770 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00ceb780 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00ceb790 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00ceb7a0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00ceb7b0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00ceb7c0 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00ceb7d0 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00ceb7e0 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00ceb7f0 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00ceb800 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00ceb810 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00ceb820 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00ceb830 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00ceb840 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00ceb850 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00ceb860 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00ceb870 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00ceb880 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00ceb890 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00ceb8a0 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00ceb8b0 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00ceb8c0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00ceb8d0 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00ceb8e0 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00ceb8f0 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00ceb900 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00ceb910 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00ceb920 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00ceb930 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00ceb940 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00ceb950 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00ceb960 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00ceb970 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00ceb980 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00ceb990 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00ceb9a0 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00ceb9b0 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00ceb9c0 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00ceb9d0 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00ceb9e0 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00ceb9f0 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00ceba00 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00ceba10 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00ceba20 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00ceba30 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00ceba40 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00ceba50 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00ceba60 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00ceba70 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00ceba80 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00ceba90 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00cebaa0 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00cebab0 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00cebac0 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00cebad0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00cebae0 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00cebaf0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00cebb00 20766563 32206e6f 726d616c 203d2061 vec2 normal = a │ │ │ │ + 0x00cebb10 5f6e6f72 6d616c2e 78793b20 0a202020 _normal.xy; . │ │ │ │ + 0x00cebb20 20766563 32207472 616e7366 6f726d65 vec2 transforme │ │ │ │ + 0x00cebb30 64417869 73506f73 203d2028 76656334 dAxisPos = (vec4 │ │ │ │ + 0x00cebb40 28615f70 6f736974 696f6e2e 78792c20 (a_position.xy, │ │ │ │ + 0x00cebb50 302e302c 20312e30 29202a20 755f6d6f 0.0, 1.0) * u_mo │ │ │ │ + 0x00cebb60 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00cebb70 2020696e 7420696e 64657820 3d20696e int index = in │ │ │ │ + 0x00cebb80 7428615f 706f7369 74696f6e 2e77293b t(a_position.w); │ │ │ │ + 0x00cebb90 200a2020 2020666c 6f617420 6c656674 . float left │ │ │ │ + 0x00cebba0 53697a65 203d2075 5f6c6967 68744172 Size = u_lightAr │ │ │ │ + 0x00cebbb0 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ + 0x00cebbc0 200a2020 2020666c 6f617420 72696768 . float righ │ │ │ │ + 0x00cebbd0 7453697a 65203d20 755f6461 726b4172 tSize = u_darkAr │ │ │ │ + 0x00cebbe0 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ + 0x00cebbf0 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ + 0x00cebc00 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ + 0x00cebc10 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ + 0x00cebc20 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ + 0x00cebc30 6e6f726d 616c202a 20302e35 202a2028 normal * 0.5 * ( │ │ │ │ + 0x00cebc40 72696768 7453697a 65202d20 6c656674 rightSize - left │ │ │ │ + 0x00cebc50 53697a65 293b200a 20202020 20207472 Size); . tr │ │ │ │ + 0x00cebc60 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00cebc70 203d2063 616c634c 696e6554 72616e73 = calcLineTrans │ │ │ │ + 0x00cebc80 666f726d 65644178 6973506f 73287472 formedAxisPos(tr │ │ │ │ + 0x00cebc90 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00cebca0 2c20615f 706f7369 74696f6e 2e787920 , a_position.xy │ │ │ │ + 0x00cebcb0 2b206e6f 726d2c20 0a202020 20202020 + norm, . │ │ │ │ + 0x00cebcc0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cebcd0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cebce0 20202020 20202020 20202020 20202075 u │ │ │ │ + 0x00cebcf0 5f6d6f64 656c5669 65772c20 6c656e67 _modelView, leng │ │ │ │ + 0x00cebd00 7468286e 6f726d29 293b200a 20202020 th(norm)); . │ │ │ │ + 0x00cebd10 7d200a20 20202076 5f726164 69757320 } . v_radius │ │ │ │ + 0x00cebd20 3d207665 63332861 5f6e6f72 6d616c2e = vec3(a_normal. │ │ │ │ + 0x00cebd30 7a772c20 312e3029 202a2030 2e35202a zw, 1.0) * 0.5 * │ │ │ │ + 0x00cebd40 20286c65 66745369 7a65202b 20726967 (leftSize + rig │ │ │ │ + 0x00cebd50 68745369 7a65293b 200a2020 20207665 htSize); . ve │ │ │ │ + 0x00cebd60 63322066 696e616c 506f7320 3d207472 c2 finalPos = tr │ │ │ │ + 0x00cebd70 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00cebd80 202b2076 5f726164 6975732e 78793b20 + v_radius.xy; │ │ │ │ + 0x00cebd90 0a202020 20765f63 6f6c6f72 54657843 . v_colorTexC │ │ │ │ + 0x00cebda0 6f6f7264 203d2061 5f636f6c 6f725465 oord = a_colorTe │ │ │ │ + 0x00cebdb0 78436f6f 72643b20 0a202020 20766563 xCoord; . vec │ │ │ │ + 0x00cebdc0 3420706f 73203d20 76656334 2866696e 4 pos = vec4(fin │ │ │ │ + 0x00cebdd0 616c506f 732c2061 5f706f73 6974696f alPos, a_positio │ │ │ │ + 0x00cebde0 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ + 0x00cebdf0 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ + 0x00cebe00 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00cebe10 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00cebe20 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ + 0x00cebe30 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ + 0x00cebe40 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00cebe50 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cebe60 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cebe70 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cebe80 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cebe90 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cebea0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cebeb0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cebec0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cebed0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cebee0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cebef0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cebf00 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cebf10 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cebf20 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cebf30 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cebf40 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cebf50 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cebf60 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cebf70 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cebf80 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cebf90 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cebfa0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00cebfb0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00cebfc0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00cebfd0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00cebfe0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00cebff0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00cec000 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00cec010 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00cec020 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00cec030 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00cec040 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00cec050 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00cec060 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00cec070 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00cec080 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00cec090 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00cec0a0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00cec0b0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00cec0c0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00cec0d0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00cec0e0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00cec0f0 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00cec100 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00cec110 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00cec120 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00cec130 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00cec140 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00cec150 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00cec160 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00cec170 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00cec180 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cec190 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00cec1a0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00cec1b0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00cec1c0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00cec1d0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00cec1e0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00cec1f0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00cec200 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00cec210 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00cec220 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cec230 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00cec240 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00cec250 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00cec260 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00cec270 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00cec280 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00cec290 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00cec2a0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00cec2b0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00cec2c0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cec2d0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00cec2e0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00cec2f0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cec300 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00cec310 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00cec320 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00cec330 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00cec340 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00cec350 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00cec360 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00cec370 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00cec380 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00cec390 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00cec3a0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00cec3b0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00cec3c0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00cec3d0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00cec3e0 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00cec3f0 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00cec400 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00cec410 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00cec420 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00cec430 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00cec440 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00cec450 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00cec460 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00cec470 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00cec480 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00cec490 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00cec4a0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00cec4b0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00cec4c0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00cec4d0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00cec4e0 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00cec4f0 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00cec500 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00cec510 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00cec520 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00cec530 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00cec540 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00cec550 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00cec560 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00cec570 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00cec580 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00cec590 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00cec5a0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00cec5b0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00cec5c0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00cec5d0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00cec5e0 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00cec5f0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00cec600 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00cec610 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00cec620 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00cec630 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00cec640 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00cec650 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00cec660 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00cec670 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00cec680 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00cec690 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00cec6a0 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ + 0x00cec6b0 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ + 0x00cec6c0 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00cec6d0 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ + 0x00cec6e0 73203d20 76656334 28615f6e 6f726d61 s = vec4(a_norma │ │ │ │ + 0x00cec6f0 6c2c2030 2c203029 202b2070 6f733b20 l, 0, 0) + pos; │ │ │ │ + 0x00cec700 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ + 0x00cec710 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ + 0x00cec720 6e73666f 726d2873 68696674 6564506f nsform(shiftedPo │ │ │ │ + 0x00cec730 73202a20 755f7072 6f6a6563 74696f6e s * u_projection │ │ │ │ + 0x00cec740 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ + 0x00cec750 726d2c20 302e3029 3b200a20 20202076 rm, 0.0); . v │ │ │ │ + 0x00cec760 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ + 0x00cec770 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ + 0x00cec780 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ + 0x00cec790 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cec7a0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cec7b0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cec7c0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cec7d0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cec7e0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cec7f0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cec800 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cec810 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cec820 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cec830 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cec840 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cec850 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cec860 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cec870 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cec880 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cec890 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cec8a0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cec8b0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cec8c0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cec8d0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cec8e0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00cec8f0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00cec900 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00cec910 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00cec920 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ + 0x00cec930 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ + 0x00cec940 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ + 0x00cec950 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ + 0x00cec960 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00cec970 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00cec980 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00cec990 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00cec9a0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00cec9b0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00cec9c0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00cec9d0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00cec9e0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00cec9f0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00ceca00 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00ceca10 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00ceca20 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00ceca30 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00ceca40 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00ceca50 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00ceca60 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00ceca70 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00ceca80 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00ceca90 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00cecaa0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00cecab0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00cecac0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00cecad0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00cecae0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00cecaf0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00cecb00 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00cecb10 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00cecb20 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00cecb30 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00cecb40 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00cecb50 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00cecb60 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00cecb70 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00cecb80 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00cecb90 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00cecba0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00cecbb0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cecbc0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00cecbd0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00cecbe0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00cecbf0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00cecc00 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00cecc10 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00cecc20 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00cecc30 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00cecc40 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00cecc50 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00cecc60 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00cecc70 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00cecc80 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00cecc90 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00cecca0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00ceccb0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00ceccc0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00ceccd0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00cecce0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00ceccf0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00cecd00 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00cecd10 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00cecd20 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00cecd30 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00cecd40 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00cecd50 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00cecd60 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00cecd70 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00cecd80 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00cecd90 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00cecda0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00cecdb0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00cecdc0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00cecdd0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00cecde0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00cecdf0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00cece00 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00cece10 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00cece20 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00cece30 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00cece40 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00cece50 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00cece60 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00cece70 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00cece80 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00cece90 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00cecea0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00ceceb0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00cecec0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00ceced0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00cecee0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00cecef0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00cecf00 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00cecf10 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00cecf20 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00cecf30 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00cecf40 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00cecf50 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00cecf60 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00cecf70 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00cecf80 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00cecf90 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00cecfa0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00cecfb0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00cecfc0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00cecfd0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00cecfe0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00cecff0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00ced000 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00ced010 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ + 0x00ced020 65633428 615f706f 73697469 6f6e2e78 ec4(a_position.x │ │ │ │ + 0x00ced030 797a2c20 3129202a 20755f6d 6f64656c yz, 1) * u_model │ │ │ │ + 0x00ced040 56696577 3b200a20 20202076 65633420 View; . vec4 │ │ │ │ + 0x00ced050 73686966 74656450 6f73203d 20766563 shiftedPos = vec │ │ │ │ + 0x00ced060 3428615f 6e6f726d 616c2c20 302c2030 4(a_normal, 0, 0 │ │ │ │ + 0x00ced070 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ + 0x00ced080 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ + 0x00ced090 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00ced0a0 73686966 74656450 6f73202a 20755f70 shiftedPos * u_p │ │ │ │ + 0x00ced0b0 726f6a65 6374696f 6e2c2075 5f706976 rojection, u_piv │ │ │ │ + 0x00ced0c0 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ + 0x00ced0d0 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ + 0x00ced0e0 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ + 0x00ced0f0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00ced100 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ + 0x00ced110 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ + 0x00ced120 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ + 0x00ced130 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00ced140 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00ced150 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00ced160 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00ced170 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00ced180 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00ced190 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00ced1a0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00ced1b0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00ced1c0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00ced1d0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00ced1e0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00ced1f0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00ced200 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00ced210 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00ced220 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00ced230 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00ced240 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00ced250 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00ced260 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00ced270 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00ced280 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00ced290 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00ced2a0 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ + 0x00ced2b0 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ + 0x00ced2c0 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ + 0x00ced2d0 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ + 0x00ced2e0 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ + 0x00ced2f0 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ + 0x00ced300 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ + 0x00ced310 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00ced320 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00ced330 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00ced340 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00ced350 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00ced360 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00ced370 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00ced380 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00ced390 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00ced3a0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00ced3b0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00ced3c0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00ced3d0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00ced3e0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00ced3f0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00ced400 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00ced410 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00ced420 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00ced430 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00ced440 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00ced450 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00ced460 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00ced470 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00ced480 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00ced490 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00ced4a0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00ced4b0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00ced4c0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00ced4d0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00ced4e0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00ced4f0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00ced500 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00ced510 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00ced520 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00ced530 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00ced540 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00ced550 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00ced560 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00ced570 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00ced580 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00ced590 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00ced5a0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00ced5b0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00ced5c0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00ced5d0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00ced5e0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00ced5f0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00ced600 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00ced610 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00ced620 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00ced630 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00ced640 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00ced650 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00ced660 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00ced670 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00ced680 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00ced690 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00ced6a0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00ced6b0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00ced6c0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00ced6d0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00ced6e0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00ced6f0 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00ced700 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00ced710 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00ced720 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00ced730 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00ced740 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00ced750 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00ced760 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00ced770 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00ced780 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00ced790 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00ced7a0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00ced7b0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00ced7c0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00ced7d0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00ced7e0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00ced7f0 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00ced800 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00ced810 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00ced820 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00ced830 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00ced840 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00ced850 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00ced860 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00ced870 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00ced880 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00ced890 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00ced8a0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00ced8b0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00ced8c0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00ced8d0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00ced8e0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00ced8f0 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00ced900 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00ced910 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00ced920 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00ced930 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00ced940 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00ced950 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00ced960 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00ced970 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00ced980 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00ced990 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00ced9a0 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00ced9b0 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ + 0x00ced9c0 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ + 0x00ced9d0 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ + 0x00ced9e0 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ + 0x00ced9f0 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ + 0x00ceda00 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ + 0x00ceda10 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ + 0x00ceda20 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ + 0x00ceda30 203d2076 65633428 615f706f 73697469 = vec4(a_positi │ │ │ │ + 0x00ceda40 6f6e2c20 312e3029 202a2075 5f6d6f64 on, 1.0) * u_mod │ │ │ │ + 0x00ceda50 656c5669 65773b20 0a202020 20766563 elView; . vec │ │ │ │ + 0x00ceda60 3420706f 73203d20 76656334 286e6f72 4 pos = vec4(nor │ │ │ │ + 0x00ceda70 6d616c2c 20302e30 2c20302e 3029202b mal, 0.0, 0.0) + │ │ │ │ + 0x00ceda80 20703b20 0a202020 20766563 34207072 p; . vec4 pr │ │ │ │ + 0x00ceda90 6f6a6563 74656450 69766f74 203d2070 ojectedPivot = p │ │ │ │ + 0x00cedaa0 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ + 0x00cedab0 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00cedac0 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ + 0x00cedad0 616e7366 6f726d28 706f7320 2a20755f ansform(pos * u_ │ │ │ │ + 0x00cedae0 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00cedaf0 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00cedb00 30293b20 0a202020 20666c6f 6174206e 0); . float n │ │ │ │ + 0x00cedb10 65775a20 3d207072 6f6a6563 74656450 ewZ = projectedP │ │ │ │ + 0x00cedb20 69766f74 2e79202f 2070726f 6a656374 ivot.y / project │ │ │ │ + 0x00cedb30 65645069 766f742e 77202a20 302e3520 edPivot.w * 0.5 │ │ │ │ + 0x00cedb40 2b20302e 353b200a 20202020 676c5f50 + 0.5; . gl_P │ │ │ │ + 0x00cedb50 6f736974 696f6e2e 7a203d20 61627328 osition.z = abs( │ │ │ │ + 0x00cedb60 615f6e6f 726d616c 416e6441 6e696d61 a_normalAndAnima │ │ │ │ + 0x00cedb70 74654f72 5a2e7a29 202a206e 65775a20 teOrZ.z) * newZ │ │ │ │ + 0x00cedb80 2b202831 2e30202d 20616273 28615f6e + (1.0 - abs(a_n │ │ │ │ + 0x00cedb90 6f726d61 6c416e64 416e696d 6174654f ormalAndAnimateO │ │ │ │ + 0x00cedba0 725a2e7a 2929202a 20676c5f 506f7369 rZ.z)) * gl_Posi │ │ │ │ + 0x00cedbb0 74696f6e 2e7a3b20 0a202020 20765f74 tion.z; . v_t │ │ │ │ + 0x00cedbc0 6578436f 6f726473 203d2061 5f746578 exCoords = a_tex │ │ │ │ + 0x00cedbd0 436f6f72 64733b20 0a202020 20765f6d Coords; . v_m │ │ │ │ + 0x00cedbe0 61736b43 6f6c6f72 203d2061 5f636f6c askColor = a_col │ │ │ │ + 0x00cedbf0 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00cedc00 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cedc10 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cedc20 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cedc30 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cedc40 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cedc50 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cedc60 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cedc70 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cedc80 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cedc90 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cedca0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cedcb0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cedcc0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cedcd0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cedce0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cedcf0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cedd00 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cedd10 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cedd20 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cedd30 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cedd40 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cedd50 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00cedd60 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00cedd70 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00cedd80 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00cedd90 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00cedda0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00ceddb0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00ceddc0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00ceddd0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00cedde0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00ceddf0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00cede00 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00cede10 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00cede20 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00cede30 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00cede40 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00cede50 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00cede60 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00cede70 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00cede80 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00cede90 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00cedea0 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00cedeb0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00cedec0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00ceded0 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00cedee0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00cedef0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00cedf00 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00cedf10 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00cedf20 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00cedf30 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cedf40 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00cedf50 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00cedf60 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00cedf70 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00cedf80 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00cedf90 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00cedfa0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00cedfb0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00cedfc0 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00cedfd0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cedfe0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00cedff0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00cee000 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00cee010 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00cee020 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00cee030 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00cee040 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00cee050 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00cee060 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00cee070 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cee080 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00cee090 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00cee0a0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cee0b0 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00cee0c0 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00cee0d0 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00cee0e0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00cee0f0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00cee100 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00cee110 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00cee120 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00cee130 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00cee140 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00cee150 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00cee160 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00cee170 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00cee180 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00cee190 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00cee1a0 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00cee1b0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00cee1c0 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00cee1d0 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00cee1e0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00cee1f0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00cee200 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00cee210 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00cee220 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00cee230 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00cee240 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00cee250 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00cee260 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00cee270 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00cee280 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00cee290 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00cee2a0 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00cee2b0 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00cee2c0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00cee2d0 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00cee2e0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00cee2f0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00cee300 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00cee310 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00cee320 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00cee330 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00cee340 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00cee350 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00cee360 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00cee370 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00cee380 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00cee390 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00cee3a0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00cee3b0 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00cee3c0 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00cee3d0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00cee3e0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00cee3f0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00cee400 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00cee410 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00cee420 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00cee430 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00cee440 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00cee450 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ + 0x00cee460 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ + 0x00cee470 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00cee480 2020666c 6f617420 6e6f726d 616c4c65 float normalLe │ │ │ │ + 0x00cee490 6e203d20 6c656e67 74682861 5f6e6f72 n = length(a_nor │ │ │ │ + 0x00cee4a0 6d616c29 3b200a20 20202076 65633420 mal); . vec4 │ │ │ │ + 0x00cee4b0 6e203d20 76656334 28615f70 6f736974 n = vec4(a_posit │ │ │ │ + 0x00cee4c0 696f6e2e 7879202b 20615f6e 6f726d61 ion.xy + a_norma │ │ │ │ + 0x00cee4d0 6c202a20 6b536861 7065436f 6f726453 l * kShapeCoordS │ │ │ │ + 0x00cee4e0 63616c61 722c2030 2e302c20 302e3029 calar, 0.0, 0.0) │ │ │ │ + 0x00cee4f0 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ + 0x00cee500 0a202020 20766563 34206e6f 726d203d . vec4 norm = │ │ │ │ + 0x00cee510 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ + 0x00cee520 302e302c 20302e30 293b200a 20202020 0.0, 0.0); . │ │ │ │ + 0x00cee530 69662028 646f7428 6e2c206e 2920213d if (dot(n, n) != │ │ │ │ + 0x00cee540 20302e30 29200a20 20202020 206e6f72 0.0) . nor │ │ │ │ + 0x00cee550 6d203d20 6e6f726d 616c697a 65286e29 m = normalize(n) │ │ │ │ + 0x00cee560 202a206e 6f726d61 6c4c656e 3b200a20 * normalLen; . │ │ │ │ + 0x00cee570 20202076 65633420 73686966 74656450 vec4 shiftedP │ │ │ │ + 0x00cee580 6f73203d 206e6f72 6d202b20 706f733b os = norm + pos; │ │ │ │ + 0x00cee590 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00cee5a0 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ + 0x00cee5b0 616e7366 6f726d28 73686966 74656450 ansform(shiftedP │ │ │ │ + 0x00cee5c0 6f73202a 20755f70 726f6a65 6374696f os * u_projectio │ │ │ │ + 0x00cee5d0 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ + 0x00cee5e0 6f726d2c 20302e30 293b200a 20202020 orm, 0.0); . │ │ │ │ + 0x00cee5f0 765f636f 6c6f7254 6578436f 6f726473 v_colorTexCoords │ │ │ │ + 0x00cee600 203d2061 5f636f6c 6f725465 78436f6f = a_colorTexCoo │ │ │ │ + 0x00cee610 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ + 0x00cee620 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cee630 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cee640 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cee650 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cee660 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cee670 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cee680 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cee690 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cee6a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cee6b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cee6c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cee6d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cee6e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cee6f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cee700 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cee710 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cee720 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cee730 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cee740 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cee750 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cee760 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00cee770 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00cee780 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00cee790 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00cee7a0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00cee7b0 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00cee7c0 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00cee7d0 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00cee7e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cee7f0 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ + 0x00cee800 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ + 0x00cee810 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00cee820 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00cee830 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00cee840 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00cee850 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00cee860 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00cee870 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00cee880 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00cee890 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00cee8a0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00cee8b0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00cee8c0 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00cee8d0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00cee8e0 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00cee8f0 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00cee900 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00cee910 50617373 3b200a20 20636f6e 73742066 Pass; . const f │ │ │ │ + 0x00cee920 6c6f6174 206b4365 6c6c5078 203d2038 loat kCellPx = 8 │ │ │ │ + 0x00cee930 2e303b20 20202020 2f2f2064 6f74206c .0; // dot l │ │ │ │ + 0x00cee940 61747469 63652063 656c6c20 28646976 attice cell (div │ │ │ │ + 0x00cee950 69646573 20746865 20313670 78207469 ides the 16px ti │ │ │ │ + 0x00cee960 6c652c20 736f2063 656c6c73 2074696c le, so cells til │ │ │ │ + 0x00cee970 65207365 616d6c65 73736c79 29200a20 e seamlessly) . │ │ │ │ + 0x00cee980 20636f6e 73742066 6c6f6174 206b5261 const float kRa │ │ │ │ + 0x00cee990 64697573 5078203d 20312e32 3b202020 diusPx = 1.2; │ │ │ │ + 0x00cee9a0 2f2f2064 6f742072 61646975 73200a20 // dot radius . │ │ │ │ + 0x00cee9b0 20636f6e 73742066 6c6f6174 206b4a69 const float kJi │ │ │ │ + 0x00cee9c0 74746572 203d2030 2e35353b 20202020 tter = 0.55; │ │ │ │ + 0x00cee9d0 2f2f206b 65657020 6b4a6974 7465722a // keep kJitter* │ │ │ │ + 0x00cee9e0 302e352a 6b43656c 6c507820 2b206b52 0.5*kCellPx + kR │ │ │ │ + 0x00cee9f0 61646975 73507820 3c206b43 656c6c50 adiusPx < kCellP │ │ │ │ + 0x00ceea00 782a302e 35202864 6f747320 73746179 x*0.5 (dots stay │ │ │ │ + 0x00ceea10 20696e20 63656c6c 29200a20 20636f6e in cell) . con │ │ │ │ + 0x00ceea20 73742066 6c6f6174 206b4461 726b656e st float kDarken │ │ │ │ + 0x00ceea30 203d2030 2e38303b 20202020 2f2f2073 = 0.80; // s │ │ │ │ + 0x00ceea40 75726661 6365206d 756c7469 706c6965 urface multiplie │ │ │ │ + 0x00ceea50 7220756e 64657220 6120646f 74206f6e r under a dot on │ │ │ │ + 0x00ceea60 2061206c 69676874 2066696c 6c202867 a light fill (g │ │ │ │ + 0x00ceea70 656e746c 65202d20 74657874 75726520 entle - texture │ │ │ │ + 0x00ceea80 73686f75 6c642077 68697370 65722920 should whisper) │ │ │ │ + 0x00ceea90 0a202066 6c6f6174 20486173 68287665 . float Hash(ve │ │ │ │ + 0x00ceeaa0 63322070 29200a20 207b200a 20202020 c2 p) . { . │ │ │ │ + 0x00ceeab0 70203d20 66726163 74287020 2a207665 p = fract(p * ve │ │ │ │ + 0x00ceeac0 63322831 32372e31 2c203331 312e3729 c2(127.1, 311.7) │ │ │ │ + 0x00ceead0 293b200a 20202020 70202b3d 20646f74 ); . p += dot │ │ │ │ + 0x00ceeae0 28702c20 70202b20 33342e32 33293b20 (p, p + 34.23); │ │ │ │ + 0x00ceeaf0 0a202020 20726574 75726e20 66726163 . return frac │ │ │ │ + 0x00ceeb00 7428702e 78202a20 702e7929 3b200a20 t(p.x * p.y); . │ │ │ │ + 0x00ceeb10 207d200a 2020636f 6e737420 666c6f61 } . const floa │ │ │ │ + 0x00ceeb20 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00ceeb30 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00ceeb40 204c4f57 5f502076 65633320 4d6f6475 LOW_P vec3 Modu │ │ │ │ + 0x00ceeb50 6c617465 42795061 74746572 6e446f74 lateByPatternDot │ │ │ │ + 0x00ceeb60 73284c4f 575f5020 76656333 20636f6c s(LOW_P vec3 col │ │ │ │ + 0x00ceeb70 6f722c20 666c6f61 74206461 726b656e or, float darken │ │ │ │ + 0x00ceeb80 2c20666c 6f617420 636f7665 72616765 , float coverage │ │ │ │ + 0x00ceeb90 29200a20 207b200a 20202020 636f6e73 ) . { . cons │ │ │ │ + 0x00ceeba0 7420666c 6f617420 6b4c6967 6874656e t float kLighten │ │ │ │ + 0x00ceebb0 203d2030 2e303735 3b200a20 20202069 = 0.075; . i │ │ │ │ + 0x00ceebc0 66202864 6f742863 6f6c6f72 2c207665 f (dot(color, ve │ │ │ │ + 0x00ceebd0 63332830 2e323132 362c2030 2e373135 c3(0.2126, 0.715 │ │ │ │ + 0x00ceebe0 322c2030 2e303732 32292920 3c20302e 2, 0.0722)) < 0. │ │ │ │ + 0x00ceebf0 3529200a 20202020 20207265 7475726e 5) . return │ │ │ │ + 0x00ceec00 20636f6c 6f72202b 20636f76 65726167 color + coverag │ │ │ │ + 0x00ceec10 65202a20 6b4c6967 6874656e 3b200a20 e * kLighten; . │ │ │ │ + 0x00ceec20 20202072 65747572 6e20636f 6c6f7220 return color │ │ │ │ + 0x00ceec30 2a206d69 7828312e 302c2064 61726b65 * mix(1.0, darke │ │ │ │ + 0x00ceec40 6e2c2063 6f766572 61676529 3b200a20 n, coverage); . │ │ │ │ + 0x00ceec50 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00ceec60 29200a20 207b200a 20202369 66646566 ) . { . #ifdef │ │ │ │ + 0x00ceec70 20454e41 424c455f 56544620 0a202020 ENABLE_VTF . │ │ │ │ + 0x00ceec80 204c4f57 5f502076 65633420 636f6c6f LOW_P vec4 colo │ │ │ │ + 0x00ceec90 72203d20 765f636f 6c6f723b 200a2020 r = v_color; . │ │ │ │ + 0x00ceeca0 23656c73 65200a20 2020204c 4f575f50 #else . LOW_P │ │ │ │ + 0x00ceecb0 20766563 3420636f 6c6f7220 3d207465 vec4 color = te │ │ │ │ + 0x00ceecc0 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ + 0x00ceecd0 2c20765f 636f6c6f 72546578 436f6f72 , v_colorTexCoor │ │ │ │ + 0x00ceece0 6473293b 200a2020 23656e64 6966200a ds); . #endif . │ │ │ │ + 0x00ceecf0 20202020 76656332 20707820 3d20765f vec2 px = v_ │ │ │ │ + 0x00ceed00 6d61736b 54657843 6f6f7264 73202a20 maskTexCoords * │ │ │ │ + 0x00ceed10 31362e30 3b200a20 20202076 65633220 16.0; . vec2 │ │ │ │ + 0x00ceed20 63656c6c 203d2066 6c6f6f72 28707820 cell = floor(px │ │ │ │ + 0x00ceed30 2f206b43 656c6c50 78293b20 0a202020 / kCellPx); . │ │ │ │ + 0x00ceed40 20766563 3220746f 43656e74 6572203d vec2 toCenter = │ │ │ │ + 0x00ceed50 200a2020 20202020 20202866 72616374 . (fract │ │ │ │ + 0x00ceed60 28707820 2f206b43 656c6c50 7829202d (px / kCellPx) - │ │ │ │ + 0x00ceed70 20302e35 29202a20 6b43656c 6c507820 0.5) * kCellPx │ │ │ │ + 0x00ceed80 2d202876 65633228 48617368 2863656c - (vec2(Hash(cel │ │ │ │ + 0x00ceed90 6c292c20 48617368 2863656c 6c202b20 l), Hash(cell + │ │ │ │ + 0x00ceeda0 31392e37 2929202d 20302e35 29202a20 19.7)) - 0.5) * │ │ │ │ + 0x00ceedb0 286b4a69 74746572 202a206b 43656c6c (kJitter * kCell │ │ │ │ + 0x00ceedc0 5078293b 200a2020 2020666c 6f617420 Px); . float │ │ │ │ + 0x00ceedd0 64203d20 6c656e67 74682874 6f43656e d = length(toCen │ │ │ │ + 0x00ceede0 74657229 3b200a20 20202066 6c6f6174 ter); . float │ │ │ │ + 0x00ceedf0 20616120 3d206d61 78286677 69647468 aa = max(fwidth │ │ │ │ + 0x00ceee00 2870782e 78292c20 66776964 74682870 (px.x), fwidth(p │ │ │ │ + 0x00ceee10 782e7929 293b2020 2f2f2063 6f6e7469 x.y)); // conti │ │ │ │ + 0x00ceee20 6e756f75 7320636f 6f72643a 206e6f20 nuous coord: no │ │ │ │ + 0x00ceee30 66726163 742d7365 616d2064 65726976 fract-seam deriv │ │ │ │ + 0x00ceee40 61746976 65207370 696b6520 0a202020 ative spike . │ │ │ │ + 0x00ceee50 20666c6f 61742063 6f766572 61676520 float coverage │ │ │ │ + 0x00ceee60 3d20312e 30202d20 736d6f6f 74687374 = 1.0 - smoothst │ │ │ │ + 0x00ceee70 6570286b 52616469 75735078 202d2061 ep(kRadiusPx - a │ │ │ │ + 0x00ceee80 612c206b 52616469 75735078 202b2061 a, kRadiusPx + a │ │ │ │ + 0x00ceee90 612c2064 293b200a 20202020 636f6c6f a, d); . colo │ │ │ │ + 0x00ceeea0 722e7267 62203d20 4d6f6475 6c617465 r.rgb = Modulate │ │ │ │ + 0x00ceeeb0 42795061 74746572 6e446f74 7328636f ByPatternDots(co │ │ │ │ + 0x00ceeec0 6c6f722e 7267622c 206b4461 726b656e lor.rgb, kDarken │ │ │ │ + 0x00ceeed0 2c20636f 76657261 6765293b 200a2020 , coverage); . │ │ │ │ + 0x00ceeee0 2020636f 6c6f722e 61202a3d 20755f6f color.a *= u_o │ │ │ │ + 0x00ceeef0 70616369 74793b20 0a202020 20765f46 pacity; . v_F │ │ │ │ + 0x00ceef00 72616743 6f6c6f72 203d2063 6f6c6f72 ragColor = color │ │ │ │ + 0x00ceef10 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ + 0x00ceef20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00ceef30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00ceef40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00ceef50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00ceef60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00ceef70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00ceef80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00ceef90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00ceefa0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00ceefb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00ceefc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00ceefd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00ceefe0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00ceeff0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cef000 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cef010 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cef020 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cef030 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cef040 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cef050 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cef060 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cef070 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00cef080 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00cef090 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00cef0a0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00cef0b0 65633420 765f6f66 66736574 733b200a ec4 v_offsets; . │ │ │ │ + 0x00cef0c0 20206f75 74207665 63342076 5f636f6c out vec4 v_col │ │ │ │ + 0x00cef0d0 6f723b20 0a202075 6e69666f 726d206d or; . uniform m │ │ │ │ + 0x00cef0e0 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ + 0x00cef0f0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00cef100 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00cef110 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00cef120 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ + 0x00cef130 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00cef140 20755f70 6172616d 733b200a 2020756e u_params; . un │ │ │ │ + 0x00cef150 69666f72 6d20666c 6f617420 755f6c69 iform float u_li │ │ │ │ + 0x00cef160 6e654861 6c665769 6474683b 200a2020 neHalfWidth; . │ │ │ │ + 0x00cef170 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00cef180 6d617852 61646975 733b200a 2020636f maxRadius; . co │ │ │ │ + 0x00cef190 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00cef1a0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00cef1b0 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ + 0x00cef1c0 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ + 0x00cef1d0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00cef1e0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00cef1f0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00cef200 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ + 0x00cef210 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00cef220 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ + 0x00cef230 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ + 0x00cef240 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ + 0x00cef250 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00cef260 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ + 0x00cef270 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00cef280 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00cef290 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00cef2a0 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ + 0x00cef2b0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00cef2c0 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ + 0x00cef2d0 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ + 0x00cef2e0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00cef2f0 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ + 0x00cef300 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ + 0x00cef310 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ + 0x00cef320 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00cef330 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ + 0x00cef340 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ + 0x00cef350 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ + 0x00cef360 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ + 0x00cef370 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00cef380 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ + 0x00cef390 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ + 0x00cef3a0 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ + 0x00cef3b0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00cef3c0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00cef3d0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00cef3e0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00cef3f0 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ + 0x00cef400 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ + 0x00cef410 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ + 0x00cef420 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ + 0x00cef430 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00cef440 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ + 0x00cef450 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ + 0x00cef460 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00cef470 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ + 0x00cef480 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ + 0x00cef490 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00cef4a0 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ + 0x00cef4b0 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ + 0x00cef4c0 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ + 0x00cef4d0 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00cef4e0 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ + 0x00cef4f0 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ + 0x00cef500 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ + 0x00cef510 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ + 0x00cef520 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ + 0x00cef530 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ + 0x00cef540 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00cef550 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ + 0x00cef560 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ + 0x00cef570 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ + 0x00cef580 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ + 0x00cef590 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ + 0x00cef5a0 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00cef5b0 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ + 0x00cef5c0 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ + 0x00cef5d0 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ + 0x00cef5e0 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ + 0x00cef5f0 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ + 0x00cef600 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ + 0x00cef610 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ + 0x00cef620 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ + 0x00cef630 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ + 0x00cef640 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ + 0x00cef650 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ + 0x00cef660 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ + 0x00cef670 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ + 0x00cef680 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00cef690 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ + 0x00cef6a0 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ + 0x00cef6b0 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00cef6c0 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ + 0x00cef6d0 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ + 0x00cef6e0 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ + 0x00cef6f0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00cef700 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00cef710 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ + 0x00cef720 6e282920 0a20207b 200a2020 20207665 n() . { . ve │ │ │ │ + 0x00cef730 63342070 6f73203d 20766563 3428615f c4 pos = vec4(a_ │ │ │ │ + 0x00cef740 706f7369 74696f6e 2e78792c 20302c20 position.xy, 0, │ │ │ │ + 0x00cef750 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ + 0x00cef760 3b200a20 20202076 65633220 6e6f726d ; . vec2 norm │ │ │ │ + 0x00cef770 616c203d 20766563 3228615f 6e6f726d al = vec2(a_norm │ │ │ │ + 0x00cef780 616c2e78 202a2075 5f706172 616d732e al.x * u_params. │ │ │ │ + 0x00cef790 78202d20 615f6e6f 726d616c 2e79202a x - a_normal.y * │ │ │ │ + 0x00cef7a0 20755f70 6172616d 732e792c 200a2020 u_params.y, . │ │ │ │ + 0x00cef7b0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cef7c0 20202020 20615f6e 6f726d61 6c2e7820 a_normal.x │ │ │ │ + 0x00cef7d0 2a20755f 70617261 6d732e79 202b2061 * u_params.y + a │ │ │ │ + 0x00cef7e0 5f6e6f72 6d616c2e 79202a20 755f7061 _normal.y * u_pa │ │ │ │ + 0x00cef7f0 72616d73 2e78293b 200a2020 20207665 rams.x); . ve │ │ │ │ + 0x00cef800 63322073 68696674 6564506f 73203d20 c2 shiftedPos = │ │ │ │ + 0x00cef810 6e6f726d 616c202a 20755f70 6172616d normal * u_param │ │ │ │ + 0x00cef820 732e7a20 2b20706f 732e7879 3b200a20 s.z + pos.xy; . │ │ │ │ + 0x00cef830 20202070 6f73203d 20766563 34287368 pos = vec4(sh │ │ │ │ + 0x00cef840 69667465 64506f73 2c20615f 706f7369 iftedPos, a_posi │ │ │ │ + 0x00cef850 74696f6e 2e7a2c20 312e3029 202a2075 tion.z, 1.0) * u │ │ │ │ + 0x00cef860 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00cef870 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00cef880 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00cef890 6f726d28 706f732c 20755f70 69766f74 orm(pos, u_pivot │ │ │ │ + 0x00cef8a0 5472616e 73666f72 6d2c2030 2e30293b Transform, 0.0); │ │ │ │ + 0x00cef8b0 200a2020 20207665 6332206f 66667365 . vec2 offse │ │ │ │ + 0x00cef8c0 7473203d 20616273 28615f6e 6f726d61 ts = abs(a_norma │ │ │ │ + 0x00cef8d0 6c2e7a77 293b200a 20202020 765f6f66 l.zw); . v_of │ │ │ │ + 0x00cef8e0 66736574 73203d20 76656334 28615f6e fsets = vec4(a_n │ │ │ │ + 0x00cef8f0 6f726d61 6c2e7a77 2c206f66 66736574 ormal.zw, offset │ │ │ │ + 0x00cef900 73202d20 312e3029 3b200a20 20202076 s - 1.0); . v │ │ │ │ + 0x00cef910 5f636f6c 6f72203d 20615f63 6f6c6f72 _color = a_color │ │ │ │ + 0x00cef920 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ + 0x00cef930 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cef940 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cef950 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cef960 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cef970 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cef980 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cef990 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cef9a0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cef9b0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cef9c0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cef9d0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cef9e0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cef9f0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cefa00 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cefa10 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cefa20 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cefa30 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cefa40 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cefa50 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cefa60 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cefa70 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cefa80 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00cefa90 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ + 0x00cefaa0 6f6f7264 733b200a 2020696e 20766563 oords; . in vec │ │ │ │ + 0x00cefab0 3420615f 636f6c6f 723b200a 20206f75 4 a_color; . ou │ │ │ │ + 0x00cefac0 74207665 63322076 5f746578 436f6f72 t vec2 v_texCoor │ │ │ │ + 0x00cefad0 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ + 0x00cefae0 765f636f 6c6f723b 200a2020 756e6966 v_color; . unif │ │ │ │ + 0x00cefaf0 6f726d20 6d617434 20755f70 726f6a65 orm mat4 u_proje │ │ │ │ + 0x00cefb00 6374696f 6e3b200a 2020636f 6e737420 ction; . const │ │ │ │ + 0x00cefb10 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00cefb20 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00cefb30 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ + 0x00cefb40 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00cefb50 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00cefb60 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00cefb70 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ + 0x00cefb80 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00cefb90 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cefba0 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ + 0x00cefbb0 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ + 0x00cefbc0 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ + 0x00cefbd0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00cefbe0 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ + 0x00cefbf0 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00cefc00 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cefc10 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00cefc20 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ + 0x00cefc30 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cefc40 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ + 0x00cefc50 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ + 0x00cefc60 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00cefc70 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00cefc80 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ + 0x00cefc90 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ + 0x00cefca0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00cefcb0 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ + 0x00cefcc0 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ + 0x00cefcd0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00cefce0 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ + 0x00cefcf0 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ + 0x00cefd00 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ + 0x00cefd10 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ + 0x00cefd20 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ + 0x00cefd30 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ + 0x00cefd40 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ + 0x00cefd50 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ + 0x00cefd60 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ + 0x00cefd70 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ + 0x00cefd80 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ + 0x00cefd90 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ + 0x00cefda0 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ + 0x00cefdb0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cefdc0 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ + 0x00cefdd0 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ + 0x00cefde0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00cefdf0 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ + 0x00cefe00 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ + 0x00cefe10 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00cefe20 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ + 0x00cefe30 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ + 0x00cefe40 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ + 0x00cefe50 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00cefe60 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ + 0x00cefe70 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ + 0x00cefe80 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ + 0x00cefe90 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ + 0x00cefea0 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ + 0x00cefeb0 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ + 0x00cefec0 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ + 0x00cefed0 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ + 0x00cefee0 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ + 0x00cefef0 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ + 0x00ceff00 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ + 0x00ceff10 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00ceff20 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00ceff30 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ + 0x00ceff40 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ + 0x00ceff50 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ + 0x00ceff60 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ + 0x00ceff70 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ + 0x00ceff80 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ + 0x00ceff90 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ + 0x00ceffa0 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ + 0x00ceffb0 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ + 0x00ceffc0 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ + 0x00ceffd0 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ + 0x00ceffe0 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ + 0x00cefff0 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ + 0x00cf0000 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00cf0010 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ + 0x00cf0020 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ + 0x00cf0030 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00cf0040 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ + 0x00cf0050 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ + 0x00cf0060 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ + 0x00cf0070 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00cf0080 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ + 0x00cf0090 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ + 0x00cf00a0 0a20207b 200a2020 2020765f 74657843 . { . v_texC │ │ │ │ + 0x00cf00b0 6f6f7264 73203d20 615f7465 78436f6f oords = a_texCoo │ │ │ │ + 0x00cf00c0 7264733b 200a2020 2020765f 636f6c6f rds; . v_colo │ │ │ │ + 0x00cf00d0 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ + 0x00cf00e0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00cf00f0 76656334 28615f70 6f736974 696f6e2c vec4(a_position, │ │ │ │ + 0x00cf0100 20302c20 3129202a 20755f70 726f6a65 0, 1) * u_proje │ │ │ │ + 0x00cf0110 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ + 0x00cf0120 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ + 0x00cf0130 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ + 0x00cf0140 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ + 0x00cf0150 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ + 0x00cf0160 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ + 0x00cf0170 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ + 0x00cf0180 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ + 0x00cf0190 64696620 0a20207d 200a0000 00000000 dif . } ....... │ │ │ │ + 0x00cf01a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cf01b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cf01c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cf01d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cf01e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cf01f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cf0200 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cf0210 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cf0220 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cf0230 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cf0240 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cf0250 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cf0260 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cf0270 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cf0280 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cf0290 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cf02a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cf02b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cf02c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cf02d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cf02e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cf02f0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00cf0300 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00cf0310 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00cf0320 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00cf0330 65633420 765f7261 64697573 3b200a20 ec4 v_radius; . │ │ │ │ + 0x00cf0340 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ + 0x00cf0350 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ + 0x00cf0360 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00cf0370 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00cf0380 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00cf0390 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00cf03a0 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00cf03b0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00cf03c0 755f726f 75746550 6172616d 733b200a u_routeParams; . │ │ │ │ + 0x00cf03d0 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00cf03e0 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ + 0x00cf03f0 726d2076 65633420 755f6d61 736b436f rm vec4 u_maskCo │ │ │ │ + 0x00cf0400 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00cf0410 76656334 20755f6f 75746c69 6e65436f vec4 u_outlineCo │ │ │ │ + 0x00cf0420 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00cf0430 76656334 20755f66 616b6543 6f6c6f72 vec4 u_fakeColor │ │ │ │ + 0x00cf0440 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00cf0450 3420755f 66616b65 4f75746c 696e6543 4 u_fakeOutlineC │ │ │ │ + 0x00cf0460 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00cf0470 20766563 3220755f 66616b65 426f7264 vec2 u_fakeBord │ │ │ │ + 0x00cf0480 6572733b 200a2020 756e6966 6f726d20 ers; . uniform │ │ │ │ + 0x00cf0490 76656332 20755f70 61747465 726e3b20 vec2 u_pattern; │ │ │ │ + 0x00cf04a0 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00cf04b0 755f616e 676c6543 6f735369 6e3b200a u_angleCosSin; . │ │ │ │ + 0x00cf04c0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00cf04d0 755f6172 726f7748 616c6657 69647468 u_arrowHalfWidth │ │ │ │ + 0x00cf04e0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00cf04f0 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ + 0x00cf0500 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00cf0510 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00cf0520 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00cf0530 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00cf0540 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00cf0550 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00cf0560 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00cf0570 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00cf0580 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00cf0590 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00cf05a0 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00cf05b0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cf05c0 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00cf05d0 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00cf05e0 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00cf05f0 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00cf0600 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00cf0610 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00cf0620 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00cf0630 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00cf0640 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00cf0650 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00cf0660 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00cf0670 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00cf0680 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cf0690 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00cf06a0 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00cf06b0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cf06c0 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00cf06d0 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00cf06e0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00cf06f0 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00cf0700 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00cf0710 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00cf0720 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00cf0730 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00cf0740 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00cf0750 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00cf0760 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00cf0770 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00cf0780 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00cf0790 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00cf07a0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00cf07b0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00cf07c0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00cf07d0 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00cf07e0 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00cf07f0 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00cf0800 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00cf0810 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00cf0820 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00cf0830 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00cf0840 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00cf0850 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00cf0860 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cf0870 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00cf0880 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00cf0890 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00cf08a0 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00cf08b0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00cf08c0 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00cf08d0 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00cf08e0 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00cf08f0 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00cf0900 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00cf0910 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00cf0920 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00cf0930 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00cf0940 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00cf0950 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00cf0960 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00cf0970 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00cf0980 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00cf0990 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00cf09a0 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00cf09b0 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00cf09c0 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00cf09d0 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00cf09e0 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00cf09f0 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00cf0a00 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00cf0a10 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00cf0a20 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00cf0a30 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00cf0a40 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00cf0a50 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00cf0a60 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00cf0a70 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00cf0a80 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00cf0a90 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00cf0aa0 20666c6f 61742072 203d2075 5f726f75 float r = u_rou │ │ │ │ + 0x00cf0ab0 74655061 72616d73 2e78202a 20615f6e teParams.x * a_n │ │ │ │ + 0x00cf0ac0 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ + 0x00cf0ad0 6332206e 6f726d61 6c203d20 76656332 c2 normal = vec2 │ │ │ │ + 0x00cf0ae0 28615f6e 6f726d61 6c2e7820 2a20755f (a_normal.x * u_ │ │ │ │ + 0x00cf0af0 616e676c 65436f73 53696e2e 78202d20 angleCosSin.x - │ │ │ │ + 0x00cf0b00 615f6e6f 726d616c 2e79202a 20755f61 a_normal.y * u_a │ │ │ │ + 0x00cf0b10 6e676c65 436f7353 696e2e79 2c200a20 ngleCosSin.y, . │ │ │ │ + 0x00cf0b20 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cf0b30 20202020 2020615f 6e6f726d 616c2e78 a_normal.x │ │ │ │ + 0x00cf0b40 202a2075 5f616e67 6c65436f 7353696e * u_angleCosSin │ │ │ │ + 0x00cf0b50 2e79202b 20615f6e 6f726d61 6c2e7920 .y + a_normal.y │ │ │ │ + 0x00cf0b60 2a20755f 616e676c 65436f73 53696e2e * u_angleCosSin. │ │ │ │ + 0x00cf0b70 78293b20 0a202020 20766563 34207261 x); . vec4 ra │ │ │ │ + 0x00cf0b80 64697573 203d2076 65633428 6e6f726d dius = vec4(norm │ │ │ │ + 0x00cf0b90 616c2e78 79202a20 722c2072 2c20615f al.xy * r, r, a_ │ │ │ │ + 0x00cf0ba0 706f7369 74696f6e 2e77293b 200a2020 position.w); . │ │ │ │ + 0x00cf0bb0 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ + 0x00cf0bc0 3428615f 706f7369 74696f6e 2e78792c 4(a_position.xy, │ │ │ │ + 0x00cf0bd0 20302c20 3129202a 20755f6d 6f64656c 0, 1) * u_model │ │ │ │ + 0x00cf0be0 56696577 3b200a20 20202076 65633220 View; . vec2 │ │ │ │ + 0x00cf0bf0 73686966 74656450 6f73203d 20726164 shiftedPos = rad │ │ │ │ + 0x00cf0c00 6975732e 7879202b 20706f73 2e78793b ius.xy + pos.xy; │ │ │ │ + 0x00cf0c10 200a2020 2020706f 73203d20 76656334 . pos = vec4 │ │ │ │ + 0x00cf0c20 28736869 66746564 506f732c 20615f70 (shiftedPos, a_p │ │ │ │ + 0x00cf0c30 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ + 0x00cf0c40 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ + 0x00cf0c50 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ + 0x00cf0c60 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ + 0x00cf0c70 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ + 0x00cf0c80 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00cf0c90 30293b20 0a202020 20765f72 61646975 0); . v_radiu │ │ │ │ + 0x00cf0ca0 73203d20 72616469 75733b20 0a202020 s = radius; . │ │ │ │ + 0x00cf0cb0 20765f63 6f6c6f72 203d2061 5f636f6c v_color = a_col │ │ │ │ + 0x00cf0cc0 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ + 0x00cf0cd0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cf0ce0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cf0cf0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cf0d00 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cf0d10 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cf0d20 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cf0d30 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cf0d40 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cf0d50 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cf0d60 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cf0d70 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cf0d80 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cf0d90 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cf0da0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cf0db0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cf0dc0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cf0dd0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cf0de0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cf0df0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cf0e00 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cf0e10 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cf0e20 63332076 5f6c656e 6774683b 200a2020 c3 v_length; . │ │ │ │ + 0x00cf0e30 696e2076 65633420 765f636f 6c6f723b in vec4 v_color; │ │ │ │ + 0x00cf0e40 200a2020 6f757420 76656334 20765f46 . out vec4 v_F │ │ │ │ + 0x00cf0e50 72616743 6f6c6f72 3b200a20 20756e69 ragColor; . uni │ │ │ │ + 0x00cf0e60 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00cf0e70 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00cf0e80 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00cf0e90 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00cf0ea0 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00cf0eb0 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00cf0ec0 6d207665 63342075 5f726f75 74655061 m vec4 u_routePa │ │ │ │ + 0x00cf0ed0 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00cf0ee0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00cf0ef0 2020756e 69666f72 6d207665 63342075 uniform vec4 u │ │ │ │ + 0x00cf0f00 5f6d6173 6b436f6c 6f723b20 0a202075 _maskColor; . u │ │ │ │ + 0x00cf0f10 6e69666f 726d2076 65633420 755f6f75 niform vec4 u_ou │ │ │ │ + 0x00cf0f20 746c696e 65436f6c 6f723b20 0a202075 tlineColor; . u │ │ │ │ + 0x00cf0f30 6e69666f 726d2076 65633420 755f6661 niform vec4 u_fa │ │ │ │ + 0x00cf0f40 6b65436f 6c6f723b 200a2020 756e6966 keColor; . unif │ │ │ │ + 0x00cf0f50 6f726d20 76656334 20755f66 616b654f orm vec4 u_fakeO │ │ │ │ + 0x00cf0f60 75746c69 6e65436f 6c6f723b 200a2020 utlineColor; . │ │ │ │ + 0x00cf0f70 756e6966 6f726d20 76656332 20755f66 uniform vec2 u_f │ │ │ │ + 0x00cf0f80 616b6542 6f726465 72733b20 0a202075 akeBorders; . u │ │ │ │ + 0x00cf0f90 6e69666f 726d2076 65633220 755f7061 niform vec2 u_pa │ │ │ │ + 0x00cf0fa0 74746572 6e3b200a 2020756e 69666f72 ttern; . unifor │ │ │ │ + 0x00cf0fb0 6d207665 63322075 5f616e67 6c65436f m vec2 u_angleCo │ │ │ │ + 0x00cf0fc0 7353696e 3b200a20 20756e69 666f726d sSin; . uniform │ │ │ │ + 0x00cf0fd0 20666c6f 61742075 5f617272 6f774861 float u_arrowHa │ │ │ │ + 0x00cf0fe0 6c665769 6474683b 200a2020 756e6966 lfWidth; . unif │ │ │ │ + 0x00cf0ff0 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00cf1000 6974793b 200a2020 636f6e73 7420666c ity; . const fl │ │ │ │ + 0x00cf1010 6f617420 6b416e74 69616c69 6173696e oat kAntialiasin │ │ │ │ + 0x00cf1020 67546872 6573686f 6c64203d 20302e39 gThreshold = 0.9 │ │ │ │ + 0x00cf1030 323b200a 2020636f 6e737420 666c6f61 2; . const floa │ │ │ │ + 0x00cf1040 74206b4f 75746c69 6e655468 72657368 t kOutlineThresh │ │ │ │ + 0x00cf1050 6f6c6431 203d2030 2e38313b 200a2020 old1 = 0.81; . │ │ │ │ + 0x00cf1060 636f6e73 7420666c 6f617420 6b4f7574 const float kOut │ │ │ │ + 0x00cf1070 6c696e65 54687265 73686f6c 6432203d lineThreshold2 = │ │ │ │ + 0x00cf1080 20302e37 313b200a 2020636f 6e737420 0.71; . const │ │ │ │ + 0x00cf1090 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00cf10a0 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00cf10b0 3b200a20 204c4f57 5f502076 65633320 ; . LOW_P vec3 │ │ │ │ + 0x00cf10c0 4d6f6475 6c617465 42795061 74746572 ModulateByPatter │ │ │ │ + 0x00cf10d0 6e446f74 73284c4f 575f5020 76656333 nDots(LOW_P vec3 │ │ │ │ + 0x00cf10e0 20636f6c 6f722c20 666c6f61 74206461 color, float da │ │ │ │ + 0x00cf10f0 726b656e 2c20666c 6f617420 636f7665 rken, float cove │ │ │ │ + 0x00cf1100 72616765 29200a20 207b200a 20202020 rage) . { . │ │ │ │ + 0x00cf1110 636f6e73 7420666c 6f617420 6b4c6967 const float kLig │ │ │ │ + 0x00cf1120 6874656e 203d2030 2e303735 3b200a20 hten = 0.075; . │ │ │ │ + 0x00cf1130 20202069 66202864 6f742863 6f6c6f72 if (dot(color │ │ │ │ + 0x00cf1140 2c207665 63332830 2e323132 362c2030 , vec3(0.2126, 0 │ │ │ │ + 0x00cf1150 2e373135 322c2030 2e303732 32292920 .7152, 0.0722)) │ │ │ │ + 0x00cf1160 3c20302e 3529200a 20202020 20207265 < 0.5) . re │ │ │ │ + 0x00cf1170 7475726e 20636f6c 6f72202b 20636f76 turn color + cov │ │ │ │ + 0x00cf1180 65726167 65202a20 6b4c6967 6874656e erage * kLighten │ │ │ │ + 0x00cf1190 3b200a20 20202072 65747572 6e20636f ; . return co │ │ │ │ + 0x00cf11a0 6c6f7220 2a206d69 7828312e 302c2064 lor * mix(1.0, d │ │ │ │ + 0x00cf11b0 61726b65 6e2c2063 6f766572 61676529 arken, coverage) │ │ │ │ + 0x00cf11c0 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ + 0x00cf11d0 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ + 0x00cf11e0 69662028 765f6c65 6e677468 2e78203c if (v_length.x < │ │ │ │ + 0x00cf11f0 20765f6c 656e6774 682e7a29 200a2020 v_length.z) . │ │ │ │ + 0x00cf1200 20202020 64697363 6172643b 200a2020 discard; . │ │ │ │ + 0x00cf1210 20207665 63322063 6f656673 203d2073 vec2 coefs = s │ │ │ │ + 0x00cf1220 74657028 765f6c65 6e677468 2e78782c tep(v_length.xx, │ │ │ │ + 0x00cf1230 20755f66 616b6542 6f726465 7273293b u_fakeBorders); │ │ │ │ + 0x00cf1240 200a2020 2020636f 6566732e 79203d20 . coefs.y = │ │ │ │ + 0x00cf1250 312e3020 2d20636f 6566732e 793b200a 1.0 - coefs.y; . │ │ │ │ + 0x00cf1260 20202020 76656334 206d6169 6e436f6c vec4 mainCol │ │ │ │ + 0x00cf1270 6f72203d 206d6978 28755f63 6f6c6f72 or = mix(u_color │ │ │ │ + 0x00cf1280 2c20755f 66616b65 436f6c6f 722c2063 , u_fakeColor, c │ │ │ │ + 0x00cf1290 6f656673 2e78293b 200a2020 20206d61 oefs.x); . ma │ │ │ │ + 0x00cf12a0 696e436f 6c6f7220 3d206d69 78286d61 inColor = mix(ma │ │ │ │ + 0x00cf12b0 696e436f 6c6f722c 20755f66 616b6543 inColor, u_fakeC │ │ │ │ + 0x00cf12c0 6f6c6f72 2c20636f 6566732e 79293b20 olor, coefs.y); │ │ │ │ + 0x00cf12d0 0a202020 20766563 34206d61 696e4f75 . vec4 mainOu │ │ │ │ + 0x00cf12e0 746c696e 65436f6c 6f72203d 206d6978 tlineColor = mix │ │ │ │ + 0x00cf12f0 28755f6f 75746c69 6e65436f 6c6f722c (u_outlineColor, │ │ │ │ + 0x00cf1300 20755f66 616b654f 75746c69 6e65436f u_fakeOutlineCo │ │ │ │ + 0x00cf1310 6c6f722c 20636f65 66732e78 293b200a lor, coefs.x); . │ │ │ │ + 0x00cf1320 20202020 6d61696e 4f75746c 696e6543 mainOutlineC │ │ │ │ + 0x00cf1330 6f6c6f72 203d206d 6978286d 61696e4f olor = mix(mainO │ │ │ │ + 0x00cf1340 75746c69 6e65436f 6c6f722c 20755f66 utlineColor, u_f │ │ │ │ + 0x00cf1350 616b654f 75746c69 6e65436f 6c6f722c akeOutlineColor, │ │ │ │ + 0x00cf1360 20636f65 66732e79 293b200a 20202020 coefs.y); . │ │ │ │ + 0x00cf1370 76656334 20636f6c 6f72203d 206d6978 vec4 color = mix │ │ │ │ + 0x00cf1380 286d6978 286d6169 6e436f6c 6f722c20 (mix(mainColor, │ │ │ │ + 0x00cf1390 76656334 28765f63 6f6c6f72 2e726762 vec4(v_color.rgb │ │ │ │ + 0x00cf13a0 2c20312e 30292c20 765f636f 6c6f722e , 1.0), v_color. │ │ │ │ + 0x00cf13b0 61292c20 6d61696e 436f6c6f 722c2073 a), mainColor, s │ │ │ │ + 0x00cf13c0 74657028 755f726f 75746550 6172616d tep(u_routeParam │ │ │ │ + 0x00cf13d0 732e772c 20302e30 29293b20 0a202020 s.w, 0.0)); . │ │ │ │ + 0x00cf13e0 20636f6c 6f72203d 206d6978 28636f6c color = mix(col │ │ │ │ + 0x00cf13f0 6f722c20 6d61696e 4f75746c 696e6543 or, mainOutlineC │ │ │ │ + 0x00cf1400 6f6c6f72 2c207374 6570286b 4f75746c olor, step(kOutl │ │ │ │ + 0x00cf1410 696e6554 68726573 686f6c64 312c2061 ineThreshold1, a │ │ │ │ + 0x00cf1420 62732876 5f6c656e 6774682e 79292929 bs(v_length.y))) │ │ │ │ + 0x00cf1430 3b200a20 20202063 6f6c6f72 203d206d ; . color = m │ │ │ │ + 0x00cf1440 69782863 6f6c6f72 2c206d61 696e4f75 ix(color, mainOu │ │ │ │ + 0x00cf1450 746c696e 65436f6c 6f722c20 736d6f6f tlineColor, smoo │ │ │ │ + 0x00cf1460 74687374 6570286b 4f75746c 696e6554 thstep(kOutlineT │ │ │ │ + 0x00cf1470 68726573 686f6c64 322c206b 4f75746c hreshold2, kOutl │ │ │ │ + 0x00cf1480 696e6554 68726573 686f6c64 312c2061 ineThreshold1, a │ │ │ │ + 0x00cf1490 62732876 5f6c656e 6774682e 79292929 bs(v_length.y))) │ │ │ │ + 0x00cf14a0 3b200a20 20202063 6f6c6f72 2e61202a ; . color.a * │ │ │ │ + 0x00cf14b0 3d202831 2e30202d 20736d6f 6f746873 = (1.0 - smooths │ │ │ │ + 0x00cf14c0 74657028 6b416e74 69616c69 6173696e tep(kAntialiasin │ │ │ │ + 0x00cf14d0 67546872 6573686f 6c642c20 312e302c gThreshold, 1.0, │ │ │ │ + 0x00cf14e0 20616273 28765f6c 656e6774 682e7929 abs(v_length.y) │ │ │ │ + 0x00cf14f0 29293b20 0a202020 20636f6c 6f72203d )); . color = │ │ │ │ + 0x00cf1500 20766563 34286d69 7828636f 6c6f722e vec4(mix(color. │ │ │ │ + 0x00cf1510 7267622c 20755f6d 61736b43 6f6c6f72 rgb, u_maskColor │ │ │ │ + 0x00cf1520 2e726762 2c20755f 6d61736b 436f6c6f .rgb, u_maskColo │ │ │ │ + 0x00cf1530 722e6129 2c20636f 6c6f722e 61293b20 r.a), color.a); │ │ │ │ + 0x00cf1540 0a202020 20765f46 72616743 6f6c6f72 . v_FragColor │ │ │ │ + 0x00cf1550 203d2063 6f6c6f72 3b200a20 207d200a = color; . } . │ │ │ │ + 0x00cf1560 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00cf1570 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cf1580 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cf1590 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cf15a0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cf15b0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cf15c0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cf15d0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cf15e0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cf15f0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cf1600 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cf1610 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cf1620 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cf1630 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cf1640 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cf1650 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cf1660 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cf1670 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cf1680 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cf1690 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cf16a0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cf16b0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00cf16c0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00cf16d0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00cf16e0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00cf16f0 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00cf1700 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00cf1710 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00cf1720 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00cf1730 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cf1740 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ + 0x00cf1750 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ + 0x00cf1760 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00cf1770 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00cf1780 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00cf1790 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00cf17a0 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00cf17b0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00cf17c0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00cf17d0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00cf17e0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00cf17f0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00cf1800 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00cf1810 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00cf1820 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00cf1830 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00cf1840 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00cf1850 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00cf1860 50617373 3b200a20 20636f6e 73742066 Pass; . const f │ │ │ │ + 0x00cf1870 6c6f6174 206b4365 6c6c5078 203d2034 loat kCellPx = 4 │ │ │ │ + 0x00cf1880 2e303b20 20202020 2020202f 2f206465 .0; // de │ │ │ │ + 0x00cf1890 6e736572 20746861 6e207374 6970706c nser than stippl │ │ │ │ + 0x00cf18a0 65202864 69766964 65732074 68652031 e (divides the 1 │ │ │ │ + 0x00cf18b0 36707820 74696c65 2c20736f 2063656c 6px tile, so cel │ │ │ │ + 0x00cf18c0 6c732074 696c6520 7365616d 6c657373 ls tile seamless │ │ │ │ + 0x00cf18d0 6c792920 0a202063 6f6e7374 20666c6f ly) . const flo │ │ │ │ + 0x00cf18e0 6174206b 42617365 52616469 75735078 at kBaseRadiusPx │ │ │ │ + 0x00cf18f0 203d2030 2e373b20 0a202063 6f6e7374 = 0.7; . const │ │ │ │ + 0x00cf1900 20666c6f 6174206b 52616469 75735661 float kRadiusVa │ │ │ │ + 0x00cf1910 72203d20 302e363b 20202020 202f2f20 r = 0.6; // │ │ │ │ + 0x00cf1920 7065722d 63656c6c 20726164 69757320 per-cell radius │ │ │ │ + 0x00cf1930 76617269 6174696f 6e202d3e 20697272 variation -> irr │ │ │ │ + 0x00cf1940 6567756c 61722073 697a6573 200a2020 egular sizes . │ │ │ │ + 0x00cf1950 636f6e73 7420666c 6f617420 6b4a6974 const float kJit │ │ │ │ + 0x00cf1960 74657220 3d20302e 353b2020 20202020 ter = 0.5; │ │ │ │ + 0x00cf1970 20202f2f 206b6565 70206b4a 69747465 // keep kJitte │ │ │ │ + 0x00cf1980 722a302e 352a6b43 656c6c50 78202b20 r*0.5*kCellPx + │ │ │ │ + 0x00cf1990 6d617852 61646975 73203c20 6b43656c maxRadius < kCel │ │ │ │ + 0x00cf19a0 6c50782a 302e3520 0a202063 6f6e7374 lPx*0.5 . const │ │ │ │ + 0x00cf19b0 20666c6f 6174206b 4461726b 656e203d float kDarken = │ │ │ │ + 0x00cf19c0 20302e37 383b200a 2020666c 6f617420 0.78; . float │ │ │ │ + 0x00cf19d0 48617368 28766563 32207029 200a2020 Hash(vec2 p) . │ │ │ │ + 0x00cf19e0 7b200a20 20202070 203d2066 72616374 { . p = fract │ │ │ │ + 0x00cf19f0 2870202a 20766563 32283132 372e312c (p * vec2(127.1, │ │ │ │ + 0x00cf1a00 20333131 2e372929 3b200a20 20202070 311.7)); . p │ │ │ │ + 0x00cf1a10 202b3d20 646f7428 702c2070 202b2033 += dot(p, p + 3 │ │ │ │ + 0x00cf1a20 342e3233 293b200a 20202020 72657475 4.23); . retu │ │ │ │ + 0x00cf1a30 726e2066 72616374 28702e78 202a2070 rn fract(p.x * p │ │ │ │ + 0x00cf1a40 2e79293b 200a2020 7d200a20 20636f6e .y); . } . con │ │ │ │ + 0x00cf1a50 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00cf1a60 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00cf1a70 302e303b 200a2020 4c4f575f 50207665 0.0; . LOW_P ve │ │ │ │ + 0x00cf1a80 6333204d 6f64756c 61746542 79506174 c3 ModulateByPat │ │ │ │ + 0x00cf1a90 7465726e 446f7473 284c4f57 5f502076 ternDots(LOW_P v │ │ │ │ + 0x00cf1aa0 65633320 636f6c6f 722c2066 6c6f6174 ec3 color, float │ │ │ │ + 0x00cf1ab0 20646172 6b656e2c 20666c6f 61742063 darken, float c │ │ │ │ + 0x00cf1ac0 6f766572 61676529 200a2020 7b200a20 overage) . { . │ │ │ │ + 0x00cf1ad0 20202063 6f6e7374 20666c6f 6174206b const float k │ │ │ │ + 0x00cf1ae0 4c696768 74656e20 3d20302e 3037353b Lighten = 0.075; │ │ │ │ + 0x00cf1af0 200a2020 20206966 2028646f 7428636f . if (dot(co │ │ │ │ + 0x00cf1b00 6c6f722c 20766563 3328302e 32313236 lor, vec3(0.2126 │ │ │ │ + 0x00cf1b10 2c20302e 37313532 2c20302e 30373232 , 0.7152, 0.0722 │ │ │ │ + 0x00cf1b20 2929203c 20302e35 29200a20 20202020 )) < 0.5) . │ │ │ │ + 0x00cf1b30 20726574 75726e20 636f6c6f 72202b20 return color + │ │ │ │ + 0x00cf1b40 636f7665 72616765 202a206b 4c696768 coverage * kLigh │ │ │ │ + 0x00cf1b50 74656e3b 200a2020 20207265 7475726e ten; . return │ │ │ │ + 0x00cf1b60 20636f6c 6f72202a 206d6978 28312e30 color * mix(1.0 │ │ │ │ + 0x00cf1b70 2c206461 726b656e 2c20636f 76657261 , darken, covera │ │ │ │ + 0x00cf1b80 6765293b 200a2020 7d200a20 20766f69 ge); . } . voi │ │ │ │ + 0x00cf1b90 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ + 0x00cf1ba0 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00cf1bb0 5446200a 20202020 4c4f575f 50207665 TF . LOW_P ve │ │ │ │ + 0x00cf1bc0 63342063 6f6c6f72 203d2076 5f636f6c c4 color = v_col │ │ │ │ + 0x00cf1bd0 6f723b20 0a202023 656c7365 200a2020 or; . #else . │ │ │ │ + 0x00cf1be0 20204c4f 575f5020 76656334 20636f6c LOW_P vec4 col │ │ │ │ + 0x00cf1bf0 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ + 0x00cf1c00 6f6c6f72 5465782c 20765f63 6f6c6f72 olorTex, v_color │ │ │ │ + 0x00cf1c10 54657843 6f6f7264 73293b20 0a202023 TexCoords); . # │ │ │ │ + 0x00cf1c20 656e6469 66200a20 20202076 65633220 endif . vec2 │ │ │ │ + 0x00cf1c30 7078203d 20765f6d 61736b54 6578436f px = v_maskTexCo │ │ │ │ + 0x00cf1c40 6f726473 202a2031 362e303b 200a2020 ords * 16.0; . │ │ │ │ + 0x00cf1c50 20207665 63322063 656c6c20 3d20666c vec2 cell = fl │ │ │ │ + 0x00cf1c60 6f6f7228 7078202f 206b4365 6c6c5078 oor(px / kCellPx │ │ │ │ + 0x00cf1c70 293b200a 20202020 76656332 20746f43 ); . vec2 toC │ │ │ │ + 0x00cf1c80 656e7465 72203d20 0a202020 20202020 enter = . │ │ │ │ + 0x00cf1c90 20286672 61637428 7078202f 206b4365 (fract(px / kCe │ │ │ │ + 0x00cf1ca0 6c6c5078 29202d20 302e3529 202a206b llPx) - 0.5) * k │ │ │ │ + 0x00cf1cb0 43656c6c 5078202d 20287665 63322848 CellPx - (vec2(H │ │ │ │ + 0x00cf1cc0 61736828 63656c6c 292c2048 61736828 ash(cell), Hash( │ │ │ │ + 0x00cf1cd0 63656c6c 202b2031 392e3729 29202d20 cell + 19.7)) - │ │ │ │ + 0x00cf1ce0 302e3529 202a2028 6b4a6974 74657220 0.5) * (kJitter │ │ │ │ + 0x00cf1cf0 2a206b43 656c6c50 78293b20 0a202020 * kCellPx); . │ │ │ │ + 0x00cf1d00 20666c6f 61742072 61646975 73203d20 float radius = │ │ │ │ + 0x00cf1d10 6b426173 65526164 69757350 78202a20 kBaseRadiusPx * │ │ │ │ + 0x00cf1d20 28312e30 202d206b 52616469 75735661 (1.0 - kRadiusVa │ │ │ │ + 0x00cf1d30 72202a20 302e3520 2b206b52 61646975 r * 0.5 + kRadiu │ │ │ │ + 0x00cf1d40 73566172 202a2048 61736828 63656c6c sVar * Hash(cell │ │ │ │ + 0x00cf1d50 202b2033 2e372929 3b200a20 20202066 + 3.7)); . f │ │ │ │ + 0x00cf1d60 6c6f6174 2064203d 206c656e 67746828 loat d = length( │ │ │ │ + 0x00cf1d70 746f4365 6e746572 293b200a 20202020 toCenter); . │ │ │ │ + 0x00cf1d80 666c6f61 74206161 203d206d 61782866 float aa = max(f │ │ │ │ + 0x00cf1d90 77696474 68287078 2e78292c 20667769 width(px.x), fwi │ │ │ │ + 0x00cf1da0 64746828 70782e79 29293b20 0a202020 dth(px.y)); . │ │ │ │ + 0x00cf1db0 20666c6f 61742063 6f766572 61676520 float coverage │ │ │ │ + 0x00cf1dc0 3d20312e 30202d20 736d6f6f 74687374 = 1.0 - smoothst │ │ │ │ + 0x00cf1dd0 65702872 61646975 73202d20 61612c20 ep(radius - aa, │ │ │ │ + 0x00cf1de0 72616469 7573202b 2061612c 2064293b radius + aa, d); │ │ │ │ + 0x00cf1df0 200a2020 2020636f 6c6f722e 72676220 . color.rgb │ │ │ │ + 0x00cf1e00 3d204d6f 64756c61 74654279 50617474 = ModulateByPatt │ │ │ │ + 0x00cf1e10 65726e44 6f747328 636f6c6f 722e7267 ernDots(color.rg │ │ │ │ + 0x00cf1e20 622c206b 4461726b 656e2c20 636f7665 b, kDarken, cove │ │ │ │ + 0x00cf1e30 72616765 293b200a 20202020 636f6c6f rage); . colo │ │ │ │ + 0x00cf1e40 722e6120 2a3d2075 5f6f7061 63697479 r.a *= u_opacity │ │ │ │ + 0x00cf1e50 3b200a20 20202076 5f467261 67436f6c ; . v_FragCol │ │ │ │ + 0x00cf1e60 6f72203d 20636f6c 6f723b20 0a20207d or = color; . } │ │ │ │ + 0x00cf1e70 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00cf1e80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cf1e90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cf1ea0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cf1eb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cf1ec0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cf1ed0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cf1ee0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cf1ef0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cf1f00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cf1f10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cf1f20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cf1f30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cf1f40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cf1f50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cf1f60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cf1f70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cf1f80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cf1f90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cf1fa0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cf1fb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cf1fc0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cf1fd0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00cf1fe0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00cf1ff0 616c3b20 0a202069 6e207665 63332061 al; . in vec3 a │ │ │ │ + 0x00cf2000 5f6c656e 6774683b 200a2020 696e2076 _length; . in v │ │ │ │ + 0x00cf2010 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ + 0x00cf2020 6f757420 76656333 20765f6c 656e6774 out vec3 v_lengt │ │ │ │ + 0x00cf2030 683b200a 20206f75 74207665 63342076 h; . out vec4 v │ │ │ │ + 0x00cf2040 5f636f6c 6f723b20 0a202075 6e69666f _color; . unifo │ │ │ │ + 0x00cf2050 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00cf2060 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00cf2070 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00cf2080 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00cf2090 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00cf20a0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00cf20b0 76656334 20755f72 6f757465 50617261 vec4 u_routePara │ │ │ │ + 0x00cf20c0 6d733b20 0a202075 6e69666f 726d2076 ms; . uniform v │ │ │ │ + 0x00cf20d0 65633420 755f636f 6c6f723b 200a2020 ec4 u_color; . │ │ │ │ + 0x00cf20e0 756e6966 6f726d20 76656334 20755f6d uniform vec4 u_m │ │ │ │ + 0x00cf20f0 61736b43 6f6c6f72 3b200a20 20756e69 askColor; . uni │ │ │ │ + 0x00cf2100 666f726d 20766563 3420755f 6f75746c form vec4 u_outl │ │ │ │ + 0x00cf2110 696e6543 6f6c6f72 3b200a20 20756e69 ineColor; . uni │ │ │ │ + 0x00cf2120 666f726d 20766563 3420755f 66616b65 form vec4 u_fake │ │ │ │ + 0x00cf2130 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00cf2140 6d207665 63342075 5f66616b 654f7574 m vec4 u_fakeOut │ │ │ │ + 0x00cf2150 6c696e65 436f6c6f 723b200a 2020756e lineColor; . un │ │ │ │ + 0x00cf2160 69666f72 6d207665 63322075 5f66616b iform vec2 u_fak │ │ │ │ + 0x00cf2170 65426f72 64657273 3b200a20 20756e69 eBorders; . uni │ │ │ │ + 0x00cf2180 666f726d 20766563 3220755f 70617474 form vec2 u_patt │ │ │ │ + 0x00cf2190 65726e3b 200a2020 756e6966 6f726d20 ern; . uniform │ │ │ │ + 0x00cf21a0 76656332 20755f61 6e676c65 436f7353 vec2 u_angleCosS │ │ │ │ + 0x00cf21b0 696e3b20 0a202075 6e69666f 726d2066 in; . uniform f │ │ │ │ + 0x00cf21c0 6c6f6174 20755f61 72726f77 48616c66 loat u_arrowHalf │ │ │ │ + 0x00cf21d0 57696474 683b200a 2020756e 69666f72 Width; . unifor │ │ │ │ + 0x00cf21e0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00cf21f0 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ + 0x00cf2200 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00cf2210 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00cf2220 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00cf2230 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00cf2240 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00cf2250 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00cf2260 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00cf2270 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00cf2280 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00cf2290 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00cf22a0 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00cf22b0 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00cf22c0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00cf22d0 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00cf22e0 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00cf22f0 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00cf2300 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00cf2310 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00cf2320 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00cf2330 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cf2340 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00cf2350 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00cf2360 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cf2370 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00cf2380 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00cf2390 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00cf23a0 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00cf23b0 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00cf23c0 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00cf23d0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00cf23e0 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00cf23f0 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00cf2400 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00cf2410 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00cf2420 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00cf2430 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00cf2440 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00cf2450 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00cf2460 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00cf2470 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00cf2480 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00cf2490 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00cf24a0 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00cf24b0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00cf24c0 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00cf24d0 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00cf24e0 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00cf24f0 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00cf2500 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00cf2510 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00cf2520 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00cf2530 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00cf2540 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00cf2550 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00cf2560 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00cf2570 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00cf2580 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00cf2590 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00cf25a0 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00cf25b0 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00cf25c0 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00cf25d0 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00cf25e0 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00cf25f0 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00cf2600 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00cf2610 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00cf2620 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00cf2630 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00cf2640 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00cf2650 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00cf2660 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00cf2670 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00cf2680 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00cf2690 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00cf26a0 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00cf26b0 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00cf26c0 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00cf26d0 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00cf26e0 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00cf26f0 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00cf2700 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00cf2710 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00cf2720 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00cf2730 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00cf2740 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00cf2750 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00cf2760 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00cf2770 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00cf2780 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00cf2790 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ + 0x00cf27a0 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ + 0x00cf27b0 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ + 0x00cf27c0 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ + 0x00cf27d0 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ + 0x00cf27e0 3b200a20 20202076 65633220 6c656e20 ; . vec2 len │ │ │ │ + 0x00cf27f0 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ + 0x00cf2800 782c2061 5f6c656e 6774682e 7a293b20 x, a_length.z); │ │ │ │ + 0x00cf2810 0a202020 20696620 28646f74 28615f6e . if (dot(a_n │ │ │ │ + 0x00cf2820 6f726d61 6c2c2061 5f6e6f72 6d616c29 ormal, a_normal) │ │ │ │ + 0x00cf2830 20213d20 302e3029 200a2020 20207b20 != 0.0) . { │ │ │ │ + 0x00cf2840 0a202020 20202076 65633220 6e6f726d . vec2 norm │ │ │ │ + 0x00cf2850 203d2061 5f6e6f72 6d616c20 2a20755f = a_normal * u_ │ │ │ │ + 0x00cf2860 726f7574 65506172 616d732e 783b200a routeParams.x; . │ │ │ │ + 0x00cf2870 20202020 20207472 616e7366 6f726d65 transforme │ │ │ │ + 0x00cf2880 64417869 73506f73 203d2063 616c634c dAxisPos = calcL │ │ │ │ + 0x00cf2890 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00cf28a0 6973506f 73287472 616e7366 6f726d65 isPos(transforme │ │ │ │ + 0x00cf28b0 64417869 73506f73 2c20615f 706f7369 dAxisPos, a_posi │ │ │ │ + 0x00cf28c0 74696f6e 2e787920 2b206e6f 726d2c20 tion.xy + norm, │ │ │ │ + 0x00cf28d0 0a202020 20202020 20202020 20202020 . │ │ │ │ + 0x00cf28e0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cf28f0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cf2900 20202020 20202075 5f6d6f64 656c5669 u_modelVi │ │ │ │ + 0x00cf2910 65772c20 6c656e67 7468286e 6f726d29 ew, length(norm) │ │ │ │ + 0x00cf2920 293b200a 20202020 20206966 2028755f ); . if (u_ │ │ │ │ + 0x00cf2930 726f7574 65506172 616d732e 7920213d routeParams.y != │ │ │ │ + 0x00cf2940 20302e30 29200a20 20202020 2020206c 0.0) . l │ │ │ │ + 0x00cf2950 656e203d 20766563 3228615f 6c656e67 en = vec2(a_leng │ │ │ │ + 0x00cf2960 74682e78 202b2061 5f6c656e 6774682e th.x + a_length. │ │ │ │ + 0x00cf2970 79202a20 755f726f 75746550 6172616d y * u_routeParam │ │ │ │ + 0x00cf2980 732e792c 20615f6c 656e6774 682e7a29 s.y, a_length.z) │ │ │ │ + 0x00cf2990 3b200a20 2020207d 200a2020 2020765f ; . } . v_ │ │ │ │ + 0x00cf29a0 6c656e67 7468203d 20766563 33286c65 length = vec3(le │ │ │ │ + 0x00cf29b0 6e2c2075 5f726f75 74655061 72616d73 n, u_routeParams │ │ │ │ + 0x00cf29c0 2e7a293b 200a2020 2020765f 636f6c6f .z); . v_colo │ │ │ │ + 0x00cf29d0 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ + 0x00cf29e0 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ + 0x00cf29f0 34287472 616e7366 6f726d65 64417869 4(transformedAxi │ │ │ │ + 0x00cf2a00 73506f73 2c20615f 706f7369 74696f6e sPos, a_position │ │ │ │ + 0x00cf2a10 2e7a2c20 312e3029 202a2075 5f70726f .z, 1.0) * u_pro │ │ │ │ + 0x00cf2a20 6a656374 696f6e3b 200a2020 2020676c jection; . gl │ │ │ │ + 0x00cf2a30 5f506f73 6974696f 6e203d20 6170706c _Position = appl │ │ │ │ + 0x00cf2a40 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00cf2a50 706f732c 20755f70 69766f74 5472616e pos, u_pivotTran │ │ │ │ + 0x00cf2a60 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ + 0x00cf2a70 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ + 0x00cf2a80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cf2a90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cf2aa0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cf2ab0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cf2ac0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cf2ad0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cf2ae0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cf2af0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cf2b00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cf2b10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cf2b20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cf2b30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cf2b40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cf2b50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cf2b60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cf2b70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cf2b80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cf2b90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cf2ba0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cf2bb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cf2bc0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cf2bd0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00cf2be0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00cf2bf0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00cf2c00 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00cf2c10 200a2020 696e2076 65633220 615f6d61 . in vec2 a_ma │ │ │ │ + 0x00cf2c20 736b5465 78436f6f 7264733b 200a2020 skTexCoords; . │ │ │ │ + 0x00cf2c30 6f757420 76656332 20765f63 6f6c6f72 out vec2 v_color │ │ │ │ + 0x00cf2c40 54657843 6f6f7264 733b200a 20206f75 TexCoords; . ou │ │ │ │ + 0x00cf2c50 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00cf2c60 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00cf2c70 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00cf2c80 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00cf2c90 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00cf2ca0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00cf2cb0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00cf2cc0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00cf2cd0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00cf2ce0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00cf2cf0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00cf2d00 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00cf2d10 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00cf2d20 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00cf2d30 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00cf2d40 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00cf2d50 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00cf2d60 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00cf2d70 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00cf2d80 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00cf2d90 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00cf2da0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00cf2db0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00cf2dc0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00cf2dd0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00cf2de0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00cf2df0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00cf2e00 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00cf2e10 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00cf2e20 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00cf2e30 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00cf2e40 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00cf2e50 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00cf2e60 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00cf2e70 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00cf2e80 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00cf2e90 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00cf2ea0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cf2eb0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00cf2ec0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00cf2ed0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00cf2ee0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00cf2ef0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00cf2f00 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00cf2f10 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00cf2f20 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00cf2f30 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00cf2f40 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00cf2f50 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00cf2f60 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00cf2f70 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00cf2f80 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00cf2f90 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00cf2fa0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00cf2fb0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00cf2fc0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00cf2fd0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00cf2fe0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00cf2ff0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00cf3000 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00cf3010 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00cf3020 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00cf3030 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00cf3040 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00cf3050 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00cf3060 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00cf3070 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00cf3080 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00cf3090 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00cf30a0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00cf30b0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00cf30c0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00cf30d0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00cf30e0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00cf30f0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00cf3100 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00cf3110 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00cf3120 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00cf3130 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00cf3140 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00cf3150 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00cf3160 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00cf3170 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00cf3180 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00cf3190 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00cf31a0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00cf31b0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00cf31c0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00cf31d0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00cf31e0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00cf31f0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00cf3200 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00cf3210 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00cf3220 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00cf3230 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00cf3240 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00cf3250 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00cf3260 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00cf3270 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00cf3280 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00cf3290 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00cf32a0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00cf32b0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00cf32c0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00cf32d0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00cf32e0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00cf32f0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00cf3300 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ + 0x00cf3310 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ + 0x00cf3320 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ + 0x00cf3330 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ + 0x00cf3340 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ + 0x00cf3350 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ + 0x00cf3360 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ + 0x00cf3370 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ + 0x00cf3380 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ + 0x00cf3390 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00cf33a0 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ + 0x00cf33b0 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00cf33c0 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ + 0x00cf33d0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cf33e0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cf33f0 20202020 20202020 20202020 2020615f a_ │ │ │ │ + 0x00cf3400 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ + 0x00cf3410 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ + 0x00cf3420 293b200a 20202020 765f636f 6c6f7254 ); . v_colorT │ │ │ │ + 0x00cf3430 6578436f 6f726473 203d2061 5f636f6c exCoords = a_col │ │ │ │ + 0x00cf3440 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00cf3450 2020765f 6d61736b 54657843 6f6f7264 v_maskTexCoord │ │ │ │ + 0x00cf3460 73203d20 615f6d61 736b5465 78436f6f s = a_maskTexCoo │ │ │ │ + 0x00cf3470 7264733b 200a2020 7d200a00 00000000 rds; . } ...... │ │ │ │ + 0x00cf3480 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cf3490 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cf34a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cf34b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cf34c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cf34d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cf34e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cf34f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cf3500 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cf3510 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cf3520 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cf3530 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cf3540 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cf3550 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cf3560 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cf3570 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cf3580 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cf3590 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cf35a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cf35b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cf35c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cf35d0 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00cf35e0 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00cf35f0 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00cf3600 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ + 0x00cf3610 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ + 0x00cf3620 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ + 0x00cf3630 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00cf3640 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ + 0x00cf3650 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ + 0x00cf3660 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ + 0x00cf3670 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ + 0x00cf3680 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ + 0x00cf3690 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00cf36a0 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ + 0x00cf36b0 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00cf36c0 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00cf36d0 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00cf36e0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00cf36f0 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00cf3700 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00cf3710 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ + 0x00cf3720 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ + 0x00cf3730 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00cf3740 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00cf3750 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ + 0x00cf3760 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ + 0x00cf3770 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ + 0x00cf3780 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00cf3790 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ + 0x00cf37a0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00cf37b0 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00cf37c0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00cf37d0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00cf37e0 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00cf37f0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00cf3800 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00cf3810 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00cf3820 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00cf3830 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00cf3840 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00cf3850 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00cf3860 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00cf3870 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00cf3880 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00cf3890 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00cf38a0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00cf38b0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00cf38c0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00cf38d0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00cf38e0 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00cf38f0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00cf3900 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cf3910 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00cf3920 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00cf3930 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00cf3940 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00cf3950 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00cf3960 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00cf3970 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00cf3980 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00cf3990 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00cf39a0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00cf39b0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00cf39c0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00cf39d0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00cf39e0 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00cf39f0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00cf3a00 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00cf3a10 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00cf3a20 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00cf3a30 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00cf3a40 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00cf3a50 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00cf3a60 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00cf3a70 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00cf3a80 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00cf3a90 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00cf3aa0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00cf3ab0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00cf3ac0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00cf3ad0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00cf3ae0 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00cf3af0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00cf3b00 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00cf3b10 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00cf3b20 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00cf3b30 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00cf3b40 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00cf3b50 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00cf3b60 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00cf3b70 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00cf3b80 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00cf3b90 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00cf3ba0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00cf3bb0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00cf3bc0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00cf3bd0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00cf3be0 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00cf3bf0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00cf3c00 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00cf3c10 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00cf3c20 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00cf3c30 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00cf3c40 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00cf3c50 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00cf3c60 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00cf3c70 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00cf3c80 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00cf3c90 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00cf3ca0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00cf3cb0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00cf3cc0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00cf3cd0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00cf3ce0 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00cf3cf0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00cf3d00 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00cf3d10 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00cf3d20 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00cf3d30 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00cf3d40 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00cf3d50 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00cf3d60 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ + 0x00cf3d70 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ + 0x00cf3d80 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ + 0x00cf3d90 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ + 0x00cf3da0 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ + 0x00cf3db0 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ + 0x00cf3dc0 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ + 0x00cf3dd0 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ + 0x00cf3de0 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ + 0x00cf3df0 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00cf3e00 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ + 0x00cf3e10 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00cf3e20 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ + 0x00cf3e30 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cf3e40 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cf3e50 20202020 20202020 20202020 2020615f a_ │ │ │ │ + 0x00cf3e60 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ + 0x00cf3e70 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ + 0x00cf3e80 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ + 0x00cf3e90 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ + 0x00cf3ea0 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ + 0x00cf3eb0 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ + 0x00cf3ec0 6f725465 78436f6f 7264293b 200a2020 orTexCoord); . │ │ │ │ + 0x00cf3ed0 23656c73 65200a20 20202076 5f636f6c #else . v_col │ │ │ │ + 0x00cf3ee0 6f725465 78436f6f 7264203d 20615f63 orTexCoord = a_c │ │ │ │ + 0x00cf3ef0 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ + 0x00cf3f00 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ + 0x00cf3f10 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ + 0x00cf3f20 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ + 0x00cf3f30 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00cf3f40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cf3f50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cf3f60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cf3f70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cf3f80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cf3f90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cf3fa0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cf3fb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cf3fc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cf3fd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cf3fe0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cf3ff0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cf4000 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cf4010 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cf4020 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cf4030 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cf4040 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cf4050 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cf4060 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cf4070 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cf4080 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cf4090 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00cf40a0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00cf40b0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00cf40c0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00cf40d0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00cf40e0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00cf40f0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00cf4100 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00cf4110 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00cf4120 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00cf4130 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00cf4140 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00cf4150 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00cf4160 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00cf4170 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00cf4180 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00cf4190 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00cf41a0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00cf41b0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00cf41c0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00cf41d0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00cf41e0 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00cf41f0 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00cf4200 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00cf4210 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00cf4220 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00cf4230 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00cf4240 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00cf4250 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00cf4260 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00cf4270 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cf4280 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00cf4290 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00cf42a0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00cf42b0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00cf42c0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00cf42d0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00cf42e0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00cf42f0 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00cf4300 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00cf4310 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cf4320 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00cf4330 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00cf4340 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00cf4350 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00cf4360 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00cf4370 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00cf4380 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00cf4390 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00cf43a0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00cf43b0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cf43c0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00cf43d0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00cf43e0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cf43f0 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00cf4400 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00cf4410 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00cf4420 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00cf4430 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00cf4440 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00cf4450 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00cf4460 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00cf4470 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00cf4480 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00cf4490 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00cf44a0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00cf44b0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00cf44c0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00cf44d0 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00cf44e0 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00cf44f0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00cf4500 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00cf4510 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00cf4520 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00cf4530 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00cf4540 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00cf4550 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00cf4560 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00cf4570 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00cf4580 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00cf4590 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00cf45a0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00cf45b0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00cf45c0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00cf45d0 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00cf45e0 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00cf45f0 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00cf4600 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00cf4610 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00cf4620 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00cf4630 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00cf4640 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00cf4650 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00cf4660 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00cf4670 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00cf4680 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00cf4690 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00cf46a0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00cf46b0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00cf46c0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00cf46d0 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00cf46e0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00cf46f0 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00cf4700 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00cf4710 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00cf4720 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00cf4730 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00cf4740 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00cf4750 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00cf4760 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00cf4770 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00cf4780 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00cf4790 7069766f 74203d20 76656334 28615f70 pivot = vec4(a_p │ │ │ │ + 0x00cf47a0 6f736974 696f6e2e 78797a2c 20312e30 osition.xyz, 1.0 │ │ │ │ + 0x00cf47b0 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ + 0x00cf47c0 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ + 0x00cf47d0 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ + 0x00cf47e0 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ + 0x00cf47f0 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00cf4800 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00cf4810 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00cf4820 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ + 0x00cf4830 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ + 0x00cf4840 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ + 0x00cf4850 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ + 0x00cf4860 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cf4870 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cf4880 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ + 0x00cf4890 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ + 0x00cf48a0 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ + 0x00cf48b0 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ + 0x00cf48c0 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ + 0x00cf48d0 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ + 0x00cf48e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cf48f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cf4900 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cf4910 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cf4920 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cf4930 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cf4940 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cf4950 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cf4960 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cf4970 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cf4980 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cf4990 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cf49a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cf49b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cf49c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cf49d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cf49e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cf49f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cf4a00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cf4a10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cf4a20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cf4a30 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00cf4a40 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00cf4a50 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ + 0x00cf4a60 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ + 0x00cf4a70 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ + 0x00cf4a80 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ + 0x00cf4a90 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00cf4aa0 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ + 0x00cf4ab0 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ + 0x00cf4ac0 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ + 0x00cf4ad0 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ + 0x00cf4ae0 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ + 0x00cf4af0 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ + 0x00cf4b00 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ + 0x00cf4b10 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ + 0x00cf4b20 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ + 0x00cf4b30 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ + 0x00cf4b40 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00cf4b50 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ + 0x00cf4b60 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ + 0x00cf4b70 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ + 0x00cf4b80 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ + 0x00cf4b90 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ + 0x00cf4ba0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00cf4bb0 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ + 0x00cf4bc0 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ + 0x00cf4bd0 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ + 0x00cf4be0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00cf4bf0 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ + 0x00cf4c00 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00cf4c10 5f565446 200a2020 756e6966 6f726d20 _VTF . uniform │ │ │ │ + 0x00cf4c20 73616d70 6c657232 4420755f 636f6c6f sampler2D u_colo │ │ │ │ + 0x00cf4c30 72546578 3b200a20 2023656e 64696620 rTex; . #endif │ │ │ │ + 0x00cf4c40 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00cf4c50 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00cf4c60 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ + 0x00cf4c70 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ + 0x00cf4c80 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00cf4c90 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00cf4ca0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00cf4cb0 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ + 0x00cf4cc0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00cf4cd0 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00cf4ce0 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ + 0x00cf4cf0 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ + 0x00cf4d00 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ + 0x00cf4d10 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ + 0x00cf4d20 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ + 0x00cf4d30 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ + 0x00cf4d40 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ + 0x00cf4d50 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ + 0x00cf4d60 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00cf4d70 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ + 0x00cf4d80 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00cf4d90 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ + 0x00cf4da0 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ + 0x00cf4db0 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ + 0x00cf4dc0 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ + 0x00cf4dd0 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ + 0x00cf4de0 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ + 0x00cf4df0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00cf4e00 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ + 0x00cf4e10 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ + 0x00cf4e20 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00cf4e30 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ + 0x00cf4e40 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ + 0x00cf4e50 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ + 0x00cf4e60 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ + 0x00cf4e70 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00cf4e80 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00cf4e90 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00cf4ea0 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ + 0x00cf4eb0 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ + 0x00cf4ec0 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ + 0x00cf4ed0 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ + 0x00cf4ee0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00cf4ef0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00cf4f00 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00cf4f10 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ + 0x00cf4f20 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ + 0x00cf4f30 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ + 0x00cf4f40 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ + 0x00cf4f50 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ + 0x00cf4f60 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ + 0x00cf4f70 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ + 0x00cf4f80 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ + 0x00cf4f90 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ + 0x00cf4fa0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cf4fb0 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ + 0x00cf4fc0 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ + 0x00cf4fd0 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ + 0x00cf4fe0 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ + 0x00cf4ff0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00cf5000 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ + 0x00cf5010 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ + 0x00cf5020 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ + 0x00cf5030 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ + 0x00cf5040 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ + 0x00cf5050 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00cf5060 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ + 0x00cf5070 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ + 0x00cf5080 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00cf5090 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ + 0x00cf50a0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00cf50b0 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ + 0x00cf50c0 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ + 0x00cf50d0 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ + 0x00cf50e0 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ + 0x00cf50f0 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ + 0x00cf5100 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ + 0x00cf5110 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ + 0x00cf5120 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ + 0x00cf5130 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ + 0x00cf5140 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ + 0x00cf5150 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ + 0x00cf5160 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ + 0x00cf5170 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ + 0x00cf5180 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ + 0x00cf5190 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ + 0x00cf51a0 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ + 0x00cf51b0 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ + 0x00cf51c0 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ + 0x00cf51d0 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ + 0x00cf51e0 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ + 0x00cf51f0 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ + 0x00cf5200 7a2c2031 29202a20 755f6d6f 64656c56 z, 1) * u_modelV │ │ │ │ + 0x00cf5210 6965773b 200a2020 20207665 63342073 iew; . vec4 s │ │ │ │ + 0x00cf5220 68696674 6564506f 73203d20 76656334 hiftedPos = vec4 │ │ │ │ + 0x00cf5230 28615f6e 6f726d61 6c2c2030 2e302c20 (a_normal, 0.0, │ │ │ │ + 0x00cf5240 302e3029 202b2070 6f733b20 0a202020 0.0) + pos; . │ │ │ │ + 0x00cf5250 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ + 0x00cf5260 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00cf5270 726d2873 68696674 6564506f 73202a20 rm(shiftedPos * │ │ │ │ + 0x00cf5280 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ + 0x00cf5290 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00cf52a0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00cf52b0 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ + 0x00cf52c0 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ + 0x00cf52d0 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ + 0x00cf52e0 636f6c6f 72546578 436f6f72 64293b20 colorTexCoord); │ │ │ │ + 0x00cf52f0 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ + 0x00cf5300 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ + 0x00cf5310 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ + 0x00cf5320 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00cf5330 765f6d61 736b5465 78436f6f 7264203d v_maskTexCoord = │ │ │ │ + 0x00cf5340 20615f6d 61736b54 6578436f 6f72643b a_maskTexCoord; │ │ │ │ + 0x00cf5350 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00cf5360 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cf5370 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cf5380 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cf5390 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cf53a0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cf53b0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cf53c0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cf53d0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cf53e0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cf53f0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cf5400 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cf5410 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cf5420 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cf5430 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cf5440 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cf5450 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cf5460 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cf5470 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cf5480 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cf5490 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cf54a0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cf54b0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00cf54c0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00cf54d0 72546578 436f6f72 64733b20 0a202023 rTexCoords; . # │ │ │ │ + 0x00cf54e0 69666465 6620454e 41424c45 5f565446 ifdef ENABLE_VTF │ │ │ │ + 0x00cf54f0 200a2020 6f757420 4c4f575f 50207665 . out LOW_P ve │ │ │ │ + 0x00cf5500 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ + 0x00cf5510 656c7365 200a2020 6f757420 76656332 else . out vec2 │ │ │ │ + 0x00cf5520 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ + 0x00cf5530 733b200a 20202365 6e646966 200a2020 s; . #endif . │ │ │ │ + 0x00cf5540 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00cf5550 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00cf5560 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00cf5570 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00cf5580 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00cf5590 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00cf55a0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00cf55b0 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00cf55c0 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00cf55d0 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00cf55e0 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00cf55f0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00cf5600 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00cf5610 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00cf5620 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00cf5630 50617373 3b200a20 20236966 64656620 Pass; . #ifdef │ │ │ │ + 0x00cf5640 454e4142 4c455f56 5446200a 2020756e ENABLE_VTF . un │ │ │ │ + 0x00cf5650 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ + 0x00cf5660 755f636f 6c6f7254 65783b20 0a202023 u_colorTex; . # │ │ │ │ + 0x00cf5670 656e6469 66200a20 20636f6e 73742066 endif . const f │ │ │ │ + 0x00cf5680 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ + 0x00cf5690 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ + 0x00cf56a0 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ + 0x00cf56b0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00cf56c0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00cf56d0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00cf56e0 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ + 0x00cf56f0 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ + 0x00cf5700 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ + 0x00cf5710 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ + 0x00cf5720 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ + 0x00cf5730 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ + 0x00cf5740 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cf5750 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ + 0x00cf5760 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ + 0x00cf5770 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cf5780 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00cf5790 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ + 0x00cf57a0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00cf57b0 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ + 0x00cf57c0 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ + 0x00cf57d0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00cf57e0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00cf57f0 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ + 0x00cf5800 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ + 0x00cf5810 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cf5820 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ + 0x00cf5830 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ + 0x00cf5840 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ + 0x00cf5850 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00cf5860 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ + 0x00cf5870 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ + 0x00cf5880 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ + 0x00cf5890 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ + 0x00cf58a0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00cf58b0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00cf58c0 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00cf58d0 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ + 0x00cf58e0 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ + 0x00cf58f0 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ + 0x00cf5900 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ + 0x00cf5910 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ + 0x00cf5920 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cf5930 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00cf5940 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ + 0x00cf5950 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ + 0x00cf5960 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ + 0x00cf5970 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ + 0x00cf5980 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00cf5990 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ + 0x00cf59a0 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ + 0x00cf59b0 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ + 0x00cf59c0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00cf59d0 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ + 0x00cf59e0 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ + 0x00cf59f0 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ + 0x00cf5a00 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ + 0x00cf5a10 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ + 0x00cf5a20 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00cf5a30 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ + 0x00cf5a40 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ + 0x00cf5a50 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ + 0x00cf5a60 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ + 0x00cf5a70 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ + 0x00cf5a80 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00cf5a90 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00cf5aa0 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ + 0x00cf5ab0 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ + 0x00cf5ac0 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ + 0x00cf5ad0 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ + 0x00cf5ae0 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ + 0x00cf5af0 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ + 0x00cf5b00 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ + 0x00cf5b10 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ + 0x00cf5b20 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ + 0x00cf5b30 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ + 0x00cf5b40 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ + 0x00cf5b50 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ + 0x00cf5b60 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ + 0x00cf5b70 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00cf5b80 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ + 0x00cf5b90 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ + 0x00cf5ba0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00cf5bb0 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ + 0x00cf5bc0 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ + 0x00cf5bd0 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ + 0x00cf5be0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00cf5bf0 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ + 0x00cf5c00 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00cf5c10 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ + 0x00cf5c20 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ + 0x00cf5c30 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ + 0x00cf5c40 64656c56 6965773b 200a2020 2020706f delView; . po │ │ │ │ + 0x00cf5c50 732e7879 77203d20 28706f73 202a2075 s.xyw = (pos * u │ │ │ │ + 0x00cf5c60 5f70726f 6a656374 696f6e29 2e787977 _projection).xyw │ │ │ │ + 0x00cf5c70 3b200a20 20202070 6f732e7a 203d2061 ; . pos.z = a │ │ │ │ + 0x00cf5c80 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ + 0x00cf5c90 7a536361 6c653b20 0a202020 20676c5f zScale; . gl_ │ │ │ │ + 0x00cf5ca0 506f7369 74696f6e 203d2075 5f706976 Position = u_piv │ │ │ │ + 0x00cf5cb0 6f745472 616e7366 6f726d20 2a20706f otTransform * po │ │ │ │ + 0x00cf5cc0 733b200a 20202369 66646566 2056554c s; . #ifdef VUL │ │ │ │ + 0x00cf5cd0 4b414e20 0a202020 20676c5f 506f7369 KAN . gl_Posi │ │ │ │ + 0x00cf5ce0 74696f6e 2e79203d 202d676c 5f506f73 tion.y = -gl_Pos │ │ │ │ + 0x00cf5cf0 6974696f 6e2e793b 200a2020 2020676c ition.y; . gl │ │ │ │ + 0x00cf5d00 5f506f73 6974696f 6e2e7a20 3d202867 _Position.z = (g │ │ │ │ + 0x00cf5d10 6c5f506f 73697469 6f6e2e7a 20202b20 l_Position.z + │ │ │ │ + 0x00cf5d20 676c5f50 6f736974 696f6e2e 7729202a gl_Position.w) * │ │ │ │ + 0x00cf5d30 20302e35 3b200a20 2023656e 64696620 0.5; . #endif │ │ │ │ + 0x00cf5d40 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00cf5d50 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ + 0x00cf5d60 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ + 0x00cf5d70 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ + 0x00cf5d80 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ + 0x00cf5d90 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ + 0x00cf5da0 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ + 0x00cf5db0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00cf5dc0 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ + 0x00cf5dd0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cf5de0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cf5df0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cf5e00 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cf5e10 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cf5e20 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cf5e30 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cf5e40 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cf5e50 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cf5e60 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cf5e70 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cf5e80 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cf5e90 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cf5ea0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cf5eb0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cf5ec0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cf5ed0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cf5ee0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cf5ef0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cf5f00 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cf5f10 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cf5f20 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00cf5f30 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00cf5f40 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00cf5f50 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00cf5f60 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00cf5f70 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00cf5f80 20206f75 7420666c 6f617420 765f696e out float v_in │ │ │ │ + 0x00cf5f90 74656e73 6974793b 200a2020 756e6966 tensity; . unif │ │ │ │ + 0x00cf5fa0 6f726d20 6d617434 20755f6d 6f64656c orm mat4 u_model │ │ │ │ + 0x00cf5fb0 56696577 3b200a20 20756e69 666f726d View; . uniform │ │ │ │ + 0x00cf5fc0 206d6174 3420755f 70726f6a 65637469 mat4 u_projecti │ │ │ │ + 0x00cf5fd0 6f6e3b20 0a202075 6e69666f 726d206d on; . uniform m │ │ │ │ + 0x00cf5fe0 61743420 755f7069 766f7454 72616e73 at4 u_pivotTrans │ │ │ │ + 0x00cf5ff0 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ + 0x00cf6000 20766563 3220755f 636f6e74 72617374 vec2 u_contrast │ │ │ │ + 0x00cf6010 47616d6d 613b200a 2020756e 69666f72 Gamma; . unifor │ │ │ │ + 0x00cf6020 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00cf6030 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ + 0x00cf6040 6f617420 755f7a53 63616c65 3b200a20 oat u_zScale; . │ │ │ │ + 0x00cf6050 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00cf6060 5f696e74 6572706f 6c617469 6f6e3b20 _interpolation; │ │ │ │ + 0x00cf6070 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00cf6080 20755f69 734f7574 6c696e65 50617373 u_isOutlinePass │ │ │ │ + 0x00cf6090 3b200a20 20636f6e 73742076 65633420 ; . const vec4 │ │ │ │ + 0x00cf60a0 6b4e6f72 6d616c69 7a65644c 69676874 kNormalizedLight │ │ │ │ + 0x00cf60b0 44697220 3d207665 63342830 2e333136 Dir = vec4(0.316 │ │ │ │ + 0x00cf60c0 322c2030 2e302c20 302e3934 38362c20 2, 0.0, 0.9486, │ │ │ │ + 0x00cf60d0 302e3029 3b200a20 20636f6e 73742066 0.0); . const f │ │ │ │ + 0x00cf60e0 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ + 0x00cf60f0 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ + 0x00cf6100 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ + 0x00cf6110 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00cf6120 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00cf6130 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00cf6140 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ + 0x00cf6150 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ + 0x00cf6160 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ + 0x00cf6170 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ + 0x00cf6180 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ + 0x00cf6190 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ + 0x00cf61a0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cf61b0 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ + 0x00cf61c0 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ + 0x00cf61d0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cf61e0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00cf61f0 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ + 0x00cf6200 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00cf6210 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ + 0x00cf6220 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ + 0x00cf6230 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00cf6240 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00cf6250 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ + 0x00cf6260 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ + 0x00cf6270 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cf6280 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ + 0x00cf6290 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ + 0x00cf62a0 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ + 0x00cf62b0 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00cf62c0 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ + 0x00cf62d0 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ + 0x00cf62e0 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ + 0x00cf62f0 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ + 0x00cf6300 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00cf6310 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00cf6320 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00cf6330 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ + 0x00cf6340 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ + 0x00cf6350 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ + 0x00cf6360 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ + 0x00cf6370 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ + 0x00cf6380 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cf6390 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00cf63a0 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ + 0x00cf63b0 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ + 0x00cf63c0 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ + 0x00cf63d0 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ + 0x00cf63e0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00cf63f0 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ + 0x00cf6400 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ + 0x00cf6410 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ + 0x00cf6420 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00cf6430 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ + 0x00cf6440 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ + 0x00cf6450 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ + 0x00cf6460 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ + 0x00cf6470 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ + 0x00cf6480 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00cf6490 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ + 0x00cf64a0 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ + 0x00cf64b0 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ + 0x00cf64c0 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ + 0x00cf64d0 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ + 0x00cf64e0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00cf64f0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00cf6500 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ + 0x00cf6510 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ + 0x00cf6520 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ + 0x00cf6530 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ + 0x00cf6540 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ + 0x00cf6550 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ + 0x00cf6560 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ + 0x00cf6570 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ + 0x00cf6580 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ + 0x00cf6590 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ + 0x00cf65a0 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ + 0x00cf65b0 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ + 0x00cf65c0 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ + 0x00cf65d0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00cf65e0 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ + 0x00cf65f0 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ + 0x00cf6600 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00cf6610 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ + 0x00cf6620 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ + 0x00cf6630 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ + 0x00cf6640 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00cf6650 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ + 0x00cf6660 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00cf6670 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ + 0x00cf6680 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ + 0x00cf6690 696f6e2c 20312e30 29202a20 755f6d6f ion, 1.0) * u_mo │ │ │ │ + 0x00cf66a0 64656c56 6965773b 200a2020 20207665 delView; . ve │ │ │ │ + 0x00cf66b0 6334206e 6f726d61 6c203d20 76656334 c4 normal = vec4 │ │ │ │ + 0x00cf66c0 28615f70 6f736974 696f6e20 2b20615f (a_position + a_ │ │ │ │ + 0x00cf66d0 6e6f726d 616c2c20 312e3029 202a2075 normal, 1.0) * u │ │ │ │ + 0x00cf66e0 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ + 0x00cf66f0 206e6f72 6d616c2e 78797720 3d20286e normal.xyw = (n │ │ │ │ + 0x00cf6700 6f726d61 6c202a20 755f7072 6f6a6563 ormal * u_projec │ │ │ │ + 0x00cf6710 74696f6e 292e7879 773b200a 20202020 tion).xyw; . │ │ │ │ + 0x00cf6720 6e6f726d 616c2e7a 203d206e 6f726d61 normal.z = norma │ │ │ │ + 0x00cf6730 6c2e7a20 2a20755f 7a536361 6c653b20 l.z * u_zScale; │ │ │ │ + 0x00cf6740 0a202020 20706f73 2e787977 203d2028 . pos.xyw = ( │ │ │ │ + 0x00cf6750 706f7320 2a20755f 70726f6a 65637469 pos * u_projecti │ │ │ │ + 0x00cf6760 6f6e292e 7879773b 200a2020 2020706f on).xyw; . po │ │ │ │ + 0x00cf6770 732e7a20 3d20615f 706f7369 74696f6e s.z = a_position │ │ │ │ + 0x00cf6780 2e7a202a 20755f7a 5363616c 653b200a .z * u_zScale; . │ │ │ │ + 0x00cf6790 20202020 76656334 206e6f72 6d446972 vec4 normDir │ │ │ │ + 0x00cf67a0 203d206e 6f726d61 6c202d20 706f733b = normal - pos; │ │ │ │ + 0x00cf67b0 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ + 0x00cf67c0 726d4469 722c206e 6f726d44 69722920 rmDir, normDir) │ │ │ │ + 0x00cf67d0 213d2030 2e302920 0a202020 20202076 != 0.0) . v │ │ │ │ + 0x00cf67e0 5f696e74 656e7369 7479203d 206d6178 _intensity = max │ │ │ │ + 0x00cf67f0 28302e30 2c202d64 6f74286b 4e6f726d (0.0, -dot(kNorm │ │ │ │ + 0x00cf6800 616c697a 65644c69 67687444 69722c20 alizedLightDir, │ │ │ │ + 0x00cf6810 6e6f726d 616c697a 65286e6f 726d4469 normalize(normDi │ │ │ │ + 0x00cf6820 72292929 3b200a20 20202065 6c736520 r))); . else │ │ │ │ + 0x00cf6830 0a202020 20202076 5f696e74 656e7369 . v_intensi │ │ │ │ + 0x00cf6840 7479203d 20302e30 3b200a20 20202067 ty = 0.0; . g │ │ │ │ + 0x00cf6850 6c5f506f 73697469 6f6e203d 20755f70 l_Position = u_p │ │ │ │ + 0x00cf6860 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00cf6870 706f733b 200a2020 23696664 65662056 pos; . #ifdef V │ │ │ │ + 0x00cf6880 554c4b41 4e200a20 20202067 6c5f506f ULKAN . gl_Po │ │ │ │ + 0x00cf6890 73697469 6f6e2e79 203d202d 676c5f50 sition.y = -gl_P │ │ │ │ + 0x00cf68a0 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ + 0x00cf68b0 676c5f50 6f736974 696f6e2e 7a203d20 gl_Position.z = │ │ │ │ + 0x00cf68c0 28676c5f 506f7369 74696f6e 2e7a2020 (gl_Position.z │ │ │ │ + 0x00cf68d0 2b20676c 5f506f73 6974696f 6e2e7729 + gl_Position.w) │ │ │ │ + 0x00cf68e0 202a2030 2e353b20 0a202023 656e6469 * 0.5; . #endi │ │ │ │ + 0x00cf68f0 66200a20 20202076 5f636f6c 6f725465 f . v_colorTe │ │ │ │ + 0x00cf6900 78436f6f 72647320 3d20615f 636f6c6f xCoords = a_colo │ │ │ │ + 0x00cf6910 72546578 436f6f72 64733b20 0a20207d rTexCoords; . } │ │ │ │ + 0x00cf6920 200a0000 00000000 00000000 00000000 ............... │ │ │ │ + 0x00cf6930 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cf6940 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cf6950 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cf6960 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cf6970 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cf6980 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cf6990 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cf69a0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cf69b0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cf69c0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cf69d0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cf69e0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cf69f0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cf6a00 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cf6a10 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cf6a20 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cf6a30 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cf6a40 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cf6a50 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cf6a60 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cf6a70 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cf6a80 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00cf6a90 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00cf6aa0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00cf6ab0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00cf6ac0 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ + 0x00cf6ad0 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ + 0x00cf6ae0 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ + 0x00cf6af0 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ + 0x00cf6b00 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00cf6b10 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00cf6b20 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00cf6b30 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00cf6b40 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00cf6b50 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00cf6b60 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00cf6b70 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00cf6b80 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00cf6b90 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00cf6ba0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00cf6bb0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00cf6bc0 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00cf6bd0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00cf6be0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00cf6bf0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00cf6c00 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00cf6c10 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00cf6c20 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00cf6c30 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00cf6c40 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ + 0x00cf6c50 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ + 0x00cf6c60 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ + 0x00cf6c70 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00cf6c80 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00cf6c90 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00cf6ca0 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00cf6cb0 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00cf6cc0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00cf6cd0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00cf6ce0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00cf6cf0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00cf6d00 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00cf6d10 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00cf6d20 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00cf6d30 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00cf6d40 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00cf6d50 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00cf6d60 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00cf6d70 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00cf6d80 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00cf6d90 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00cf6da0 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00cf6db0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cf6dc0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00cf6dd0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00cf6de0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00cf6df0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00cf6e00 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00cf6e10 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00cf6e20 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00cf6e30 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00cf6e40 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00cf6e50 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00cf6e60 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00cf6e70 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00cf6e80 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00cf6e90 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00cf6ea0 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00cf6eb0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00cf6ec0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00cf6ed0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00cf6ee0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00cf6ef0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00cf6f00 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00cf6f10 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00cf6f20 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00cf6f30 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00cf6f40 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00cf6f50 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00cf6f60 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00cf6f70 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00cf6f80 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00cf6f90 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00cf6fa0 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00cf6fb0 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00cf6fc0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00cf6fd0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00cf6fe0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00cf6ff0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00cf7000 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00cf7010 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00cf7020 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00cf7030 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00cf7040 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00cf7050 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00cf7060 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00cf7070 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00cf7080 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00cf7090 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00cf70a0 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00cf70b0 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00cf70c0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00cf70d0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00cf70e0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00cf70f0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00cf7100 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00cf7110 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00cf7120 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00cf7130 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00cf7140 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00cf7150 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00cf7160 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00cf7170 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00cf7180 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00cf7190 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00cf71a0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00cf71b0 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00cf71c0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00cf71d0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00cf71e0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00cf71f0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00cf7200 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00cf7210 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ + 0x00cf7220 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ + 0x00cf7230 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ + 0x00cf7240 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ + 0x00cf7250 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ + 0x00cf7260 202b2061 5f636f6c 6f725465 78436f6f + a_colorTexCoo │ │ │ │ + 0x00cf7270 7264732e 7a772c20 302c2030 29202b20 rds.zw, 0, 0) + │ │ │ │ + 0x00cf7280 703b200a 20202020 676c5f50 6f736974 p; . gl_Posit │ │ │ │ + 0x00cf7290 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ + 0x00cf72a0 5472616e 73666f72 6d28706f 73202a20 Transform(pos * │ │ │ │ + 0x00cf72b0 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ + 0x00cf72c0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00cf72d0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00cf72e0 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ + 0x00cf72f0 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ + 0x00cf7300 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ + 0x00cf7310 636f6c6f 72546578 436f6f72 64732e78 colorTexCoords.x │ │ │ │ + 0x00cf7320 79293b20 0a202023 656c7365 200a2020 y); . #else . │ │ │ │ + 0x00cf7330 2020765f 636f6c6f 72546578 436f6f72 v_colorTexCoor │ │ │ │ + 0x00cf7340 6473203d 20615f63 6f6c6f72 54657843 ds = a_colorTexC │ │ │ │ + 0x00cf7350 6f6f7264 732e7879 3b200a20 2023656e oords.xy; . #en │ │ │ │ + 0x00cf7360 64696620 0a202020 20765f6e 6f726d61 dif . v_norma │ │ │ │ + 0x00cf7370 6c203d20 615f6e6f 726d616c 3b200a20 l = a_normal; . │ │ │ │ + 0x00cf7380 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00cf7390 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cf73a0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cf73b0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cf73c0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cf73d0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cf73e0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cf73f0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cf7400 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cf7410 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cf7420 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cf7430 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cf7440 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cf7450 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cf7460 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cf7470 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cf7480 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cf7490 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cf74a0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cf74b0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cf74c0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cf74d0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cf74e0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00cf74f0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00cf7500 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00cf7510 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00cf7520 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00cf7530 5f565446 200a2020 6f757420 4c4f575f _VTF . out LOW_ │ │ │ │ + 0x00cf7540 50207665 63342076 5f636f6c 6f723b20 P vec4 v_color; │ │ │ │ + 0x00cf7550 0a202023 656c7365 200a2020 6f757420 . #else . out │ │ │ │ + 0x00cf7560 76656332 20765f63 6f6c6f72 54657843 vec2 v_colorTexC │ │ │ │ + 0x00cf7570 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ + 0x00cf7580 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00cf7590 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ + 0x00cf75a0 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00cf75b0 726f6a65 6374696f 6e3b200a 2020756e rojection; . un │ │ │ │ + 0x00cf75c0 69666f72 6d206d61 74342075 5f706976 iform mat4 u_piv │ │ │ │ + 0x00cf75d0 6f745472 616e7366 6f726d3b 200a2020 otTransform; . │ │ │ │ + 0x00cf75e0 756e6966 6f726d20 76656332 20755f63 uniform vec2 u_c │ │ │ │ + 0x00cf75f0 6f6e7472 61737447 616d6d61 3b200a20 ontrastGamma; . │ │ │ │ + 0x00cf7600 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00cf7610 5f6f7061 63697479 3b200a20 20756e69 _opacity; . uni │ │ │ │ + 0x00cf7620 666f726d 20666c6f 61742075 5f7a5363 form float u_zSc │ │ │ │ + 0x00cf7630 616c653b 200a2020 756e6966 6f726d20 ale; . uniform │ │ │ │ + 0x00cf7640 666c6f61 7420755f 696e7465 72706f6c float u_interpol │ │ │ │ + 0x00cf7650 6174696f 6e3b200a 2020756e 69666f72 ation; . unifor │ │ │ │ + 0x00cf7660 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ + 0x00cf7670 696e6550 6173733b 200a2020 23696664 inePass; . #ifd │ │ │ │ + 0x00cf7680 65662045 4e41424c 455f5654 46200a20 ef ENABLE_VTF . │ │ │ │ + 0x00cf7690 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ + 0x00cf76a0 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ + 0x00cf76b0 20202365 6e646966 200a2020 636f6e73 #endif . cons │ │ │ │ + 0x00cf76c0 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00cf76d0 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00cf76e0 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ + 0x00cf76f0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00cf7700 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00cf7710 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00cf7720 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00cf7730 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ + 0x00cf7740 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00cf7750 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ + 0x00cf7760 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ + 0x00cf7770 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ + 0x00cf7780 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00cf7790 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ + 0x00cf77a0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00cf77b0 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00cf77c0 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00cf77d0 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ + 0x00cf77e0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cf77f0 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ + 0x00cf7800 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ + 0x00cf7810 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00cf7820 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00cf7830 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ + 0x00cf7840 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ + 0x00cf7850 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00cf7860 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ + 0x00cf7870 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ + 0x00cf7880 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cf7890 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00cf78a0 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00cf78b0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cf78c0 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ + 0x00cf78d0 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00cf78e0 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00cf78f0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00cf7900 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00cf7910 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ + 0x00cf7920 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ + 0x00cf7930 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ + 0x00cf7940 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ + 0x00cf7950 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ + 0x00cf7960 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00cf7970 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ + 0x00cf7980 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ + 0x00cf7990 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00cf79a0 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ + 0x00cf79b0 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ + 0x00cf79c0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00cf79d0 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ + 0x00cf79e0 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ + 0x00cf79f0 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ + 0x00cf7a00 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00cf7a10 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ + 0x00cf7a20 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ + 0x00cf7a30 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ + 0x00cf7a40 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ + 0x00cf7a50 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ + 0x00cf7a60 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ + 0x00cf7a70 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ + 0x00cf7a80 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ + 0x00cf7a90 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ + 0x00cf7aa0 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ + 0x00cf7ab0 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ + 0x00cf7ac0 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ + 0x00cf7ad0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00cf7ae0 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ + 0x00cf7af0 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ + 0x00cf7b00 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ + 0x00cf7b10 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ + 0x00cf7b20 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ + 0x00cf7b30 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ + 0x00cf7b40 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ + 0x00cf7b50 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ + 0x00cf7b60 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ + 0x00cf7b70 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ + 0x00cf7b80 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ + 0x00cf7b90 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00cf7ba0 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ + 0x00cf7bb0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00cf7bc0 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ + 0x00cf7bd0 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ + 0x00cf7be0 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ + 0x00cf7bf0 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ + 0x00cf7c00 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ + 0x00cf7c10 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ + 0x00cf7c20 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00cf7c30 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00cf7c40 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00cf7c50 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00cf7c60 206e6f72 6d616c20 3d20615f 6e6f726d normal = a_norm │ │ │ │ + 0x00cf7c70 616c2e78 793b200a 20202020 666c6f61 al.xy; . floa │ │ │ │ + 0x00cf7c80 74206861 6c665769 64746820 3d206c65 t halfWidth = le │ │ │ │ + 0x00cf7c90 6e677468 286e6f72 6d616c29 3b200a20 ngth(normal); . │ │ │ │ + 0x00cf7ca0 20202076 65633220 7472616e 73666f72 vec2 transfor │ │ │ │ + 0x00cf7cb0 6d656441 78697350 6f73203d 20287665 medAxisPos = (ve │ │ │ │ + 0x00cf7cc0 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ + 0x00cf7cd0 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ + 0x00cf7ce0 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ + 0x00cf7cf0 20202020 69662028 68616c66 57696474 if (halfWidt │ │ │ │ + 0x00cf7d00 6820213d 20302e30 29200a20 2020207b h != 0.0) . { │ │ │ │ + 0x00cf7d10 200a2020 20202020 7472616e 73666f72 . transfor │ │ │ │ + 0x00cf7d20 6d656441 78697350 6f73203d 2063616c medAxisPos = cal │ │ │ │ + 0x00cf7d30 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ + 0x00cf7d40 41786973 506f7328 7472616e 73666f72 AxisPos(transfor │ │ │ │ + 0x00cf7d50 6d656441 78697350 6f732c20 615f706f medAxisPos, a_po │ │ │ │ + 0x00cf7d60 73697469 6f6e2e78 79202b20 6e6f726d sition.xy + norm │ │ │ │ + 0x00cf7d70 616c2c20 0a202020 20202020 20202020 al, . │ │ │ │ + 0x00cf7d80 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cf7d90 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cf7da0 20202020 20202020 20202075 5f6d6f64 u_mod │ │ │ │ + 0x00cf7db0 656c5669 65772c20 68616c66 57696474 elView, halfWidt │ │ │ │ + 0x00cf7dc0 68293b20 0a202020 207d200a 20202369 h); . } . #i │ │ │ │ + 0x00cf7dd0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00cf7de0 0a202020 20765f63 6f6c6f72 203d2074 . v_color = t │ │ │ │ + 0x00cf7df0 65787475 72652875 5f636f6c 6f725465 exture(u_colorTe │ │ │ │ + 0x00cf7e00 782c2061 5f636f6c 6f725465 78436f6f x, a_colorTexCoo │ │ │ │ + 0x00cf7e10 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ + 0x00cf7e20 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00cf7e30 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ + 0x00cf7e40 6f6f7264 3b200a20 2023656e 64696620 oord; . #endif │ │ │ │ + 0x00cf7e50 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ + 0x00cf7e60 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00cf7e70 41786973 506f732c 20615f70 6f736974 AxisPos, a_posit │ │ │ │ + 0x00cf7e80 696f6e2e 7a2c2031 2e302920 2a20755f ion.z, 1.0) * u_ │ │ │ │ + 0x00cf7e90 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ + 0x00cf7ea0 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ + 0x00cf7eb0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00cf7ec0 726d2870 6f732c20 755f7069 766f7454 rm(pos, u_pivotT │ │ │ │ + 0x00cf7ed0 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ + 0x00cf7ee0 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00cf7ef0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cf7f00 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cf7f10 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cf7f20 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cf7f30 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cf7f40 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cf7f50 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cf7f60 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cf7f70 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cf7f80 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cf7f90 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cf7fa0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cf7fb0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cf7fc0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cf7fd0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cf7fe0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cf7ff0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cf8000 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cf8010 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cf8020 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cf8030 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cf8040 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00cf8050 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00cf8060 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00cf8070 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00cf8080 200a2020 6f757420 76656334 20765f6e . out vec4 v_n │ │ │ │ + 0x00cf8090 6f726d61 6c3b200a 20202369 66646566 ormal; . #ifdef │ │ │ │ + 0x00cf80a0 20454e41 424c455f 56544620 0a20206f ENABLE_VTF . o │ │ │ │ + 0x00cf80b0 7574204c 4f575f50 20766563 3420765f ut LOW_P vec4 v_ │ │ │ │ + 0x00cf80c0 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00cf80d0 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00cf80e0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00cf80f0 2023656e 64696620 0a202075 6e69666f #endif . unifo │ │ │ │ + 0x00cf8100 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00cf8110 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00cf8120 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00cf8130 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00cf8140 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00cf8150 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00cf8160 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00cf8170 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00cf8180 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00cf8190 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00cf81a0 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00cf81b0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00cf81c0 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00cf81d0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00cf81e0 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00cf81f0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00cf8200 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ + 0x00cf8210 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ + 0x00cf8220 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ + 0x00cf8230 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00cf8240 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00cf8250 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00cf8260 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00cf8270 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00cf8280 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00cf8290 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00cf82a0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00cf82b0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00cf82c0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00cf82d0 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00cf82e0 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00cf82f0 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00cf8300 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00cf8310 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00cf8320 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00cf8330 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00cf8340 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00cf8350 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00cf8360 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00cf8370 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cf8380 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00cf8390 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00cf83a0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00cf83b0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00cf83c0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00cf83d0 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00cf83e0 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00cf83f0 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00cf8400 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00cf8410 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00cf8420 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00cf8430 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00cf8440 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00cf8450 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00cf8460 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00cf8470 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00cf8480 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00cf8490 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00cf84a0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00cf84b0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00cf84c0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00cf84d0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00cf84e0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00cf84f0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00cf8500 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00cf8510 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00cf8520 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00cf8530 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00cf8540 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00cf8550 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00cf8560 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00cf8570 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00cf8580 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00cf8590 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00cf85a0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00cf85b0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00cf85c0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00cf85d0 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00cf85e0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00cf85f0 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00cf8600 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00cf8610 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00cf8620 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00cf8630 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00cf8640 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00cf8650 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00cf8660 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00cf8670 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00cf8680 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00cf8690 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00cf86a0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00cf86b0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00cf86c0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00cf86d0 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00cf86e0 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00cf86f0 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00cf8700 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00cf8710 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00cf8720 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00cf8730 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00cf8740 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00cf8750 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00cf8760 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00cf8770 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00cf8780 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00cf8790 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00cf87a0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00cf87b0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00cf87c0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00cf87d0 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ + 0x00cf87e0 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ + 0x00cf87f0 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ + 0x00cf8800 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ + 0x00cf8810 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ + 0x00cf8820 3428615f 6e6f726d 616c2e78 79202b20 4(a_normal.xy + │ │ │ │ + 0x00cf8830 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00cf8840 2e7a772c 20302e30 2c20302e 3029202a .zw, 0.0, 0.0) * │ │ │ │ + 0x00cf8850 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00cf8860 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00cf8870 3d206170 706c7942 696c6c62 6f617264 = applyBillboard │ │ │ │ + 0x00cf8880 5069766f 74547261 6e73666f 726d2870 PivotTransform(p │ │ │ │ + 0x00cf8890 69766f74 202a2075 5f70726f 6a656374 ivot * u_project │ │ │ │ + 0x00cf88a0 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ + 0x00cf88b0 73666f72 6d2c2030 2e302c20 6f666673 sform, 0.0, offs │ │ │ │ + 0x00cf88c0 65742e78 79293b20 0a202023 69666465 et.xy); . #ifde │ │ │ │ + 0x00cf88d0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00cf88e0 2020765f 636f6c6f 72203d20 74657874 v_color = text │ │ │ │ + 0x00cf88f0 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00cf8900 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00cf8910 2e787929 3b200a20 2023656c 7365200a .xy); . #else . │ │ │ │ + 0x00cf8920 20202020 765f636f 6c6f7254 6578436f v_colorTexCo │ │ │ │ + 0x00cf8930 6f726473 203d2061 5f636f6c 6f725465 ords = a_colorTe │ │ │ │ + 0x00cf8940 78436f6f 7264732e 78793b20 0a202023 xCoords.xy; . # │ │ │ │ + 0x00cf8950 656e6469 66200a20 20202076 5f6e6f72 endif . v_nor │ │ │ │ + 0x00cf8960 6d616c20 3d20615f 6e6f726d 616c3b20 mal = a_normal; │ │ │ │ + 0x00cf8970 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00cf8980 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cf8990 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cf89a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cf89b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cf89c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cf89d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cf89e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cf89f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cf8a00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cf8a10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cf8a20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cf8a30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cf8a40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cf8a50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cf8a60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cf8a70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cf8a80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cf8a90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cf8aa0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cf8ab0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cf8ac0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cf8ad0 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00cf8ae0 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00cf8af0 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00cf8b00 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00cf8b10 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ + 0x00cf8b20 743b200a 2020756e 69666f72 6d207665 t; . uniform ve │ │ │ │ + 0x00cf8b30 63342075 5f667261 6d656275 66666572 c4 u_framebuffer │ │ │ │ + 0x00cf8b40 4d657472 6963733b 200a2020 636f6e73 Metrics; . cons │ │ │ │ + 0x00cf8b50 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00cf8b60 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00cf8b70 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ + 0x00cf8b80 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00cf8b90 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00cf8ba0 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00cf8bb0 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00cf8bc0 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ + 0x00cf8bd0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00cf8be0 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ + 0x00cf8bf0 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ + 0x00cf8c00 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ + 0x00cf8c10 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00cf8c20 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ + 0x00cf8c30 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00cf8c40 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00cf8c50 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00cf8c60 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ + 0x00cf8c70 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cf8c80 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ + 0x00cf8c90 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ + 0x00cf8ca0 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00cf8cb0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00cf8cc0 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ + 0x00cf8cd0 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ + 0x00cf8ce0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00cf8cf0 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ + 0x00cf8d00 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ + 0x00cf8d10 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cf8d20 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00cf8d30 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00cf8d40 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cf8d50 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ + 0x00cf8d60 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00cf8d70 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00cf8d80 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00cf8d90 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00cf8da0 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ + 0x00cf8db0 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ + 0x00cf8dc0 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ + 0x00cf8dd0 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ + 0x00cf8de0 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ + 0x00cf8df0 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00cf8e00 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ + 0x00cf8e10 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ + 0x00cf8e20 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00cf8e30 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ + 0x00cf8e40 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ + 0x00cf8e50 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00cf8e60 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ + 0x00cf8e70 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ + 0x00cf8e80 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ + 0x00cf8e90 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00cf8ea0 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ + 0x00cf8eb0 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ + 0x00cf8ec0 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ + 0x00cf8ed0 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ + 0x00cf8ee0 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ + 0x00cf8ef0 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ + 0x00cf8f00 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ + 0x00cf8f10 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ + 0x00cf8f20 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ + 0x00cf8f30 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ + 0x00cf8f40 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ + 0x00cf8f50 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ + 0x00cf8f60 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00cf8f70 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ + 0x00cf8f80 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ + 0x00cf8f90 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ + 0x00cf8fa0 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ + 0x00cf8fb0 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ + 0x00cf8fc0 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ + 0x00cf8fd0 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ + 0x00cf8fe0 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ + 0x00cf8ff0 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ + 0x00cf9000 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ + 0x00cf9010 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ + 0x00cf9020 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00cf9030 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ + 0x00cf9040 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00cf9050 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ + 0x00cf9060 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ + 0x00cf9070 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ + 0x00cf9080 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ + 0x00cf9090 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ + 0x00cf90a0 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ + 0x00cf90b0 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00cf90c0 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00cf90d0 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00cf90e0 29200a20 207b200a 20202020 765f636f ) . { . v_co │ │ │ │ + 0x00cf90f0 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ + 0x00cf9100 5f74636f 6f72643b 200a2020 2020765f _tcoord; . v_ │ │ │ │ + 0x00cf9110 6f666673 6574203d 20755f66 72616d65 offset = u_frame │ │ │ │ + 0x00cf9120 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ + 0x00cf9130 7879202a 20766563 3428312e 302c2030 xy * vec4(1.0, 0 │ │ │ │ + 0x00cf9140 2e302c20 302e302c 20312e30 29202b20 .0, 0.0, 1.0) + │ │ │ │ + 0x00cf9150 615f7463 6f6f7264 2e787978 793b200a a_tcoord.xyxy; . │ │ │ │ + 0x00cf9160 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00cf9170 3d207665 63342861 5f706f73 2c20302e = vec4(a_pos, 0. │ │ │ │ + 0x00cf9180 302c2031 2e30293b 200a2020 7d200a00 0, 1.0); . } .. │ │ │ │ + 0x00cf9190 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cf91a0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cf91b0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cf91c0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cf91d0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cf91e0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cf91f0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cf9200 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cf9210 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cf9220 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cf9230 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cf9240 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cf9250 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cf9260 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cf9270 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cf9280 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cf9290 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cf92a0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cf92b0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cf92c0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cf92d0 2023656e 64696620 0a202023 69666465 #endif . #ifde │ │ │ │ + 0x00cf92e0 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00cf92f0 696e204c 4f575f50 20766563 3420765f in LOW_P vec4 v_ │ │ │ │ + 0x00cf9300 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00cf9310 0a202069 6e207665 63322076 5f636f6c . in vec2 v_col │ │ │ │ + 0x00cf9320 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00cf9330 756e6966 6f726d20 73616d70 6c657232 uniform sampler2 │ │ │ │ + 0x00cf9340 4420755f 636f6c6f 72546578 3b200a20 D u_colorTex; . │ │ │ │ + 0x00cf9350 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cf9360 63322076 5f6d6173 6b546578 436f6f72 c2 v_maskTexCoor │ │ │ │ + 0x00cf9370 64733b20 0a20206f 75742076 65633420 ds; . out vec4 │ │ │ │ + 0x00cf9380 765f4672 6167436f 6c6f723b 200a2020 v_FragColor; . │ │ │ │ + 0x00cf9390 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00cf93a0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00cf93b0 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00cf93c0 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00cf93d0 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00cf93e0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00cf93f0 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00cf9400 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00cf9410 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00cf9420 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00cf9430 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00cf9440 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00cf9450 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00cf9460 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00cf9470 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00cf9480 50617373 3b200a20 20636f6e 73742066 Pass; . const f │ │ │ │ + 0x00cf9490 6c6f6174 206b526f 77506572 696f6450 loat kRowPeriodP │ │ │ │ + 0x00cf94a0 78203d20 382e303b 20202020 2f2f2076 x = 8.0; // v │ │ │ │ + 0x00cf94b0 65727469 63616c20 64697374 616e6365 ertical distance │ │ │ │ + 0x00cf94c0 20626574 7765656e 20646173 6820726f between dash ro │ │ │ │ + 0x00cf94d0 7773200a 2020636f 6e737420 666c6f61 ws . const floa │ │ │ │ + 0x00cf94e0 74206b52 6f774365 6e746572 5078203d t kRowCenterPx = │ │ │ │ + 0x00cf94f0 20332e35 3b202020 202f2f20 66697273 3.5; // firs │ │ │ │ + 0x00cf9500 7420726f 77206365 6e746572 20286d61 t row center (ma │ │ │ │ + 0x00cf9510 74636865 73207468 65206c65 67616379 tches the legacy │ │ │ │ + 0x00cf9520 2074696c 6529200a 2020636f 6e737420 tile) . const │ │ │ │ + 0x00cf9530 666c6f61 74206b48 616c6654 6869636b float kHalfThick │ │ │ │ + 0x00cf9540 5078203d 20302e35 3b202020 202f2f20 Px = 0.5; // │ │ │ │ + 0x00cf9550 68616c66 20646173 68207468 69636b6e half dash thickn │ │ │ │ + 0x00cf9560 65737320 2d3e207e 31707820 0a202063 ess -> ~1px . c │ │ │ │ + 0x00cf9570 6f6e7374 20666c6f 6174206b 44617368 onst float kDash │ │ │ │ + 0x00cf9580 50657269 6f645078 203d2031 362e303b PeriodPx = 16.0; │ │ │ │ + 0x00cf9590 20202f2f 20646173 68202b20 67617020 // dash + gap │ │ │ │ + 0x00cf95a0 6c656e67 7468200a 2020636f 6e737420 length . const │ │ │ │ + 0x00cf95b0 666c6f61 74206b44 61736848 616c6650 float kDashHalfP │ │ │ │ + 0x00cf95c0 78203d20 342e303b 20202020 202f2f20 x = 4.0; // │ │ │ │ + 0x00cf95d0 68616c66 20646173 68206c65 6e677468 half dash length │ │ │ │ + 0x00cf95e0 202d3e20 38707820 64617368 200a2020 -> 8px dash . │ │ │ │ + 0x00cf95f0 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00cf9600 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00cf9610 31303030 2e303b20 0a20204c 4f575f50 1000.0; . LOW_P │ │ │ │ + 0x00cf9620 20766563 33204d6f 64756c61 74654279 vec3 ModulateBy │ │ │ │ + 0x00cf9630 50617474 65726e44 6f747328 4c4f575f PatternDots(LOW_ │ │ │ │ + 0x00cf9640 50207665 63332063 6f6c6f72 2c20666c P vec3 color, fl │ │ │ │ + 0x00cf9650 6f617420 6461726b 656e2c20 666c6f61 oat darken, floa │ │ │ │ + 0x00cf9660 7420636f 76657261 67652920 0a20207b t coverage) . { │ │ │ │ + 0x00cf9670 200a2020 2020636f 6e737420 666c6f61 . const floa │ │ │ │ + 0x00cf9680 74206b4c 69676874 656e203d 20302e30 t kLighten = 0.0 │ │ │ │ + 0x00cf9690 37353b20 0a202020 20696620 28646f74 75; . if (dot │ │ │ │ + 0x00cf96a0 28636f6c 6f722c20 76656333 28302e32 (color, vec3(0.2 │ │ │ │ + 0x00cf96b0 3132362c 20302e37 3135322c 20302e30 126, 0.7152, 0.0 │ │ │ │ + 0x00cf96c0 37323229 29203c20 302e3529 200a2020 722)) < 0.5) . │ │ │ │ + 0x00cf96d0 20202020 72657475 726e2063 6f6c6f72 return color │ │ │ │ + 0x00cf96e0 202b2063 6f766572 61676520 2a206b4c + coverage * kL │ │ │ │ + 0x00cf96f0 69676874 656e3b20 0a202020 20726574 ighten; . ret │ │ │ │ + 0x00cf9700 75726e20 636f6c6f 72202a20 6d697828 urn color * mix( │ │ │ │ + 0x00cf9710 312e302c 20646172 6b656e2c 20636f76 1.0, darken, cov │ │ │ │ + 0x00cf9720 65726167 65293b20 0a20207d 200a2020 erage); . } . │ │ │ │ + 0x00cf9730 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00cf9740 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00cf9750 455f5654 46200a20 2020204c 4f575f50 E_VTF . LOW_P │ │ │ │ + 0x00cf9760 20766563 3420636f 6c6f7220 3d20765f vec4 color = v_ │ │ │ │ + 0x00cf9770 636f6c6f 723b200a 20202365 6c736520 color; . #else │ │ │ │ + 0x00cf9780 0a202020 204c4f57 5f502076 65633420 . LOW_P vec4 │ │ │ │ + 0x00cf9790 636f6c6f 72203d20 74657874 75726528 color = texture( │ │ │ │ + 0x00cf97a0 755f636f 6c6f7254 65782c20 765f636f u_colorTex, v_co │ │ │ │ + 0x00cf97b0 6c6f7254 6578436f 6f726473 293b200a lorTexCoords); . │ │ │ │ + 0x00cf97c0 20202365 6e646966 200a2020 20207665 #endif . ve │ │ │ │ + 0x00cf97d0 63322070 78203d20 765f6d61 736b5465 c2 px = v_maskTe │ │ │ │ + 0x00cf97e0 78436f6f 72647320 2a203136 2e303b20 xCoords * 16.0; │ │ │ │ + 0x00cf97f0 0a202020 20666c6f 61742079 6d203d20 . float ym = │ │ │ │ + 0x00cf9800 6d6f6428 70782e79 202d206b 526f7743 mod(px.y - kRowC │ │ │ │ + 0x00cf9810 656e7465 7250782c 206b526f 77506572 enterPx, kRowPer │ │ │ │ + 0x00cf9820 696f6450 78293b20 0a202020 20666c6f iodPx); . flo │ │ │ │ + 0x00cf9830 61742079 44697374 203d206d 696e2879 at yDist = min(y │ │ │ │ + 0x00cf9840 6d2c206b 526f7750 6572696f 64507820 m, kRowPeriodPx │ │ │ │ + 0x00cf9850 2d20796d 293b200a 20202020 666c6f61 - ym); . floa │ │ │ │ + 0x00cf9860 74206161 59203d20 66776964 74682870 t aaY = fwidth(p │ │ │ │ + 0x00cf9870 782e7929 3b200a20 20202066 6c6f6174 x.y); . float │ │ │ │ + 0x00cf9880 206f6e52 6f77203d 20312e30 202d2073 onRow = 1.0 - s │ │ │ │ + 0x00cf9890 6d6f6f74 68737465 70286b48 616c6654 moothstep(kHalfT │ │ │ │ + 0x00cf98a0 6869636b 5078202d 20616159 2c206b48 hickPx - aaY, kH │ │ │ │ + 0x00cf98b0 616c6654 6869636b 5078202b 20616159 alfThickPx + aaY │ │ │ │ + 0x00cf98c0 2c207944 69737429 3b200a20 20202066 , yDist); . f │ │ │ │ + 0x00cf98d0 6c6f6174 20726f77 49647820 3d20666c loat rowIdx = fl │ │ │ │ + 0x00cf98e0 6f6f7228 2870782e 79202d20 6b526f77 oor((px.y - kRow │ │ │ │ + 0x00cf98f0 43656e74 65725078 29202f20 6b526f77 CenterPx) / kRow │ │ │ │ + 0x00cf9900 50657269 6f645078 202b2030 2e35293b PeriodPx + 0.5); │ │ │ │ + 0x00cf9910 200a2020 2020666c 6f617420 78506861 . float xPha │ │ │ │ + 0x00cf9920 7365203d 2070782e 78202b20 6d6f6428 se = px.x + mod( │ │ │ │ + 0x00cf9930 726f7749 64782c20 322e3029 202a2028 rowIdx, 2.0) * ( │ │ │ │ + 0x00cf9940 6b446173 68506572 696f6450 78202a20 kDashPeriodPx * │ │ │ │ + 0x00cf9950 302e3529 3b200a20 20202066 6c6f6174 0.5); . float │ │ │ │ + 0x00cf9960 20784469 7374203d 20616273 286d6f64 xDist = abs(mod │ │ │ │ + 0x00cf9970 28785068 6173652c 206b4461 73685065 (xPhase, kDashPe │ │ │ │ + 0x00cf9980 72696f64 50782920 2d206b44 61736848 riodPx) - kDashH │ │ │ │ + 0x00cf9990 616c6650 78293b20 0a202020 20666c6f alfPx); . flo │ │ │ │ + 0x00cf99a0 61742061 6158203d 20667769 64746828 at aaX = fwidth( │ │ │ │ + 0x00cf99b0 70782e78 293b200a 20202020 666c6f61 px.x); . floa │ │ │ │ + 0x00cf99c0 74206f6e 44617368 203d2031 2e30202d t onDash = 1.0 - │ │ │ │ + 0x00cf99d0 20736d6f 6f746873 74657028 6b446173 smoothstep(kDas │ │ │ │ + 0x00cf99e0 6848616c 66507820 2d206161 582c206b hHalfPx - aaX, k │ │ │ │ + 0x00cf99f0 44617368 48616c66 5078202b 20616158 DashHalfPx + aaX │ │ │ │ + 0x00cf9a00 2c207844 69737429 3b200a20 20202063 , xDist); . c │ │ │ │ + 0x00cf9a10 6f6c6f72 2e61202a 3d206f6e 526f7720 olor.a *= onRow │ │ │ │ + 0x00cf9a20 2a206f6e 44617368 202a2075 5f6f7061 * onDash * u_opa │ │ │ │ + 0x00cf9a30 63697479 3b200a20 20202076 5f467261 city; . v_Fra │ │ │ │ + 0x00cf9a40 67436f6c 6f72203d 20636f6c 6f723b20 gColor = color; │ │ │ │ + 0x00cf9a50 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00cf9a60 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cf9a70 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cf9a80 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cf9a90 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cf9aa0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cf9ab0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cf9ac0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cf9ad0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cf9ae0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cf9af0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cf9b00 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cf9b10 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cf9b20 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cf9b30 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cf9b40 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cf9b50 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cf9b60 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cf9b70 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cf9b80 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cf9b90 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cf9ba0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cf9bb0 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ + 0x00cf9bc0 76656332 20615f74 6578436f 6f726473 vec2 a_texCoords │ │ │ │ + 0x00cf9bd0 3b200a20 206f7574 20666c6f 61742076 ; . out float v │ │ │ │ + 0x00cf9be0 5f696e74 656e7369 74793b20 0a202075 _intensity; . u │ │ │ │ + 0x00cf9bf0 6e69666f 726d206d 61743420 755f7472 niform mat4 u_tr │ │ │ │ + 0x00cf9c00 616e7366 6f726d3b 200a2020 756e6966 ansform; . unif │ │ │ │ + 0x00cf9c10 6f726d20 6d617434 20755f6e 6f726d61 orm mat4 u_norma │ │ │ │ + 0x00cf9c20 6c547261 6e73666f 726d3b20 0a202075 lTransform; . u │ │ │ │ + 0x00cf9c30 6e69666f 726d2076 65633420 755f636f niform vec4 u_co │ │ │ │ + 0x00cf9c40 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00cf9c50 76656332 20755f74 6578436f 6f726446 vec2 u_texCoordF │ │ │ │ + 0x00cf9c60 6c697070 696e673b 200a2020 636f6e73 lipping; . cons │ │ │ │ + 0x00cf9c70 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ + 0x00cf9c80 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ + 0x00cf9c90 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ + 0x00cf9ca0 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ + 0x00cf9cb0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00cf9cc0 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00cf9cd0 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00cf9ce0 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ + 0x00cf9cf0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00cf9d00 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ + 0x00cf9d10 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ + 0x00cf9d20 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ + 0x00cf9d30 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00cf9d40 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ + 0x00cf9d50 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00cf9d60 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00cf9d70 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00cf9d80 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ + 0x00cf9d90 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cf9da0 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ + 0x00cf9db0 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ + 0x00cf9dc0 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00cf9dd0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00cf9de0 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ + 0x00cf9df0 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ + 0x00cf9e00 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00cf9e10 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ + 0x00cf9e20 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ + 0x00cf9e30 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cf9e40 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00cf9e50 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00cf9e60 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cf9e70 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ + 0x00cf9e80 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00cf9e90 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00cf9ea0 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00cf9eb0 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00cf9ec0 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ + 0x00cf9ed0 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ + 0x00cf9ee0 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ + 0x00cf9ef0 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ + 0x00cf9f00 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ + 0x00cf9f10 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00cf9f20 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ + 0x00cf9f30 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ + 0x00cf9f40 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00cf9f50 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ + 0x00cf9f60 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ + 0x00cf9f70 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00cf9f80 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ + 0x00cf9f90 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ + 0x00cf9fa0 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ + 0x00cf9fb0 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00cf9fc0 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ + 0x00cf9fd0 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ + 0x00cf9fe0 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ + 0x00cf9ff0 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ + 0x00cfa000 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ + 0x00cfa010 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ + 0x00cfa020 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ + 0x00cfa030 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ + 0x00cfa040 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ + 0x00cfa050 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ + 0x00cfa060 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ + 0x00cfa070 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ + 0x00cfa080 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00cfa090 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ + 0x00cfa0a0 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ + 0x00cfa0b0 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ + 0x00cfa0c0 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ + 0x00cfa0d0 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ + 0x00cfa0e0 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ + 0x00cfa0f0 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ + 0x00cfa100 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ + 0x00cfa110 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ + 0x00cfa120 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ + 0x00cfa130 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ + 0x00cfa140 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ + 0x00cfa150 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ + 0x00cfa160 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00cfa170 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ + 0x00cfa180 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ + 0x00cfa190 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ + 0x00cfa1a0 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ + 0x00cfa1b0 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ + 0x00cfa1c0 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ + 0x00cfa1d0 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00cfa1e0 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00cfa1f0 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ + 0x00cfa200 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00cfa210 20706f73 6974696f 6e203d20 755f7472 position = u_tr │ │ │ │ + 0x00cfa220 616e7366 6f726d20 2a207665 63342861 ansform * vec4(a │ │ │ │ + 0x00cfa230 5f706f73 2c20312e 30293b20 0a202020 _pos, 1.0); . │ │ │ │ + 0x00cfa240 20765f69 6e74656e 73697479 203d2061 v_intensity = a │ │ │ │ + 0x00cfa250 5f746578 436f6f72 64732e78 3b200a20 _texCoords.x; . │ │ │ │ + 0x00cfa260 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ + 0x00cfa270 20706f73 6974696f 6e3b200a 20202369 position; . #i │ │ │ │ + 0x00cfa280 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00cfa290 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ + 0x00cfa2a0 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ + 0x00cfa2b0 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00cfa2c0 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ + 0x00cfa2d0 6f6e2e7a 202b2067 6c5f506f 73697469 on.z + gl_Positi │ │ │ │ + 0x00cfa2e0 6f6e2e77 29202a20 302e353b 200a2020 on.w) * 0.5; . │ │ │ │ + 0x00cfa2f0 23656e64 6966200a 20207d20 0a000000 #endif . } .... │ │ │ │ + 0x00cfa300 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cfa310 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cfa320 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cfa330 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cfa340 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cfa350 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cfa360 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cfa370 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cfa380 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cfa390 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cfa3a0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cfa3b0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cfa3c0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cfa3d0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cfa3e0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cfa3f0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cfa400 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cfa410 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cfa420 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cfa430 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cfa440 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cfa450 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00cfa460 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00cfa470 72546578 436f6f72 64733b20 0a202023 rTexCoords; . # │ │ │ │ + 0x00cfa480 69666465 6620454e 41424c45 5f565446 ifdef ENABLE_VTF │ │ │ │ + 0x00cfa490 200a2020 6f757420 4c4f575f 50207665 . out LOW_P ve │ │ │ │ + 0x00cfa4a0 63342076 5f636f6c 6f723b20 0a202023 c4 v_color; . # │ │ │ │ + 0x00cfa4b0 656c7365 200a2020 6f757420 76656332 else . out vec2 │ │ │ │ + 0x00cfa4c0 20765f63 6f6c6f72 54657843 6f6f7264 v_colorTexCoord │ │ │ │ + 0x00cfa4d0 733b200a 20202365 6e646966 200a2020 s; . #endif . │ │ │ │ + 0x00cfa4e0 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00cfa4f0 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00cfa500 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00cfa510 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00cfa520 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00cfa530 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00cfa540 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00cfa550 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00cfa560 69666f72 6d20666c 6f617420 755f6f70 iform float u_op │ │ │ │ + 0x00cfa570 61636974 793b200a 2020756e 69666f72 acity; . unifor │ │ │ │ + 0x00cfa580 6d20666c 6f617420 755f7a53 63616c65 m float u_zScale │ │ │ │ + 0x00cfa590 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00cfa5a0 61742075 5f696e74 6572706f 6c617469 at u_interpolati │ │ │ │ + 0x00cfa5b0 6f6e3b20 0a202075 6e69666f 726d2066 on; . uniform f │ │ │ │ + 0x00cfa5c0 6c6f6174 20755f69 734f7574 6c696e65 loat u_isOutline │ │ │ │ + 0x00cfa5d0 50617373 3b200a20 20236966 64656620 Pass; . #ifdef │ │ │ │ + 0x00cfa5e0 454e4142 4c455f56 5446200a 2020756e ENABLE_VTF . un │ │ │ │ + 0x00cfa5f0 69666f72 6d207361 6d706c65 72324420 iform sampler2D │ │ │ │ + 0x00cfa600 755f636f 6c6f7254 65783b20 0a202023 u_colorTex; . # │ │ │ │ + 0x00cfa610 656e6469 66200a20 20636f6e 73742066 endif . const f │ │ │ │ + 0x00cfa620 6c6f6174 206b5368 61706543 6f6f7264 loat kShapeCoord │ │ │ │ + 0x00cfa630 5363616c 6172203d 20313030 302e303b Scalar = 1000.0; │ │ │ │ + 0x00cfa640 200a2020 76656334 20617070 6c795069 . vec4 applyPi │ │ │ │ + 0x00cfa650 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ + 0x00cfa660 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ + 0x00cfa670 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ + 0x00cfa680 6f617420 7069766f 74526561 6c5a2920 oat pivotRealZ) │ │ │ │ + 0x00cfa690 0a20207b 200a2020 20207665 63342074 . { . vec4 t │ │ │ │ + 0x00cfa6a0 72616e73 666f726d 65645069 766f7420 ransformedPivot │ │ │ │ + 0x00cfa6b0 3d207069 766f743b 200a2020 2020666c = pivot; . fl │ │ │ │ + 0x00cfa6c0 6f617420 77203d20 7472616e 73666f72 oat w = transfor │ │ │ │ + 0x00cfa6d0 6d656450 69766f74 2e773b20 0a202020 medPivot.w; . │ │ │ │ + 0x00cfa6e0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cfa6f0 742e7879 77203d20 28706976 6f745472 t.xyw = (pivotTr │ │ │ │ + 0x00cfa700 616e7366 6f726d20 2a207665 63342874 ansform * vec4(t │ │ │ │ + 0x00cfa710 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cfa720 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00cfa730 7729292e 7879773b 200a2020 20207472 w)).xyw; . tr │ │ │ │ + 0x00cfa740 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00cfa750 202a3d20 7472616e 73666f72 6d656450 *= transformedP │ │ │ │ + 0x00cfa760 69766f74 2e77202f 20773b20 0a202023 ivot.w / w; . # │ │ │ │ + 0x00cfa770 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00cfa780 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00cfa790 6f742e79 203d202d 7472616e 73666f72 ot.y = -transfor │ │ │ │ + 0x00cfa7a0 6d656450 69766f74 2e793b20 0a202020 medPivot.y; . │ │ │ │ + 0x00cfa7b0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cfa7c0 742e7a20 3d202874 72616e73 666f726d t.z = (transform │ │ │ │ + 0x00cfa7d0 65645069 766f742e 7a20202b 20747261 edPivot.z + tra │ │ │ │ + 0x00cfa7e0 6e73666f 726d6564 5069766f 742e7729 nsformedPivot.w) │ │ │ │ + 0x00cfa7f0 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00cfa800 66200a20 20202072 65747572 6e207472 f . return tr │ │ │ │ + 0x00cfa810 616e7366 6f726d65 64506976 6f743b20 ansformedPivot; │ │ │ │ + 0x00cfa820 0a20207d 200a2020 76656334 20617070 . } . vec4 app │ │ │ │ + 0x00cfa830 6c794269 6c6c626f 61726450 69766f74 lyBillboardPivot │ │ │ │ + 0x00cfa840 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00cfa850 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00cfa860 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00cfa870 20706976 6f745265 616c5a2c 20766563 pivotRealZ, vec │ │ │ │ + 0x00cfa880 32206f66 66736574 29200a20 207b200a 2 offset) . { . │ │ │ │ + 0x00cfa890 20202020 666c6f61 74206c6f 6769635a float logicZ │ │ │ │ + 0x00cfa8a0 203d2070 69766f74 2e7a202f 20706976 = pivot.z / piv │ │ │ │ + 0x00cfa8b0 6f742e77 3b200a20 20202076 65633420 ot.w; . vec4 │ │ │ │ + 0x00cfa8c0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cfa8d0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00cfa8e0 6d202a20 76656334 28706976 6f742e78 m * vec4(pivot.x │ │ │ │ + 0x00cfa8f0 792c2070 69766f74 5265616c 5a2c2070 y, pivotRealZ, p │ │ │ │ + 0x00cfa900 69766f74 2e77293b 200a2020 20207665 ivot.w); . ve │ │ │ │ + 0x00cfa910 63342073 63616c65 203d2070 69766f74 c4 scale = pivot │ │ │ │ + 0x00cfa920 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00cfa930 28312e30 2c202d31 2e302c20 302e302c (1.0, -1.0, 0.0, │ │ │ │ + 0x00cfa940 20312e30 293b200a 20202020 76656334 1.0); . vec4 │ │ │ │ + 0x00cfa950 20706f73 6974696f 6e203d20 76656334 position = vec4 │ │ │ │ + 0x00cfa960 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00cfa970 742e7879 202f2074 72616e73 666f726d t.xy / transform │ │ │ │ + 0x00cfa980 65645069 766f742e 772c206c 6f676963 edPivot.w, logic │ │ │ │ + 0x00cfa990 5a2c2031 2e302920 2b207665 6334286f Z, 1.0) + vec4(o │ │ │ │ + 0x00cfa9a0 66667365 74202f20 7363616c 652e7720 ffset / scale.w │ │ │ │ + 0x00cfa9b0 2a207363 616c652e 782c2030 2e302c20 * scale.x, 0.0, │ │ │ │ + 0x00cfa9c0 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ + 0x00cfa9d0 56554c4b 414e200a 20202020 706f7369 VULKAN . posi │ │ │ │ + 0x00cfa9e0 74696f6e 2e79203d 202d706f 73697469 tion.y = -positi │ │ │ │ + 0x00cfa9f0 6f6e2e79 3b200a20 20202070 6f736974 on.y; . posit │ │ │ │ + 0x00cfaa00 696f6e2e 7a203d20 28706f73 6974696f ion.z = (positio │ │ │ │ + 0x00cfaa10 6e2e7a20 202b2070 6f736974 696f6e2e n.z + position. │ │ │ │ + 0x00cfaa20 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00cfaa30 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00cfaa40 706f7369 74696f6e 3b200a20 207d200a position; . } . │ │ │ │ + 0x00cfaa50 20207665 63322063 616c634c 696e6554 vec2 calcLineT │ │ │ │ + 0x00cfaa60 72616e73 666f726d 65644178 6973506f ransformedAxisPo │ │ │ │ + 0x00cfaa70 73287665 6332206f 72696769 6e616c41 s(vec2 originalA │ │ │ │ + 0x00cfaa80 78697350 6f732c20 76656332 20736869 xisPos, vec2 shi │ │ │ │ + 0x00cfaa90 66746564 506f732c 206d6174 34206d6f ftedPos, mat4 mo │ │ │ │ + 0x00cfaaa0 64656c56 6965772c 20666c6f 61742068 delView, float h │ │ │ │ + 0x00cfaab0 616c6657 69647468 29200a20 207b200a alfWidth) . { . │ │ │ │ + 0x00cfaac0 20202020 76656332 2070203d 20287665 vec2 p = (ve │ │ │ │ + 0x00cfaad0 63342873 68696674 6564506f 732c2030 c4(shiftedPos, 0 │ │ │ │ + 0x00cfaae0 2e302c20 312e3029 202a206d 6f64656c .0, 1.0) * model │ │ │ │ + 0x00cfaaf0 56696577 292e7879 3b200a20 20202076 View).xy; . v │ │ │ │ + 0x00cfab00 65633220 64203d20 70202d20 6f726967 ec2 d = p - orig │ │ │ │ + 0x00cfab10 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00cfab20 20206966 2028646f 7428642c 20642920 if (dot(d, d) │ │ │ │ + 0x00cfab30 213d2030 2e302920 0a202020 20202072 != 0.0) . r │ │ │ │ + 0x00cfab40 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00cfab50 6973506f 73202b20 6e6f726d 616c697a isPos + normaliz │ │ │ │ + 0x00cfab60 65286429 202a2068 616c6657 69647468 e(d) * halfWidth │ │ │ │ + 0x00cfab70 3b200a20 20202065 6c736520 0a202020 ; . else . │ │ │ │ + 0x00cfab80 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00cfab90 616c4178 6973506f 733b200a 20207d20 alAxisPos; . } │ │ │ │ + 0x00cfaba0 0a202076 6f696420 6d61696e 2829200a . void main() . │ │ │ │ + 0x00cfabb0 20207b20 0a202020 20766563 3420706f { . vec4 po │ │ │ │ + 0x00cfabc0 73203d20 76656334 28615f70 6f736974 s = vec4(a_posit │ │ │ │ + 0x00cfabd0 696f6e2c 20312920 2a20755f 6d6f6465 ion, 1) * u_mode │ │ │ │ + 0x00cfabe0 6c566965 77202a20 755f7072 6f6a6563 lView * u_projec │ │ │ │ + 0x00cfabf0 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ + 0x00cfac00 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ + 0x00cfac10 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ + 0x00cfac20 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ + 0x00cfac30 726d2c20 302e3029 3b200a20 20236966 rm, 0.0); . #if │ │ │ │ + 0x00cfac40 64656620 454e4142 4c455f56 5446200a def ENABLE_VTF . │ │ │ │ + 0x00cfac50 20202020 765f636f 6c6f7220 3d207465 v_color = te │ │ │ │ + 0x00cfac60 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ + 0x00cfac70 2c20615f 636f6c6f 72546578 436f6f72 , a_colorTexCoor │ │ │ │ + 0x00cfac80 6473293b 200a2020 23656c73 65200a20 ds); . #else . │ │ │ │ + 0x00cfac90 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00cfaca0 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ + 0x00cfacb0 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ + 0x00cfacc0 66200a20 207d200a 00000000 00000000 f . } ......... │ │ │ │ + 0x00cfacd0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cface0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cfacf0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cfad00 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cfad10 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cfad20 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cfad30 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cfad40 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cfad50 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cfad60 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cfad70 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cfad80 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cfad90 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cfada0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cfadb0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cfadc0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cfadd0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cfade0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cfadf0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cfae00 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cfae10 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cfae20 63342076 5f636f6f 7264733b 200a2020 c4 v_coords; . │ │ │ │ + 0x00cfae30 696e2076 65633420 765f6f66 66736574 in vec4 v_offset │ │ │ │ + 0x00cfae40 303b200a 2020696e 20766563 3420765f 0; . in vec4 v_ │ │ │ │ + 0x00cfae50 6f666673 6574313b 200a2020 696e2076 offset1; . in v │ │ │ │ + 0x00cfae60 65633420 765f6f66 66736574 323b200a ec4 v_offset2; . │ │ │ │ + 0x00cfae70 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ + 0x00cfae80 67436f6c 6f723b20 0a202075 6e69666f gColor; . unifo │ │ │ │ + 0x00cfae90 726d2076 65633420 755f6672 616d6562 rm vec4 u_frameb │ │ │ │ + 0x00cfaea0 75666665 724d6574 72696373 3b200a20 ufferMetrics; . │ │ │ │ + 0x00cfaeb0 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ + 0x00cfaec0 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ + 0x00cfaed0 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ + 0x00cfaee0 72324420 755f736d 61614172 65613b20 r2D u_smaaArea; │ │ │ │ + 0x00cfaef0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00cfaf00 65723244 20755f73 6d616153 65617263 er2D u_smaaSearc │ │ │ │ + 0x00cfaf10 683b200a 20202364 6566696e 6520534d h; . #define SM │ │ │ │ + 0x00cfaf20 41415f53 45415243 48544558 5f53495a AA_SEARCHTEX_SIZ │ │ │ │ + 0x00cfaf30 45207665 63322836 362e302c 2033332e E vec2(66.0, 33. │ │ │ │ + 0x00cfaf40 3029200a 20202364 6566696e 6520534d 0) . #define SM │ │ │ │ + 0x00cfaf50 41415f53 45415243 48544558 5f504143 AA_SEARCHTEX_PAC │ │ │ │ + 0x00cfaf60 4b45445f 53495a45 20766563 32283634 KED_SIZE vec2(64 │ │ │ │ + 0x00cfaf70 2e302c20 31362e30 29200a20 20236465 .0, 16.0) . #de │ │ │ │ + 0x00cfaf80 66696e65 20534d41 415f4152 45415445 fine SMAA_AREATE │ │ │ │ + 0x00cfaf90 585f4d41 585f4449 5354414e 43452031 X_MAX_DISTANCE 1 │ │ │ │ + 0x00cfafa0 362e3020 0a202023 64656669 6e652053 6.0 . #define S │ │ │ │ + 0x00cfafb0 4d41415f 41524541 5445585f 50495845 MAA_AREATEX_PIXE │ │ │ │ + 0x00cfafc0 4c5f5349 5a452028 76656332 28312e30 L_SIZE (vec2(1.0 │ │ │ │ + 0x00cfafd0 202f2032 35362e30 2c20312e 30202f20 / 256.0, 1.0 / │ │ │ │ + 0x00cfafe0 31303234 2e302929 200a2020 23646566 1024.0)) . #def │ │ │ │ + 0x00cfaff0 696e6520 534d4141 4c6f6f70 42656769 ine SMAALoopBegi │ │ │ │ + 0x00cfb000 6e28636f 6e646974 696f6e29 20776869 n(condition) whi │ │ │ │ + 0x00cfb010 6c652028 636f6e64 6974696f 6e29207b le (condition) { │ │ │ │ + 0x00cfb020 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00cfb030 4c6f6f70 456e6420 7d200a20 20236465 LoopEnd } . #de │ │ │ │ + 0x00cfb040 66696e65 20534d41 4153616d 706c654c fine SMAASampleL │ │ │ │ + 0x00cfb050 6576656c 5a65726f 28746578 2c20636f evelZero(tex, co │ │ │ │ + 0x00cfb060 6f726429 20746578 74757265 4c6f6428 ord) textureLod( │ │ │ │ + 0x00cfb070 7465782c 20636f6f 72642c20 302e3029 tex, coord, 0.0) │ │ │ │ + 0x00cfb080 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00cfb090 53616d70 6c654c65 76656c5a 65726f4f SampleLevelZeroO │ │ │ │ + 0x00cfb0a0 66667365 74287465 782c2063 6f6f7264 ffset(tex, coord │ │ │ │ + 0x00cfb0b0 2c206f66 66736574 29207465 78747572 , offset) textur │ │ │ │ + 0x00cfb0c0 654c6f64 4f666673 65742874 65782c20 eLodOffset(tex, │ │ │ │ + 0x00cfb0d0 636f6f72 642c2030 2e302c20 6f666673 coord, 0.0, offs │ │ │ │ + 0x00cfb0e0 65742920 0a202023 64656669 6e652053 et) . #define S │ │ │ │ + 0x00cfb0f0 4d414152 6f756e64 28762920 726f756e MAARound(v) roun │ │ │ │ + 0x00cfb100 64282876 2929200a 20202364 6566696e d((v)) . #defin │ │ │ │ + 0x00cfb110 6520534d 41414f66 66736574 28782c79 e SMAAOffset(x,y │ │ │ │ + 0x00cfb120 29206976 65633228 782c7929 200a2020 ) ivec2(x,y) . │ │ │ │ + 0x00cfb130 636f6e73 74207665 6332206b 41726561 const vec2 kArea │ │ │ │ + 0x00cfb140 5465784d 61784469 7374616e 6365203d TexMaxDistance = │ │ │ │ + 0x00cfb150 20766563 3228534d 41415f41 52454154 vec2(SMAA_AREAT │ │ │ │ + 0x00cfb160 45585f4d 41585f44 49535441 4e43452c EX_MAX_DISTANCE, │ │ │ │ + 0x00cfb170 20534d41 415f4152 45415445 585f4d41 SMAA_AREATEX_MA │ │ │ │ + 0x00cfb180 585f4449 5354414e 4345293b 200a2020 X_DISTANCE); . │ │ │ │ + 0x00cfb190 636f6e73 7420666c 6f617420 6b416374 const float kAct │ │ │ │ + 0x00cfb1a0 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ + 0x00cfb1b0 203d2030 2e383238 313b200a 2020666c = 0.8281; . fl │ │ │ │ + 0x00cfb1c0 6f617420 534d4141 53656172 63684c65 oat SMAASearchLe │ │ │ │ + 0x00cfb1d0 6e677468 28766563 3220652c 20666c6f ngth(vec2 e, flo │ │ │ │ + 0x00cfb1e0 6174206f 66667365 7429200a 20207b20 at offset) . { │ │ │ │ + 0x00cfb1f0 0a202020 20766563 32207363 616c6520 . vec2 scale │ │ │ │ + 0x00cfb200 3d20534d 41415f53 45415243 48544558 = SMAA_SEARCHTEX │ │ │ │ + 0x00cfb210 5f53495a 45202a20 76656332 28302e35 _SIZE * vec2(0.5 │ │ │ │ + 0x00cfb220 2c202d31 2e30293b 200a2020 20207665 , -1.0); . ve │ │ │ │ + 0x00cfb230 63322062 69617320 3d20534d 41415f53 c2 bias = SMAA_S │ │ │ │ + 0x00cfb240 45415243 48544558 5f53495a 45202a20 EARCHTEX_SIZE * │ │ │ │ + 0x00cfb250 76656332 286f6666 7365742c 20312e30 vec2(offset, 1.0 │ │ │ │ + 0x00cfb260 293b200a 20202020 7363616c 65202b3d ); . scale += │ │ │ │ + 0x00cfb270 20766563 32282d31 2e302c20 20312e30 vec2(-1.0, 1.0 │ │ │ │ + 0x00cfb280 293b200a 20202020 62696173 202b3d20 ); . bias += │ │ │ │ + 0x00cfb290 76656332 2820302e 352c202d 302e3529 vec2( 0.5, -0.5) │ │ │ │ + 0x00cfb2a0 3b200a20 20202073 63616c65 202a3d20 ; . scale *= │ │ │ │ + 0x00cfb2b0 312e3020 2f20534d 41415f53 45415243 1.0 / SMAA_SEARC │ │ │ │ + 0x00cfb2c0 48544558 5f504143 4b45445f 53495a45 HTEX_PACKED_SIZE │ │ │ │ + 0x00cfb2d0 3b200a20 20202062 69617320 2a3d2031 ; . bias *= 1 │ │ │ │ + 0x00cfb2e0 2e30202f 20534d41 415f5345 41524348 .0 / SMAA_SEARCH │ │ │ │ + 0x00cfb2f0 5445585f 5041434b 45445f53 495a453b TEX_PACKED_SIZE; │ │ │ │ + 0x00cfb300 200a2020 20207265 7475726e 20534d41 . return SMA │ │ │ │ + 0x00cfb310 4153616d 706c654c 6576656c 5a65726f ASampleLevelZero │ │ │ │ + 0x00cfb320 28755f73 6d616153 65617263 682c2073 (u_smaaSearch, s │ │ │ │ + 0x00cfb330 63616c65 202a2065 202b2062 69617329 cale * e + bias) │ │ │ │ + 0x00cfb340 2e723b20 0a20207d 200a2020 666c6f61 .r; . } . floa │ │ │ │ + 0x00cfb350 7420534d 41415365 61726368 584c6566 t SMAASearchXLef │ │ │ │ + 0x00cfb360 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ + 0x00cfb370 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ + 0x00cfb380 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ + 0x00cfb390 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ + 0x00cfb3a0 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ + 0x00cfb3b0 6e287465 78636f6f 72642e78 203e2065 n(texcoord.x > e │ │ │ │ + 0x00cfb3c0 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ + 0x00cfb3d0 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ + 0x00cfb3e0 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ + 0x00cfb3f0 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ + 0x00cfb400 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ + 0x00cfb410 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ + 0x00cfb420 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ + 0x00cfb430 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ + 0x00cfb440 2d322e30 2c20302e 3029202a 20755f66 -2.0, 0.0) * u_f │ │ │ │ + 0x00cfb450 72616d65 62756666 65724d65 74726963 ramebufferMetric │ │ │ │ + 0x00cfb460 732e7879 202b2074 6578636f 6f72643b s.xy + texcoord; │ │ │ │ + 0x00cfb470 200a2020 2020534d 41414c6f 6f70456e . SMAALoopEn │ │ │ │ + 0x00cfb480 64200a20 20202066 6c6f6174 206f6666 d . float off │ │ │ │ + 0x00cfb490 73657420 3d20332e 3235202d 20283235 set = 3.25 - (25 │ │ │ │ + 0x00cfb4a0 352e3020 2f203132 372e3029 202a2053 5.0 / 127.0) * S │ │ │ │ + 0x00cfb4b0 4d414153 65617263 684c656e 67746828 MAASearchLength( │ │ │ │ + 0x00cfb4c0 652c2030 2e30293b 200a2020 20207265 e, 0.0); . re │ │ │ │ + 0x00cfb4d0 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ + 0x00cfb4e0 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ + 0x00cfb4f0 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ + 0x00cfb500 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ + 0x00cfb510 20534d41 41536561 72636858 52696768 SMAASearchXRigh │ │ │ │ + 0x00cfb520 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ + 0x00cfb530 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ + 0x00cfb540 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ + 0x00cfb550 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ + 0x00cfb560 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ + 0x00cfb570 6e287465 78636f6f 72642e78 203c2065 n(texcoord.x < e │ │ │ │ + 0x00cfb580 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ + 0x00cfb590 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ + 0x00cfb5a0 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ + 0x00cfb5b0 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ + 0x00cfb5c0 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ + 0x00cfb5d0 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ + 0x00cfb5e0 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ + 0x00cfb5f0 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ + 0x00cfb600 322e302c 20302e30 29202a20 755f6672 2.0, 0.0) * u_fr │ │ │ │ + 0x00cfb610 616d6562 75666665 724d6574 72696373 amebufferMetrics │ │ │ │ + 0x00cfb620 2e787920 2b207465 78636f6f 72643b20 .xy + texcoord; │ │ │ │ + 0x00cfb630 0a202020 20534d41 414c6f6f 70456e64 . SMAALoopEnd │ │ │ │ + 0x00cfb640 200a2020 2020666c 6f617420 6f666673 . float offs │ │ │ │ + 0x00cfb650 6574203d 20332e32 35202d20 28323535 et = 3.25 - (255 │ │ │ │ + 0x00cfb660 2e30202f 20313237 2e302920 2a20534d .0 / 127.0) * SM │ │ │ │ + 0x00cfb670 41415365 61726368 4c656e67 74682865 AASearchLength(e │ │ │ │ + 0x00cfb680 2c20302e 35293b20 0a202020 20726574 , 0.5); . ret │ │ │ │ + 0x00cfb690 75726e20 2d755f66 72616d65 62756666 urn -u_framebuff │ │ │ │ + 0x00cfb6a0 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ + 0x00cfb6b0 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ + 0x00cfb6c0 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ + 0x00cfb6d0 20534d41 41536561 72636859 55702876 SMAASearchYUp(v │ │ │ │ + 0x00cfb6e0 65633220 74657863 6f6f7264 2c20666c ec2 texcoord, fl │ │ │ │ + 0x00cfb6f0 6f617420 656e6429 200a2020 7b200a20 oat end) . { . │ │ │ │ + 0x00cfb700 20202076 65633220 65203d20 76656332 vec2 e = vec2 │ │ │ │ + 0x00cfb710 28312e30 2c20302e 30293b20 0a202020 (1.0, 0.0); . │ │ │ │ + 0x00cfb720 20534d41 414c6f6f 70426567 696e2874 SMAALoopBegin(t │ │ │ │ + 0x00cfb730 6578636f 6f72642e 79203e20 656e6420 excoord.y > end │ │ │ │ + 0x00cfb740 26262065 2e72203e 206b4163 74697661 && e.r > kActiva │ │ │ │ + 0x00cfb750 74696f6e 54687265 73686f6c 64202626 tionThreshold && │ │ │ │ + 0x00cfb760 20652e67 203d3d20 302e3029 200a2020 e.g == 0.0) . │ │ │ │ + 0x00cfb770 20202020 65203d20 534d4141 53616d70 e = SMAASamp │ │ │ │ + 0x00cfb780 6c654c65 76656c5a 65726f28 755f636f leLevelZero(u_co │ │ │ │ + 0x00cfb790 6c6f7254 65782c20 74657863 6f6f7264 lorTex, texcoord │ │ │ │ + 0x00cfb7a0 292e7267 3b200a20 20202020 20746578 ).rg; . tex │ │ │ │ + 0x00cfb7b0 636f6f72 64203d20 76656332 28302e30 coord = vec2(0.0 │ │ │ │ + 0x00cfb7c0 2c202d32 2e302920 2a20755f 6672616d , -2.0) * u_fram │ │ │ │ + 0x00cfb7d0 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00cfb7e0 79202b20 74657863 6f6f7264 3b200a20 y + texcoord; . │ │ │ │ + 0x00cfb7f0 20202053 4d41414c 6f6f7045 6e64200a SMAALoopEnd . │ │ │ │ + 0x00cfb800 20202020 666c6f61 74206f66 66736574 float offset │ │ │ │ + 0x00cfb810 203d2033 2e323520 2d202832 35352e30 = 3.25 - (255.0 │ │ │ │ + 0x00cfb820 202f2031 32372e30 29202a20 534d4141 / 127.0) * SMAA │ │ │ │ + 0x00cfb830 53656172 63684c65 6e677468 28652e67 SearchLength(e.g │ │ │ │ + 0x00cfb840 722c2030 2e30293b 200a2020 20207265 r, 0.0); . re │ │ │ │ + 0x00cfb850 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ + 0x00cfb860 65724d65 74726963 732e7920 2a206f66 erMetrics.y * of │ │ │ │ + 0x00cfb870 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ + 0x00cfb880 793b200a 20207d20 0a202066 6c6f6174 y; . } . float │ │ │ │ + 0x00cfb890 20534d41 41536561 72636859 446f776e SMAASearchYDown │ │ │ │ + 0x00cfb8a0 28766563 32207465 78636f6f 72642c20 (vec2 texcoord, │ │ │ │ + 0x00cfb8b0 666c6f61 7420656e 6429200a 20207b20 float end) . { │ │ │ │ + 0x00cfb8c0 0a202020 20766563 32206520 3d207665 . vec2 e = ve │ │ │ │ + 0x00cfb8d0 63322831 2e302c20 302e3029 3b200a20 c2(1.0, 0.0); . │ │ │ │ + 0x00cfb8e0 20202053 4d41414c 6f6f7042 6567696e SMAALoopBegin │ │ │ │ + 0x00cfb8f0 28746578 636f6f72 642e7920 3c20656e (texcoord.y < en │ │ │ │ + 0x00cfb900 64202626 20652e72 203e206b 41637469 d && e.r > kActi │ │ │ │ + 0x00cfb910 76617469 6f6e5468 72657368 6f6c6420 vationThreshold │ │ │ │ + 0x00cfb920 26262065 2e67203d 3d20302e 3029200a && e.g == 0.0) . │ │ │ │ + 0x00cfb930 20202020 20206520 3d20534d 41415361 e = SMAASa │ │ │ │ + 0x00cfb940 6d706c65 4c657665 6c5a6572 6f28755f mpleLevelZero(u_ │ │ │ │ + 0x00cfb950 636f6c6f 72546578 2c207465 78636f6f colorTex, texcoo │ │ │ │ + 0x00cfb960 7264292e 72673b20 0a202020 20202074 rd).rg; . t │ │ │ │ + 0x00cfb970 6578636f 6f726420 3d207665 63322830 excoord = vec2(0 │ │ │ │ + 0x00cfb980 2e302c20 322e3029 202a2075 5f667261 .0, 2.0) * u_fra │ │ │ │ + 0x00cfb990 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ + 0x00cfb9a0 7879202b 20746578 636f6f72 643b200a xy + texcoord; . │ │ │ │ + 0x00cfb9b0 20202020 534d4141 4c6f6f70 456e6420 SMAALoopEnd │ │ │ │ + 0x00cfb9c0 0a202020 20666c6f 6174206f 66667365 . float offse │ │ │ │ + 0x00cfb9d0 74203d20 332e3235 202d2028 3235352e t = 3.25 - (255. │ │ │ │ + 0x00cfb9e0 30202f20 3132372e 3029202a 20534d41 0 / 127.0) * SMA │ │ │ │ + 0x00cfb9f0 41536561 7263684c 656e6774 6828652e ASearchLength(e. │ │ │ │ + 0x00cfba00 67722c20 302e3529 3b200a20 20202072 gr, 0.5); . r │ │ │ │ + 0x00cfba10 65747572 6e202d75 5f667261 6d656275 eturn -u_framebu │ │ │ │ + 0x00cfba20 66666572 4d657472 6963732e 79202a20 fferMetrics.y * │ │ │ │ + 0x00cfba30 6f666673 6574202b 20746578 636f6f72 offset + texcoor │ │ │ │ + 0x00cfba40 642e793b 200a2020 7d200a20 20766563 d.y; . } . vec │ │ │ │ + 0x00cfba50 3220534d 41414172 65612876 65633220 2 SMAAArea(vec2 │ │ │ │ + 0x00cfba60 64697374 2c20666c 6f617420 65312c20 dist, float e1, │ │ │ │ + 0x00cfba70 666c6f61 74206532 29200a20 207b200a float e2) . { . │ │ │ │ + 0x00cfba80 20202020 76656332 20746578 636f6f72 vec2 texcoor │ │ │ │ + 0x00cfba90 64203d20 6b417265 61546578 4d617844 d = kAreaTexMaxD │ │ │ │ + 0x00cfbaa0 69737461 6e636520 2a20534d 4141526f istance * SMAARo │ │ │ │ + 0x00cfbab0 756e6428 342e3020 2a207665 63322865 und(4.0 * vec2(e │ │ │ │ + 0x00cfbac0 312c2065 32292920 2b206469 73743b20 1, e2)) + dist; │ │ │ │ + 0x00cfbad0 0a202020 20746578 636f6f72 64203d20 . texcoord = │ │ │ │ + 0x00cfbae0 534d4141 5f415245 41544558 5f504958 SMAA_AREATEX_PIX │ │ │ │ + 0x00cfbaf0 454c5f53 495a4520 2a202874 6578636f EL_SIZE * (texco │ │ │ │ + 0x00cfbb00 6f726420 2b20302e 35293b20 0a202020 ord + 0.5); . │ │ │ │ + 0x00cfbb10 20726574 75726e20 534d4141 53616d70 return SMAASamp │ │ │ │ + 0x00cfbb20 6c654c65 76656c5a 65726f28 755f736d leLevelZero(u_sm │ │ │ │ + 0x00cfbb30 61614172 65612c20 74657863 6f6f7264 aaArea, texcoord │ │ │ │ + 0x00cfbb40 292e7267 3b200a20 207d200a 2020636f ).rg; . } . co │ │ │ │ + 0x00cfbb50 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00cfbb60 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00cfbb70 30302e30 3b200a20 204c4f57 5f502076 00.0; . LOW_P v │ │ │ │ + 0x00cfbb80 65633320 4d6f6475 6c617465 42795061 ec3 ModulateByPa │ │ │ │ + 0x00cfbb90 74746572 6e446f74 73284c4f 575f5020 tternDots(LOW_P │ │ │ │ + 0x00cfbba0 76656333 20636f6c 6f722c20 666c6f61 vec3 color, floa │ │ │ │ + 0x00cfbbb0 74206461 726b656e 2c20666c 6f617420 t darken, float │ │ │ │ + 0x00cfbbc0 636f7665 72616765 29200a20 207b200a coverage) . { . │ │ │ │ + 0x00cfbbd0 20202020 636f6e73 7420666c 6f617420 const float │ │ │ │ + 0x00cfbbe0 6b4c6967 6874656e 203d2030 2e303735 kLighten = 0.075 │ │ │ │ + 0x00cfbbf0 3b200a20 20202069 66202864 6f742863 ; . if (dot(c │ │ │ │ + 0x00cfbc00 6f6c6f72 2c207665 63332830 2e323132 olor, vec3(0.212 │ │ │ │ + 0x00cfbc10 362c2030 2e373135 322c2030 2e303732 6, 0.7152, 0.072 │ │ │ │ + 0x00cfbc20 32292920 3c20302e 3529200a 20202020 2)) < 0.5) . │ │ │ │ + 0x00cfbc30 20207265 7475726e 20636f6c 6f72202b return color + │ │ │ │ + 0x00cfbc40 20636f76 65726167 65202a20 6b4c6967 coverage * kLig │ │ │ │ + 0x00cfbc50 6874656e 3b200a20 20202072 65747572 hten; . retur │ │ │ │ + 0x00cfbc60 6e20636f 6c6f7220 2a206d69 7828312e n color * mix(1. │ │ │ │ + 0x00cfbc70 302c2064 61726b65 6e2c2063 6f766572 0, darken, cover │ │ │ │ + 0x00cfbc80 61676529 3b200a20 207d200a 2020766f age); . } . vo │ │ │ │ + 0x00cfbc90 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00cfbca0 20202020 76656334 20776569 67687473 vec4 weights │ │ │ │ + 0x00cfbcb0 203d2076 65633428 302e302c 20302e30 = vec4(0.0, 0.0 │ │ │ │ + 0x00cfbcc0 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ + 0x00cfbcd0 20207665 63322065 203d2074 65787475 vec2 e = textu │ │ │ │ + 0x00cfbce0 72652875 5f636f6c 6f725465 782c2076 re(u_colorTex, v │ │ │ │ + 0x00cfbcf0 5f636f6f 7264732e 7879292e 72673b20 _coords.xy).rg; │ │ │ │ + 0x00cfbd00 0a202020 20696620 28652e67 203e2030 . if (e.g > 0 │ │ │ │ + 0x00cfbd10 2e302920 2f2f2045 64676520 6174206e .0) // Edge at n │ │ │ │ + 0x00cfbd20 6f727468 200a2020 20207b20 0a202020 orth . { . │ │ │ │ + 0x00cfbd30 20202076 65633220 643b200a 20202020 vec2 d; . │ │ │ │ + 0x00cfbd40 20207665 63332063 6f6f7264 733b200a vec3 coords; . │ │ │ │ + 0x00cfbd50 20202020 2020636f 6f726473 2e78203d coords.x = │ │ │ │ + 0x00cfbd60 20534d41 41536561 72636858 4c656674 SMAASearchXLeft │ │ │ │ + 0x00cfbd70 28765f6f 66667365 74302e78 792c2076 (v_offset0.xy, v │ │ │ │ + 0x00cfbd80 5f6f6666 73657432 2e78293b 200a2020 _offset2.x); . │ │ │ │ + 0x00cfbd90 20202020 636f6f72 64732e79 203d2076 coords.y = v │ │ │ │ + 0x00cfbda0 5f6f6666 73657431 2e793b20 0a202020 _offset1.y; . │ │ │ │ + 0x00cfbdb0 20202064 2e78203d 20636f6f 7264732e d.x = coords. │ │ │ │ + 0x00cfbdc0 783b200a 20202020 2020666c 6f617420 x; . float │ │ │ │ + 0x00cfbdd0 6531203d 20534d41 4153616d 706c654c e1 = SMAASampleL │ │ │ │ + 0x00cfbde0 6576656c 5a65726f 28755f63 6f6c6f72 evelZero(u_color │ │ │ │ + 0x00cfbdf0 5465782c 20636f6f 7264732e 7879292e Tex, coords.xy). │ │ │ │ + 0x00cfbe00 723b200a 20202020 2020636f 6f726473 r; . coords │ │ │ │ + 0x00cfbe10 2e7a203d 20534d41 41536561 72636858 .z = SMAASearchX │ │ │ │ + 0x00cfbe20 52696768 7428765f 6f666673 6574302e Right(v_offset0. │ │ │ │ + 0x00cfbe30 7a772c20 765f6f66 66736574 322e7929 zw, v_offset2.y) │ │ │ │ + 0x00cfbe40 3b200a20 20202020 20642e79 203d2063 ; . d.y = c │ │ │ │ + 0x00cfbe50 6f6f7264 732e7a3b 200a2020 20202020 oords.z; . │ │ │ │ + 0x00cfbe60 76656332 207a7a20 3d20755f 6672616d vec2 zz = u_fram │ │ │ │ + 0x00cfbe70 65627566 6665724d 65747269 63732e7a ebufferMetrics.z │ │ │ │ + 0x00cfbe80 7a3b200a 20202020 20206420 3d206162 z; . d = ab │ │ │ │ + 0x00cfbe90 7328534d 4141526f 756e6428 7a7a202a s(SMAARound(zz * │ │ │ │ + 0x00cfbea0 2064202d 20765f63 6f6f7264 732e7a7a d - v_coords.zz │ │ │ │ + 0x00cfbeb0 29293b20 0a202020 20202076 65633220 )); . vec2 │ │ │ │ + 0x00cfbec0 73717274 5f64203d 20737172 74286429 sqrt_d = sqrt(d) │ │ │ │ + 0x00cfbed0 3b200a20 20202020 20666c6f 61742065 ; . float e │ │ │ │ + 0x00cfbee0 32203d20 534d4141 53616d70 6c654c65 2 = SMAASampleLe │ │ │ │ + 0x00cfbef0 76656c5a 65726f4f 66667365 7428755f velZeroOffset(u_ │ │ │ │ + 0x00cfbf00 636f6c6f 72546578 2c20636f 6f726473 colorTex, coords │ │ │ │ + 0x00cfbf10 2e7a792c 20534d41 414f6666 73657428 .zy, SMAAOffset( │ │ │ │ + 0x00cfbf20 312c2030 29292e72 3b200a20 20202020 1, 0)).r; . │ │ │ │ + 0x00cfbf30 20776569 67687473 2e726720 3d20534d weights.rg = SM │ │ │ │ + 0x00cfbf40 41414172 65612873 7172745f 642c2065 AAArea(sqrt_d, e │ │ │ │ + 0x00cfbf50 312c2065 32293b20 0a202020 207d200a 1, e2); . } . │ │ │ │ + 0x00cfbf60 20202020 69662028 652e7220 3e20302e if (e.r > 0. │ │ │ │ + 0x00cfbf70 3029202f 2f204564 67652061 74207765 0) // Edge at we │ │ │ │ + 0x00cfbf80 7374200a 20202020 7b200a20 20202020 st . { . │ │ │ │ + 0x00cfbf90 20766563 3220643b 200a2020 20202020 vec2 d; . │ │ │ │ + 0x00cfbfa0 76656333 20636f6f 7264733b 200a2020 vec3 coords; . │ │ │ │ + 0x00cfbfb0 20202020 636f6f72 64732e79 203d2053 coords.y = S │ │ │ │ + 0x00cfbfc0 4d414153 65617263 68595570 28765f6f MAASearchYUp(v_o │ │ │ │ + 0x00cfbfd0 66667365 74312e78 792c2076 5f6f6666 ffset1.xy, v_off │ │ │ │ + 0x00cfbfe0 73657432 2e7a293b 200a2020 20202020 set2.z); . │ │ │ │ + 0x00cfbff0 636f6f72 64732e78 203d2076 5f6f6666 coords.x = v_off │ │ │ │ + 0x00cfc000 73657430 2e783b20 0a202020 20202064 set0.x; . d │ │ │ │ + 0x00cfc010 2e78203d 20636f6f 7264732e 793b200a .x = coords.y; . │ │ │ │ + 0x00cfc020 20202020 2020666c 6f617420 6531203d float e1 = │ │ │ │ + 0x00cfc030 20534d41 4153616d 706c654c 6576656c SMAASampleLevel │ │ │ │ + 0x00cfc040 5a65726f 28755f63 6f6c6f72 5465782c Zero(u_colorTex, │ │ │ │ + 0x00cfc050 20636f6f 7264732e 7879292e 673b200a coords.xy).g; . │ │ │ │ + 0x00cfc060 20202020 2020636f 6f726473 2e7a203d coords.z = │ │ │ │ + 0x00cfc070 20534d41 41536561 72636859 446f776e SMAASearchYDown │ │ │ │ + 0x00cfc080 28765f6f 66667365 74312e7a 772c2076 (v_offset1.zw, v │ │ │ │ + 0x00cfc090 5f6f6666 73657432 2e77293b 200a2020 _offset2.w); . │ │ │ │ + 0x00cfc0a0 20202020 642e7920 3d20636f 6f726473 d.y = coords │ │ │ │ + 0x00cfc0b0 2e7a3b20 0a202020 20202076 65633220 .z; . vec2 │ │ │ │ + 0x00cfc0c0 7777203d 20755f66 72616d65 62756666 ww = u_framebuff │ │ │ │ + 0x00cfc0d0 65724d65 74726963 732e7777 3b200a20 erMetrics.ww; . │ │ │ │ + 0x00cfc0e0 20202020 2064203d 20616273 28534d41 d = abs(SMA │ │ │ │ + 0x00cfc0f0 41526f75 6e642877 77202a20 64202d20 ARound(ww * d - │ │ │ │ + 0x00cfc100 765f636f 6f726473 2e777729 293b200a v_coords.ww)); . │ │ │ │ + 0x00cfc110 20202020 20207665 63322073 7172745f vec2 sqrt_ │ │ │ │ + 0x00cfc120 64203d20 73717274 2864293b 200a2020 d = sqrt(d); . │ │ │ │ + 0x00cfc130 20202020 666c6f61 74206532 203d2053 float e2 = S │ │ │ │ + 0x00cfc140 4d414153 616d706c 654c6576 656c5a65 MAASampleLevelZe │ │ │ │ + 0x00cfc150 726f4f66 66736574 28755f63 6f6c6f72 roOffset(u_color │ │ │ │ + 0x00cfc160 5465782c 20636f6f 7264732e 787a2c20 Tex, coords.xz, │ │ │ │ + 0x00cfc170 534d4141 4f666673 65742830 2c203129 SMAAOffset(0, 1) │ │ │ │ + 0x00cfc180 292e673b 200a2020 20202020 77656967 ).g; . weig │ │ │ │ + 0x00cfc190 6874732e 6261203d 20534d41 41417265 hts.ba = SMAAAre │ │ │ │ + 0x00cfc1a0 61287371 72745f64 2c206531 2c206532 a(sqrt_d, e1, e2 │ │ │ │ + 0x00cfc1b0 293b200a 20202020 7d200a20 20202076 ); . } . v │ │ │ │ + 0x00cfc1c0 5f467261 67436f6c 6f72203d 20776569 _FragColor = wei │ │ │ │ + 0x00cfc1d0 67687473 3b200a20 207d200a 00000000 ghts; . } ..... │ │ │ │ + 0x00cfc1e0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cfc1f0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cfc200 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cfc210 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cfc220 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cfc230 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cfc240 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cfc250 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cfc260 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cfc270 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cfc280 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cfc290 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cfc2a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cfc2b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cfc2c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cfc2d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cfc2e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cfc2f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cfc300 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cfc310 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cfc320 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cfc330 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00cfc340 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00cfc350 72546578 436f6f72 64733b20 0a202069 rTexCoords; . i │ │ │ │ + 0x00cfc360 6e207665 63322061 5f6d6173 6b546578 n vec2 a_maskTex │ │ │ │ + 0x00cfc370 436f6f72 64733b20 0a202023 69666465 Coords; . #ifde │ │ │ │ + 0x00cfc380 6620454e 41424c45 5f565446 200a2020 f ENABLE_VTF . │ │ │ │ + 0x00cfc390 6f757420 4c4f575f 50207665 63342076 out LOW_P vec4 v │ │ │ │ + 0x00cfc3a0 5f636f6c 6f723b20 0a202023 656c7365 _color; . #else │ │ │ │ + 0x00cfc3b0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00cfc3c0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00cfc3d0 20202365 6e646966 200a2020 6f757420 #endif . out │ │ │ │ + 0x00cfc3e0 76656332 20765f6d 61736b54 6578436f vec2 v_maskTexCo │ │ │ │ + 0x00cfc3f0 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ + 0x00cfc400 206d6174 3420755f 6d6f6465 6c566965 mat4 u_modelVie │ │ │ │ + 0x00cfc410 773b200a 2020756e 69666f72 6d206d61 w; . uniform ma │ │ │ │ + 0x00cfc420 74342075 5f70726f 6a656374 696f6e3b t4 u_projection; │ │ │ │ + 0x00cfc430 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00cfc440 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00cfc450 6d3b200a 2020756e 69666f72 6d207665 m; . uniform ve │ │ │ │ + 0x00cfc460 63322075 5f636f6e 74726173 7447616d c2 u_contrastGam │ │ │ │ + 0x00cfc470 6d613b20 0a202075 6e69666f 726d2066 ma; . uniform f │ │ │ │ + 0x00cfc480 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00cfc490 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00cfc4a0 20755f7a 5363616c 653b200a 2020756e u_zScale; . un │ │ │ │ + 0x00cfc4b0 69666f72 6d20666c 6f617420 755f696e iform float u_in │ │ │ │ + 0x00cfc4c0 74657270 6f6c6174 696f6e3b 200a2020 terpolation; . │ │ │ │ + 0x00cfc4d0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00cfc4e0 69734f75 746c696e 65506173 733b200a isOutlinePass; . │ │ │ │ + 0x00cfc4f0 20202369 66646566 20454e41 424c455f #ifdef ENABLE_ │ │ │ │ + 0x00cfc500 56544620 0a202075 6e69666f 726d2073 VTF . uniform s │ │ │ │ + 0x00cfc510 616d706c 65723244 20755f63 6f6c6f72 ampler2D u_color │ │ │ │ + 0x00cfc520 5465783b 200a2020 23656e64 6966200a Tex; . #endif . │ │ │ │ + 0x00cfc530 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ + 0x00cfc540 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ + 0x00cfc550 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ + 0x00cfc560 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ 0x00cfc570 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ 0x00cfc580 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ 0x00cfc590 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00cfc5a0 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ - 0x00cfc5b0 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ - 0x00cfc5c0 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ - 0x00cfc5d0 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ - 0x00cfc5e0 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ - 0x00cfc5f0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00cfc600 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00cfc610 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ - 0x00cfc620 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ - 0x00cfc630 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ - 0x00cfc640 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ - 0x00cfc650 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ - 0x00cfc660 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ - 0x00cfc670 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ - 0x00cfc680 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ - 0x00cfc690 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00cfc6a0 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ - 0x00cfc6b0 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ - 0x00cfc6c0 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ - 0x00cfc6d0 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ - 0x00cfc6e0 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ - 0x00cfc6f0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00cfc700 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ - 0x00cfc710 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ - 0x00cfc720 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ - 0x00cfc730 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ - 0x00cfc740 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ - 0x00cfc750 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ - 0x00cfc760 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ - 0x00cfc770 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ - 0x00cfc780 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ - 0x00cfc790 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ - 0x00cfc7a0 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ - 0x00cfc7b0 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ - 0x00cfc7c0 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ - 0x00cfc7d0 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ - 0x00cfc7e0 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ - 0x00cfc7f0 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ - 0x00cfc800 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ - 0x00cfc810 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ - 0x00cfc820 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ - 0x00cfc830 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ - 0x00cfc840 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ - 0x00cfc850 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ - 0x00cfc860 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ - 0x00cfc870 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00cfc880 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ - 0x00cfc890 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ - 0x00cfc8a0 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ - 0x00cfc8b0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00cfc8c0 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ - 0x00cfc8d0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00cfc8e0 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ - 0x00cfc8f0 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ - 0x00cfc900 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ - 0x00cfc910 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ - 0x00cfc920 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ - 0x00cfc930 200a2020 20207665 6332206c 656e203d . vec2 len = │ │ │ │ - 0x00cfc940 20766563 3228615f 6c656e67 74682e78 vec2(a_length.x │ │ │ │ - 0x00cfc950 2c20615f 6c656e67 74682e7a 293b200a , a_length.z); . │ │ │ │ - 0x00cfc960 20202020 69662028 646f7428 615f6e6f if (dot(a_no │ │ │ │ - 0x00cfc970 726d616c 2c20615f 6e6f726d 616c2920 rmal, a_normal) │ │ │ │ - 0x00cfc980 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ - 0x00cfc990 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ - 0x00cfc9a0 3d20615f 6e6f726d 616c202a 20755f6c = a_normal * u_l │ │ │ │ - 0x00cfc9b0 696e6550 6172616d 732e783b 200a2020 ineParams.x; . │ │ │ │ - 0x00cfc9c0 20202020 7472616e 73666f72 6d656441 transformedA │ │ │ │ - 0x00cfc9d0 78697350 6f73203d 2063616c 634c696e xisPos = calcLin │ │ │ │ - 0x00cfc9e0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00cfc9f0 506f7328 7472616e 73666f72 6d656441 Pos(transformedA │ │ │ │ - 0x00cfca00 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ - 0x00cfca10 6f6e2e78 79202b20 6e6f726d 2c200a20 on.xy + norm, . │ │ │ │ - 0x00cfca20 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00cfca30 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00cfca40 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00cfca50 20202020 20755f6d 6f64656c 56696577 u_modelView │ │ │ │ - 0x00cfca60 2c206c65 6e677468 286e6f72 6d29293b , length(norm)); │ │ │ │ - 0x00cfca70 200a2020 20202020 69662028 755f6c69 . if (u_li │ │ │ │ - 0x00cfca80 6e655061 72616d73 2e792021 3d20302e neParams.y != 0. │ │ │ │ - 0x00cfca90 3029200a 20202020 20202020 6c656e20 0) . len │ │ │ │ - 0x00cfcaa0 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ - 0x00cfcab0 78202b20 615f6c65 6e677468 2e79202a x + a_length.y * │ │ │ │ - 0x00cfcac0 20755f6c 696e6550 6172616d 732e792c u_lineParams.y, │ │ │ │ - 0x00cfcad0 20615f6c 656e6774 682e7a29 3b200a20 a_length.z); . │ │ │ │ - 0x00cfcae0 2020207d 200a2020 23696664 65662045 } . #ifdef E │ │ │ │ - 0x00cfcaf0 4e41424c 455f5654 46200a20 20202076 NABLE_VTF . v │ │ │ │ - 0x00cfcb00 5f636f6c 6f72203d 20746578 74757265 _color = texture │ │ │ │ - 0x00cfcb10 28755f63 6f6c6f72 5465782c 20615f63 (u_colorTex, a_c │ │ │ │ - 0x00cfcb20 6f6c6f72 54657843 6f6f7264 73293b20 olorTexCoords); │ │ │ │ - 0x00cfcb30 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ - 0x00cfcb40 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ - 0x00cfcb50 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ - 0x00cfcb60 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00cfcb70 20765f6c 656e6774 6859203d 206c656e v_lengthY = len │ │ │ │ - 0x00cfcb80 2e793b20 0a202020 20766563 3420706f .y; . vec4 po │ │ │ │ - 0x00cfcb90 73203d20 76656334 28747261 6e73666f s = vec4(transfo │ │ │ │ - 0x00cfcba0 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ - 0x00cfcbb0 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ - 0x00cfcbc0 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ - 0x00cfcbd0 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ - 0x00cfcbe0 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ - 0x00cfcbf0 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ - 0x00cfcc00 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ - 0x00cfcc10 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ - 0x00cfcc20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cfcc30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cfcc40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cfcc50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cfcc60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cfcc70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cfcc80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cfcc90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cfcca0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cfccb0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cfccc0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cfccd0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cfcce0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cfccf0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cfcd00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cfcd10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cfcd20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cfcd30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cfcd40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cfcd50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cfcd60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cfcd70 63342076 5f636f6f 7264733b 200a2020 c4 v_coords; . │ │ │ │ - 0x00cfcd80 696e2076 65633420 765f6f66 66736574 in vec4 v_offset │ │ │ │ - 0x00cfcd90 303b200a 2020696e 20766563 3420765f 0; . in vec4 v_ │ │ │ │ - 0x00cfcda0 6f666673 6574313b 200a2020 696e2076 offset1; . in v │ │ │ │ - 0x00cfcdb0 65633420 765f6f66 66736574 323b200a ec4 v_offset2; . │ │ │ │ - 0x00cfcdc0 20206f75 74207665 63342076 5f467261 out vec4 v_Fra │ │ │ │ - 0x00cfcdd0 67436f6c 6f723b20 0a202075 6e69666f gColor; . unifo │ │ │ │ - 0x00cfcde0 726d2076 65633420 755f6672 616d6562 rm vec4 u_frameb │ │ │ │ - 0x00cfcdf0 75666665 724d6574 72696373 3b200a20 ufferMetrics; . │ │ │ │ - 0x00cfce00 20756e69 666f726d 2073616d 706c6572 uniform sampler │ │ │ │ - 0x00cfce10 32442075 5f636f6c 6f725465 783b200a 2D u_colorTex; . │ │ │ │ - 0x00cfce20 2020756e 69666f72 6d207361 6d706c65 uniform sample │ │ │ │ - 0x00cfce30 72324420 755f736d 61614172 65613b20 r2D u_smaaArea; │ │ │ │ - 0x00cfce40 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00cfce50 65723244 20755f73 6d616153 65617263 er2D u_smaaSearc │ │ │ │ - 0x00cfce60 683b200a 20202364 6566696e 6520534d h; . #define SM │ │ │ │ - 0x00cfce70 41415f53 45415243 48544558 5f53495a AA_SEARCHTEX_SIZ │ │ │ │ - 0x00cfce80 45207665 63322836 362e302c 2033332e E vec2(66.0, 33. │ │ │ │ - 0x00cfce90 3029200a 20202364 6566696e 6520534d 0) . #define SM │ │ │ │ - 0x00cfcea0 41415f53 45415243 48544558 5f504143 AA_SEARCHTEX_PAC │ │ │ │ - 0x00cfceb0 4b45445f 53495a45 20766563 32283634 KED_SIZE vec2(64 │ │ │ │ - 0x00cfcec0 2e302c20 31362e30 29200a20 20236465 .0, 16.0) . #de │ │ │ │ - 0x00cfced0 66696e65 20534d41 415f4152 45415445 fine SMAA_AREATE │ │ │ │ - 0x00cfcee0 585f4d41 585f4449 5354414e 43452031 X_MAX_DISTANCE 1 │ │ │ │ - 0x00cfcef0 362e3020 0a202023 64656669 6e652053 6.0 . #define S │ │ │ │ - 0x00cfcf00 4d41415f 41524541 5445585f 50495845 MAA_AREATEX_PIXE │ │ │ │ - 0x00cfcf10 4c5f5349 5a452028 76656332 28312e30 L_SIZE (vec2(1.0 │ │ │ │ - 0x00cfcf20 202f2032 35362e30 2c20312e 30202f20 / 256.0, 1.0 / │ │ │ │ - 0x00cfcf30 31303234 2e302929 200a2020 23646566 1024.0)) . #def │ │ │ │ - 0x00cfcf40 696e6520 534d4141 4c6f6f70 42656769 ine SMAALoopBegi │ │ │ │ - 0x00cfcf50 6e28636f 6e646974 696f6e29 20776869 n(condition) whi │ │ │ │ - 0x00cfcf60 6c652028 636f6e64 6974696f 6e29207b le (condition) { │ │ │ │ - 0x00cfcf70 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ - 0x00cfcf80 4c6f6f70 456e6420 7d200a20 20236465 LoopEnd } . #de │ │ │ │ - 0x00cfcf90 66696e65 20534d41 4153616d 706c654c fine SMAASampleL │ │ │ │ - 0x00cfcfa0 6576656c 5a65726f 28746578 2c20636f evelZero(tex, co │ │ │ │ - 0x00cfcfb0 6f726429 20746578 74757265 4c6f6428 ord) textureLod( │ │ │ │ - 0x00cfcfc0 7465782c 20636f6f 72642c20 302e3029 tex, coord, 0.0) │ │ │ │ - 0x00cfcfd0 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ - 0x00cfcfe0 53616d70 6c654c65 76656c5a 65726f4f SampleLevelZeroO │ │ │ │ - 0x00cfcff0 66667365 74287465 782c2063 6f6f7264 ffset(tex, coord │ │ │ │ - 0x00cfd000 2c206f66 66736574 29207465 78747572 , offset) textur │ │ │ │ - 0x00cfd010 654c6f64 4f666673 65742874 65782c20 eLodOffset(tex, │ │ │ │ - 0x00cfd020 636f6f72 642c2030 2e302c20 6f666673 coord, 0.0, offs │ │ │ │ - 0x00cfd030 65742920 0a202023 64656669 6e652053 et) . #define S │ │ │ │ - 0x00cfd040 4d414152 6f756e64 28762920 726f756e MAARound(v) roun │ │ │ │ - 0x00cfd050 64282876 2929200a 20202364 6566696e d((v)) . #defin │ │ │ │ - 0x00cfd060 6520534d 41414f66 66736574 28782c79 e SMAAOffset(x,y │ │ │ │ - 0x00cfd070 29206976 65633228 782c7929 200a2020 ) ivec2(x,y) . │ │ │ │ - 0x00cfd080 636f6e73 74207665 6332206b 41726561 const vec2 kArea │ │ │ │ - 0x00cfd090 5465784d 61784469 7374616e 6365203d TexMaxDistance = │ │ │ │ - 0x00cfd0a0 20766563 3228534d 41415f41 52454154 vec2(SMAA_AREAT │ │ │ │ - 0x00cfd0b0 45585f4d 41585f44 49535441 4e43452c EX_MAX_DISTANCE, │ │ │ │ - 0x00cfd0c0 20534d41 415f4152 45415445 585f4d41 SMAA_AREATEX_MA │ │ │ │ - 0x00cfd0d0 585f4449 5354414e 4345293b 200a2020 X_DISTANCE); . │ │ │ │ - 0x00cfd0e0 636f6e73 7420666c 6f617420 6b416374 const float kAct │ │ │ │ - 0x00cfd0f0 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ - 0x00cfd100 203d2030 2e383238 313b200a 2020666c = 0.8281; . fl │ │ │ │ - 0x00cfd110 6f617420 534d4141 53656172 63684c65 oat SMAASearchLe │ │ │ │ - 0x00cfd120 6e677468 28766563 3220652c 20666c6f ngth(vec2 e, flo │ │ │ │ - 0x00cfd130 6174206f 66667365 7429200a 20207b20 at offset) . { │ │ │ │ - 0x00cfd140 0a202020 20766563 32207363 616c6520 . vec2 scale │ │ │ │ - 0x00cfd150 3d20534d 41415f53 45415243 48544558 = SMAA_SEARCHTEX │ │ │ │ - 0x00cfd160 5f53495a 45202a20 76656332 28302e35 _SIZE * vec2(0.5 │ │ │ │ - 0x00cfd170 2c202d31 2e30293b 200a2020 20207665 , -1.0); . ve │ │ │ │ - 0x00cfd180 63322062 69617320 3d20534d 41415f53 c2 bias = SMAA_S │ │ │ │ - 0x00cfd190 45415243 48544558 5f53495a 45202a20 EARCHTEX_SIZE * │ │ │ │ - 0x00cfd1a0 76656332 286f6666 7365742c 20312e30 vec2(offset, 1.0 │ │ │ │ - 0x00cfd1b0 293b200a 20202020 7363616c 65202b3d ); . scale += │ │ │ │ - 0x00cfd1c0 20766563 32282d31 2e302c20 20312e30 vec2(-1.0, 1.0 │ │ │ │ - 0x00cfd1d0 293b200a 20202020 62696173 202b3d20 ); . bias += │ │ │ │ - 0x00cfd1e0 76656332 2820302e 352c202d 302e3529 vec2( 0.5, -0.5) │ │ │ │ - 0x00cfd1f0 3b200a20 20202073 63616c65 202a3d20 ; . scale *= │ │ │ │ - 0x00cfd200 312e3020 2f20534d 41415f53 45415243 1.0 / SMAA_SEARC │ │ │ │ - 0x00cfd210 48544558 5f504143 4b45445f 53495a45 HTEX_PACKED_SIZE │ │ │ │ - 0x00cfd220 3b200a20 20202062 69617320 2a3d2031 ; . bias *= 1 │ │ │ │ - 0x00cfd230 2e30202f 20534d41 415f5345 41524348 .0 / SMAA_SEARCH │ │ │ │ - 0x00cfd240 5445585f 5041434b 45445f53 495a453b TEX_PACKED_SIZE; │ │ │ │ - 0x00cfd250 200a2020 20207265 7475726e 20534d41 . return SMA │ │ │ │ - 0x00cfd260 4153616d 706c654c 6576656c 5a65726f ASampleLevelZero │ │ │ │ - 0x00cfd270 28755f73 6d616153 65617263 682c2073 (u_smaaSearch, s │ │ │ │ - 0x00cfd280 63616c65 202a2065 202b2062 69617329 cale * e + bias) │ │ │ │ - 0x00cfd290 2e723b20 0a20207d 200a2020 666c6f61 .r; . } . floa │ │ │ │ - 0x00cfd2a0 7420534d 41415365 61726368 584c6566 t SMAASearchXLef │ │ │ │ - 0x00cfd2b0 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ - 0x00cfd2c0 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ - 0x00cfd2d0 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ - 0x00cfd2e0 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ - 0x00cfd2f0 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ - 0x00cfd300 6e287465 78636f6f 72642e78 203e2065 n(texcoord.x > e │ │ │ │ - 0x00cfd310 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ - 0x00cfd320 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ - 0x00cfd330 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ - 0x00cfd340 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ - 0x00cfd350 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ - 0x00cfd360 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ - 0x00cfd370 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ - 0x00cfd380 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ - 0x00cfd390 2d322e30 2c20302e 3029202a 20755f66 -2.0, 0.0) * u_f │ │ │ │ - 0x00cfd3a0 72616d65 62756666 65724d65 74726963 ramebufferMetric │ │ │ │ - 0x00cfd3b0 732e7879 202b2074 6578636f 6f72643b s.xy + texcoord; │ │ │ │ - 0x00cfd3c0 200a2020 2020534d 41414c6f 6f70456e . SMAALoopEn │ │ │ │ - 0x00cfd3d0 64200a20 20202066 6c6f6174 206f6666 d . float off │ │ │ │ - 0x00cfd3e0 73657420 3d20332e 3235202d 20283235 set = 3.25 - (25 │ │ │ │ - 0x00cfd3f0 352e3020 2f203132 372e3029 202a2053 5.0 / 127.0) * S │ │ │ │ - 0x00cfd400 4d414153 65617263 684c656e 67746828 MAASearchLength( │ │ │ │ - 0x00cfd410 652c2030 2e30293b 200a2020 20207265 e, 0.0); . re │ │ │ │ - 0x00cfd420 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ - 0x00cfd430 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ - 0x00cfd440 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ - 0x00cfd450 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ - 0x00cfd460 20534d41 41536561 72636858 52696768 SMAASearchXRigh │ │ │ │ - 0x00cfd470 74287665 63322074 6578636f 6f72642c t(vec2 texcoord, │ │ │ │ - 0x00cfd480 20666c6f 61742065 6e642920 0a20207b float end) . { │ │ │ │ - 0x00cfd490 200a2020 20207665 63322065 203d2076 . vec2 e = v │ │ │ │ - 0x00cfd4a0 65633228 302e302c 20312e30 293b200a ec2(0.0, 1.0); . │ │ │ │ - 0x00cfd4b0 20202020 534d4141 4c6f6f70 42656769 SMAALoopBegi │ │ │ │ - 0x00cfd4c0 6e287465 78636f6f 72642e78 203c2065 n(texcoord.x < e │ │ │ │ - 0x00cfd4d0 6e642026 2620652e 67203e20 6b416374 nd && e.g > kAct │ │ │ │ - 0x00cfd4e0 69766174 696f6e54 68726573 686f6c64 ivationThreshold │ │ │ │ - 0x00cfd4f0 20262620 652e7220 3d3d2030 2e302920 && e.r == 0.0) │ │ │ │ - 0x00cfd500 0a202020 20202065 203d2053 4d414153 . e = SMAAS │ │ │ │ - 0x00cfd510 616d706c 654c6576 656c5a65 726f2875 ampleLevelZero(u │ │ │ │ - 0x00cfd520 5f636f6c 6f725465 782c2074 6578636f _colorTex, texco │ │ │ │ - 0x00cfd530 6f726429 2e72673b 200a2020 20202020 ord).rg; . │ │ │ │ - 0x00cfd540 74657863 6f6f7264 203d2076 65633228 texcoord = vec2( │ │ │ │ - 0x00cfd550 322e302c 20302e30 29202a20 755f6672 2.0, 0.0) * u_fr │ │ │ │ - 0x00cfd560 616d6562 75666665 724d6574 72696373 amebufferMetrics │ │ │ │ - 0x00cfd570 2e787920 2b207465 78636f6f 72643b20 .xy + texcoord; │ │ │ │ - 0x00cfd580 0a202020 20534d41 414c6f6f 70456e64 . SMAALoopEnd │ │ │ │ - 0x00cfd590 200a2020 2020666c 6f617420 6f666673 . float offs │ │ │ │ - 0x00cfd5a0 6574203d 20332e32 35202d20 28323535 et = 3.25 - (255 │ │ │ │ - 0x00cfd5b0 2e30202f 20313237 2e302920 2a20534d .0 / 127.0) * SM │ │ │ │ - 0x00cfd5c0 41415365 61726368 4c656e67 74682865 AASearchLength(e │ │ │ │ - 0x00cfd5d0 2c20302e 35293b20 0a202020 20726574 , 0.5); . ret │ │ │ │ - 0x00cfd5e0 75726e20 2d755f66 72616d65 62756666 urn -u_framebuff │ │ │ │ - 0x00cfd5f0 65724d65 74726963 732e7820 2a206f66 erMetrics.x * of │ │ │ │ - 0x00cfd600 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ - 0x00cfd610 783b200a 20207d20 0a202066 6c6f6174 x; . } . float │ │ │ │ - 0x00cfd620 20534d41 41536561 72636859 55702876 SMAASearchYUp(v │ │ │ │ - 0x00cfd630 65633220 74657863 6f6f7264 2c20666c ec2 texcoord, fl │ │ │ │ - 0x00cfd640 6f617420 656e6429 200a2020 7b200a20 oat end) . { . │ │ │ │ - 0x00cfd650 20202076 65633220 65203d20 76656332 vec2 e = vec2 │ │ │ │ - 0x00cfd660 28312e30 2c20302e 30293b20 0a202020 (1.0, 0.0); . │ │ │ │ - 0x00cfd670 20534d41 414c6f6f 70426567 696e2874 SMAALoopBegin(t │ │ │ │ - 0x00cfd680 6578636f 6f72642e 79203e20 656e6420 excoord.y > end │ │ │ │ - 0x00cfd690 26262065 2e72203e 206b4163 74697661 && e.r > kActiva │ │ │ │ - 0x00cfd6a0 74696f6e 54687265 73686f6c 64202626 tionThreshold && │ │ │ │ - 0x00cfd6b0 20652e67 203d3d20 302e3029 200a2020 e.g == 0.0) . │ │ │ │ - 0x00cfd6c0 20202020 65203d20 534d4141 53616d70 e = SMAASamp │ │ │ │ - 0x00cfd6d0 6c654c65 76656c5a 65726f28 755f636f leLevelZero(u_co │ │ │ │ - 0x00cfd6e0 6c6f7254 65782c20 74657863 6f6f7264 lorTex, texcoord │ │ │ │ - 0x00cfd6f0 292e7267 3b200a20 20202020 20746578 ).rg; . tex │ │ │ │ - 0x00cfd700 636f6f72 64203d20 76656332 28302e30 coord = vec2(0.0 │ │ │ │ - 0x00cfd710 2c202d32 2e302920 2a20755f 6672616d , -2.0) * u_fram │ │ │ │ - 0x00cfd720 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ - 0x00cfd730 79202b20 74657863 6f6f7264 3b200a20 y + texcoord; . │ │ │ │ - 0x00cfd740 20202053 4d41414c 6f6f7045 6e64200a SMAALoopEnd . │ │ │ │ - 0x00cfd750 20202020 666c6f61 74206f66 66736574 float offset │ │ │ │ - 0x00cfd760 203d2033 2e323520 2d202832 35352e30 = 3.25 - (255.0 │ │ │ │ - 0x00cfd770 202f2031 32372e30 29202a20 534d4141 / 127.0) * SMAA │ │ │ │ - 0x00cfd780 53656172 63684c65 6e677468 28652e67 SearchLength(e.g │ │ │ │ - 0x00cfd790 722c2030 2e30293b 200a2020 20207265 r, 0.0); . re │ │ │ │ - 0x00cfd7a0 7475726e 20755f66 72616d65 62756666 turn u_framebuff │ │ │ │ - 0x00cfd7b0 65724d65 74726963 732e7920 2a206f66 erMetrics.y * of │ │ │ │ - 0x00cfd7c0 66736574 202b2074 6578636f 6f72642e fset + texcoord. │ │ │ │ - 0x00cfd7d0 793b200a 20207d20 0a202066 6c6f6174 y; . } . float │ │ │ │ - 0x00cfd7e0 20534d41 41536561 72636859 446f776e SMAASearchYDown │ │ │ │ - 0x00cfd7f0 28766563 32207465 78636f6f 72642c20 (vec2 texcoord, │ │ │ │ - 0x00cfd800 666c6f61 7420656e 6429200a 20207b20 float end) . { │ │ │ │ - 0x00cfd810 0a202020 20766563 32206520 3d207665 . vec2 e = ve │ │ │ │ - 0x00cfd820 63322831 2e302c20 302e3029 3b200a20 c2(1.0, 0.0); . │ │ │ │ - 0x00cfd830 20202053 4d41414c 6f6f7042 6567696e SMAALoopBegin │ │ │ │ - 0x00cfd840 28746578 636f6f72 642e7920 3c20656e (texcoord.y < en │ │ │ │ - 0x00cfd850 64202626 20652e72 203e206b 41637469 d && e.r > kActi │ │ │ │ - 0x00cfd860 76617469 6f6e5468 72657368 6f6c6420 vationThreshold │ │ │ │ - 0x00cfd870 26262065 2e67203d 3d20302e 3029200a && e.g == 0.0) . │ │ │ │ - 0x00cfd880 20202020 20206520 3d20534d 41415361 e = SMAASa │ │ │ │ - 0x00cfd890 6d706c65 4c657665 6c5a6572 6f28755f mpleLevelZero(u_ │ │ │ │ - 0x00cfd8a0 636f6c6f 72546578 2c207465 78636f6f colorTex, texcoo │ │ │ │ - 0x00cfd8b0 7264292e 72673b20 0a202020 20202074 rd).rg; . t │ │ │ │ - 0x00cfd8c0 6578636f 6f726420 3d207665 63322830 excoord = vec2(0 │ │ │ │ - 0x00cfd8d0 2e302c20 322e3029 202a2075 5f667261 .0, 2.0) * u_fra │ │ │ │ - 0x00cfd8e0 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ - 0x00cfd8f0 7879202b 20746578 636f6f72 643b200a xy + texcoord; . │ │ │ │ - 0x00cfd900 20202020 534d4141 4c6f6f70 456e6420 SMAALoopEnd │ │ │ │ - 0x00cfd910 0a202020 20666c6f 6174206f 66667365 . float offse │ │ │ │ - 0x00cfd920 74203d20 332e3235 202d2028 3235352e t = 3.25 - (255. │ │ │ │ - 0x00cfd930 30202f20 3132372e 3029202a 20534d41 0 / 127.0) * SMA │ │ │ │ - 0x00cfd940 41536561 7263684c 656e6774 6828652e ASearchLength(e. │ │ │ │ - 0x00cfd950 67722c20 302e3529 3b200a20 20202072 gr, 0.5); . r │ │ │ │ - 0x00cfd960 65747572 6e202d75 5f667261 6d656275 eturn -u_framebu │ │ │ │ - 0x00cfd970 66666572 4d657472 6963732e 79202a20 fferMetrics.y * │ │ │ │ - 0x00cfd980 6f666673 6574202b 20746578 636f6f72 offset + texcoor │ │ │ │ - 0x00cfd990 642e793b 200a2020 7d200a20 20766563 d.y; . } . vec │ │ │ │ - 0x00cfd9a0 3220534d 41414172 65612876 65633220 2 SMAAArea(vec2 │ │ │ │ - 0x00cfd9b0 64697374 2c20666c 6f617420 65312c20 dist, float e1, │ │ │ │ - 0x00cfd9c0 666c6f61 74206532 29200a20 207b200a float e2) . { . │ │ │ │ - 0x00cfd9d0 20202020 76656332 20746578 636f6f72 vec2 texcoor │ │ │ │ - 0x00cfd9e0 64203d20 6b417265 61546578 4d617844 d = kAreaTexMaxD │ │ │ │ - 0x00cfd9f0 69737461 6e636520 2a20534d 4141526f istance * SMAARo │ │ │ │ - 0x00cfda00 756e6428 342e3020 2a207665 63322865 und(4.0 * vec2(e │ │ │ │ - 0x00cfda10 312c2065 32292920 2b206469 73743b20 1, e2)) + dist; │ │ │ │ - 0x00cfda20 0a202020 20746578 636f6f72 64203d20 . texcoord = │ │ │ │ - 0x00cfda30 534d4141 5f415245 41544558 5f504958 SMAA_AREATEX_PIX │ │ │ │ - 0x00cfda40 454c5f53 495a4520 2a202874 6578636f EL_SIZE * (texco │ │ │ │ - 0x00cfda50 6f726420 2b20302e 35293b20 0a202020 ord + 0.5); . │ │ │ │ - 0x00cfda60 20726574 75726e20 534d4141 53616d70 return SMAASamp │ │ │ │ - 0x00cfda70 6c654c65 76656c5a 65726f28 755f736d leLevelZero(u_sm │ │ │ │ - 0x00cfda80 61614172 65612c20 74657863 6f6f7264 aaArea, texcoord │ │ │ │ - 0x00cfda90 292e7267 3b200a20 207d200a 2020636f ).rg; . } . co │ │ │ │ - 0x00cfdaa0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00cfdab0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00cfdac0 30302e30 3b200a20 204c4f57 5f502076 00.0; . LOW_P v │ │ │ │ - 0x00cfdad0 65633320 4d6f6475 6c617465 42795061 ec3 ModulateByPa │ │ │ │ - 0x00cfdae0 74746572 6e446f74 73284c4f 575f5020 tternDots(LOW_P │ │ │ │ - 0x00cfdaf0 76656333 20636f6c 6f722c20 666c6f61 vec3 color, floa │ │ │ │ - 0x00cfdb00 74206461 726b656e 2c20666c 6f617420 t darken, float │ │ │ │ - 0x00cfdb10 636f7665 72616765 29200a20 207b200a coverage) . { . │ │ │ │ - 0x00cfdb20 20202020 636f6e73 7420666c 6f617420 const float │ │ │ │ - 0x00cfdb30 6b4c6967 6874656e 203d2030 2e303735 kLighten = 0.075 │ │ │ │ - 0x00cfdb40 3b200a20 20202069 66202864 6f742863 ; . if (dot(c │ │ │ │ - 0x00cfdb50 6f6c6f72 2c207665 63332830 2e323132 olor, vec3(0.212 │ │ │ │ - 0x00cfdb60 362c2030 2e373135 322c2030 2e303732 6, 0.7152, 0.072 │ │ │ │ - 0x00cfdb70 32292920 3c20302e 3529200a 20202020 2)) < 0.5) . │ │ │ │ - 0x00cfdb80 20207265 7475726e 20636f6c 6f72202b return color + │ │ │ │ - 0x00cfdb90 20636f76 65726167 65202a20 6b4c6967 coverage * kLig │ │ │ │ - 0x00cfdba0 6874656e 3b200a20 20202072 65747572 hten; . retur │ │ │ │ - 0x00cfdbb0 6e20636f 6c6f7220 2a206d69 7828312e n color * mix(1. │ │ │ │ - 0x00cfdbc0 302c2064 61726b65 6e2c2063 6f766572 0, darken, cover │ │ │ │ - 0x00cfdbd0 61676529 3b200a20 207d200a 2020766f age); . } . vo │ │ │ │ - 0x00cfdbe0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00cfdbf0 20202020 76656334 20776569 67687473 vec4 weights │ │ │ │ - 0x00cfdc00 203d2076 65633428 302e302c 20302e30 = vec4(0.0, 0.0 │ │ │ │ - 0x00cfdc10 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ - 0x00cfdc20 20207665 63322065 203d2074 65787475 vec2 e = textu │ │ │ │ - 0x00cfdc30 72652875 5f636f6c 6f725465 782c2076 re(u_colorTex, v │ │ │ │ - 0x00cfdc40 5f636f6f 7264732e 7879292e 72673b20 _coords.xy).rg; │ │ │ │ - 0x00cfdc50 0a202020 20696620 28652e67 203e2030 . if (e.g > 0 │ │ │ │ - 0x00cfdc60 2e302920 2f2f2045 64676520 6174206e .0) // Edge at n │ │ │ │ - 0x00cfdc70 6f727468 200a2020 20207b20 0a202020 orth . { . │ │ │ │ - 0x00cfdc80 20202076 65633220 643b200a 20202020 vec2 d; . │ │ │ │ - 0x00cfdc90 20207665 63332063 6f6f7264 733b200a vec3 coords; . │ │ │ │ - 0x00cfdca0 20202020 2020636f 6f726473 2e78203d coords.x = │ │ │ │ - 0x00cfdcb0 20534d41 41536561 72636858 4c656674 SMAASearchXLeft │ │ │ │ - 0x00cfdcc0 28765f6f 66667365 74302e78 792c2076 (v_offset0.xy, v │ │ │ │ - 0x00cfdcd0 5f6f6666 73657432 2e78293b 200a2020 _offset2.x); . │ │ │ │ - 0x00cfdce0 20202020 636f6f72 64732e79 203d2076 coords.y = v │ │ │ │ - 0x00cfdcf0 5f6f6666 73657431 2e793b20 0a202020 _offset1.y; . │ │ │ │ - 0x00cfdd00 20202064 2e78203d 20636f6f 7264732e d.x = coords. │ │ │ │ - 0x00cfdd10 783b200a 20202020 2020666c 6f617420 x; . float │ │ │ │ - 0x00cfdd20 6531203d 20534d41 4153616d 706c654c e1 = SMAASampleL │ │ │ │ - 0x00cfdd30 6576656c 5a65726f 28755f63 6f6c6f72 evelZero(u_color │ │ │ │ - 0x00cfdd40 5465782c 20636f6f 7264732e 7879292e Tex, coords.xy). │ │ │ │ - 0x00cfdd50 723b200a 20202020 2020636f 6f726473 r; . coords │ │ │ │ - 0x00cfdd60 2e7a203d 20534d41 41536561 72636858 .z = SMAASearchX │ │ │ │ - 0x00cfdd70 52696768 7428765f 6f666673 6574302e Right(v_offset0. │ │ │ │ - 0x00cfdd80 7a772c20 765f6f66 66736574 322e7929 zw, v_offset2.y) │ │ │ │ - 0x00cfdd90 3b200a20 20202020 20642e79 203d2063 ; . d.y = c │ │ │ │ - 0x00cfdda0 6f6f7264 732e7a3b 200a2020 20202020 oords.z; . │ │ │ │ - 0x00cfddb0 76656332 207a7a20 3d20755f 6672616d vec2 zz = u_fram │ │ │ │ - 0x00cfddc0 65627566 6665724d 65747269 63732e7a ebufferMetrics.z │ │ │ │ - 0x00cfddd0 7a3b200a 20202020 20206420 3d206162 z; . d = ab │ │ │ │ - 0x00cfdde0 7328534d 4141526f 756e6428 7a7a202a s(SMAARound(zz * │ │ │ │ - 0x00cfddf0 2064202d 20765f63 6f6f7264 732e7a7a d - v_coords.zz │ │ │ │ - 0x00cfde00 29293b20 0a202020 20202076 65633220 )); . vec2 │ │ │ │ - 0x00cfde10 73717274 5f64203d 20737172 74286429 sqrt_d = sqrt(d) │ │ │ │ - 0x00cfde20 3b200a20 20202020 20666c6f 61742065 ; . float e │ │ │ │ - 0x00cfde30 32203d20 534d4141 53616d70 6c654c65 2 = SMAASampleLe │ │ │ │ - 0x00cfde40 76656c5a 65726f4f 66667365 7428755f velZeroOffset(u_ │ │ │ │ - 0x00cfde50 636f6c6f 72546578 2c20636f 6f726473 colorTex, coords │ │ │ │ - 0x00cfde60 2e7a792c 20534d41 414f6666 73657428 .zy, SMAAOffset( │ │ │ │ - 0x00cfde70 312c2030 29292e72 3b200a20 20202020 1, 0)).r; . │ │ │ │ - 0x00cfde80 20776569 67687473 2e726720 3d20534d weights.rg = SM │ │ │ │ - 0x00cfde90 41414172 65612873 7172745f 642c2065 AAArea(sqrt_d, e │ │ │ │ - 0x00cfdea0 312c2065 32293b20 0a202020 207d200a 1, e2); . } . │ │ │ │ - 0x00cfdeb0 20202020 69662028 652e7220 3e20302e if (e.r > 0. │ │ │ │ - 0x00cfdec0 3029202f 2f204564 67652061 74207765 0) // Edge at we │ │ │ │ - 0x00cfded0 7374200a 20202020 7b200a20 20202020 st . { . │ │ │ │ - 0x00cfdee0 20766563 3220643b 200a2020 20202020 vec2 d; . │ │ │ │ - 0x00cfdef0 76656333 20636f6f 7264733b 200a2020 vec3 coords; . │ │ │ │ - 0x00cfdf00 20202020 636f6f72 64732e79 203d2053 coords.y = S │ │ │ │ - 0x00cfdf10 4d414153 65617263 68595570 28765f6f MAASearchYUp(v_o │ │ │ │ - 0x00cfdf20 66667365 74312e78 792c2076 5f6f6666 ffset1.xy, v_off │ │ │ │ - 0x00cfdf30 73657432 2e7a293b 200a2020 20202020 set2.z); . │ │ │ │ - 0x00cfdf40 636f6f72 64732e78 203d2076 5f6f6666 coords.x = v_off │ │ │ │ - 0x00cfdf50 73657430 2e783b20 0a202020 20202064 set0.x; . d │ │ │ │ - 0x00cfdf60 2e78203d 20636f6f 7264732e 793b200a .x = coords.y; . │ │ │ │ - 0x00cfdf70 20202020 2020666c 6f617420 6531203d float e1 = │ │ │ │ - 0x00cfdf80 20534d41 4153616d 706c654c 6576656c SMAASampleLevel │ │ │ │ - 0x00cfdf90 5a65726f 28755f63 6f6c6f72 5465782c Zero(u_colorTex, │ │ │ │ - 0x00cfdfa0 20636f6f 7264732e 7879292e 673b200a coords.xy).g; . │ │ │ │ - 0x00cfdfb0 20202020 2020636f 6f726473 2e7a203d coords.z = │ │ │ │ - 0x00cfdfc0 20534d41 41536561 72636859 446f776e SMAASearchYDown │ │ │ │ - 0x00cfdfd0 28765f6f 66667365 74312e7a 772c2076 (v_offset1.zw, v │ │ │ │ - 0x00cfdfe0 5f6f6666 73657432 2e77293b 200a2020 _offset2.w); . │ │ │ │ - 0x00cfdff0 20202020 642e7920 3d20636f 6f726473 d.y = coords │ │ │ │ - 0x00cfe000 2e7a3b20 0a202020 20202076 65633220 .z; . vec2 │ │ │ │ - 0x00cfe010 7777203d 20755f66 72616d65 62756666 ww = u_framebuff │ │ │ │ - 0x00cfe020 65724d65 74726963 732e7777 3b200a20 erMetrics.ww; . │ │ │ │ - 0x00cfe030 20202020 2064203d 20616273 28534d41 d = abs(SMA │ │ │ │ - 0x00cfe040 41526f75 6e642877 77202a20 64202d20 ARound(ww * d - │ │ │ │ - 0x00cfe050 765f636f 6f726473 2e777729 293b200a v_coords.ww)); . │ │ │ │ - 0x00cfe060 20202020 20207665 63322073 7172745f vec2 sqrt_ │ │ │ │ - 0x00cfe070 64203d20 73717274 2864293b 200a2020 d = sqrt(d); . │ │ │ │ - 0x00cfe080 20202020 666c6f61 74206532 203d2053 float e2 = S │ │ │ │ - 0x00cfe090 4d414153 616d706c 654c6576 656c5a65 MAASampleLevelZe │ │ │ │ - 0x00cfe0a0 726f4f66 66736574 28755f63 6f6c6f72 roOffset(u_color │ │ │ │ - 0x00cfe0b0 5465782c 20636f6f 7264732e 787a2c20 Tex, coords.xz, │ │ │ │ - 0x00cfe0c0 534d4141 4f666673 65742830 2c203129 SMAAOffset(0, 1) │ │ │ │ - 0x00cfe0d0 292e673b 200a2020 20202020 77656967 ).g; . weig │ │ │ │ - 0x00cfe0e0 6874732e 6261203d 20534d41 41417265 hts.ba = SMAAAre │ │ │ │ - 0x00cfe0f0 61287371 72745f64 2c206531 2c206532 a(sqrt_d, e1, e2 │ │ │ │ - 0x00cfe100 293b200a 20202020 7d200a20 20202076 ); . } . v │ │ │ │ - 0x00cfe110 5f467261 67436f6c 6f72203d 20776569 _FragColor = wei │ │ │ │ - 0x00cfe120 67687473 3b200a20 207d200a 00000000 ghts; . } ..... │ │ │ │ - 0x00cfe130 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cfe140 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cfe150 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cfe160 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cfe170 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cfe180 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cfe190 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cfe1a0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cfe1b0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cfe1c0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cfe1d0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cfe1e0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cfe1f0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cfe200 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cfe210 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cfe220 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cfe230 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cfe240 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cfe250 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cfe260 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cfe270 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cfe280 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ - 0x00cfe290 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ - 0x00cfe2a0 20206f75 74207665 63342076 5f636f6f out vec4 v_coo │ │ │ │ - 0x00cfe2b0 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ - 0x00cfe2c0 20765f6f 66667365 74303b20 0a20206f v_offset0; . o │ │ │ │ - 0x00cfe2d0 75742076 65633420 765f6f66 66736574 ut vec4 v_offset │ │ │ │ - 0x00cfe2e0 313b200a 20206f75 74207665 63342076 1; . out vec4 v │ │ │ │ - 0x00cfe2f0 5f6f6666 73657432 3b200a20 20756e69 _offset2; . uni │ │ │ │ - 0x00cfe300 666f726d 20766563 3420755f 6672616d form vec4 u_fram │ │ │ │ - 0x00cfe310 65627566 6665724d 65747269 63733b20 ebufferMetrics; │ │ │ │ - 0x00cfe320 0a202023 64656669 6e652053 4d41415f . #define SMAA_ │ │ │ │ - 0x00cfe330 4d41585f 53454152 43485f53 54455053 MAX_SEARCH_STEPS │ │ │ │ - 0x00cfe340 20382e30 200a2020 636f6e73 74207665 8.0 . const ve │ │ │ │ - 0x00cfe350 6334206b 4d617853 65617263 68537465 c4 kMaxSearchSte │ │ │ │ - 0x00cfe360 7073203d 20766563 34282d32 2e30202a ps = vec4(-2.0 * │ │ │ │ - 0x00cfe370 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ - 0x00cfe380 5f535445 50532c20 322e3020 2a20534d _STEPS, 2.0 * SM │ │ │ │ - 0x00cfe390 41415f4d 41585f53 45415243 485f5354 AA_MAX_SEARCH_ST │ │ │ │ - 0x00cfe3a0 4550532c 200a2020 20202020 20202020 EPS, . │ │ │ │ - 0x00cfe3b0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00cfe3c0 20202020 20202020 20202d32 2e30202a -2.0 * │ │ │ │ - 0x00cfe3d0 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ - 0x00cfe3e0 5f535445 50532c20 322e3020 202a2053 _STEPS, 2.0 * S │ │ │ │ - 0x00cfe3f0 4d41415f 4d41585f 53454152 43485f53 MAA_MAX_SEARCH_S │ │ │ │ - 0x00cfe400 54455053 293b200a 2020636f 6e737420 TEPS); . const │ │ │ │ - 0x00cfe410 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ - 0x00cfe420 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ - 0x00cfe430 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ - 0x00cfe440 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00cfe450 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00cfe460 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00cfe470 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ - 0x00cfe480 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00cfe490 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cfe4a0 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ - 0x00cfe4b0 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ - 0x00cfe4c0 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ - 0x00cfe4d0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00cfe4e0 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ - 0x00cfe4f0 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ - 0x00cfe500 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cfe510 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00cfe520 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ - 0x00cfe530 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cfe540 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ - 0x00cfe550 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ - 0x00cfe560 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ - 0x00cfe570 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00cfe580 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ - 0x00cfe590 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ - 0x00cfe5a0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00cfe5b0 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ - 0x00cfe5c0 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ - 0x00cfe5d0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00cfe5e0 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ - 0x00cfe5f0 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ - 0x00cfe600 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ - 0x00cfe610 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ - 0x00cfe620 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ - 0x00cfe630 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ - 0x00cfe640 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ - 0x00cfe650 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ - 0x00cfe660 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ - 0x00cfe670 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ - 0x00cfe680 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ - 0x00cfe690 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ - 0x00cfe6a0 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ - 0x00cfe6b0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cfe6c0 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ - 0x00cfe6d0 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ - 0x00cfe6e0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ - 0x00cfe6f0 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ - 0x00cfe700 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ - 0x00cfe710 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00cfe720 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ - 0x00cfe730 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ - 0x00cfe740 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ - 0x00cfe750 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00cfe760 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ - 0x00cfe770 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ - 0x00cfe780 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ - 0x00cfe790 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ - 0x00cfe7a0 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ - 0x00cfe7b0 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ - 0x00cfe7c0 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ - 0x00cfe7d0 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ - 0x00cfe7e0 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ - 0x00cfe7f0 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ - 0x00cfe800 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ - 0x00cfe810 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00cfe820 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00cfe830 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ - 0x00cfe840 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ - 0x00cfe850 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ - 0x00cfe860 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ - 0x00cfe870 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ - 0x00cfe880 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ - 0x00cfe890 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ - 0x00cfe8a0 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ - 0x00cfe8b0 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ - 0x00cfe8c0 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ - 0x00cfe8d0 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ - 0x00cfe8e0 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ - 0x00cfe8f0 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ - 0x00cfe900 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00cfe910 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ - 0x00cfe920 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ - 0x00cfe930 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00cfe940 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ - 0x00cfe950 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ - 0x00cfe960 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ - 0x00cfe970 20202020 72657475 726e206f 72696769 return origi │ │ │ │ - 0x00cfe980 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ - 0x00cfe990 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ - 0x00cfe9a0 0a20207b 200a2020 2020765f 636f6f72 . { . v_coor │ │ │ │ - 0x00cfe9b0 6473203d 20766563 3428615f 74636f6f ds = vec4(a_tcoo │ │ │ │ - 0x00cfe9c0 72642c20 615f7463 6f6f7264 202a2075 rd, a_tcoord * u │ │ │ │ - 0x00cfe9d0 5f667261 6d656275 66666572 4d657472 _framebufferMetr │ │ │ │ - 0x00cfe9e0 6963732e 7a77293b 200a2020 2020765f ics.zw); . v_ │ │ │ │ - 0x00cfe9f0 6f666673 65743020 3d20755f 6672616d offset0 = u_fram │ │ │ │ - 0x00cfea00 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ - 0x00cfea10 79787920 2a207665 6334282d 302e3235 yxy * vec4(-0.25 │ │ │ │ - 0x00cfea20 2c202d30 2e313235 2c20312e 32352c20 , -0.125, 1.25, │ │ │ │ - 0x00cfea30 2d302e31 32352920 2b20615f 74636f6f -0.125) + a_tcoo │ │ │ │ - 0x00cfea40 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ - 0x00cfea50 6f666673 65743120 3d20755f 6672616d offset1 = u_fram │ │ │ │ - 0x00cfea60 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ - 0x00cfea70 79787920 2a207665 6334282d 302e3132 yxy * vec4(-0.12 │ │ │ │ - 0x00cfea80 352c202d 302e3235 2c202d30 2e313235 5, -0.25, -0.125 │ │ │ │ - 0x00cfea90 2c20312e 32352920 2b20615f 74636f6f , 1.25) + a_tcoo │ │ │ │ - 0x00cfeaa0 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ - 0x00cfeab0 6f666673 65743220 3d20755f 6672616d offset2 = u_fram │ │ │ │ - 0x00cfeac0 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ - 0x00cfead0 78797920 2a206b4d 61785365 61726368 xyy * kMaxSearch │ │ │ │ - 0x00cfeae0 53746570 73202b20 76656334 28765f6f Steps + vec4(v_o │ │ │ │ - 0x00cfeaf0 66667365 74302e78 7a2c2076 5f6f6666 ffset0.xz, v_off │ │ │ │ - 0x00cfeb00 73657431 2e797729 3b200a20 20202067 set1.yw); . g │ │ │ │ - 0x00cfeb10 6c5f506f 73697469 6f6e203d 20766563 l_Position = vec │ │ │ │ - 0x00cfeb20 3428615f 706f732c 20302e30 2c20312e 4(a_pos, 0.0, 1. │ │ │ │ - 0x00cfeb30 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ - 0x00cfeb40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cfeb50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cfeb60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cfeb70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cfeb80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cfeb90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cfeba0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cfebb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cfebc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cfebd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cfebe0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cfebf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cfec00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cfec10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cfec20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cfec30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cfec40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cfec50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cfec60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cfec70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cfec80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cfec90 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00cfeca0 7264733b 200a2020 696e2076 65633420 rds; . in vec4 │ │ │ │ - 0x00cfecb0 765f6f66 66736574 303b200a 2020696e v_offset0; . in │ │ │ │ - 0x00cfecc0 20766563 3420765f 6f666673 6574313b vec4 v_offset1; │ │ │ │ - 0x00cfecd0 200a2020 696e2076 65633420 765f6f66 . in vec4 v_of │ │ │ │ - 0x00cfece0 66736574 323b200a 20206f75 74207665 fset2; . out ve │ │ │ │ - 0x00cfecf0 63342076 5f467261 67436f6c 6f723b20 c4 v_FragColor; │ │ │ │ - 0x00cfed00 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00cfed10 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ - 0x00cfed20 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ - 0x00cfed30 5f544852 4553484f 4c442030 2e303520 _THRESHOLD 0.05 │ │ │ │ - 0x00cfed40 0a202063 6f6e7374 20766563 32206b54 . const vec2 kT │ │ │ │ - 0x00cfed50 68726573 686f6c64 203d2076 65633228 hreshold = vec2( │ │ │ │ - 0x00cfed60 534d4141 5f544852 4553484f 4c442c20 SMAA_THRESHOLD, │ │ │ │ - 0x00cfed70 534d4141 5f544852 4553484f 4c44293b SMAA_THRESHOLD); │ │ │ │ - 0x00cfed80 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ - 0x00cfed90 5f4c4f43 414c5f43 4f4e5452 4153545f _LOCAL_CONTRAST_ │ │ │ │ - 0x00cfeda0 41444150 54415449 4f4e5f46 4143544f ADAPTATION_FACTO │ │ │ │ - 0x00cfedb0 5220322e 30200a20 20636f6e 73742076 R 2.0 . const v │ │ │ │ - 0x00cfedc0 65633320 6b576569 67687473 203d2076 ec3 kWeights = v │ │ │ │ - 0x00cfedd0 65633328 302e3231 32362c20 302e3731 ec3(0.2126, 0.71 │ │ │ │ - 0x00cfede0 35322c20 302e3037 3232293b 200a2020 52, 0.0722); . │ │ │ │ - 0x00cfedf0 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ - 0x00cfee00 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ - 0x00cfee10 31303030 2e303b20 0a20204c 4f575f50 1000.0; . LOW_P │ │ │ │ - 0x00cfee20 20766563 33204d6f 64756c61 74654279 vec3 ModulateBy │ │ │ │ - 0x00cfee30 50617474 65726e44 6f747328 4c4f575f PatternDots(LOW_ │ │ │ │ - 0x00cfee40 50207665 63332063 6f6c6f72 2c20666c P vec3 color, fl │ │ │ │ - 0x00cfee50 6f617420 6461726b 656e2c20 666c6f61 oat darken, floa │ │ │ │ - 0x00cfee60 7420636f 76657261 67652920 0a20207b t coverage) . { │ │ │ │ - 0x00cfee70 200a2020 2020636f 6e737420 666c6f61 . const floa │ │ │ │ - 0x00cfee80 74206b4c 69676874 656e203d 20302e30 t kLighten = 0.0 │ │ │ │ - 0x00cfee90 37353b20 0a202020 20696620 28646f74 75; . if (dot │ │ │ │ - 0x00cfeea0 28636f6c 6f722c20 76656333 28302e32 (color, vec3(0.2 │ │ │ │ - 0x00cfeeb0 3132362c 20302e37 3135322c 20302e30 126, 0.7152, 0.0 │ │ │ │ - 0x00cfeec0 37323229 29203c20 302e3529 200a2020 722)) < 0.5) . │ │ │ │ - 0x00cfeed0 20202020 72657475 726e2063 6f6c6f72 return color │ │ │ │ - 0x00cfeee0 202b2063 6f766572 61676520 2a206b4c + coverage * kL │ │ │ │ - 0x00cfeef0 69676874 656e3b20 0a202020 20726574 ighten; . ret │ │ │ │ - 0x00cfef00 75726e20 636f6c6f 72202a20 6d697828 urn color * mix( │ │ │ │ - 0x00cfef10 312e302c 20646172 6b656e2c 20636f76 1.0, darken, cov │ │ │ │ - 0x00cfef20 65726167 65293b20 0a20207d 200a2020 erage); . } . │ │ │ │ - 0x00cfef30 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00cfef40 200a2020 2020666c 6f617420 4c203d20 . float L = │ │ │ │ - 0x00cfef50 646f7428 74657874 75726528 755f636f dot(texture(u_co │ │ │ │ - 0x00cfef60 6c6f7254 65782c20 765f636f 6c6f7254 lorTex, v_colorT │ │ │ │ - 0x00cfef70 6578436f 6f726473 292e7267 622c206b exCoords).rgb, k │ │ │ │ - 0x00cfef80 57656967 68747329 3b200a20 20202066 Weights); . f │ │ │ │ - 0x00cfef90 6c6f6174 204c6c65 6674203d 20646f74 loat Lleft = dot │ │ │ │ - 0x00cfefa0 28746578 74757265 28755f63 6f6c6f72 (texture(u_color │ │ │ │ - 0x00cfefb0 5465782c 20765f6f 66667365 74302e78 Tex, v_offset0.x │ │ │ │ - 0x00cfefc0 79292e72 67622c20 6b576569 67687473 y).rgb, kWeights │ │ │ │ - 0x00cfefd0 293b200a 20202020 666c6f61 74204c74 ); . float Lt │ │ │ │ - 0x00cfefe0 6f70203d 20646f74 28746578 74757265 op = dot(texture │ │ │ │ - 0x00cfeff0 28755f63 6f6c6f72 5465782c 20765f6f (u_colorTex, v_o │ │ │ │ - 0x00cff000 66667365 74302e7a 77292e72 67622c20 ffset0.zw).rgb, │ │ │ │ - 0x00cff010 6b576569 67687473 293b200a 20202020 kWeights); . │ │ │ │ - 0x00cff020 76656334 2064656c 74613b20 0a202020 vec4 delta; . │ │ │ │ - 0x00cff030 2064656c 74612e78 79203d20 61627328 delta.xy = abs( │ │ │ │ - 0x00cff040 4c202d20 76656332 284c6c65 66742c20 L - vec2(Lleft, │ │ │ │ - 0x00cff050 4c746f70 29293b20 0a202020 20766563 Ltop)); . vec │ │ │ │ - 0x00cff060 32206564 67657320 3d207374 6570286b 2 edges = step(k │ │ │ │ - 0x00cff070 54687265 73686f6c 642c2064 656c7461 Threshold, delta │ │ │ │ - 0x00cff080 2e787929 3b200a20 20202069 66202864 .xy); . if (d │ │ │ │ - 0x00cff090 6f742865 64676573 2c207665 63322831 ot(edges, vec2(1 │ │ │ │ - 0x00cff0a0 2e302c20 312e3029 29203d3d 20302e30 .0, 1.0)) == 0.0 │ │ │ │ - 0x00cff0b0 29200a20 20202020 20202064 69736361 ) . disca │ │ │ │ - 0x00cff0c0 72643b20 0a202020 20666c6f 6174204c rd; . float L │ │ │ │ - 0x00cff0d0 72696768 74203d20 646f7428 74657874 right = dot(text │ │ │ │ - 0x00cff0e0 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ - 0x00cff0f0 765f6f66 66736574 312e7879 292e7267 v_offset1.xy).rg │ │ │ │ - 0x00cff100 622c206b 57656967 68747329 3b200a20 b, kWeights); . │ │ │ │ - 0x00cff110 20202066 6c6f6174 204c626f 74746f6d float Lbottom │ │ │ │ - 0x00cff120 20203d20 646f7428 74657874 75726528 = dot(texture( │ │ │ │ - 0x00cff130 755f636f 6c6f7254 65782c20 765f6f66 u_colorTex, v_of │ │ │ │ - 0x00cff140 66736574 312e7a77 292e7267 622c206b fset1.zw).rgb, k │ │ │ │ - 0x00cff150 57656967 68747329 3b200a20 20202064 Weights); . d │ │ │ │ - 0x00cff160 656c7461 2e7a7720 3d206162 73284c20 elta.zw = abs(L │ │ │ │ - 0x00cff170 2d207665 6332284c 72696768 742c204c - vec2(Lright, L │ │ │ │ - 0x00cff180 626f7474 6f6d2929 3b200a20 20202076 bottom)); . v │ │ │ │ - 0x00cff190 65633220 6d617844 656c7461 203d206d ec2 maxDelta = m │ │ │ │ - 0x00cff1a0 61782864 656c7461 2e78792c 2064656c ax(delta.xy, del │ │ │ │ - 0x00cff1b0 74612e7a 77293b20 0a202020 20666c6f ta.zw); . flo │ │ │ │ - 0x00cff1c0 6174204c 6c656674 6c656674 203d2064 at Lleftleft = d │ │ │ │ - 0x00cff1d0 6f742874 65787475 72652875 5f636f6c ot(texture(u_col │ │ │ │ - 0x00cff1e0 6f725465 782c2076 5f6f6666 73657432 orTex, v_offset2 │ │ │ │ - 0x00cff1f0 2e787929 2e726762 2c206b57 65696768 .xy).rgb, kWeigh │ │ │ │ - 0x00cff200 7473293b 200a2020 2020666c 6f617420 ts); . float │ │ │ │ - 0x00cff210 4c746f70 746f7020 3d20646f 74287465 Ltoptop = dot(te │ │ │ │ - 0x00cff220 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ - 0x00cff230 2c20765f 6f666673 6574322e 7a77292e , v_offset2.zw). │ │ │ │ - 0x00cff240 7267622c 206b5765 69676874 73293b20 rgb, kWeights); │ │ │ │ - 0x00cff250 0a202020 2064656c 74612e7a 77203d20 . delta.zw = │ │ │ │ - 0x00cff260 61627328 76656332 284c6c65 66742c20 abs(vec2(Lleft, │ │ │ │ - 0x00cff270 4c746f70 29202d20 76656332 284c6c65 Ltop) - vec2(Lle │ │ │ │ - 0x00cff280 66746c65 66742c20 4c746f70 746f7029 ftleft, Ltoptop) │ │ │ │ - 0x00cff290 293b200a 20202020 6d617844 656c7461 ); . maxDelta │ │ │ │ - 0x00cff2a0 203d206d 6178286d 61784465 6c74612e = max(maxDelta. │ │ │ │ - 0x00cff2b0 78792c20 64656c74 612e7a77 293b200a xy, delta.zw); . │ │ │ │ - 0x00cff2c0 20202020 666c6f61 74206669 6e616c44 float finalD │ │ │ │ - 0x00cff2d0 656c7461 203d206d 6178286d 61784465 elta = max(maxDe │ │ │ │ - 0x00cff2e0 6c74612e 782c206d 61784465 6c74612e lta.x, maxDelta. │ │ │ │ - 0x00cff2f0 79293b20 0a202020 20656467 6573202a y); . edges * │ │ │ │ - 0x00cff300 3d207374 65702866 696e616c 44656c74 = step(finalDelt │ │ │ │ - 0x00cff310 612c2053 4d41415f 4c4f4341 4c5f434f a, SMAA_LOCAL_CO │ │ │ │ - 0x00cff320 4e545241 53545f41 44415054 4154494f NTRAST_ADAPTATIO │ │ │ │ - 0x00cff330 4e5f4641 43544f52 202a2064 656c7461 N_FACTOR * delta │ │ │ │ - 0x00cff340 2e787929 3b200a20 20202076 5f467261 .xy); . v_Fra │ │ │ │ - 0x00cff350 67436f6c 6f72203d 20766563 34286564 gColor = vec4(ed │ │ │ │ - 0x00cff360 6765732c 20302e30 2c20312e 30293b20 ges, 0.0, 1.0); │ │ │ │ - 0x00cff370 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ - 0x00cff380 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cff390 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cff3a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cff3b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cff3c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cff3d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cff3e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cff3f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cff400 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cff410 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cff420 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cff430 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cff440 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cff450 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cff460 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cff470 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cff480 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cff490 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cff4a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cff4b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cff4c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cff4d0 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ - 0x00cff4e0 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ - 0x00cff4f0 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ - 0x00cff500 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00cff510 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ - 0x00cff520 74303b20 0a20206f 75742076 65633420 t0; . out vec4 │ │ │ │ - 0x00cff530 765f6f66 66736574 313b200a 20206f75 v_offset1; . ou │ │ │ │ - 0x00cff540 74207665 63342076 5f6f6666 73657432 t vec4 v_offset2 │ │ │ │ - 0x00cff550 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00cff560 3420755f 6672616d 65627566 6665724d 4 u_framebufferM │ │ │ │ - 0x00cff570 65747269 63733b20 0a202063 6f6e7374 etrics; . const │ │ │ │ - 0x00cff580 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00cff590 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00cff5a0 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00cff5b0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00cff5c0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00cff5d0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00cff5e0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00cff5f0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00cff600 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cff610 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00cff620 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00cff630 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00cff640 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00cff650 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00cff660 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00cff670 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00cff680 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00cff690 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00cff6a0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cff6b0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00cff6c0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00cff6d0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00cff6e0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00cff6f0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00cff700 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00cff710 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00cff720 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00cff730 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00cff740 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00cff750 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00cff760 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00cff770 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00cff780 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00cff790 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00cff7a0 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00cff7b0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00cff7c0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00cff7d0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00cff7e0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00cff7f0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00cff800 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00cff810 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00cff820 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00cff830 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00cff840 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00cff850 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00cff860 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00cff870 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00cff880 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00cff890 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00cff8a0 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00cff8b0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00cff8c0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00cff8d0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00cff8e0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00cff8f0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00cff900 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00cff910 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00cff920 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00cff930 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00cff940 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00cff950 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00cff960 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00cff970 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00cff980 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00cff990 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00cff9a0 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00cff9b0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00cff9c0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00cff9d0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00cff9e0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00cff9f0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00cffa00 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00cffa10 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00cffa20 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00cffa30 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00cffa40 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00cffa50 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00cffa60 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00cffa70 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00cffa80 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00cffa90 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00cffaa0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00cffab0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00cffac0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00cffad0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00cffae0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00cffaf0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00cffb00 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00cffb10 200a2020 7b200a20 20202076 5f636f6c . { . v_col │ │ │ │ - 0x00cffb20 6f725465 78436f6f 72647320 3d20615f orTexCoords = a_ │ │ │ │ - 0x00cffb30 74636f6f 72643b20 0a202020 20765f6f tcoord; . v_o │ │ │ │ - 0x00cffb40 66667365 7430203d 20755f66 72616d65 ffset0 = u_frame │ │ │ │ - 0x00cffb50 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ - 0x00cffb60 7879202a 20766563 34282d31 2e302c20 xy * vec4(-1.0, │ │ │ │ - 0x00cffb70 302e302c 20302e30 2c202d31 2e302920 0.0, 0.0, -1.0) │ │ │ │ - 0x00cffb80 2b20615f 74636f6f 72642e78 7978793b + a_tcoord.xyxy; │ │ │ │ - 0x00cffb90 200a2020 2020765f 6f666673 65743120 . v_offset1 │ │ │ │ - 0x00cffba0 3d20755f 6672616d 65627566 6665724d = u_framebufferM │ │ │ │ - 0x00cffbb0 65747269 63732e78 79787920 2a207665 etrics.xyxy * ve │ │ │ │ - 0x00cffbc0 63342820 312e302c 20302e30 2c20302e c4( 1.0, 0.0, 0. │ │ │ │ - 0x00cffbd0 302c2020 312e3029 202b2061 5f74636f 0, 1.0) + a_tco │ │ │ │ - 0x00cffbe0 6f72642e 78797879 3b200a20 20202076 ord.xyxy; . v │ │ │ │ - 0x00cffbf0 5f6f6666 73657432 203d2075 5f667261 _offset2 = u_fra │ │ │ │ - 0x00cffc00 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ - 0x00cffc10 78797879 202a2076 65633428 2d322e30 xyxy * vec4(-2.0 │ │ │ │ - 0x00cffc20 2c20302e 302c2030 2e302c20 2d322e30 , 0.0, 0.0, -2.0 │ │ │ │ - 0x00cffc30 29202b20 615f7463 6f6f7264 2e787978 ) + a_tcoord.xyx │ │ │ │ - 0x00cffc40 793b200a 20202020 676c5f50 6f736974 y; . gl_Posit │ │ │ │ - 0x00cffc50 696f6e20 3d207665 63342861 5f706f73 ion = vec4(a_pos │ │ │ │ - 0x00cffc60 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ - 0x00cffc70 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ - 0x00cffc80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00cffc90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00cffca0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00cffcb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00cffcc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00cffcd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00cffce0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00cffcf0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00cffd00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00cffd10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00cffd20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00cffd30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00cffd40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00cffd50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00cffd60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00cffd70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00cffd80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00cffd90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00cffda0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00cffdb0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00cffdc0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00cffdd0 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ - 0x00cffde0 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ - 0x00cffdf0 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ - 0x00cffe00 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ - 0x00cffe10 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ - 0x00cffe20 743b200a 2020756e 69666f72 6d207665 t; . uniform ve │ │ │ │ - 0x00cffe30 63342075 5f667261 6d656275 66666572 c4 u_framebuffer │ │ │ │ - 0x00cffe40 4d657472 6963733b 200a2020 636f6e73 Metrics; . cons │ │ │ │ - 0x00cffe50 7420666c 6f617420 6b536861 7065436f t float kShapeCo │ │ │ │ - 0x00cffe60 6f726453 63616c61 72203d20 31303030 ordScalar = 1000 │ │ │ │ - 0x00cffe70 2e303b20 0a202076 65633420 6170706c .0; . vec4 appl │ │ │ │ - 0x00cffe80 79506976 6f745472 616e7366 6f726d28 yPivotTransform( │ │ │ │ - 0x00cffe90 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00cffea0 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00cffeb0 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00cffec0 5a29200a 20207b20 0a202020 20766563 Z) . { . vec │ │ │ │ - 0x00cffed0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00cffee0 6f74203d 20706976 6f743b20 0a202020 ot = pivot; . │ │ │ │ - 0x00cffef0 20666c6f 61742077 203d2074 72616e73 float w = trans │ │ │ │ - 0x00cfff00 666f726d 65645069 766f742e 773b200a formedPivot.w; . │ │ │ │ - 0x00cfff10 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00cfff20 69766f74 2e787977 203d2028 7069766f ivot.xyw = (pivo │ │ │ │ - 0x00cfff30 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00cfff40 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ - 0x00cfff50 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00cfff60 5a2c2077 29292e78 79773b20 0a202020 Z, w)).xyw; . │ │ │ │ - 0x00cfff70 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00cfff80 742e7a20 2a3d2074 72616e73 666f726d t.z *= transform │ │ │ │ - 0x00cfff90 65645069 766f742e 77202f20 773b200a edPivot.w / w; . │ │ │ │ - 0x00cfffa0 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00cfffb0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00cfffc0 5069766f 742e7920 3d202d74 72616e73 Pivot.y = -trans │ │ │ │ - 0x00cfffd0 666f726d 65645069 766f742e 793b200a formedPivot.y; . │ │ │ │ - 0x00cfffe0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00cffff0 69766f74 2e7a203d 20287472 616e7366 ivot.z = (transf │ │ │ │ - 0x00d00000 6f726d65 64506976 6f742e7a 20202b20 ormedPivot.z + │ │ │ │ - 0x00d00010 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d00020 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ - 0x00d00030 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ - 0x00d00040 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d00050 743b200a 20207d20 0a202076 65633420 t; . } . vec4 │ │ │ │ - 0x00d00060 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00d00070 766f7454 72616e73 666f726d 28766563 votTransform(vec │ │ │ │ - 0x00d00080 34207069 766f742c 206d6174 34207069 4 pivot, mat4 pi │ │ │ │ - 0x00d00090 766f7454 72616e73 666f726d 2c20666c votTransform, fl │ │ │ │ - 0x00d000a0 6f617420 7069766f 74526561 6c5a2c20 oat pivotRealZ, │ │ │ │ - 0x00d000b0 76656332 206f6666 73657429 200a2020 vec2 offset) . │ │ │ │ - 0x00d000c0 7b200a20 20202066 6c6f6174 206c6f67 { . float log │ │ │ │ - 0x00d000d0 69635a20 3d207069 766f742e 7a202f20 icZ = pivot.z / │ │ │ │ - 0x00d000e0 7069766f 742e773b 200a2020 20207665 pivot.w; . ve │ │ │ │ - 0x00d000f0 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00d00100 766f7420 3d207069 766f7454 72616e73 vot = pivotTrans │ │ │ │ - 0x00d00110 666f726d 202a2076 65633428 7069766f form * vec4(pivo │ │ │ │ - 0x00d00120 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d00130 2c207069 766f742e 77293b20 0a202020 , pivot.w); . │ │ │ │ - 0x00d00140 20766563 34207363 616c6520 3d207069 vec4 scale = pi │ │ │ │ - 0x00d00150 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d00160 65633428 312e302c 202d312e 302c2030 ec4(1.0, -1.0, 0 │ │ │ │ - 0x00d00170 2e302c20 312e3029 3b200a20 20202076 .0, 1.0); . v │ │ │ │ - 0x00d00180 65633420 706f7369 74696f6e 203d2076 ec4 position = v │ │ │ │ - 0x00d00190 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00d001a0 69766f74 2e787920 2f207472 616e7366 ivot.xy / transf │ │ │ │ - 0x00d001b0 6f726d65 64506976 6f742e77 2c206c6f ormedPivot.w, lo │ │ │ │ - 0x00d001c0 6769635a 2c20312e 3029202b 20766563 gicZ, 1.0) + vec │ │ │ │ - 0x00d001d0 34286f66 66736574 202f2073 63616c65 4(offset / scale │ │ │ │ - 0x00d001e0 2e77202a 20736361 6c652e78 2c20302e .w * scale.x, 0. │ │ │ │ - 0x00d001f0 302c2030 2e30293b 200a2020 23696664 0, 0.0); . #ifd │ │ │ │ - 0x00d00200 65662056 554c4b41 4e200a20 20202070 ef VULKAN . p │ │ │ │ - 0x00d00210 6f736974 696f6e2e 79203d20 2d706f73 osition.y = -pos │ │ │ │ - 0x00d00220 6974696f 6e2e793b 200a2020 2020706f ition.y; . po │ │ │ │ - 0x00d00230 73697469 6f6e2e7a 203d2028 706f7369 sition.z = (posi │ │ │ │ - 0x00d00240 74696f6e 2e7a2020 2b20706f 73697469 tion.z + positi │ │ │ │ - 0x00d00250 6f6e2e77 29202f20 322e303b 200a2020 on.w) / 2.0; . │ │ │ │ - 0x00d00260 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00d00270 726e2070 6f736974 696f6e3b 200a2020 rn position; . │ │ │ │ - 0x00d00280 7d200a20 20766563 32206361 6c634c69 } . vec2 calcLi │ │ │ │ - 0x00d00290 6e655472 616e7366 6f726d65 64417869 neTransformedAxi │ │ │ │ - 0x00d002a0 73506f73 28766563 32206f72 6967696e sPos(vec2 origin │ │ │ │ - 0x00d002b0 616c4178 6973506f 732c2076 65633220 alAxisPos, vec2 │ │ │ │ - 0x00d002c0 73686966 74656450 6f732c20 6d617434 shiftedPos, mat4 │ │ │ │ - 0x00d002d0 206d6f64 656c5669 65772c20 666c6f61 modelView, floa │ │ │ │ - 0x00d002e0 74206861 6c665769 64746829 200a2020 t halfWidth) . │ │ │ │ - 0x00d002f0 7b200a20 20202076 65633220 70203d20 { . vec2 p = │ │ │ │ - 0x00d00300 28766563 34287368 69667465 64506f73 (vec4(shiftedPos │ │ │ │ - 0x00d00310 2c20302e 302c2031 2e302920 2a206d6f , 0.0, 1.0) * mo │ │ │ │ - 0x00d00320 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ - 0x00d00330 20207665 63322064 203d2070 202d206f vec2 d = p - o │ │ │ │ - 0x00d00340 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00d00350 0a202020 20696620 28646f74 28642c20 . if (dot(d, │ │ │ │ - 0x00d00360 64292021 3d20302e 3029200a 20202020 d) != 0.0) . │ │ │ │ - 0x00d00370 20207265 7475726e 206f7269 67696e61 return origina │ │ │ │ - 0x00d00380 6c417869 73506f73 202b206e 6f726d61 lAxisPos + norma │ │ │ │ - 0x00d00390 6c697a65 28642920 2a206861 6c665769 lize(d) * halfWi │ │ │ │ - 0x00d003a0 6474683b 200a2020 2020656c 7365200a dth; . else . │ │ │ │ - 0x00d003b0 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ - 0x00d003c0 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ - 0x00d003d0 207d200a 2020766f 6964206d 61696e28 } . void main( │ │ │ │ - 0x00d003e0 29200a20 207b200a 20202020 765f636f ) . { . v_co │ │ │ │ - 0x00d003f0 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ - 0x00d00400 5f74636f 6f72643b 200a2020 2020765f _tcoord; . v_ │ │ │ │ - 0x00d00410 6f666673 6574203d 20755f66 72616d65 offset = u_frame │ │ │ │ - 0x00d00420 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ - 0x00d00430 7879202a 20766563 3428312e 302c2030 xy * vec4(1.0, 0 │ │ │ │ - 0x00d00440 2e302c20 302e302c 20312e30 29202b20 .0, 0.0, 1.0) + │ │ │ │ - 0x00d00450 615f7463 6f6f7264 2e787978 793b200a a_tcoord.xyxy; . │ │ │ │ - 0x00d00460 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ - 0x00d00470 3d207665 63342861 5f706f73 2c20302e = vec4(a_pos, 0. │ │ │ │ - 0x00d00480 302c2031 2e30293b 200a2020 7d200a00 0, 1.0); . } .. │ │ │ │ - 0x00d00490 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d004a0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d004b0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d004c0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d004d0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d004e0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d004f0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d00500 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d00510 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d00520 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d00530 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d00540 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d00550 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d00560 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d00570 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d00580 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d00590 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d005a0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d005b0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d005c0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d005d0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d005e0 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ - 0x00d005f0 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ - 0x00d00600 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ - 0x00d00610 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ - 0x00d00620 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ - 0x00d00630 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ - 0x00d00640 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00d00650 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ - 0x00d00660 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ - 0x00d00670 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ - 0x00d00680 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ - 0x00d00690 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ - 0x00d006a0 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ - 0x00d006b0 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ - 0x00d006c0 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ - 0x00d006d0 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ - 0x00d006e0 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ - 0x00d006f0 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d00700 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ - 0x00d00710 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ - 0x00d00720 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ - 0x00d00730 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ - 0x00d00740 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ - 0x00d00750 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d00760 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ - 0x00d00770 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ - 0x00d00780 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ - 0x00d00790 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d007a0 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ - 0x00d007b0 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ - 0x00d007c0 5f565446 200a2020 756e6966 6f726d20 _VTF . uniform │ │ │ │ - 0x00d007d0 73616d70 6c657232 4420755f 636f6c6f sampler2D u_colo │ │ │ │ - 0x00d007e0 72546578 3b200a20 2023656e 64696620 rTex; . #endif │ │ │ │ - 0x00d007f0 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ - 0x00d00800 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ - 0x00d00810 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ - 0x00d00820 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ - 0x00d00830 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00d00840 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00d00850 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00d00860 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ - 0x00d00870 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00d00880 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00d00890 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ - 0x00d008a0 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ - 0x00d008b0 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ - 0x00d008c0 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ - 0x00d008d0 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ - 0x00d008e0 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ - 0x00d008f0 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ - 0x00d00900 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ - 0x00d00910 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ - 0x00d00920 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ - 0x00d00930 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d00940 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ - 0x00d00950 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ - 0x00d00960 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ - 0x00d00970 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ - 0x00d00980 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ - 0x00d00990 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ - 0x00d009a0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d009b0 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ - 0x00d009c0 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ - 0x00d009d0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d009e0 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ - 0x00d009f0 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ - 0x00d00a00 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ - 0x00d00a10 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ - 0x00d00a20 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ - 0x00d00a30 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ - 0x00d00a40 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ - 0x00d00a50 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ - 0x00d00a60 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ - 0x00d00a70 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ - 0x00d00a80 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ - 0x00d00a90 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d00aa0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d00ab0 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d00ac0 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ - 0x00d00ad0 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ - 0x00d00ae0 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ - 0x00d00af0 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ - 0x00d00b00 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ - 0x00d00b10 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ - 0x00d00b20 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ - 0x00d00b30 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ - 0x00d00b40 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ - 0x00d00b50 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d00b60 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ - 0x00d00b70 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ - 0x00d00b80 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ - 0x00d00b90 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ - 0x00d00ba0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00d00bb0 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ - 0x00d00bc0 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ - 0x00d00bd0 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ - 0x00d00be0 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ - 0x00d00bf0 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ - 0x00d00c00 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00d00c10 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ - 0x00d00c20 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ - 0x00d00c30 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ - 0x00d00c40 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ - 0x00d00c50 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d00c60 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ - 0x00d00c70 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ - 0x00d00c80 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ - 0x00d00c90 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ - 0x00d00ca0 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ - 0x00d00cb0 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ - 0x00d00cc0 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ - 0x00d00cd0 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ - 0x00d00ce0 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ - 0x00d00cf0 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ - 0x00d00d00 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ - 0x00d00d10 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ - 0x00d00d20 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ - 0x00d00d30 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ - 0x00d00d40 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ - 0x00d00d50 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ - 0x00d00d60 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ - 0x00d00d70 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ - 0x00d00d80 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ - 0x00d00d90 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ - 0x00d00da0 63342861 5f706f73 6974696f 6e2e7879 c4(a_position.xy │ │ │ │ - 0x00d00db0 7a2c2031 29202a20 755f6d6f 64656c56 z, 1) * u_modelV │ │ │ │ - 0x00d00dc0 6965773b 200a2020 20207665 63342073 iew; . vec4 s │ │ │ │ - 0x00d00dd0 68696674 6564506f 73203d20 76656334 hiftedPos = vec4 │ │ │ │ - 0x00d00de0 28615f6e 6f726d61 6c2c2030 2e302c20 (a_normal, 0.0, │ │ │ │ - 0x00d00df0 302e3029 202b2070 6f733b20 0a202020 0.0) + pos; . │ │ │ │ - 0x00d00e00 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ - 0x00d00e10 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00d00e20 726d2873 68696674 6564506f 73202a20 rm(shiftedPos * │ │ │ │ - 0x00d00e30 755f7072 6f6a6563 74696f6e 2c20755f u_projection, u_ │ │ │ │ - 0x00d00e40 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d00e50 302e3029 3b200a20 20236966 64656620 0.0); . #ifdef │ │ │ │ - 0x00d00e60 454e4142 4c455f56 5446200a 20202020 ENABLE_VTF . │ │ │ │ - 0x00d00e70 765f636f 6c6f7220 3d207465 78747572 v_color = textur │ │ │ │ - 0x00d00e80 6528755f 636f6c6f 72546578 2c20615f e(u_colorTex, a_ │ │ │ │ - 0x00d00e90 636f6c6f 72546578 436f6f72 64293b20 colorTexCoord); │ │ │ │ - 0x00d00ea0 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ - 0x00d00eb0 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ - 0x00d00ec0 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ - 0x00d00ed0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d00ee0 765f6d61 736b5465 78436f6f 7264203d v_maskTexCoord = │ │ │ │ - 0x00d00ef0 20615f6d 61736b54 6578436f 6f72643b a_maskTexCoord; │ │ │ │ - 0x00d00f00 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00d00f10 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d00f20 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d00f30 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d00f40 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d00f50 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d00f60 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d00f70 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d00f80 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d00f90 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d00fa0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d00fb0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d00fc0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d00fd0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d00fe0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d00ff0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d01000 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d01010 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d01020 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d01030 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d01040 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d01050 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d01060 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ - 0x00d01070 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ - 0x00d01080 5f6d6173 6b546578 436f6f72 643b200a _maskTexCoord; . │ │ │ │ - 0x00d01090 2020696e 20766563 3420615f 706f7369 in vec4 a_posi │ │ │ │ - 0x00d010a0 74696f6e 3b200a20 20696e20 76656332 tion; . in vec2 │ │ │ │ - 0x00d010b0 20615f6e 6f726d61 6c3b200a 20202369 a_normal; . #i │ │ │ │ - 0x00d010c0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00d010d0 0a20206f 7574204c 4f575f50 20766563 . out LOW_P vec │ │ │ │ - 0x00d010e0 3420765f 636f6c6f 723b200a 20202365 4 v_color; . #e │ │ │ │ - 0x00d010f0 6c736520 0a20206f 75742076 65633220 lse . out vec2 │ │ │ │ - 0x00d01100 765f636f 6c6f7254 6578436f 6f72643b v_colorTexCoord; │ │ │ │ - 0x00d01110 200a2020 23656e64 6966200a 20206f75 . #endif . ou │ │ │ │ - 0x00d01120 74207665 63322076 5f6d6173 6b546578 t vec2 v_maskTex │ │ │ │ - 0x00d01130 436f6f72 643b200a 2020756e 69666f72 Coord; . unifor │ │ │ │ - 0x00d01140 6d206d61 74342075 5f6d6f64 656c5669 m mat4 u_modelVi │ │ │ │ - 0x00d01150 65773b20 0a202075 6e69666f 726d206d ew; . uniform m │ │ │ │ - 0x00d01160 61743420 755f7072 6f6a6563 74696f6e at4 u_projection │ │ │ │ - 0x00d01170 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d01180 3420755f 7069766f 74547261 6e73666f 4 u_pivotTransfo │ │ │ │ - 0x00d01190 726d3b20 0a202075 6e69666f 726d2076 rm; . uniform v │ │ │ │ - 0x00d011a0 65633220 755f636f 6e747261 73744761 ec2 u_contrastGa │ │ │ │ - 0x00d011b0 6d6d613b 200a2020 756e6966 6f726d20 mma; . uniform │ │ │ │ - 0x00d011c0 666c6f61 7420755f 6f706163 6974793b float u_opacity; │ │ │ │ - 0x00d011d0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d011e0 7420755f 7a536361 6c653b20 0a202075 t u_zScale; . u │ │ │ │ - 0x00d011f0 6e69666f 726d2066 6c6f6174 20755f69 niform float u_i │ │ │ │ - 0x00d01200 6e746572 706f6c61 74696f6e 3b200a20 nterpolation; . │ │ │ │ - 0x00d01210 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ - 0x00d01220 5f69734f 75746c69 6e655061 73733b20 _isOutlinePass; │ │ │ │ - 0x00d01230 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00d01240 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ - 0x00d01250 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ - 0x00d01260 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ - 0x00d01270 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ - 0x00d01280 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ - 0x00d01290 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00d012a0 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00d012b0 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00d012c0 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ - 0x00d012d0 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ - 0x00d012e0 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ - 0x00d012f0 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ - 0x00d01300 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ - 0x00d01310 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ - 0x00d01320 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ - 0x00d01330 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ - 0x00d01340 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ - 0x00d01350 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ - 0x00d01360 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ - 0x00d01370 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ - 0x00d01380 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ - 0x00d01390 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d013a0 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ - 0x00d013b0 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ - 0x00d013c0 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ - 0x00d013d0 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ - 0x00d013e0 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ - 0x00d013f0 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ - 0x00d01400 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ - 0x00d01410 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ - 0x00d01420 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ - 0x00d01430 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d01440 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ - 0x00d01450 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ - 0x00d01460 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ - 0x00d01470 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ - 0x00d01480 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d01490 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d014a0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d014b0 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ - 0x00d014c0 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ - 0x00d014d0 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ - 0x00d014e0 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ - 0x00d014f0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d01500 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d01510 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d01520 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ - 0x00d01530 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ - 0x00d01540 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ - 0x00d01550 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ - 0x00d01560 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ - 0x00d01570 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ - 0x00d01580 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ - 0x00d01590 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ - 0x00d015a0 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ - 0x00d015b0 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ - 0x00d015c0 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ - 0x00d015d0 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ - 0x00d015e0 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ - 0x00d015f0 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ - 0x00d01600 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d01610 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ - 0x00d01620 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ - 0x00d01630 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ - 0x00d01640 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ - 0x00d01650 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ - 0x00d01660 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d01670 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ - 0x00d01680 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ - 0x00d01690 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ - 0x00d016a0 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ - 0x00d016b0 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ - 0x00d016c0 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ - 0x00d016d0 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ - 0x00d016e0 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ - 0x00d016f0 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ - 0x00d01700 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ - 0x00d01710 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ - 0x00d01720 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ - 0x00d01730 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ - 0x00d01740 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ - 0x00d01750 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ - 0x00d01760 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ - 0x00d01770 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ - 0x00d01780 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d01790 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ - 0x00d017a0 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ - 0x00d017b0 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ - 0x00d017c0 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ - 0x00d017d0 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ - 0x00d017e0 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ - 0x00d017f0 20202020 76656334 20706976 6f74203d vec4 pivot = │ │ │ │ - 0x00d01800 20766563 3428615f 706f7369 74696f6e vec4(a_position │ │ │ │ - 0x00d01810 2e78797a 2c20312e 3029202a 20755f6d .xyz, 1.0) * u_m │ │ │ │ - 0x00d01820 6f64656c 56696577 3b200a20 20202076 odelView; . v │ │ │ │ - 0x00d01830 65633420 6f666673 6574203d 20766563 ec4 offset = vec │ │ │ │ - 0x00d01840 3428615f 6e6f726d 616c2c20 302e302c 4(a_normal, 0.0, │ │ │ │ - 0x00d01850 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ - 0x00d01860 74696f6e 3b200a20 20202067 6c5f506f tion; . gl_Po │ │ │ │ - 0x00d01870 73697469 6f6e203d 20617070 6c794269 sition = applyBi │ │ │ │ - 0x00d01880 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00d01890 73666f72 6d287069 766f7420 2a20755f sform(pivot * u_ │ │ │ │ - 0x00d018a0 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ - 0x00d018b0 766f7454 72616e73 666f726d 2c200a20 votTransform, . │ │ │ │ - 0x00d018c0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d018d0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d018e0 20202020 20202020 20202020 2020615f a_ │ │ │ │ - 0x00d018f0 706f7369 74696f6e 2e77202a 20755f7a position.w * u_z │ │ │ │ - 0x00d01900 5363616c 652c206f 66667365 742e7879 Scale, offset.xy │ │ │ │ - 0x00d01910 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ - 0x00d01920 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ - 0x00d01930 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ - 0x00d01940 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ - 0x00d01950 6f725465 78436f6f 7264293b 200a2020 orTexCoord); . │ │ │ │ - 0x00d01960 23656c73 65200a20 20202076 5f636f6c #else . v_col │ │ │ │ - 0x00d01970 6f725465 78436f6f 7264203d 20615f63 orTexCoord = a_c │ │ │ │ - 0x00d01980 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ - 0x00d01990 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ - 0x00d019a0 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ - 0x00d019b0 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ - 0x00d019c0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d019d0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d019e0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d019f0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d01a00 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d01a10 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d01a20 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d01a30 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d01a40 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d01a50 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d01a60 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d01a70 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d01a80 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d01a90 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d01aa0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d01ab0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d01ac0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d01ad0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d01ae0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d01af0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d01b00 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d01b10 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d01b20 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ - 0x00d01b30 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ - 0x00d01b40 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ - 0x00d01b50 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ - 0x00d01b60 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ - 0x00d01b70 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ - 0x00d01b80 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ - 0x00d01b90 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ - 0x00d01ba0 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ - 0x00d01bb0 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ - 0x00d01bc0 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ - 0x00d01bd0 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ - 0x00d01be0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d01bf0 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ - 0x00d01c00 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ - 0x00d01c10 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ - 0x00d01c20 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d01c30 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d01c40 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d01c50 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d01c60 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00d01c70 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d01c80 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ - 0x00d01c90 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ - 0x00d01ca0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00d01cb0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00d01cc0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ - 0x00d01cd0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d01ce0 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ - 0x00d01cf0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d01d00 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ - 0x00d01d10 733b200a 20202369 66646566 20454e41 s; . #ifdef ENA │ │ │ │ - 0x00d01d20 424c455f 56544620 0a202075 6e69666f BLE_VTF . unifo │ │ │ │ - 0x00d01d30 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ - 0x00d01d40 6f6c6f72 5465783b 200a2020 23656e64 olorTex; . #end │ │ │ │ - 0x00d01d50 6966200a 2020636f 6e737420 666c6f61 if . const floa │ │ │ │ - 0x00d01d60 74204261 73654465 70746853 68696674 t BaseDepthShift │ │ │ │ - 0x00d01d70 203d202d 31302e30 3b200a20 20636f6e = -10.0; . con │ │ │ │ - 0x00d01d80 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00d01d90 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00d01da0 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ - 0x00d01db0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d01dc0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00d01dd0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00d01de0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00d01df0 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ - 0x00d01e00 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00d01e10 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ - 0x00d01e20 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ - 0x00d01e30 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ - 0x00d01e40 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d01e50 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ - 0x00d01e60 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d01e70 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d01e80 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00d01e90 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ - 0x00d01ea0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d01eb0 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ - 0x00d01ec0 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ - 0x00d01ed0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00d01ee0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d01ef0 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ - 0x00d01f00 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ - 0x00d01f10 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d01f20 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ - 0x00d01f30 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ - 0x00d01f40 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d01f50 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ - 0x00d01f60 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d01f70 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ - 0x00d01f80 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ - 0x00d01f90 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ - 0x00d01fa0 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00d01fb0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00d01fc0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00d01fd0 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ - 0x00d01fe0 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ - 0x00d01ff0 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ - 0x00d02000 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ - 0x00d02010 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ - 0x00d02020 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00d02030 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ - 0x00d02040 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ - 0x00d02050 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00d02060 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ - 0x00d02070 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ - 0x00d02080 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d02090 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ - 0x00d020a0 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ - 0x00d020b0 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ - 0x00d020c0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00d020d0 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ - 0x00d020e0 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ - 0x00d020f0 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ - 0x00d02100 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ - 0x00d02110 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ - 0x00d02120 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ - 0x00d02130 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ - 0x00d02140 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ - 0x00d02150 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ - 0x00d02160 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ - 0x00d02170 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ - 0x00d02180 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ - 0x00d02190 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00d021a0 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ - 0x00d021b0 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ - 0x00d021c0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ - 0x00d021d0 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ - 0x00d021e0 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ - 0x00d021f0 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ - 0x00d02200 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ - 0x00d02210 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ - 0x00d02220 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ - 0x00d02230 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ - 0x00d02240 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ - 0x00d02250 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ - 0x00d02260 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ - 0x00d02270 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00d02280 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ - 0x00d02290 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ - 0x00d022a0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00d022b0 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ - 0x00d022c0 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ - 0x00d022d0 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ - 0x00d022e0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00d022f0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d02300 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ - 0x00d02310 2829200a 20207b20 0a202020 20666c6f () . { . flo │ │ │ │ - 0x00d02320 61742069 734f7574 6c696e65 203d2073 at isOutline = s │ │ │ │ - 0x00d02330 74657028 302e352c 20755f69 734f7574 tep(0.5, u_isOut │ │ │ │ - 0x00d02340 6c696e65 50617373 293b200a 20202020 linePass); . │ │ │ │ - 0x00d02350 666c6f61 74206e6f 744f7574 6c696e65 float notOutline │ │ │ │ - 0x00d02360 203d2031 2e30202d 2069734f 75746c69 = 1.0 - isOutli │ │ │ │ - 0x00d02370 6e653b20 0a202020 20666c6f 61742064 ne; . float d │ │ │ │ - 0x00d02380 65707468 53686966 74203d20 42617365 epthShift = Base │ │ │ │ - 0x00d02390 44657074 68536869 6674202a 2069734f DepthShift * isO │ │ │ │ - 0x00d023a0 75746c69 6e653b20 0a202020 20766563 utline; . vec │ │ │ │ - 0x00d023b0 3420706f 73203d20 28766563 3428615f 4 pos = (vec4(a_ │ │ │ │ - 0x00d023c0 706f7369 74696f6e 2e78797a 2c203129 position.xyz, 1) │ │ │ │ - 0x00d023d0 202b2076 65633428 302e302c 20302e30 + vec4(0.0, 0.0 │ │ │ │ - 0x00d023e0 2c206465 70746853 68696674 2c20302e , depthShift, 0. │ │ │ │ - 0x00d023f0 30292920 2a20755f 6d6f6465 6c566965 0)) * u_modelVie │ │ │ │ - 0x00d02400 773b200a 20202020 76656334 20736869 w; . vec4 shi │ │ │ │ - 0x00d02410 66746564 506f7320 3d207665 63342861 ftedPos = vec4(a │ │ │ │ - 0x00d02420 5f6e6f72 6d616c2c 20302e30 2c20302e _normal, 0.0, 0. │ │ │ │ - 0x00d02430 3029202b 20706f73 3b200a20 20202067 0) + pos; . g │ │ │ │ - 0x00d02440 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00d02450 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d02460 28736869 66746564 506f7320 2a20755f (shiftedPos * u_ │ │ │ │ - 0x00d02470 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ - 0x00d02480 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ - 0x00d02490 30293b20 0a202020 20766563 3220636f 0); . vec2 co │ │ │ │ - 0x00d024a0 6c6f7254 6578436f 6f726420 3d20615f lorTexCoord = a_ │ │ │ │ - 0x00d024b0 636f6c6f 72546578 436f6f72 64202a20 colorTexCoord * │ │ │ │ - 0x00d024c0 6e6f744f 75746c69 6e65202b 20615f6f notOutline + a_o │ │ │ │ - 0x00d024d0 75746c69 6e65436f 6c6f7254 6578436f utlineColorTexCo │ │ │ │ - 0x00d024e0 6f726420 2a206973 4f75746c 696e653b ord * isOutline; │ │ │ │ - 0x00d024f0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ - 0x00d02500 455f5654 46200a20 20202076 5f636f6c E_VTF . v_col │ │ │ │ - 0x00d02510 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ - 0x00d02520 6f6c6f72 5465782c 20636f6c 6f725465 olorTex, colorTe │ │ │ │ - 0x00d02530 78436f6f 7264293b 200a2020 23656c73 xCoord); . #els │ │ │ │ - 0x00d02540 65200a20 20202076 5f636f6c 6f725465 e . v_colorTe │ │ │ │ - 0x00d02550 78436f6f 7264203d 20636f6c 6f725465 xCoord = colorTe │ │ │ │ - 0x00d02560 78436f6f 72643b20 0a202023 656e6469 xCoord; . #endi │ │ │ │ - 0x00d02570 66200a20 20202076 5f6d6173 6b546578 f . v_maskTex │ │ │ │ - 0x00d02580 436f6f72 64203d20 615f6d61 736b5465 Coord = a_maskTe │ │ │ │ - 0x00d02590 78436f6f 72643b20 0a20207d 200a0000 xCoord; . } ... │ │ │ │ - 0x00d025a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d025b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d025c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d025d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d025e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d025f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d02600 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d02610 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d02620 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d02630 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d02640 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d02650 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d02660 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d02670 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d02680 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d02690 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d026a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d026b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d026c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d026d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d026e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d026f0 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ - 0x00d02700 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ - 0x00d02710 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ - 0x00d02720 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ - 0x00d02730 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ - 0x00d02740 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ - 0x00d02750 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ - 0x00d02760 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ - 0x00d02770 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ - 0x00d02780 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ - 0x00d02790 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ - 0x00d027a0 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ - 0x00d027b0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d027c0 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ - 0x00d027d0 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ - 0x00d027e0 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ - 0x00d027f0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d02800 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d02810 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d02820 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d02830 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ - 0x00d02840 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ - 0x00d02850 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ - 0x00d02860 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ - 0x00d02870 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ - 0x00d02880 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ - 0x00d02890 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ - 0x00d028a0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ - 0x00d028b0 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ - 0x00d028c0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ - 0x00d028d0 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ - 0x00d028e0 733b200a 2020756e 69666f72 6d207361 s; . uniform sa │ │ │ │ - 0x00d028f0 6d706c65 72324420 755f636f 6c6f7254 mpler2D u_colorT │ │ │ │ - 0x00d02900 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ - 0x00d02910 6174206b 42617365 44657074 68536869 at kBaseDepthShi │ │ │ │ - 0x00d02920 6674203d 202d3130 2e303b20 0a202063 ft = -10.0; . c │ │ │ │ - 0x00d02930 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ - 0x00d02940 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ - 0x00d02950 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ - 0x00d02960 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ - 0x00d02970 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00d02980 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00d02990 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00d029a0 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ - 0x00d029b0 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ - 0x00d029c0 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ - 0x00d029d0 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ - 0x00d029e0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ - 0x00d029f0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00d02a00 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ - 0x00d02a10 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d02a20 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00d02a30 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ - 0x00d02a40 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ - 0x00d02a50 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d02a60 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ - 0x00d02a70 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ - 0x00d02a80 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00d02a90 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ - 0x00d02aa0 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ - 0x00d02ab0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00d02ac0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00d02ad0 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ - 0x00d02ae0 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00d02af0 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ - 0x00d02b00 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ - 0x00d02b10 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00d02b20 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ - 0x00d02b30 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ - 0x00d02b40 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ - 0x00d02b50 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ - 0x00d02b60 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ - 0x00d02b70 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ - 0x00d02b80 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ - 0x00d02b90 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ - 0x00d02ba0 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ - 0x00d02bb0 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ - 0x00d02bc0 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ - 0x00d02bd0 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ - 0x00d02be0 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ - 0x00d02bf0 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ - 0x00d02c00 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ - 0x00d02c10 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ - 0x00d02c20 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ - 0x00d02c30 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ - 0x00d02c40 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ - 0x00d02c50 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ - 0x00d02c60 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ - 0x00d02c70 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ - 0x00d02c80 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ - 0x00d02c90 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ - 0x00d02ca0 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ - 0x00d02cb0 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ - 0x00d02cc0 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ - 0x00d02cd0 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ - 0x00d02ce0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ - 0x00d02cf0 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ - 0x00d02d00 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ - 0x00d02d10 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ - 0x00d02d20 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ - 0x00d02d30 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ - 0x00d02d40 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00d02d50 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ - 0x00d02d60 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ - 0x00d02d70 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ - 0x00d02d80 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ - 0x00d02d90 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ - 0x00d02da0 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ - 0x00d02db0 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ - 0x00d02dc0 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ - 0x00d02dd0 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ - 0x00d02de0 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ - 0x00d02df0 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ - 0x00d02e00 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ - 0x00d02e10 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ - 0x00d02e20 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ - 0x00d02e30 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ - 0x00d02e40 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ - 0x00d02e50 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d02e60 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ - 0x00d02e70 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ - 0x00d02e80 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ - 0x00d02e90 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ - 0x00d02ea0 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00d02eb0 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ - 0x00d02ec0 696e2829 200a2020 7b200a20 20202066 in() . { . f │ │ │ │ - 0x00d02ed0 6c6f6174 2069734f 75746c69 6e65203d loat isOutline = │ │ │ │ - 0x00d02ee0 20737465 7028302e 352c2075 5f69734f step(0.5, u_isO │ │ │ │ - 0x00d02ef0 75746c69 6e655061 7373293b 200a2020 utlinePass); . │ │ │ │ - 0x00d02f00 2020666c 6f617420 64657074 68536869 float depthShi │ │ │ │ - 0x00d02f10 6674203d 206b4261 73654465 70746853 ft = kBaseDepthS │ │ │ │ - 0x00d02f20 68696674 202a2069 734f7574 6c696e65 hift * isOutline │ │ │ │ - 0x00d02f30 3b200a20 20202076 65633420 7069766f ; . vec4 pivo │ │ │ │ - 0x00d02f40 74203d20 28766563 3428615f 706f7369 t = (vec4(a_posi │ │ │ │ - 0x00d02f50 74696f6e 2e78797a 2c20312e 3029202b tion.xyz, 1.0) + │ │ │ │ - 0x00d02f60 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ - 0x00d02f70 64657074 68536869 66742c20 302e3029 depthShift, 0.0) │ │ │ │ - 0x00d02f80 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ - 0x00d02f90 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ - 0x00d02fa0 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ - 0x00d02fb0 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ - 0x00d02fc0 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00d02fd0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d02fe0 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00d02ff0 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ - 0x00d03000 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ - 0x00d03010 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ - 0x00d03020 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ - 0x00d03030 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d03040 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d03050 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ - 0x00d03060 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ - 0x00d03070 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ - 0x00d03080 65633220 636f6c6f 72546578 436f6f72 ec2 colorTexCoor │ │ │ │ - 0x00d03090 64203d20 6d697828 615f636f 6c6f7254 d = mix(a_colorT │ │ │ │ - 0x00d030a0 6578436f 6f72642c 20615f6f 75746c69 exCoord, a_outli │ │ │ │ - 0x00d030b0 6e65436f 6c6f7254 6578436f 6f72642c neColorTexCoord, │ │ │ │ - 0x00d030c0 2069734f 75746c69 6e65293b 200a2020 isOutline); . │ │ │ │ - 0x00d030d0 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ - 0x00d030e0 46200a20 20202076 5f636f6c 6f72203d F . v_color = │ │ │ │ - 0x00d030f0 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ - 0x00d03100 5465782c 20636f6c 6f725465 78436f6f Tex, colorTexCoo │ │ │ │ - 0x00d03110 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ - 0x00d03120 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00d03130 7264203d 20636f6c 6f725465 78436f6f rd = colorTexCoo │ │ │ │ - 0x00d03140 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ - 0x00d03150 20202076 5f6d6173 6b546578 436f6f72 v_maskTexCoor │ │ │ │ - 0x00d03160 64203d20 615f6d61 736b5465 78436f6f d = a_maskTexCoo │ │ │ │ - 0x00d03170 72643b20 0a20207d 200a0000 00000000 rd; . } ....... │ │ │ │ - 0x00d03180 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d03190 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d031a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d031b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d031c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d031d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d031e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d031f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d03200 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d03210 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d03220 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d03230 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d03240 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d03250 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d03260 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d03270 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d03280 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d03290 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d032a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d032b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d032c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d032d0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d032e0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00d032f0 72546578 436f6f72 643b200a 2020696e rTexCoord; . in │ │ │ │ - 0x00d03300 20766563 3220615f 6f75746c 696e6543 vec2 a_outlineC │ │ │ │ - 0x00d03310 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ - 0x00d03320 20696e20 76656332 20615f6e 6f726d61 in vec2 a_norma │ │ │ │ - 0x00d03330 6c3b200a 2020696e 20766563 3220615f l; . in vec2 a_ │ │ │ │ - 0x00d03340 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ - 0x00d03350 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ - 0x00d03360 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ - 0x00d03370 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ - 0x00d03380 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ - 0x00d03390 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ - 0x00d033a0 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ - 0x00d033b0 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ - 0x00d033c0 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ - 0x00d033d0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d033e0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d033f0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d03400 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d03410 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d03420 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d03430 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ - 0x00d03440 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d03450 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ - 0x00d03460 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ - 0x00d03470 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00d03480 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d03490 20755f6c 656e6774 683b200a 20202369 u_length; . #i │ │ │ │ - 0x00d034a0 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ - 0x00d034b0 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ - 0x00d034c0 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ - 0x00d034d0 200a2020 23656e64 6966200a 2020636f . #endif . co │ │ │ │ - 0x00d034e0 6e737420 666c6f61 74206b42 61736544 nst float kBaseD │ │ │ │ - 0x00d034f0 65707468 53686966 74203d20 2d31302e epthShift = -10. │ │ │ │ - 0x00d03500 303b200a 2020636f 6e737420 666c6f61 0; . const floa │ │ │ │ - 0x00d03510 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00d03520 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00d03530 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ - 0x00d03540 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00d03550 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00d03560 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00d03570 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ - 0x00d03580 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ - 0x00d03590 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00d035a0 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ - 0x00d035b0 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ - 0x00d035c0 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ - 0x00d035d0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d035e0 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ - 0x00d035f0 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ - 0x00d03600 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ - 0x00d03610 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ - 0x00d03620 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ - 0x00d03630 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ - 0x00d03640 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d03650 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ - 0x00d03660 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ - 0x00d03670 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d03680 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ - 0x00d03690 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ - 0x00d036a0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d036b0 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ - 0x00d036c0 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ - 0x00d036d0 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ - 0x00d036e0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d036f0 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ - 0x00d03700 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ - 0x00d03710 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ - 0x00d03720 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00d03730 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00d03740 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00d03750 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00d03760 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ - 0x00d03770 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ - 0x00d03780 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ - 0x00d03790 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ - 0x00d037a0 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ - 0x00d037b0 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00d037c0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d037d0 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ - 0x00d037e0 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ - 0x00d037f0 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ - 0x00d03800 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ - 0x00d03810 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ - 0x00d03820 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ - 0x00d03830 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ - 0x00d03840 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ - 0x00d03850 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d03860 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ - 0x00d03870 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ - 0x00d03880 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ - 0x00d03890 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ - 0x00d038a0 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ - 0x00d038b0 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ - 0x00d038c0 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ - 0x00d038d0 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ - 0x00d038e0 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ - 0x00d038f0 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ - 0x00d03900 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ - 0x00d03910 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ - 0x00d03920 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ - 0x00d03930 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ - 0x00d03940 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ - 0x00d03950 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ - 0x00d03960 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ - 0x00d03970 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ - 0x00d03980 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ - 0x00d03990 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ - 0x00d039a0 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ - 0x00d039b0 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ - 0x00d039c0 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ - 0x00d039d0 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ - 0x00d039e0 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ - 0x00d039f0 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ - 0x00d03a00 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ - 0x00d03a10 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ - 0x00d03a20 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ - 0x00d03a30 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00d03a40 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ - 0x00d03a50 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ - 0x00d03a60 20202020 656c7365 200a2020 20202020 else . │ │ │ │ - 0x00d03a70 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00d03a80 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ - 0x00d03a90 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00d03aa0 200a2020 2020666c 6f617420 69734f75 . float isOu │ │ │ │ - 0x00d03ab0 746c696e 65203d20 73746570 28302e35 tline = step(0.5 │ │ │ │ - 0x00d03ac0 2c20755f 69734f75 746c696e 65506173 , u_isOutlinePas │ │ │ │ - 0x00d03ad0 73293b20 0a202020 20666c6f 61742064 s); . float d │ │ │ │ - 0x00d03ae0 65707468 53686966 74203d20 6b426173 epthShift = kBas │ │ │ │ - 0x00d03af0 65446570 74685368 69667420 2a206973 eDepthShift * is │ │ │ │ - 0x00d03b00 4f75746c 696e653b 200a2020 20207665 Outline; . ve │ │ │ │ - 0x00d03b10 63342070 6f73203d 20287665 63342861 c4 pos = (vec4(a │ │ │ │ - 0x00d03b20 5f706f73 6974696f 6e2c2031 2e302920 _position, 1.0) │ │ │ │ - 0x00d03b30 2b207665 63342830 2e302c20 302e302c + vec4(0.0, 0.0, │ │ │ │ - 0x00d03b40 20646570 74685368 6966742c 20302e30 depthShift, 0.0 │ │ │ │ - 0x00d03b50 2929202a 20755f6d 6f64656c 56696577 )) * u_modelView │ │ │ │ - 0x00d03b60 3b200a20 20202076 65633420 73686966 ; . vec4 shif │ │ │ │ - 0x00d03b70 74656450 6f73203d 20766563 3428615f tedPos = vec4(a_ │ │ │ │ - 0x00d03b80 6e6f726d 616c2c20 302e302c 20302e30 normal, 0.0, 0.0 │ │ │ │ - 0x00d03b90 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ - 0x00d03ba0 5f506f73 6974696f 6e203d20 73686966 _Position = shif │ │ │ │ - 0x00d03bb0 74656450 6f73202a 20755f70 726f6a65 tedPos * u_proje │ │ │ │ - 0x00d03bc0 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ - 0x00d03bd0 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ - 0x00d03be0 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ - 0x00d03bf0 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ - 0x00d03c00 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ - 0x00d03c10 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ - 0x00d03c20 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ - 0x00d03c30 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ - 0x00d03c40 64696620 0a202020 20766563 3220636f dif . vec2 co │ │ │ │ - 0x00d03c50 6c6f7254 6578436f 6f726420 3d206d69 lorTexCoord = mi │ │ │ │ - 0x00d03c60 7828615f 636f6c6f 72546578 436f6f72 x(a_colorTexCoor │ │ │ │ - 0x00d03c70 642c2061 5f6f7574 6c696e65 436f6c6f d, a_outlineColo │ │ │ │ - 0x00d03c80 72546578 436f6f72 642c2069 734f7574 rTexCoord, isOut │ │ │ │ - 0x00d03c90 6c696e65 293b200a 20202369 66646566 line); . #ifdef │ │ │ │ - 0x00d03ca0 20454e41 424c455f 56544620 0a202020 ENABLE_VTF . │ │ │ │ - 0x00d03cb0 20765f63 6f6c6f72 203d2074 65787475 v_color = textu │ │ │ │ - 0x00d03cc0 72652875 5f636f6c 6f725465 782c2063 re(u_colorTex, c │ │ │ │ - 0x00d03cd0 6f6c6f72 54657843 6f6f7264 293b200a olorTexCoord); . │ │ │ │ - 0x00d03ce0 20202365 6c736520 0a202020 20765f63 #else . v_c │ │ │ │ - 0x00d03cf0 6f6c6f72 54657843 6f6f7264 203d2063 olorTexCoord = c │ │ │ │ - 0x00d03d00 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ - 0x00d03d10 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ - 0x00d03d20 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ - 0x00d03d30 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ - 0x00d03d40 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d03d50 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d03d60 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d03d70 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d03d80 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d03d90 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d03da0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d03db0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d03dc0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d03dd0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d03de0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d03df0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d03e00 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d03e10 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d03e20 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d03e30 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d03e40 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d03e50 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d03e60 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d03e70 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d03e80 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d03e90 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d03ea0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d03eb0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d03ec0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d03ed0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d03ee0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00d03ef0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00d03f00 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d03f10 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d03f20 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d03f30 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d03f40 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00d03f50 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00d03f60 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00d03f70 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00d03f80 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d03f90 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d03fa0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00d03fb0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00d03fc0 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00d03fd0 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d03fe0 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d03ff0 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00d04000 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d04010 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d04020 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00d04030 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d04040 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d04050 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d04060 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d04070 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d04080 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d04090 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00d040a0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00d040b0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00d040c0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d040d0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00d040e0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d040f0 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d04100 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d04110 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00d04120 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d04130 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00d04140 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00d04150 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00cfc5a0 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ + 0x00cfc5b0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00cfc5c0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00cfc5d0 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ + 0x00cfc5e0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cfc5f0 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ + 0x00cfc600 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ + 0x00cfc610 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ + 0x00cfc620 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ + 0x00cfc630 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ + 0x00cfc640 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ + 0x00cfc650 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00cfc660 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ + 0x00cfc670 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ + 0x00cfc680 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ + 0x00cfc690 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ + 0x00cfc6a0 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ + 0x00cfc6b0 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ + 0x00cfc6c0 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ + 0x00cfc6d0 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ + 0x00cfc6e0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cfc6f0 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ + 0x00cfc700 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ + 0x00cfc710 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00cfc720 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ + 0x00cfc730 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ + 0x00cfc740 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ + 0x00cfc750 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ + 0x00cfc760 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00cfc770 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00cfc780 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00cfc790 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ + 0x00cfc7a0 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ + 0x00cfc7b0 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ + 0x00cfc7c0 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ + 0x00cfc7d0 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00cfc7e0 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00cfc7f0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00cfc800 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ + 0x00cfc810 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ + 0x00cfc820 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ + 0x00cfc830 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ + 0x00cfc840 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ + 0x00cfc850 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ + 0x00cfc860 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00cfc870 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ + 0x00cfc880 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ + 0x00cfc890 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cfc8a0 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ + 0x00cfc8b0 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ + 0x00cfc8c0 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ + 0x00cfc8d0 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ + 0x00cfc8e0 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00cfc8f0 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ + 0x00cfc900 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ + 0x00cfc910 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ + 0x00cfc920 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ + 0x00cfc930 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ + 0x00cfc940 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00cfc950 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ + 0x00cfc960 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ + 0x00cfc970 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ + 0x00cfc980 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ + 0x00cfc990 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ + 0x00cfc9a0 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ + 0x00cfc9b0 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ + 0x00cfc9c0 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ + 0x00cfc9d0 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ + 0x00cfc9e0 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ + 0x00cfc9f0 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ + 0x00cfca00 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ + 0x00cfca10 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ + 0x00cfca20 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ + 0x00cfca30 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ + 0x00cfca40 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ + 0x00cfca50 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00cfca60 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ + 0x00cfca70 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ + 0x00cfca80 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ + 0x00cfca90 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ + 0x00cfcaa0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00cfcab0 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ + 0x00cfcac0 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00cfcad0 20207665 63342070 6f73203d 20766563 vec4 pos = vec │ │ │ │ + 0x00cfcae0 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ + 0x00cfcaf0 202a2075 5f6d6f64 656c5669 6577202a * u_modelView * │ │ │ │ + 0x00cfcb00 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00cfcb10 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00cfcb20 3d206170 706c7950 69766f74 5472616e = applyPivotTran │ │ │ │ + 0x00cfcb30 73666f72 6d28706f 732c2075 5f706976 sform(pos, u_piv │ │ │ │ + 0x00cfcb40 6f745472 616e7366 6f726d2c 20302e30 otTransform, 0.0 │ │ │ │ + 0x00cfcb50 293b200a 20202369 66646566 20454e41 ); . #ifdef ENA │ │ │ │ + 0x00cfcb60 424c455f 56544620 0a202020 20765f63 BLE_VTF . v_c │ │ │ │ + 0x00cfcb70 6f6c6f72 203d2074 65787475 72652875 olor = texture(u │ │ │ │ + 0x00cfcb80 5f636f6c 6f725465 782c2061 5f636f6c _colorTex, a_col │ │ │ │ + 0x00cfcb90 6f725465 78436f6f 72647329 3b200a20 orTexCoords); . │ │ │ │ + 0x00cfcba0 2023656c 7365200a 20202020 765f636f #else . v_co │ │ │ │ + 0x00cfcbb0 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ + 0x00cfcbc0 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00cfcbd0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00cfcbe0 765f6d61 736b5465 78436f6f 72647320 v_maskTexCoords │ │ │ │ + 0x00cfcbf0 3d20615f 6d61736b 54657843 6f6f7264 = a_maskTexCoord │ │ │ │ + 0x00cfcc00 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ + 0x00cfcc10 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cfcc20 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cfcc30 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cfcc40 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cfcc50 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cfcc60 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cfcc70 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cfcc80 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cfcc90 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cfcca0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cfccb0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cfccc0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cfccd0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cfcce0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cfccf0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cfcd00 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cfcd10 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cfcd20 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cfcd30 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cfcd40 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cfcd50 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cfcd60 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00cfcd70 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00cfcd80 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00cfcd90 6f725465 78436f6f 7264733b 200a2020 orTexCoords; . │ │ │ │ + 0x00cfcda0 6f757420 76656334 20765f6f 66667365 out vec4 v_offse │ │ │ │ + 0x00cfcdb0 74303b20 0a20206f 75742076 65633420 t0; . out vec4 │ │ │ │ + 0x00cfcdc0 765f6f66 66736574 313b200a 20206f75 v_offset1; . ou │ │ │ │ + 0x00cfcdd0 74207665 63342076 5f6f6666 73657432 t vec4 v_offset2 │ │ │ │ + 0x00cfcde0 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00cfcdf0 3420755f 6672616d 65627566 6665724d 4 u_framebufferM │ │ │ │ + 0x00cfce00 65747269 63733b20 0a202063 6f6e7374 etrics; . const │ │ │ │ + 0x00cfce10 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00cfce20 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00cfce30 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00cfce40 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00cfce50 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00cfce60 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00cfce70 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00cfce80 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00cfce90 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cfcea0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00cfceb0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00cfcec0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00cfced0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00cfcee0 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00cfcef0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00cfcf00 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00cfcf10 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00cfcf20 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00cfcf30 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cfcf40 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00cfcf50 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00cfcf60 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00cfcf70 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00cfcf80 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00cfcf90 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00cfcfa0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00cfcfb0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00cfcfc0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00cfcfd0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cfcfe0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00cfcff0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00cfd000 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cfd010 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00cfd020 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00cfd030 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00cfd040 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00cfd050 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00cfd060 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00cfd070 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00cfd080 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00cfd090 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00cfd0a0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00cfd0b0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00cfd0c0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00cfd0d0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00cfd0e0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00cfd0f0 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00cfd100 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00cfd110 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00cfd120 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00cfd130 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00cfd140 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00cfd150 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00cfd160 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00cfd170 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00cfd180 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00cfd190 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00cfd1a0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00cfd1b0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00cfd1c0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00cfd1d0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00cfd1e0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00cfd1f0 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00cfd200 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00cfd210 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00cfd220 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00cfd230 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00cfd240 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00cfd250 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00cfd260 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00cfd270 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00cfd280 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00cfd290 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00cfd2a0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00cfd2b0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00cfd2c0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00cfd2d0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00cfd2e0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00cfd2f0 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00cfd300 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00cfd310 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00cfd320 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00cfd330 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00cfd340 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00cfd350 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00cfd360 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00cfd370 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00cfd380 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00cfd390 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00cfd3a0 200a2020 7b200a20 20202076 5f636f6c . { . v_col │ │ │ │ + 0x00cfd3b0 6f725465 78436f6f 72647320 3d20615f orTexCoords = a_ │ │ │ │ + 0x00cfd3c0 74636f6f 72643b20 0a202020 20765f6f tcoord; . v_o │ │ │ │ + 0x00cfd3d0 66667365 7430203d 20755f66 72616d65 ffset0 = u_frame │ │ │ │ + 0x00cfd3e0 62756666 65724d65 74726963 732e7879 bufferMetrics.xy │ │ │ │ + 0x00cfd3f0 7879202a 20766563 34282d31 2e302c20 xy * vec4(-1.0, │ │ │ │ + 0x00cfd400 302e302c 20302e30 2c202d31 2e302920 0.0, 0.0, -1.0) │ │ │ │ + 0x00cfd410 2b20615f 74636f6f 72642e78 7978793b + a_tcoord.xyxy; │ │ │ │ + 0x00cfd420 200a2020 2020765f 6f666673 65743120 . v_offset1 │ │ │ │ + 0x00cfd430 3d20755f 6672616d 65627566 6665724d = u_framebufferM │ │ │ │ + 0x00cfd440 65747269 63732e78 79787920 2a207665 etrics.xyxy * ve │ │ │ │ + 0x00cfd450 63342820 312e302c 20302e30 2c20302e c4( 1.0, 0.0, 0. │ │ │ │ + 0x00cfd460 302c2020 312e3029 202b2061 5f74636f 0, 1.0) + a_tco │ │ │ │ + 0x00cfd470 6f72642e 78797879 3b200a20 20202076 ord.xyxy; . v │ │ │ │ + 0x00cfd480 5f6f6666 73657432 203d2075 5f667261 _offset2 = u_fra │ │ │ │ + 0x00cfd490 6d656275 66666572 4d657472 6963732e mebufferMetrics. │ │ │ │ + 0x00cfd4a0 78797879 202a2076 65633428 2d322e30 xyxy * vec4(-2.0 │ │ │ │ + 0x00cfd4b0 2c20302e 302c2030 2e302c20 2d322e30 , 0.0, 0.0, -2.0 │ │ │ │ + 0x00cfd4c0 29202b20 615f7463 6f6f7264 2e787978 ) + a_tcoord.xyx │ │ │ │ + 0x00cfd4d0 793b200a 20202020 676c5f50 6f736974 y; . gl_Posit │ │ │ │ + 0x00cfd4e0 696f6e20 3d207665 63342861 5f706f73 ion = vec4(a_pos │ │ │ │ + 0x00cfd4f0 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ + 0x00cfd500 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ + 0x00cfd510 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cfd520 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cfd530 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cfd540 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cfd550 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cfd560 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cfd570 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cfd580 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cfd590 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cfd5a0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cfd5b0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cfd5c0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cfd5d0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cfd5e0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cfd5f0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cfd600 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cfd610 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cfd620 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cfd630 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cfd640 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cfd650 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cfd660 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00cfd670 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00cfd680 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00cfd690 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00cfd6a0 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00cfd6b0 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00cfd6c0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00cfd6d0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00cfd6e0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00cfd6f0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00cfd700 666f726d 20766563 3220755f 636f6e74 form vec2 u_cont │ │ │ │ + 0x00cfd710 72617374 47616d6d 613b200a 2020756e rastGamma; . un │ │ │ │ + 0x00cfd720 69666f72 6d207665 63322075 5f706f73 iform vec2 u_pos │ │ │ │ + 0x00cfd730 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ + 0x00cfd740 6d20666c 6f617420 755f6973 4f75746c m float u_isOutl │ │ │ │ + 0x00cfd750 696e6550 6173733b 200a2020 756e6966 inePass; . unif │ │ │ │ + 0x00cfd760 6f726d20 666c6f61 7420755f 6f706163 orm float u_opac │ │ │ │ + 0x00cfd770 6974793b 200a2020 756e6966 6f726d20 ity; . uniform │ │ │ │ + 0x00cfd780 666c6f61 7420755f 6c656e67 74683b20 float u_length; │ │ │ │ + 0x00cfd790 0a202063 6f6e7374 20666c6f 6174206b . const float k │ │ │ │ + 0x00cfd7a0 53686170 65436f6f 72645363 616c6172 ShapeCoordScalar │ │ │ │ + 0x00cfd7b0 203d2031 3030302e 303b200a 20207665 = 1000.0; . ve │ │ │ │ + 0x00cfd7c0 63342061 70706c79 5069766f 74547261 c4 applyPivotTra │ │ │ │ + 0x00cfd7d0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00cfd7e0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00cfd7f0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00cfd800 766f7452 65616c5a 29200a20 207b200a votRealZ) . { . │ │ │ │ + 0x00cfd810 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00cfd820 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00cfd830 743b200a 20202020 666c6f61 74207720 t; . float w │ │ │ │ + 0x00cfd840 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ + 0x00cfd850 6f742e77 3b200a20 20202074 72616e73 ot.w; . trans │ │ │ │ + 0x00cfd860 666f726d 65645069 766f742e 78797720 formedPivot.xyw │ │ │ │ + 0x00cfd870 3d202870 69766f74 5472616e 73666f72 = (pivotTransfor │ │ │ │ + 0x00cfd880 6d202a20 76656334 28747261 6e73666f m * vec4(transfo │ │ │ │ + 0x00cfd890 726d6564 5069766f 742e7879 2c207069 rmedPivot.xy, pi │ │ │ │ + 0x00cfd8a0 766f7452 65616c5a 2c207729 292e7879 votRealZ, w)).xy │ │ │ │ + 0x00cfd8b0 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00cfd8c0 6d656450 69766f74 2e7a202a 3d207472 medPivot.z *= tr │ │ │ │ + 0x00cfd8d0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00cfd8e0 202f2077 3b200a20 20236966 64656620 / w; . #ifdef │ │ │ │ + 0x00cfd8f0 56554c4b 414e200a 20202020 7472616e VULKAN . tran │ │ │ │ + 0x00cfd900 73666f72 6d656450 69766f74 2e79203d sformedPivot.y = │ │ │ │ + 0x00cfd910 202d7472 616e7366 6f726d65 64506976 -transformedPiv │ │ │ │ + 0x00cfd920 6f742e79 3b200a20 20202074 72616e73 ot.y; . trans │ │ │ │ + 0x00cfd930 666f726d 65645069 766f742e 7a203d20 formedPivot.z = │ │ │ │ + 0x00cfd940 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00cfd950 742e7a20 202b2074 72616e73 666f726d t.z + transform │ │ │ │ + 0x00cfd960 65645069 766f742e 7729202f 20322e30 edPivot.w) / 2.0 │ │ │ │ + 0x00cfd970 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00cfd980 20726574 75726e20 7472616e 73666f72 return transfor │ │ │ │ + 0x00cfd990 6d656450 69766f74 3b200a20 207d200a medPivot; . } . │ │ │ │ + 0x00cfd9a0 20207665 63342061 70706c79 42696c6c vec4 applyBill │ │ │ │ + 0x00cfd9b0 626f6172 64506976 6f745472 616e7366 boardPivotTransf │ │ │ │ + 0x00cfd9c0 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00cfd9d0 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00cfd9e0 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00cfd9f0 5265616c 5a2c2076 65633220 6f666673 RealZ, vec2 offs │ │ │ │ + 0x00cfda00 65742920 0a20207b 200a2020 2020666c et) . { . fl │ │ │ │ + 0x00cfda10 6f617420 6c6f6769 635a203d 20706976 oat logicZ = piv │ │ │ │ + 0x00cfda20 6f742e7a 202f2070 69766f74 2e773b20 ot.z / pivot.w; │ │ │ │ + 0x00cfda30 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00cfda40 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00cfda50 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00cfda60 63342870 69766f74 2e78792c 20706976 c4(pivot.xy, piv │ │ │ │ + 0x00cfda70 6f745265 616c5a2c 20706976 6f742e77 otRealZ, pivot.w │ │ │ │ + 0x00cfda80 293b200a 20202020 76656334 20736361 ); . vec4 sca │ │ │ │ + 0x00cfda90 6c65203d 20706976 6f745472 616e7366 le = pivotTransf │ │ │ │ + 0x00cfdaa0 6f726d20 2a207665 63342831 2e302c20 orm * vec4(1.0, │ │ │ │ + 0x00cfdab0 2d312e30 2c20302e 302c2031 2e30293b -1.0, 0.0, 1.0); │ │ │ │ + 0x00cfdac0 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ + 0x00cfdad0 696f6e20 3d207665 63342874 72616e73 ion = vec4(trans │ │ │ │ + 0x00cfdae0 666f726d 65645069 766f742e 7879202f formedPivot.xy / │ │ │ │ + 0x00cfdaf0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00cfdb00 742e772c 206c6f67 69635a2c 20312e30 t.w, logicZ, 1.0 │ │ │ │ + 0x00cfdb10 29202b20 76656334 286f6666 73657420 ) + vec4(offset │ │ │ │ + 0x00cfdb20 2f207363 616c652e 77202a20 7363616c / scale.w * scal │ │ │ │ + 0x00cfdb30 652e782c 20302e30 2c20302e 30293b20 e.x, 0.0, 0.0); │ │ │ │ + 0x00cfdb40 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00cfdb50 200a2020 2020706f 73697469 6f6e2e79 . position.y │ │ │ │ + 0x00cfdb60 203d202d 706f7369 74696f6e 2e793b20 = -position.y; │ │ │ │ + 0x00cfdb70 0a202020 20706f73 6974696f 6e2e7a20 . position.z │ │ │ │ + 0x00cfdb80 3d202870 6f736974 696f6e2e 7a20202b = (position.z + │ │ │ │ + 0x00cfdb90 20706f73 6974696f 6e2e7729 202f2032 position.w) / 2 │ │ │ │ + 0x00cfdba0 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00cfdbb0 20202072 65747572 6e20706f 73697469 return positi │ │ │ │ + 0x00cfdbc0 6f6e3b20 0a20207d 200a2020 76656332 on; . } . vec2 │ │ │ │ + 0x00cfdbd0 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00cfdbe0 726d6564 41786973 506f7328 76656332 rmedAxisPos(vec2 │ │ │ │ + 0x00cfdbf0 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00cfdc00 2c207665 63322073 68696674 6564506f , vec2 shiftedPo │ │ │ │ + 0x00cfdc10 732c206d 61743420 6d6f6465 6c566965 s, mat4 modelVie │ │ │ │ + 0x00cfdc20 772c2066 6c6f6174 2068616c 66576964 w, float halfWid │ │ │ │ + 0x00cfdc30 74682920 0a20207b 200a2020 20207665 th) . { . ve │ │ │ │ + 0x00cfdc40 63322070 203d2028 76656334 28736869 c2 p = (vec4(shi │ │ │ │ + 0x00cfdc50 66746564 506f732c 20302e30 2c20312e ftedPos, 0.0, 1. │ │ │ │ + 0x00cfdc60 3029202a 206d6f64 656c5669 6577292e 0) * modelView). │ │ │ │ + 0x00cfdc70 78793b20 0a202020 20766563 32206420 xy; . vec2 d │ │ │ │ + 0x00cfdc80 3d207020 2d206f72 6967696e 616c4178 = p - originalAx │ │ │ │ + 0x00cfdc90 6973506f 733b200a 20202020 69662028 isPos; . if ( │ │ │ │ + 0x00cfdca0 646f7428 642c2064 2920213d 20302e30 dot(d, d) != 0.0 │ │ │ │ + 0x00cfdcb0 29200a20 20202020 20726574 75726e20 ) . return │ │ │ │ + 0x00cfdcc0 6f726967 696e616c 41786973 506f7320 originalAxisPos │ │ │ │ + 0x00cfdcd0 2b206e6f 726d616c 697a6528 6429202a + normalize(d) * │ │ │ │ + 0x00cfdce0 2068616c 66576964 74683b20 0a202020 halfWidth; . │ │ │ │ + 0x00cfdcf0 20656c73 65200a20 20202020 20726574 else . ret │ │ │ │ + 0x00cfdd00 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ + 0x00cfdd10 506f733b 200a2020 7d200a20 20766f69 Pos; . } . voi │ │ │ │ + 0x00cfdd20 64206d61 696e2829 200a2020 7b200a20 d main() . { . │ │ │ │ + 0x00cfdd30 20202067 6c5f506f 73697469 6f6e203d gl_Position = │ │ │ │ + 0x00cfdd40 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ + 0x00cfdd50 202b2061 5f706f73 6974696f 6e202b20 + a_position + │ │ │ │ + 0x00cfdd60 755f6c65 6e677468 202a2061 5f6e6f72 u_length * a_nor │ │ │ │ + 0x00cfdd70 6d616c2c 20302c20 3129202a 20755f70 mal, 0, 1) * u_p │ │ │ │ + 0x00cfdd80 726f6a65 6374696f 6e3b200a 20202369 rojection; . #i │ │ │ │ + 0x00cfdd90 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00cfdda0 20676c5f 506f7369 74696f6e 2e79203d gl_Position.y = │ │ │ │ + 0x00cfddb0 202d676c 5f506f73 6974696f 6e2e793b -gl_Position.y; │ │ │ │ + 0x00cfddc0 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ + 0x00cfddd0 6e2e7a20 3d202867 6c5f506f 73697469 n.z = (gl_Positi │ │ │ │ + 0x00cfdde0 6f6e2e7a 20202b20 676c5f50 6f736974 on.z + gl_Posit │ │ │ │ + 0x00cfddf0 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ + 0x00cfde00 2023656e 64696620 0a202020 20765f63 #endif . v_c │ │ │ │ + 0x00cfde10 6f6c6f72 54657843 6f6f7264 73203d20 olorTexCoords = │ │ │ │ + 0x00cfde20 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00cfde30 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ + 0x00cfde40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cfde50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cfde60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cfde70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cfde80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cfde90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cfdea0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cfdeb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cfdec0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cfded0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cfdee0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cfdef0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cfdf00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cfdf10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cfdf20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cfdf30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cfdf40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cfdf50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cfdf60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cfdf70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cfdf80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cfdf90 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ + 0x00cfdfa0 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ + 0x00cfdfb0 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ + 0x00cfdfc0 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ + 0x00cfdfd0 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00cfdfe0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00cfdff0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00cfe000 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00cfe010 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00cfe020 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00cfe030 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00cfe040 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ + 0x00cfe050 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00cfe060 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ + 0x00cfe070 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00cfe080 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ + 0x00cfe090 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ + 0x00cfe0a0 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ + 0x00cfe0b0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00cfe0c0 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ + 0x00cfe0d0 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ + 0x00cfe0e0 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00cfe0f0 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00cfe100 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00cfe110 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00cfe120 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00cfe130 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00cfe140 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00cfe150 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00cfe160 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00cfe170 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00cfe180 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00cfe190 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cfe1a0 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00cfe1b0 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00cfe1c0 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00cfe1d0 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00cfe1e0 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00cfe1f0 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00cfe200 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00cfe210 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00cfe220 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00cfe230 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00cfe240 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00cfe250 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00cfe260 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cfe270 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00cfe280 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00cfe290 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cfe2a0 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00cfe2b0 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00cfe2c0 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00cfe2d0 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00cfe2e0 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00cfe2f0 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00cfe300 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00cfe310 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00cfe320 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00cfe330 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00cfe340 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00cfe350 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00cfe360 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00cfe370 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00cfe380 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00cfe390 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00cfe3a0 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00cfe3b0 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00cfe3c0 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00cfe3d0 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00cfe3e0 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00cfe3f0 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00cfe400 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00cfe410 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00cfe420 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00cfe430 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00cfe440 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cfe450 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00cfe460 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00cfe470 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00cfe480 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00cfe490 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00cfe4a0 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00cfe4b0 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00cfe4c0 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00cfe4d0 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00cfe4e0 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00cfe4f0 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00cfe500 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00cfe510 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00cfe520 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00cfe530 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00cfe540 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00cfe550 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00cfe560 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00cfe570 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00cfe580 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00cfe590 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00cfe5a0 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00cfe5b0 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00cfe5c0 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00cfe5d0 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00cfe5e0 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00cfe5f0 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00cfe600 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00cfe610 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00cfe620 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00cfe630 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00cfe640 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00cfe650 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00cfe660 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00cfe670 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00cfe680 20666c6f 61742073 696e5620 3d207369 float sinV = si │ │ │ │ + 0x00cfe690 6e28755f 617a696d 7574293b 200a2020 n(u_azimut); . │ │ │ │ + 0x00cfe6a0 2020666c 6f617420 636f7356 203d2063 float cosV = c │ │ │ │ + 0x00cfe6b0 6f732875 5f617a69 6d757429 3b200a20 os(u_azimut); . │ │ │ │ + 0x00cfe6c0 2020206d 61743420 726f7461 74696f6e mat4 rotation │ │ │ │ + 0x00cfe6d0 3b200a20 20202072 6f746174 696f6e5b ; . rotation[ │ │ │ │ + 0x00cfe6e0 305d203d 20766563 3428636f 73562c20 0] = vec4(cosV, │ │ │ │ + 0x00cfe6f0 73696e56 2c20302e 302c2030 2e30293b sinV, 0.0, 0.0); │ │ │ │ + 0x00cfe700 200a2020 2020726f 74617469 6f6e5b31 . rotation[1 │ │ │ │ + 0x00cfe710 5d203d20 76656334 282d7369 6e562c20 ] = vec4(-sinV, │ │ │ │ + 0x00cfe720 636f7356 2c20302e 302c2030 2e30293b cosV, 0.0, 0.0); │ │ │ │ + 0x00cfe730 200a2020 2020726f 74617469 6f6e5b32 . rotation[2 │ │ │ │ + 0x00cfe740 5d203d20 76656334 28302e30 2c20302e ] = vec4(0.0, 0. │ │ │ │ + 0x00cfe750 302c2031 2e302c20 302e3029 3b200a20 0, 1.0, 0.0); . │ │ │ │ + 0x00cfe760 20202072 6f746174 696f6e5b 335d203d rotation[3] = │ │ │ │ + 0x00cfe770 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ + 0x00cfe780 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00cfe790 76656334 20706f73 203d2076 65633428 vec4 pos = vec4( │ │ │ │ + 0x00cfe7a0 755f706f 73697469 6f6e2e78 797a2c20 u_position.xyz, │ │ │ │ + 0x00cfe7b0 312e3029 202a2075 5f6d6f64 656c5669 1.0) * u_modelVi │ │ │ │ + 0x00cfe7c0 65773b20 0a202020 20766563 34206e6f ew; . vec4 no │ │ │ │ + 0x00cfe7d0 726d616c 203d2076 65633428 615f6e6f rmal = vec4(a_no │ │ │ │ + 0x00cfe7e0 726d616c 2c20302c 2030293b 200a2020 rmal, 0, 0); . │ │ │ │ + 0x00cfe7f0 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ + 0x00cfe800 73203d20 6e6f726d 616c202a 20726f74 s = normal * rot │ │ │ │ + 0x00cfe810 6174696f 6e202b20 706f733b 200a2020 ation + pos; . │ │ │ │ + 0x00cfe820 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00cfe830 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00cfe840 6f726d28 73686966 74656450 6f73202a orm(shiftedPos * │ │ │ │ + 0x00cfe850 20755f70 726f6a65 6374696f 6e2c2075 u_projection, u │ │ │ │ + 0x00cfe860 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ + 0x00cfe870 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ + 0x00cfe880 6c6f7254 6578436f 6f726473 203d2061 lorTexCoords = a │ │ │ │ + 0x00cfe890 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00cfe8a0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00cfe8b0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cfe8c0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cfe8d0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cfe8e0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cfe8f0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cfe900 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cfe910 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cfe920 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cfe930 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cfe940 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cfe950 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cfe960 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cfe970 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cfe980 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cfe990 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cfe9a0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cfe9b0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cfe9c0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cfe9d0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cfe9e0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cfe9f0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cfea00 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00cfea10 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00cfea20 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00cfea30 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00cfea40 200a2020 696e2076 65633320 615f6c65 . in vec3 a_le │ │ │ │ + 0x00cfea50 6e677468 3b200a20 20236966 64656620 ngth; . #ifdef │ │ │ │ + 0x00cfea60 454e4142 4c455f56 5446200a 20206f75 ENABLE_VTF . ou │ │ │ │ + 0x00cfea70 74204c4f 575f5020 76656334 20765f63 t LOW_P vec4 v_c │ │ │ │ + 0x00cfea80 6f6c6f72 3b200a20 2023656c 7365200a olor; . #else . │ │ │ │ + 0x00cfea90 20206f75 74207665 63322076 5f636f6c out vec2 v_col │ │ │ │ + 0x00cfeaa0 6f725465 78436f6f 72643b20 0a202023 orTexCoord; . # │ │ │ │ + 0x00cfeab0 656e6469 66200a20 206f7574 20666c6f endif . out flo │ │ │ │ + 0x00cfeac0 61742076 5f6c656e 67746859 3b200a20 at v_lengthY; . │ │ │ │ + 0x00cfead0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00cfeae0 6d6f6465 6c566965 773b200a 2020756e modelView; . un │ │ │ │ + 0x00cfeaf0 69666f72 6d206d61 74342075 5f70726f iform mat4 u_pro │ │ │ │ + 0x00cfeb00 6a656374 696f6e3b 200a2020 756e6966 jection; . unif │ │ │ │ + 0x00cfeb10 6f726d20 6d617434 20755f70 69766f74 orm mat4 u_pivot │ │ │ │ + 0x00cfeb20 5472616e 73666f72 6d3b200a 2020756e Transform; . un │ │ │ │ + 0x00cfeb30 69666f72 6d207665 63342075 5f706f73 iform vec4 u_pos │ │ │ │ + 0x00cfeb40 6974696f 6e3b200a 2020756e 69666f72 ition; . unifor │ │ │ │ + 0x00cfeb50 6d207665 63322075 5f6c696e 65506172 m vec2 u_linePar │ │ │ │ + 0x00cfeb60 616d733b 200a2020 756e6966 6f726d20 ams; . uniform │ │ │ │ + 0x00cfeb70 666c6f61 7420755f 61636375 72616379 float u_accuracy │ │ │ │ + 0x00cfeb80 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00cfeb90 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00cfeba0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00cfebb0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00cfebc0 6f726d20 666c6f61 7420755f 617a696d orm float u_azim │ │ │ │ + 0x00cfebd0 75743b20 0a202023 69666465 6620454e ut; . #ifdef EN │ │ │ │ + 0x00cfebe0 41424c45 5f565446 200a2020 756e6966 ABLE_VTF . unif │ │ │ │ + 0x00cfebf0 6f726d20 73616d70 6c657232 4420755f orm sampler2D u_ │ │ │ │ + 0x00cfec00 636f6c6f 72546578 3b200a20 2023656e colorTex; . #en │ │ │ │ + 0x00cfec10 64696620 0a202063 6f6e7374 20666c6f dif . const flo │ │ │ │ + 0x00cfec20 6174206b 416e7469 616c6961 73696e67 at kAntialiasing │ │ │ │ + 0x00cfec30 54687265 73686f6c 64203d20 302e3932 Threshold = 0.92 │ │ │ │ + 0x00cfec40 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00cfec50 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00cfec60 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00cfec70 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ + 0x00cfec80 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ + 0x00cfec90 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ + 0x00cfeca0 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ + 0x00cfecb0 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ + 0x00cfecc0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00cfecd0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00cfece0 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ + 0x00cfecf0 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ + 0x00cfed00 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ + 0x00cfed10 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00cfed20 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ + 0x00cfed30 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ + 0x00cfed40 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ + 0x00cfed50 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ + 0x00cfed60 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ + 0x00cfed70 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ + 0x00cfed80 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00cfed90 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ + 0x00cfeda0 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ + 0x00cfedb0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00cfedc0 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ + 0x00cfedd0 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ + 0x00cfede0 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00cfedf0 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ + 0x00cfee00 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ + 0x00cfee10 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ + 0x00cfee20 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00cfee30 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ + 0x00cfee40 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ + 0x00cfee50 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ + 0x00cfee60 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00cfee70 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00cfee80 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00cfee90 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00cfeea0 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ + 0x00cfeeb0 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ + 0x00cfeec0 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ + 0x00cfeed0 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ + 0x00cfeee0 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ + 0x00cfeef0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00cfef00 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00cfef10 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ + 0x00cfef20 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ + 0x00cfef30 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ + 0x00cfef40 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ + 0x00cfef50 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ + 0x00cfef60 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ + 0x00cfef70 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ + 0x00cfef80 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ + 0x00cfef90 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00cfefa0 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ + 0x00cfefb0 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ + 0x00cfefc0 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ + 0x00cfefd0 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ + 0x00cfefe0 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ + 0x00cfeff0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00cff000 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ + 0x00cff010 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ + 0x00cff020 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ + 0x00cff030 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ + 0x00cff040 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ + 0x00cff050 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00cff060 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ + 0x00cff070 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ + 0x00cff080 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ + 0x00cff090 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ + 0x00cff0a0 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ + 0x00cff0b0 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ + 0x00cff0c0 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ + 0x00cff0d0 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ + 0x00cff0e0 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ + 0x00cff0f0 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ + 0x00cff100 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ + 0x00cff110 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ + 0x00cff120 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ + 0x00cff130 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ + 0x00cff140 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ + 0x00cff150 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ + 0x00cff160 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ + 0x00cff170 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00cff180 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ + 0x00cff190 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ + 0x00cff1a0 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ + 0x00cff1b0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00cff1c0 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ + 0x00cff1d0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00cff1e0 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ + 0x00cff1f0 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ + 0x00cff200 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ + 0x00cff210 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ + 0x00cff220 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ + 0x00cff230 200a2020 20207665 6332206c 656e203d . vec2 len = │ │ │ │ + 0x00cff240 20766563 3228615f 6c656e67 74682e78 vec2(a_length.x │ │ │ │ + 0x00cff250 2c20615f 6c656e67 74682e7a 293b200a , a_length.z); . │ │ │ │ + 0x00cff260 20202020 69662028 646f7428 615f6e6f if (dot(a_no │ │ │ │ + 0x00cff270 726d616c 2c20615f 6e6f726d 616c2920 rmal, a_normal) │ │ │ │ + 0x00cff280 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ + 0x00cff290 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ + 0x00cff2a0 3d20615f 6e6f726d 616c202a 20755f6c = a_normal * u_l │ │ │ │ + 0x00cff2b0 696e6550 6172616d 732e783b 200a2020 ineParams.x; . │ │ │ │ + 0x00cff2c0 20202020 7472616e 73666f72 6d656441 transformedA │ │ │ │ + 0x00cff2d0 78697350 6f73203d 2063616c 634c696e xisPos = calcLin │ │ │ │ + 0x00cff2e0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00cff2f0 506f7328 7472616e 73666f72 6d656441 Pos(transformedA │ │ │ │ + 0x00cff300 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ + 0x00cff310 6f6e2e78 79202b20 6e6f726d 2c200a20 on.xy + norm, . │ │ │ │ + 0x00cff320 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cff330 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cff340 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cff350 20202020 20755f6d 6f64656c 56696577 u_modelView │ │ │ │ + 0x00cff360 2c206c65 6e677468 286e6f72 6d29293b , length(norm)); │ │ │ │ + 0x00cff370 200a2020 20202020 69662028 755f6c69 . if (u_li │ │ │ │ + 0x00cff380 6e655061 72616d73 2e792021 3d20302e neParams.y != 0. │ │ │ │ + 0x00cff390 3029200a 20202020 20202020 6c656e20 0) . len │ │ │ │ + 0x00cff3a0 3d207665 63322861 5f6c656e 6774682e = vec2(a_length. │ │ │ │ + 0x00cff3b0 78202b20 615f6c65 6e677468 2e79202a x + a_length.y * │ │ │ │ + 0x00cff3c0 20755f6c 696e6550 6172616d 732e792c u_lineParams.y, │ │ │ │ + 0x00cff3d0 20615f6c 656e6774 682e7a29 3b200a20 a_length.z); . │ │ │ │ + 0x00cff3e0 2020207d 200a2020 23696664 65662045 } . #ifdef E │ │ │ │ + 0x00cff3f0 4e41424c 455f5654 46200a20 20202076 NABLE_VTF . v │ │ │ │ + 0x00cff400 5f636f6c 6f72203d 20746578 74757265 _color = texture │ │ │ │ + 0x00cff410 28755f63 6f6c6f72 5465782c 20615f63 (u_colorTex, a_c │ │ │ │ + 0x00cff420 6f6c6f72 54657843 6f6f7264 73293b20 olorTexCoords); │ │ │ │ + 0x00cff430 0a202023 656c7365 200a2020 2020765f . #else . v_ │ │ │ │ + 0x00cff440 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ + 0x00cff450 615f636f 6c6f7254 6578436f 6f726473 a_colorTexCoords │ │ │ │ + 0x00cff460 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00cff470 20765f6c 656e6774 6859203d 206c656e v_lengthY = len │ │ │ │ + 0x00cff480 2e793b20 0a202020 20766563 3420706f .y; . vec4 po │ │ │ │ + 0x00cff490 73203d20 76656334 28747261 6e73666f s = vec4(transfo │ │ │ │ + 0x00cff4a0 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ + 0x00cff4b0 6f736974 696f6e2e 7a2c2031 2e302920 osition.z, 1.0) │ │ │ │ + 0x00cff4c0 2a20755f 70726f6a 65637469 6f6e3b20 * u_projection; │ │ │ │ + 0x00cff4d0 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ + 0x00cff4e0 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ + 0x00cff4f0 6e73666f 726d2870 6f732c20 755f7069 nsform(pos, u_pi │ │ │ │ + 0x00cff500 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00cff510 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ + 0x00cff520 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00cff530 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00cff540 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00cff550 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00cff560 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00cff570 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00cff580 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00cff590 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00cff5a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00cff5b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00cff5c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00cff5d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00cff5e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00cff5f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00cff600 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00cff610 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00cff620 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00cff630 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00cff640 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00cff650 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00cff660 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00cff670 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00cff680 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00cff690 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00cff6a0 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00cff6b0 0a202069 6e207665 63342061 5f6d6173 . in vec4 a_mas │ │ │ │ + 0x00cff6c0 6b546578 436f6f72 643b200a 20206f75 kTexCoord; . ou │ │ │ │ + 0x00cff6d0 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ + 0x00cff6e0 78436f6f 72643b20 0a20206f 75742076 xCoord; . out v │ │ │ │ + 0x00cff6f0 65633220 765f6d61 736b5465 78436f6f ec2 v_maskTexCoo │ │ │ │ + 0x00cff700 72643b20 0a202075 6e69666f 726d206d rd; . uniform m │ │ │ │ + 0x00cff710 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ + 0x00cff720 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00cff730 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00cff740 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00cff750 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ + 0x00cff760 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00cff770 20755f63 6f6e7472 61737447 616d6d61 u_contrastGamma │ │ │ │ + 0x00cff780 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00cff790 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ + 0x00cff7a0 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00cff7b0 5f7a5363 616c653b 200a2020 756e6966 _zScale; . unif │ │ │ │ + 0x00cff7c0 6f726d20 666c6f61 7420755f 696e7465 orm float u_inte │ │ │ │ + 0x00cff7d0 72706f6c 6174696f 6e3b200a 2020756e rpolation; . un │ │ │ │ + 0x00cff7e0 69666f72 6d20666c 6f617420 755f6973 iform float u_is │ │ │ │ + 0x00cff7f0 4f75746c 696e6550 6173733b 200a2020 OutlinePass; . │ │ │ │ + 0x00cff800 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00cff810 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00cff820 31303030 2e303b20 0a202076 65633420 1000.0; . vec4 │ │ │ │ + 0x00cff830 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00cff840 6f726d28 76656334 20706976 6f742c20 orm(vec4 pivot, │ │ │ │ + 0x00cff850 6d617434 20706976 6f745472 616e7366 mat4 pivotTransf │ │ │ │ + 0x00cff860 6f726d2c 20666c6f 61742070 69766f74 orm, float pivot │ │ │ │ + 0x00cff870 5265616c 5a29200a 20207b20 0a202020 RealZ) . { . │ │ │ │ + 0x00cff880 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00cff890 64506976 6f74203d 20706976 6f743b20 dPivot = pivot; │ │ │ │ + 0x00cff8a0 0a202020 20666c6f 61742077 203d2074 . float w = t │ │ │ │ + 0x00cff8b0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cff8c0 773b200a 20202020 7472616e 73666f72 w; . transfor │ │ │ │ + 0x00cff8d0 6d656450 69766f74 2e787977 203d2028 medPivot.xyw = ( │ │ │ │ + 0x00cff8e0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00cff8f0 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00cff900 64506976 6f742e78 792c2070 69766f74 dPivot.xy, pivot │ │ │ │ + 0x00cff910 5265616c 5a2c2077 29292e78 79773b20 RealZ, w)).xyw; │ │ │ │ + 0x00cff920 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00cff930 5069766f 742e7a20 2a3d2074 72616e73 Pivot.z *= trans │ │ │ │ + 0x00cff940 666f726d 65645069 766f742e 77202f20 formedPivot.w / │ │ │ │ + 0x00cff950 773b200a 20202369 66646566 2056554c w; . #ifdef VUL │ │ │ │ + 0x00cff960 4b414e20 0a202020 20747261 6e73666f KAN . transfo │ │ │ │ + 0x00cff970 726d6564 5069766f 742e7920 3d202d74 rmedPivot.y = -t │ │ │ │ + 0x00cff980 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00cff990 793b200a 20202020 7472616e 73666f72 y; . transfor │ │ │ │ + 0x00cff9a0 6d656450 69766f74 2e7a203d 20287472 medPivot.z = (tr │ │ │ │ + 0x00cff9b0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00cff9c0 20202b20 7472616e 73666f72 6d656450 + transformedP │ │ │ │ + 0x00cff9d0 69766f74 2e772920 2f20322e 303b200a ivot.w) / 2.0; . │ │ │ │ + 0x00cff9e0 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00cff9f0 7475726e 20747261 6e73666f 726d6564 turn transformed │ │ │ │ + 0x00cffa00 5069766f 743b200a 20207d20 0a202076 Pivot; . } . v │ │ │ │ + 0x00cffa10 65633420 6170706c 7942696c 6c626f61 ec4 applyBillboa │ │ │ │ + 0x00cffa20 72645069 766f7454 72616e73 666f726d rdPivotTransform │ │ │ │ + 0x00cffa30 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00cffa40 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00cffa50 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00cffa60 6c5a2c20 76656332 206f6666 73657429 lZ, vec2 offset) │ │ │ │ + 0x00cffa70 200a2020 7b200a20 20202066 6c6f6174 . { . float │ │ │ │ + 0x00cffa80 206c6f67 69635a20 3d207069 766f742e logicZ = pivot. │ │ │ │ + 0x00cffa90 7a202f20 7069766f 742e773b 200a2020 z / pivot.w; . │ │ │ │ + 0x00cffaa0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00cffab0 65645069 766f7420 3d207069 766f7454 edPivot = pivotT │ │ │ │ + 0x00cffac0 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00cffad0 7069766f 742e7879 2c207069 766f7452 pivot.xy, pivotR │ │ │ │ + 0x00cffae0 65616c5a 2c207069 766f742e 77293b20 ealZ, pivot.w); │ │ │ │ + 0x00cffaf0 0a202020 20766563 34207363 616c6520 . vec4 scale │ │ │ │ + 0x00cffb00 3d207069 766f7454 72616e73 666f726d = pivotTransform │ │ │ │ + 0x00cffb10 202a2076 65633428 312e302c 202d312e * vec4(1.0, -1. │ │ │ │ + 0x00cffb20 302c2030 2e302c20 312e3029 3b200a20 0, 0.0, 1.0); . │ │ │ │ + 0x00cffb30 20202076 65633420 706f7369 74696f6e vec4 position │ │ │ │ + 0x00cffb40 203d2076 65633428 7472616e 73666f72 = vec4(transfor │ │ │ │ + 0x00cffb50 6d656450 69766f74 2e787920 2f207472 medPivot.xy / tr │ │ │ │ + 0x00cffb60 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00cffb70 2c206c6f 6769635a 2c20312e 3029202b , logicZ, 1.0) + │ │ │ │ + 0x00cffb80 20766563 34286f66 66736574 202f2073 vec4(offset / s │ │ │ │ + 0x00cffb90 63616c65 2e77202a 20736361 6c652e78 cale.w * scale.x │ │ │ │ + 0x00cffba0 2c20302e 302c2030 2e30293b 200a2020 , 0.0, 0.0); . │ │ │ │ + 0x00cffbb0 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00cffbc0 20202070 6f736974 696f6e2e 79203d20 position.y = │ │ │ │ + 0x00cffbd0 2d706f73 6974696f 6e2e793b 200a2020 -position.y; . │ │ │ │ + 0x00cffbe0 2020706f 73697469 6f6e2e7a 203d2028 position.z = ( │ │ │ │ + 0x00cffbf0 706f7369 74696f6e 2e7a2020 2b20706f position.z + po │ │ │ │ + 0x00cffc00 73697469 6f6e2e77 29202f20 322e303b sition.w) / 2.0; │ │ │ │ + 0x00cffc10 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00cffc20 72657475 726e2070 6f736974 696f6e3b return position; │ │ │ │ + 0x00cffc30 200a2020 7d200a20 20766563 32206361 . } . vec2 ca │ │ │ │ + 0x00cffc40 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ + 0x00cffc50 64417869 73506f73 28766563 32206f72 dAxisPos(vec2 or │ │ │ │ + 0x00cffc60 6967696e 616c4178 6973506f 732c2076 iginalAxisPos, v │ │ │ │ + 0x00cffc70 65633220 73686966 74656450 6f732c20 ec2 shiftedPos, │ │ │ │ + 0x00cffc80 6d617434 206d6f64 656c5669 65772c20 mat4 modelView, │ │ │ │ + 0x00cffc90 666c6f61 74206861 6c665769 64746829 float halfWidth) │ │ │ │ + 0x00cffca0 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00cffcb0 70203d20 28766563 34287368 69667465 p = (vec4(shifte │ │ │ │ + 0x00cffcc0 64506f73 2c20302e 302c2031 2e302920 dPos, 0.0, 1.0) │ │ │ │ + 0x00cffcd0 2a206d6f 64656c56 69657729 2e78793b * modelView).xy; │ │ │ │ + 0x00cffce0 200a2020 20207665 63322064 203d2070 . vec2 d = p │ │ │ │ + 0x00cffcf0 202d206f 72696769 6e616c41 78697350 - originalAxisP │ │ │ │ + 0x00cffd00 6f733b20 0a202020 20696620 28646f74 os; . if (dot │ │ │ │ + 0x00cffd10 28642c20 64292021 3d20302e 3029200a (d, d) != 0.0) . │ │ │ │ + 0x00cffd20 20202020 20207265 7475726e 206f7269 return ori │ │ │ │ + 0x00cffd30 67696e61 6c417869 73506f73 202b206e ginalAxisPos + n │ │ │ │ + 0x00cffd40 6f726d61 6c697a65 28642920 2a206861 ormalize(d) * ha │ │ │ │ + 0x00cffd50 6c665769 6474683b 200a2020 2020656c lfWidth; . el │ │ │ │ + 0x00cffd60 7365200a 20202020 20207265 7475726e se . return │ │ │ │ + 0x00cffd70 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00cffd80 3b200a20 207d200a 2020766f 6964206d ; . } . void m │ │ │ │ + 0x00cffd90 61696e28 29200a20 207b200a 20202020 ain() . { . │ │ │ │ + 0x00cffda0 76656332 206e6f72 6d616c20 3d20615f vec2 normal = a_ │ │ │ │ + 0x00cffdb0 6e6f726d 616c2e78 793b200a 20202020 normal.xy; . │ │ │ │ + 0x00cffdc0 666c6f61 74206861 6c665769 64746820 float halfWidth │ │ │ │ + 0x00cffdd0 3d206c65 6e677468 286e6f72 6d616c29 = length(normal) │ │ │ │ + 0x00cffde0 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ + 0x00cffdf0 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00cffe00 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ + 0x00cffe10 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ + 0x00cffe20 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ + 0x00cffe30 793b200a 20202020 69662028 68616c66 y; . if (half │ │ │ │ + 0x00cffe40 57696474 6820213d 20302e30 29200a20 Width != 0.0) . │ │ │ │ + 0x00cffe50 2020207b 200a2020 20202020 7472616e { . tran │ │ │ │ + 0x00cffe60 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00cffe70 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00cffe80 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ + 0x00cffe90 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ + 0x00cffea0 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ + 0x00cffeb0 6e6f726d 616c2c20 0a202020 20202020 normal, . │ │ │ │ + 0x00cffec0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cffed0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00cffee0 20202020 20202020 20202020 20202075 u │ │ │ │ + 0x00cffef0 5f6d6f64 656c5669 65772c20 68616c66 _modelView, half │ │ │ │ + 0x00cfff00 57696474 68293b20 0a202020 207d200a Width); . } . │ │ │ │ + 0x00cfff10 20202020 666c6f61 7420754f 66667365 float uOffse │ │ │ │ + 0x00cfff20 74203d20 6d696e28 6c656e67 74682876 t = min(length(v │ │ │ │ + 0x00cfff30 65633428 6b536861 7065436f 6f726453 ec4(kShapeCoordS │ │ │ │ + 0x00cfff40 63616c61 722c2030 2c20302c 20302920 calar, 0, 0, 0) │ │ │ │ + 0x00cfff50 2a20755f 6d6f6465 6c566965 7729202a * u_modelView) * │ │ │ │ + 0x00cfff60 20615f6d 61736b54 6578436f 6f72642e a_maskTexCoord. │ │ │ │ + 0x00cfff70 782c2031 2e30293b 200a2020 2020765f x, 1.0); . v_ │ │ │ │ + 0x00cfff80 636f6c6f 72546578 436f6f72 64203d20 colorTexCoord = │ │ │ │ + 0x00cfff90 615f636f 6c6f7254 6578436f 6f72643b a_colorTexCoord; │ │ │ │ + 0x00cfffa0 200a2020 2020765f 6d61736b 54657843 . v_maskTexC │ │ │ │ + 0x00cfffb0 6f6f7264 203d2076 65633228 615f6d61 oord = vec2(a_ma │ │ │ │ + 0x00cfffc0 736b5465 78436f6f 72642e79 202b2075 skTexCoord.y + u │ │ │ │ + 0x00cfffd0 4f666673 6574202a 20615f6d 61736b54 Offset * a_maskT │ │ │ │ + 0x00cfffe0 6578436f 6f72642e 7a2c2061 5f6d6173 exCoord.z, a_mas │ │ │ │ + 0x00cffff0 6b546578 436f6f72 642e7729 3b200a20 kTexCoord.w); . │ │ │ │ + 0x00d00000 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ + 0x00d00010 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ + 0x00d00020 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ + 0x00d00030 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ + 0x00d00040 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ + 0x00d00050 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00d00060 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d00070 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ + 0x00d00080 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ + 0x00d00090 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d000a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d000b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d000c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d000d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d000e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d000f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d00100 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d00110 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d00120 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d00130 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d00140 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d00150 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d00160 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d00170 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d00180 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d00190 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d001a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d001b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d001c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d001d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d001e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d001f0 63322061 5f6e6f72 6d616c3b 200a2020 c2 a_normal; . │ │ │ │ + 0x00d00200 696e2076 65633220 615f636f 6c6f7254 in vec2 a_colorT │ │ │ │ + 0x00d00210 6578436f 6f726473 3b200a20 206f7574 exCoords; . out │ │ │ │ + 0x00d00220 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ + 0x00d00230 436f6f72 64733b20 0a202075 6e69666f Coords; . unifo │ │ │ │ + 0x00d00240 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d00250 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d00260 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d00270 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d00280 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d00290 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d002a0 76656334 20755f70 6f736974 696f6e3b vec4 u_position; │ │ │ │ + 0x00d002b0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00d002c0 20755f6c 696e6550 6172616d 733b200a u_lineParams; . │ │ │ │ + 0x00d002d0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d002e0 755f6163 63757261 63793b20 0a202075 u_accuracy; . u │ │ │ │ + 0x00d002f0 6e69666f 726d2066 6c6f6174 20755f7a niform float u_z │ │ │ │ + 0x00d00300 5363616c 653b200a 2020756e 69666f72 Scale; . unifor │ │ │ │ + 0x00d00310 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00d00320 793b200a 2020756e 69666f72 6d20666c y; . uniform fl │ │ │ │ + 0x00d00330 6f617420 755f617a 696d7574 3b200a20 oat u_azimut; . │ │ │ │ + 0x00d00340 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ + 0x00d00350 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ + 0x00d00360 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ + 0x00d00370 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ + 0x00d00380 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d00390 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d003a0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d003b0 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ + 0x00d003c0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ + 0x00d003d0 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ + 0x00d003e0 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ + 0x00d003f0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d00400 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ + 0x00d00410 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ + 0x00d00420 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ + 0x00d00430 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ + 0x00d00440 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ + 0x00d00450 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ + 0x00d00460 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d00470 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ + 0x00d00480 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ + 0x00d00490 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ + 0x00d004a0 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ + 0x00d004b0 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ + 0x00d004c0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d004d0 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ + 0x00d004e0 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ + 0x00d004f0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d00500 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ + 0x00d00510 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ + 0x00d00520 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d00530 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ + 0x00d00540 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ + 0x00d00550 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ + 0x00d00560 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ + 0x00d00570 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d00580 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d00590 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d005a0 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ + 0x00d005b0 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ + 0x00d005c0 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ + 0x00d005d0 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ + 0x00d005e0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d005f0 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d00600 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d00610 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ + 0x00d00620 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ + 0x00d00630 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ + 0x00d00640 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ + 0x00d00650 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ + 0x00d00660 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ + 0x00d00670 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ + 0x00d00680 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ + 0x00d00690 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ + 0x00d006a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d006b0 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ + 0x00d006c0 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ + 0x00d006d0 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ + 0x00d006e0 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ + 0x00d006f0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d00700 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ + 0x00d00710 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ + 0x00d00720 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ + 0x00d00730 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ + 0x00d00740 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ + 0x00d00750 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ + 0x00d00760 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ + 0x00d00770 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ + 0x00d00780 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ + 0x00d00790 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ + 0x00d007a0 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ + 0x00d007b0 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ + 0x00d007c0 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ + 0x00d007d0 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ + 0x00d007e0 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ + 0x00d007f0 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ + 0x00d00800 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ + 0x00d00810 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ + 0x00d00820 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ + 0x00d00830 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ + 0x00d00840 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ + 0x00d00850 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ + 0x00d00860 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d00870 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ + 0x00d00880 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ + 0x00d00890 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ + 0x00d008a0 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ + 0x00d008b0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d008c0 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ + 0x00d008d0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ + 0x00d008e0 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ + 0x00d008f0 20766563 3428755f 706f7369 74696f6e vec4(u_position │ │ │ │ + 0x00d00900 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ + 0x00d00910 20755f6d 6f64656c 56696577 3b200a20 u_modelView; . │ │ │ │ + 0x00d00920 20202076 65633420 6e6f726d 616c203d vec4 normal = │ │ │ │ + 0x00d00930 20766563 3428615f 6e6f726d 616c202a vec4(a_normal * │ │ │ │ + 0x00d00940 20755f61 63637572 6163792c 20302e30 u_accuracy, 0.0 │ │ │ │ + 0x00d00950 2c20302e 30293b20 0a202020 20706f73 , 0.0); . pos │ │ │ │ + 0x00d00960 6974696f 6e203d20 28706f73 6974696f ition = (positio │ │ │ │ + 0x00d00970 6e202b20 6e6f726d 616c2920 2a20755f n + normal) * u_ │ │ │ │ + 0x00d00980 70726f6a 65637469 6f6e3b20 0a202020 projection; . │ │ │ │ + 0x00d00990 20676c5f 506f7369 74696f6e 203d2061 gl_Position = a │ │ │ │ + 0x00d009a0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d009b0 726d2870 6f736974 696f6e2c 20755f70 rm(position, u_p │ │ │ │ + 0x00d009c0 69766f74 5472616e 73666f72 6d2c2075 ivotTransform, u │ │ │ │ + 0x00d009d0 5f706f73 6974696f 6e2e7a20 2a20755f _position.z * u_ │ │ │ │ + 0x00d009e0 7a536361 6c65293b 200a2020 2020765f zScale); . v_ │ │ │ │ + 0x00d009f0 636f6c6f 72546578 436f6f72 6473203d colorTexCoords = │ │ │ │ + 0x00d00a00 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ + 0x00d00a10 733b200a 20207d20 0a000000 00000000 s; . } ........ │ │ │ │ + 0x00d00a20 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d00a30 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d00a40 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d00a50 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d00a60 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d00a70 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d00a80 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d00a90 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d00aa0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d00ab0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d00ac0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d00ad0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d00ae0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d00af0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d00b00 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d00b10 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d00b20 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d00b30 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d00b40 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d00b50 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d00b60 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d00b70 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d00b80 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d00b90 72546578 436f6f72 643b200a 2020696e rTexCoord; . in │ │ │ │ + 0x00d00ba0 20766563 3220615f 6f75746c 696e6543 vec2 a_outlineC │ │ │ │ + 0x00d00bb0 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ + 0x00d00bc0 20696e20 76656332 20615f6e 6f726d61 in vec2 a_norma │ │ │ │ + 0x00d00bd0 6c3b200a 2020696e 20766563 3220615f l; . in vec2 a_ │ │ │ │ + 0x00d00be0 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ + 0x00d00bf0 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00d00c00 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ + 0x00d00c10 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ + 0x00d00c20 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ + 0x00d00c30 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d00c40 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00d00c50 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ + 0x00d00c60 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ + 0x00d00c70 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d00c80 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d00c90 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d00ca0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d00cb0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d00cc0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d00cd0 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ + 0x00d00ce0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d00cf0 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ + 0x00d00d00 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ + 0x00d00d10 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00d00d20 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d00d30 20755f6c 656e6774 683b200a 20202369 u_length; . #i │ │ │ │ + 0x00d00d40 66646566 20454e41 424c455f 56544620 fdef ENABLE_VTF │ │ │ │ + 0x00d00d50 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00d00d60 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00d00d70 200a2020 23656e64 6966200a 2020636f . #endif . co │ │ │ │ + 0x00d00d80 6e737420 666c6f61 74206b42 61736544 nst float kBaseD │ │ │ │ + 0x00d00d90 65707468 53686966 74203d20 2d31302e epthShift = -10. │ │ │ │ + 0x00d00da0 303b200a 2020636f 6e737420 666c6f61 0; . const floa │ │ │ │ + 0x00d00db0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d00dc0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d00dd0 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00d00de0 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d00df0 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d00e00 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d00e10 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00d00e20 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00d00e30 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d00e40 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00d00e50 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00d00e60 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00d00e70 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d00e80 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00d00e90 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00d00ea0 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00d00eb0 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00d00ec0 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00d00ed0 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00d00ee0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d00ef0 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00d00f00 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00d00f10 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d00f20 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00d00f30 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00d00f40 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d00f50 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00d00f60 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00d00f70 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00d00f80 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d00f90 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00d00fa0 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00d00fb0 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00d00fc0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d00fd0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d00fe0 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d00ff0 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d01000 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00d01010 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00d01020 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00d01030 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00d01040 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00d01050 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d01060 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d01070 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00d01080 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00d01090 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00d010a0 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00d010b0 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00d010c0 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00d010d0 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00d010e0 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00d010f0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d01100 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00d01110 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00d01120 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00d01130 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00d01140 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00d01150 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00d01160 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00d01170 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00d01180 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00d01190 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00d011a0 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00d011b0 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00d011c0 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00d011d0 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00d011e0 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00d011f0 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00d01200 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00d01210 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00d01220 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00d01230 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00d01240 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00d01250 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00d01260 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00d01270 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00d01280 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00d01290 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00d012a0 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00d012b0 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00d012c0 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00d012d0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d012e0 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00d012f0 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00d01300 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00d01310 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d01320 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00d01330 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d01340 200a2020 2020666c 6f617420 69734f75 . float isOu │ │ │ │ + 0x00d01350 746c696e 65203d20 73746570 28302e35 tline = step(0.5 │ │ │ │ + 0x00d01360 2c20755f 69734f75 746c696e 65506173 , u_isOutlinePas │ │ │ │ + 0x00d01370 73293b20 0a202020 20666c6f 61742064 s); . float d │ │ │ │ + 0x00d01380 65707468 53686966 74203d20 6b426173 epthShift = kBas │ │ │ │ + 0x00d01390 65446570 74685368 69667420 2a206973 eDepthShift * is │ │ │ │ + 0x00d013a0 4f75746c 696e653b 200a2020 20207665 Outline; . ve │ │ │ │ + 0x00d013b0 63342070 6f73203d 20287665 63342861 c4 pos = (vec4(a │ │ │ │ + 0x00d013c0 5f706f73 6974696f 6e2c2031 2e302920 _position, 1.0) │ │ │ │ + 0x00d013d0 2b207665 63342830 2e302c20 302e302c + vec4(0.0, 0.0, │ │ │ │ + 0x00d013e0 20646570 74685368 6966742c 20302e30 depthShift, 0.0 │ │ │ │ + 0x00d013f0 2929202a 20755f6d 6f64656c 56696577 )) * u_modelView │ │ │ │ + 0x00d01400 3b200a20 20202076 65633420 73686966 ; . vec4 shif │ │ │ │ + 0x00d01410 74656450 6f73203d 20766563 3428615f tedPos = vec4(a_ │ │ │ │ + 0x00d01420 6e6f726d 616c2c20 302e302c 20302e30 normal, 0.0, 0.0 │ │ │ │ + 0x00d01430 29202b20 706f733b 200a2020 2020676c ) + pos; . gl │ │ │ │ + 0x00d01440 5f506f73 6974696f 6e203d20 73686966 _Position = shif │ │ │ │ + 0x00d01450 74656450 6f73202a 20755f70 726f6a65 tedPos * u_proje │ │ │ │ + 0x00d01460 6374696f 6e3b200a 20202369 66646566 ction; . #ifdef │ │ │ │ + 0x00d01470 2056554c 4b414e20 0a202020 20676c5f VULKAN . gl_ │ │ │ │ + 0x00d01480 506f7369 74696f6e 2e79203d 202d676c Position.y = -gl │ │ │ │ + 0x00d01490 5f506f73 6974696f 6e2e793b 200a2020 _Position.y; . │ │ │ │ + 0x00d014a0 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ + 0x00d014b0 3d202867 6c5f506f 73697469 6f6e2e7a = (gl_Position.z │ │ │ │ + 0x00d014c0 20202b20 676c5f50 6f736974 696f6e2e + gl_Position. │ │ │ │ + 0x00d014d0 7729202a 20302e35 3b200a20 2023656e w) * 0.5; . #en │ │ │ │ + 0x00d014e0 64696620 0a202020 20766563 3220636f dif . vec2 co │ │ │ │ + 0x00d014f0 6c6f7254 6578436f 6f726420 3d206d69 lorTexCoord = mi │ │ │ │ + 0x00d01500 7828615f 636f6c6f 72546578 436f6f72 x(a_colorTexCoor │ │ │ │ + 0x00d01510 642c2061 5f6f7574 6c696e65 436f6c6f d, a_outlineColo │ │ │ │ + 0x00d01520 72546578 436f6f72 642c2069 734f7574 rTexCoord, isOut │ │ │ │ + 0x00d01530 6c696e65 293b200a 20202369 66646566 line); . #ifdef │ │ │ │ + 0x00d01540 20454e41 424c455f 56544620 0a202020 ENABLE_VTF . │ │ │ │ + 0x00d01550 20765f63 6f6c6f72 203d2074 65787475 v_color = textu │ │ │ │ + 0x00d01560 72652875 5f636f6c 6f725465 782c2063 re(u_colorTex, c │ │ │ │ + 0x00d01570 6f6c6f72 54657843 6f6f7264 293b200a olorTexCoord); . │ │ │ │ + 0x00d01580 20202365 6c736520 0a202020 20765f63 #else . v_c │ │ │ │ + 0x00d01590 6f6c6f72 54657843 6f6f7264 203d2063 olorTexCoord = c │ │ │ │ + 0x00d015a0 6f6c6f72 54657843 6f6f7264 3b200a20 olorTexCoord; . │ │ │ │ + 0x00d015b0 2023656e 64696620 0a202020 20765f6d #endif . v_m │ │ │ │ + 0x00d015c0 61736b54 6578436f 6f726420 3d20615f askTexCoord = a_ │ │ │ │ + 0x00d015d0 6d61736b 54657843 6f6f7264 3b200a20 maskTexCoord; . │ │ │ │ + 0x00d015e0 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d015f0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d01600 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d01610 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d01620 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d01630 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d01640 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d01650 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d01660 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d01670 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d01680 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d01690 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d016a0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d016b0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d016c0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d016d0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d016e0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d016f0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d01700 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d01710 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d01720 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d01730 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d01740 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00d01750 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00d01760 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ + 0x00d01770 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ + 0x00d01780 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ + 0x00d01790 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ + 0x00d017a0 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ + 0x00d017b0 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ + 0x00d017c0 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00d017d0 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ + 0x00d017e0 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ + 0x00d017f0 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ + 0x00d01800 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d01810 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00d01820 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ + 0x00d01830 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ + 0x00d01840 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d01850 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d01860 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d01870 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d01880 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d01890 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d018a0 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00d018b0 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00d018c0 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d018d0 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d018e0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00d018f0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d01900 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00d01910 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d01920 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00d01930 733b200a 2020756e 69666f72 6d207361 s; . uniform sa │ │ │ │ + 0x00d01940 6d706c65 72324420 755f636f 6c6f7254 mpler2D u_colorT │ │ │ │ + 0x00d01950 65783b20 0a202063 6f6e7374 20666c6f ex; . const flo │ │ │ │ + 0x00d01960 6174206b 42617365 44657074 68536869 at kBaseDepthShi │ │ │ │ + 0x00d01970 6674203d 202d3130 2e303b20 0a202063 ft = -10.0; . c │ │ │ │ + 0x00d01980 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00d01990 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00d019a0 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ + 0x00d019b0 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d019c0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d019d0 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d019e0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d019f0 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ + 0x00d01a00 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00d01a10 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ + 0x00d01a20 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ + 0x00d01a30 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d01a40 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d01a50 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ + 0x00d01a60 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d01a70 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d01a80 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ + 0x00d01a90 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ + 0x00d01aa0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d01ab0 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ + 0x00d01ac0 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ + 0x00d01ad0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d01ae0 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ + 0x00d01af0 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ + 0x00d01b00 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d01b10 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d01b20 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ + 0x00d01b30 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d01b40 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ + 0x00d01b50 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ + 0x00d01b60 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d01b70 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ + 0x00d01b80 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ + 0x00d01b90 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ + 0x00d01ba0 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ + 0x00d01bb0 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00d01bc0 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00d01bd0 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00d01be0 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ + 0x00d01bf0 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ + 0x00d01c00 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ + 0x00d01c10 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ + 0x00d01c20 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00d01c30 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ + 0x00d01c40 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ + 0x00d01c50 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00d01c60 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ + 0x00d01c70 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ + 0x00d01c80 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ + 0x00d01c90 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ + 0x00d01ca0 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ + 0x00d01cb0 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ + 0x00d01cc0 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ + 0x00d01cd0 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ + 0x00d01ce0 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ + 0x00d01cf0 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ + 0x00d01d00 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ + 0x00d01d10 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ + 0x00d01d20 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ + 0x00d01d30 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d01d40 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ + 0x00d01d50 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ + 0x00d01d60 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ + 0x00d01d70 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ + 0x00d01d80 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ + 0x00d01d90 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d01da0 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ + 0x00d01db0 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ + 0x00d01dc0 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ + 0x00d01dd0 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ + 0x00d01de0 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ + 0x00d01df0 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ + 0x00d01e00 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ + 0x00d01e10 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ + 0x00d01e20 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ + 0x00d01e30 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ + 0x00d01e40 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ + 0x00d01e50 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ + 0x00d01e60 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ + 0x00d01e70 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ + 0x00d01e80 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ + 0x00d01e90 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ + 0x00d01ea0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d01eb0 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ + 0x00d01ec0 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ + 0x00d01ed0 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ + 0x00d01ee0 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ + 0x00d01ef0 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d01f00 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ + 0x00d01f10 696e2829 200a2020 7b200a20 20202066 in() . { . f │ │ │ │ + 0x00d01f20 6c6f6174 2069734f 75746c69 6e65203d loat isOutline = │ │ │ │ + 0x00d01f30 20737465 7028302e 352c2075 5f69734f step(0.5, u_isO │ │ │ │ + 0x00d01f40 75746c69 6e655061 7373293b 200a2020 utlinePass); . │ │ │ │ + 0x00d01f50 2020666c 6f617420 64657074 68536869 float depthShi │ │ │ │ + 0x00d01f60 6674203d 206b4261 73654465 70746853 ft = kBaseDepthS │ │ │ │ + 0x00d01f70 68696674 202a2069 734f7574 6c696e65 hift * isOutline │ │ │ │ + 0x00d01f80 3b200a20 20202076 65633420 7069766f ; . vec4 pivo │ │ │ │ + 0x00d01f90 74203d20 28766563 3428615f 706f7369 t = (vec4(a_posi │ │ │ │ + 0x00d01fa0 74696f6e 2e78797a 2c20312e 3029202b tion.xyz, 1.0) + │ │ │ │ + 0x00d01fb0 20766563 3428302e 302c2030 2e302c20 vec4(0.0, 0.0, │ │ │ │ + 0x00d01fc0 64657074 68536869 66742c20 302e3029 depthShift, 0.0) │ │ │ │ + 0x00d01fd0 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ + 0x00d01fe0 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ + 0x00d01ff0 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ + 0x00d02000 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ + 0x00d02010 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d02020 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d02030 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ + 0x00d02040 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ + 0x00d02050 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ + 0x00d02060 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ + 0x00d02070 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ + 0x00d02080 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d02090 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d020a0 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ + 0x00d020b0 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ + 0x00d020c0 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ + 0x00d020d0 65633220 636f6c6f 72546578 436f6f72 ec2 colorTexCoor │ │ │ │ + 0x00d020e0 64203d20 6d697828 615f636f 6c6f7254 d = mix(a_colorT │ │ │ │ + 0x00d020f0 6578436f 6f72642c 20615f6f 75746c69 exCoord, a_outli │ │ │ │ + 0x00d02100 6e65436f 6c6f7254 6578436f 6f72642c neColorTexCoord, │ │ │ │ + 0x00d02110 2069734f 75746c69 6e65293b 200a2020 isOutline); . │ │ │ │ + 0x00d02120 23696664 65662045 4e41424c 455f5654 #ifdef ENABLE_VT │ │ │ │ + 0x00d02130 46200a20 20202076 5f636f6c 6f72203d F . v_color = │ │ │ │ + 0x00d02140 20746578 74757265 28755f63 6f6c6f72 texture(u_color │ │ │ │ + 0x00d02150 5465782c 20636f6c 6f725465 78436f6f Tex, colorTexCoo │ │ │ │ + 0x00d02160 7264293b 200a2020 23656c73 65200a20 rd); . #else . │ │ │ │ + 0x00d02170 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d02180 7264203d 20636f6c 6f725465 78436f6f rd = colorTexCoo │ │ │ │ + 0x00d02190 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00d021a0 20202076 5f6d6173 6b546578 436f6f72 v_maskTexCoor │ │ │ │ + 0x00d021b0 64203d20 615f6d61 736b5465 78436f6f d = a_maskTexCoo │ │ │ │ + 0x00d021c0 72643b20 0a20207d 200a0000 00000000 rd; . } ....... │ │ │ │ + 0x00d021d0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d021e0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d021f0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d02200 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d02210 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d02220 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d02230 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d02240 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d02250 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d02260 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d02270 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d02280 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d02290 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d022a0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d022b0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d022c0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d022d0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d022e0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d022f0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d02300 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d02310 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d02320 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ + 0x00d02330 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d02340 72546578 436f6f72 64733b20 0a20206f rTexCoords; . o │ │ │ │ + 0x00d02350 75742076 65633220 765f636f 6c6f7254 ut vec2 v_colorT │ │ │ │ + 0x00d02360 6578436f 6f726473 3b200a20 20756e69 exCoords; . uni │ │ │ │ + 0x00d02370 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d02380 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d02390 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d023a0 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d023b0 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d023c0 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d023d0 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ + 0x00d023e0 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d023f0 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ + 0x00d02400 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ + 0x00d02410 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ + 0x00d02420 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ + 0x00d02430 20755f6c 656e6774 683b200a 2020636f u_length; . co │ │ │ │ + 0x00d02440 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ + 0x00d02450 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ + 0x00d02460 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ + 0x00d02470 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ + 0x00d02480 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ + 0x00d02490 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ + 0x00d024a0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ + 0x00d024b0 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ + 0x00d024c0 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d024d0 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ + 0x00d024e0 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ + 0x00d024f0 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ + 0x00d02500 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d02510 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ + 0x00d02520 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d02530 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ + 0x00d02540 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00d02550 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ + 0x00d02560 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d02570 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ + 0x00d02580 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ + 0x00d02590 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d025a0 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ + 0x00d025b0 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ + 0x00d025c0 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ + 0x00d025d0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d025e0 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ + 0x00d025f0 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ + 0x00d02600 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ + 0x00d02610 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ + 0x00d02620 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ + 0x00d02630 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ + 0x00d02640 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ + 0x00d02650 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ + 0x00d02660 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d02670 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d02680 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d02690 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d026a0 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ + 0x00d026b0 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ + 0x00d026c0 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ + 0x00d026d0 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ + 0x00d026e0 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00d026f0 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ + 0x00d02700 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ + 0x00d02710 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d02720 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ + 0x00d02730 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ + 0x00d02740 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d02750 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ + 0x00d02760 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ + 0x00d02770 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ + 0x00d02780 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ + 0x00d02790 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ + 0x00d027a0 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ + 0x00d027b0 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ + 0x00d027c0 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ + 0x00d027d0 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ + 0x00d027e0 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ + 0x00d027f0 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ + 0x00d02800 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ + 0x00d02810 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ + 0x00d02820 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ + 0x00d02830 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ + 0x00d02840 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ + 0x00d02850 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ + 0x00d02860 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ + 0x00d02870 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ + 0x00d02880 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ + 0x00d02890 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ + 0x00d028a0 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ + 0x00d028b0 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ + 0x00d028c0 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ + 0x00d028d0 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ + 0x00d028e0 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ + 0x00d028f0 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ + 0x00d02900 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ + 0x00d02910 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ + 0x00d02920 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ + 0x00d02930 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d02940 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ + 0x00d02950 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ + 0x00d02960 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00d02970 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ + 0x00d02980 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ + 0x00d02990 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ + 0x00d029a0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00d029b0 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ + 0x00d029c0 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ + 0x00d029d0 6e282920 0a20207b 200a2020 2020676c n() . { . gl │ │ │ │ + 0x00d029e0 5f506f73 6974696f 6e203d20 76656334 _Position = vec4 │ │ │ │ + 0x00d029f0 28615f70 6f736974 696f6e2c 20302c20 (a_position, 0, │ │ │ │ + 0x00d02a00 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ + 0x00d02a10 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ + 0x00d02a20 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d02a30 4e200a20 20202067 6c5f506f 73697469 N . gl_Positi │ │ │ │ + 0x00d02a40 6f6e2e79 203d202d 676c5f50 6f736974 on.y = -gl_Posit │ │ │ │ + 0x00d02a50 696f6e2e 793b200a 20202020 676c5f50 ion.y; . gl_P │ │ │ │ + 0x00d02a60 6f736974 696f6e2e 7a203d20 28676c5f osition.z = (gl_ │ │ │ │ + 0x00d02a70 506f7369 74696f6e 2e7a2020 2b20676c Position.z + gl │ │ │ │ + 0x00d02a80 5f506f73 6974696f 6e2e7729 202a2030 _Position.w) * 0 │ │ │ │ + 0x00d02a90 2e353b20 0a202023 656e6469 66200a20 .5; . #endif . │ │ │ │ + 0x00d02aa0 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d02ab0 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ + 0x00d02ac0 436f6f72 64733b20 0a20207d 200a0000 Coords; . } ... │ │ │ │ + 0x00d02ad0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d02ae0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d02af0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d02b00 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d02b10 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d02b20 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d02b30 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d02b40 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d02b50 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d02b60 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d02b70 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d02b80 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d02b90 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d02ba0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d02bb0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d02bc0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d02bd0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d02be0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d02bf0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d02c00 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d02c10 2023656e 64696620 0a202023 64656669 #endif . #defi │ │ │ │ + 0x00d02c20 6e652054 494c455f 4241434b 47524f55 ne TILE_BACKGROU │ │ │ │ + 0x00d02c30 4e445f4d 41585f43 4f554e54 20363420 ND_MAX_COUNT 64 │ │ │ │ + 0x00d02c40 0a20206f 75742076 65633320 765f7465 . out vec3 v_te │ │ │ │ + 0x00d02c50 78436f6f 7264733b 200a2020 756e6966 xCoords; . unif │ │ │ │ + 0x00d02c60 6f726d20 76656334 20755f74 696c6543 orm vec4 u_tileC │ │ │ │ + 0x00d02c70 6f6f7264 734d696e 4d61785b 54494c45 oordsMinMax[TILE │ │ │ │ + 0x00d02c80 5f424143 4b47524f 554e445f 4d41585f _BACKGROUND_MAX_ │ │ │ │ + 0x00d02c90 434f554e 545d3b20 0a202075 6e69666f COUNT]; . unifo │ │ │ │ + 0x00d02ca0 726d2076 65633420 755f7465 78747572 rm vec4 u_textur │ │ │ │ + 0x00d02cb0 65526563 744d696e 4d61785b 54494c45 eRectMinMax[TILE │ │ │ │ + 0x00d02cc0 5f424143 4b47524f 554e445f 4d41585f _BACKGROUND_MAX_ │ │ │ │ + 0x00d02cd0 434f554e 545d3b20 0a202075 6e69666f COUNT]; . unifo │ │ │ │ + 0x00d02ce0 726d2069 6e742075 5f746578 74757265 rm int u_texture │ │ │ │ + 0x00d02cf0 496e6465 785b5449 4c455f42 41434b47 Index[TILE_BACKG │ │ │ │ + 0x00d02d00 524f554e 445f4d41 585f434f 554e545d ROUND_MAX_COUNT] │ │ │ │ + 0x00d02d10 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d02d20 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ + 0x00d02d30 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d02d40 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ + 0x00d02d50 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ + 0x00d02d60 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ + 0x00d02d70 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ + 0x00d02d80 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ + 0x00d02d90 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ + 0x00d02da0 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ + 0x00d02db0 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d02dc0 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d02dd0 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d02de0 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ + 0x00d02df0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ + 0x00d02e00 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ + 0x00d02e10 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ + 0x00d02e20 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d02e30 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ + 0x00d02e40 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ + 0x00d02e50 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ + 0x00d02e60 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ + 0x00d02e70 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ + 0x00d02e80 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ + 0x00d02e90 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d02ea0 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ + 0x00d02eb0 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ + 0x00d02ec0 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ + 0x00d02ed0 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ + 0x00d02ee0 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ + 0x00d02ef0 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ + 0x00d02f00 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ + 0x00d02f10 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ + 0x00d02f20 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d02f30 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ + 0x00d02f40 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ + 0x00d02f50 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ + 0x00d02f60 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ + 0x00d02f70 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ + 0x00d02f80 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ + 0x00d02f90 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ + 0x00d02fa0 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d02fb0 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d02fc0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d02fd0 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ + 0x00d02fe0 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ + 0x00d02ff0 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ + 0x00d03000 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ + 0x00d03010 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ + 0x00d03020 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ + 0x00d03030 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d03040 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ + 0x00d03050 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ + 0x00d03060 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ + 0x00d03070 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ + 0x00d03080 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ + 0x00d03090 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ + 0x00d030a0 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00d030b0 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ + 0x00d030c0 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ + 0x00d030d0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d030e0 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ + 0x00d030f0 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ + 0x00d03100 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ + 0x00d03110 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ + 0x00d03120 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ + 0x00d03130 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ + 0x00d03140 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ + 0x00d03150 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ + 0x00d03160 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ + 0x00d03170 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ + 0x00d03180 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d03190 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ + 0x00d031a0 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ + 0x00d031b0 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ + 0x00d031c0 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ + 0x00d031d0 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ + 0x00d031e0 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ + 0x00d031f0 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ + 0x00d03200 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ + 0x00d03210 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ + 0x00d03220 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ + 0x00d03230 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ + 0x00d03240 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ + 0x00d03250 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ + 0x00d03260 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ + 0x00d03270 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ + 0x00d03280 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ + 0x00d03290 200a2020 20202020 72657475 726e206f . return o │ │ │ │ + 0x00d032a0 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ + 0x00d032b0 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ + 0x00d032c0 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ + 0x00d032d0 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ + 0x00d032e0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d032f0 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ + 0x00d03300 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ + 0x00d03310 20207665 63322071 75616456 65727465 vec2 quadVerte │ │ │ │ + 0x00d03320 78203d20 76656332 28676c5f 56657274 x = vec2(gl_Vert │ │ │ │ + 0x00d03330 65784944 20262031 2c202867 6c5f5665 exID & 1, (gl_Ve │ │ │ │ + 0x00d03340 72746578 4944203e 3e203129 20262031 rtexID >> 1) & 1 │ │ │ │ + 0x00d03350 293b200a 20202020 76656334 2074696c ); . vec4 til │ │ │ │ + 0x00d03360 65436f6f 7264734d 696e4d61 78203d20 eCoordsMinMax = │ │ │ │ + 0x00d03370 755f7469 6c65436f 6f726473 4d696e4d u_tileCoordsMinM │ │ │ │ + 0x00d03380 61785b67 6c5f496e 7374616e 63654944 ax[gl_InstanceID │ │ │ │ + 0x00d03390 5d3b200a 20202020 76656332 20776f72 ]; . vec2 wor │ │ │ │ + 0x00d033a0 6c64506f 73203d20 6d697828 74696c65 ldPos = mix(tile │ │ │ │ + 0x00d033b0 436f6f72 64734d69 6e4d6178 2e78792c CoordsMinMax.xy, │ │ │ │ + 0x00d033c0 2074696c 65436f6f 7264734d 696e4d61 tileCoordsMinMa │ │ │ │ + 0x00d033d0 782e7a77 2c207175 61645665 72746578 x.zw, quadVertex │ │ │ │ + 0x00d033e0 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ + 0x00d033f0 203d2076 65633428 776f726c 64506f73 = vec4(worldPos │ │ │ │ + 0x00d03400 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ + 0x00d03410 6d6f6465 6c566965 77202a20 755f7072 modelView * u_pr │ │ │ │ + 0x00d03420 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ + 0x00d03430 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00d03440 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d03450 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ + 0x00d03460 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ + 0x00d03470 20202076 65633420 74657874 75726552 vec4 textureR │ │ │ │ + 0x00d03480 6563744d 696e4d61 78203d20 755f7465 ectMinMax = u_te │ │ │ │ + 0x00d03490 78747572 65526563 744d696e 4d61785b xtureRectMinMax[ │ │ │ │ + 0x00d034a0 676c5f49 6e737461 6e636549 445d3b20 gl_InstanceID]; │ │ │ │ + 0x00d034b0 0a202020 20766563 32207465 78555620 . vec2 texUV │ │ │ │ + 0x00d034c0 3d206d69 78287465 78747572 65526563 = mix(textureRec │ │ │ │ + 0x00d034d0 744d696e 4d61782e 78792c20 74657874 tMinMax.xy, text │ │ │ │ + 0x00d034e0 75726552 6563744d 696e4d61 782e7a77 ureRectMinMax.zw │ │ │ │ + 0x00d034f0 2c207175 61645665 72746578 293b200a , quadVertex); . │ │ │ │ + 0x00d03500 20202020 765f7465 78436f6f 72647320 v_texCoords │ │ │ │ + 0x00d03510 3d207665 63332874 65785556 2c20666c = vec3(texUV, fl │ │ │ │ + 0x00d03520 6f617428 755f7465 78747572 65496e64 oat(u_textureInd │ │ │ │ + 0x00d03530 65785b67 6c5f496e 7374616e 63654944 ex[gl_InstanceID │ │ │ │ + 0x00d03540 5d29293b 200a2020 7d200a00 00000000 ])); . } ...... │ │ │ │ + 0x00d03550 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d03560 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d03570 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d03580 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d03590 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d035a0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d035b0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d035c0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d035d0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d035e0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d035f0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d03600 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d03610 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d03620 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d03630 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d03640 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d03650 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d03660 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d03670 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d03680 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d03690 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d036a0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d036b0 7264733b 200a2020 696e2076 65633420 rds; . in vec4 │ │ │ │ + 0x00d036c0 765f6f66 66736574 303b200a 2020696e v_offset0; . in │ │ │ │ + 0x00d036d0 20766563 3420765f 6f666673 6574313b vec4 v_offset1; │ │ │ │ + 0x00d036e0 200a2020 696e2076 65633420 765f6f66 . in vec4 v_of │ │ │ │ + 0x00d036f0 66736574 323b200a 20206f75 74207665 fset2; . out ve │ │ │ │ + 0x00d03700 63342076 5f467261 67436f6c 6f723b20 c4 v_FragColor; │ │ │ │ + 0x00d03710 0a202075 6e69666f 726d2073 616d706c . uniform sampl │ │ │ │ + 0x00d03720 65723244 20755f63 6f6c6f72 5465783b er2D u_colorTex; │ │ │ │ + 0x00d03730 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00d03740 5f544852 4553484f 4c442030 2e303520 _THRESHOLD 0.05 │ │ │ │ + 0x00d03750 0a202063 6f6e7374 20766563 32206b54 . const vec2 kT │ │ │ │ + 0x00d03760 68726573 686f6c64 203d2076 65633228 hreshold = vec2( │ │ │ │ + 0x00d03770 534d4141 5f544852 4553484f 4c442c20 SMAA_THRESHOLD, │ │ │ │ + 0x00d03780 534d4141 5f544852 4553484f 4c44293b SMAA_THRESHOLD); │ │ │ │ + 0x00d03790 200a2020 23646566 696e6520 534d4141 . #define SMAA │ │ │ │ + 0x00d037a0 5f4c4f43 414c5f43 4f4e5452 4153545f _LOCAL_CONTRAST_ │ │ │ │ + 0x00d037b0 41444150 54415449 4f4e5f46 4143544f ADAPTATION_FACTO │ │ │ │ + 0x00d037c0 5220322e 30200a20 20636f6e 73742076 R 2.0 . const v │ │ │ │ + 0x00d037d0 65633320 6b576569 67687473 203d2076 ec3 kWeights = v │ │ │ │ + 0x00d037e0 65633328 302e3231 32362c20 302e3731 ec3(0.2126, 0.71 │ │ │ │ + 0x00d037f0 35322c20 302e3037 3232293b 200a2020 52, 0.0722); . │ │ │ │ + 0x00d03800 636f6e73 7420666c 6f617420 6b536861 const float kSha │ │ │ │ + 0x00d03810 7065436f 6f726453 63616c61 72203d20 peCoordScalar = │ │ │ │ + 0x00d03820 31303030 2e303b20 0a20204c 4f575f50 1000.0; . LOW_P │ │ │ │ + 0x00d03830 20766563 33204d6f 64756c61 74654279 vec3 ModulateBy │ │ │ │ + 0x00d03840 50617474 65726e44 6f747328 4c4f575f PatternDots(LOW_ │ │ │ │ + 0x00d03850 50207665 63332063 6f6c6f72 2c20666c P vec3 color, fl │ │ │ │ + 0x00d03860 6f617420 6461726b 656e2c20 666c6f61 oat darken, floa │ │ │ │ + 0x00d03870 7420636f 76657261 67652920 0a20207b t coverage) . { │ │ │ │ + 0x00d03880 200a2020 2020636f 6e737420 666c6f61 . const floa │ │ │ │ + 0x00d03890 74206b4c 69676874 656e203d 20302e30 t kLighten = 0.0 │ │ │ │ + 0x00d038a0 37353b20 0a202020 20696620 28646f74 75; . if (dot │ │ │ │ + 0x00d038b0 28636f6c 6f722c20 76656333 28302e32 (color, vec3(0.2 │ │ │ │ + 0x00d038c0 3132362c 20302e37 3135322c 20302e30 126, 0.7152, 0.0 │ │ │ │ + 0x00d038d0 37323229 29203c20 302e3529 200a2020 722)) < 0.5) . │ │ │ │ + 0x00d038e0 20202020 72657475 726e2063 6f6c6f72 return color │ │ │ │ + 0x00d038f0 202b2063 6f766572 61676520 2a206b4c + coverage * kL │ │ │ │ + 0x00d03900 69676874 656e3b20 0a202020 20726574 ighten; . ret │ │ │ │ + 0x00d03910 75726e20 636f6c6f 72202a20 6d697828 urn color * mix( │ │ │ │ + 0x00d03920 312e302c 20646172 6b656e2c 20636f76 1.0, darken, cov │ │ │ │ + 0x00d03930 65726167 65293b20 0a20207d 200a2020 erage); . } . │ │ │ │ + 0x00d03940 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d03950 200a2020 2020666c 6f617420 4c203d20 . float L = │ │ │ │ + 0x00d03960 646f7428 74657874 75726528 755f636f dot(texture(u_co │ │ │ │ + 0x00d03970 6c6f7254 65782c20 765f636f 6c6f7254 lorTex, v_colorT │ │ │ │ + 0x00d03980 6578436f 6f726473 292e7267 622c206b exCoords).rgb, k │ │ │ │ + 0x00d03990 57656967 68747329 3b200a20 20202066 Weights); . f │ │ │ │ + 0x00d039a0 6c6f6174 204c6c65 6674203d 20646f74 loat Lleft = dot │ │ │ │ + 0x00d039b0 28746578 74757265 28755f63 6f6c6f72 (texture(u_color │ │ │ │ + 0x00d039c0 5465782c 20765f6f 66667365 74302e78 Tex, v_offset0.x │ │ │ │ + 0x00d039d0 79292e72 67622c20 6b576569 67687473 y).rgb, kWeights │ │ │ │ + 0x00d039e0 293b200a 20202020 666c6f61 74204c74 ); . float Lt │ │ │ │ + 0x00d039f0 6f70203d 20646f74 28746578 74757265 op = dot(texture │ │ │ │ + 0x00d03a00 28755f63 6f6c6f72 5465782c 20765f6f (u_colorTex, v_o │ │ │ │ + 0x00d03a10 66667365 74302e7a 77292e72 67622c20 ffset0.zw).rgb, │ │ │ │ + 0x00d03a20 6b576569 67687473 293b200a 20202020 kWeights); . │ │ │ │ + 0x00d03a30 76656334 2064656c 74613b20 0a202020 vec4 delta; . │ │ │ │ + 0x00d03a40 2064656c 74612e78 79203d20 61627328 delta.xy = abs( │ │ │ │ + 0x00d03a50 4c202d20 76656332 284c6c65 66742c20 L - vec2(Lleft, │ │ │ │ + 0x00d03a60 4c746f70 29293b20 0a202020 20766563 Ltop)); . vec │ │ │ │ + 0x00d03a70 32206564 67657320 3d207374 6570286b 2 edges = step(k │ │ │ │ + 0x00d03a80 54687265 73686f6c 642c2064 656c7461 Threshold, delta │ │ │ │ + 0x00d03a90 2e787929 3b200a20 20202069 66202864 .xy); . if (d │ │ │ │ + 0x00d03aa0 6f742865 64676573 2c207665 63322831 ot(edges, vec2(1 │ │ │ │ + 0x00d03ab0 2e302c20 312e3029 29203d3d 20302e30 .0, 1.0)) == 0.0 │ │ │ │ + 0x00d03ac0 29200a20 20202020 20202064 69736361 ) . disca │ │ │ │ + 0x00d03ad0 72643b20 0a202020 20666c6f 6174204c rd; . float L │ │ │ │ + 0x00d03ae0 72696768 74203d20 646f7428 74657874 right = dot(text │ │ │ │ + 0x00d03af0 75726528 755f636f 6c6f7254 65782c20 ure(u_colorTex, │ │ │ │ + 0x00d03b00 765f6f66 66736574 312e7879 292e7267 v_offset1.xy).rg │ │ │ │ + 0x00d03b10 622c206b 57656967 68747329 3b200a20 b, kWeights); . │ │ │ │ + 0x00d03b20 20202066 6c6f6174 204c626f 74746f6d float Lbottom │ │ │ │ + 0x00d03b30 20203d20 646f7428 74657874 75726528 = dot(texture( │ │ │ │ + 0x00d03b40 755f636f 6c6f7254 65782c20 765f6f66 u_colorTex, v_of │ │ │ │ + 0x00d03b50 66736574 312e7a77 292e7267 622c206b fset1.zw).rgb, k │ │ │ │ + 0x00d03b60 57656967 68747329 3b200a20 20202064 Weights); . d │ │ │ │ + 0x00d03b70 656c7461 2e7a7720 3d206162 73284c20 elta.zw = abs(L │ │ │ │ + 0x00d03b80 2d207665 6332284c 72696768 742c204c - vec2(Lright, L │ │ │ │ + 0x00d03b90 626f7474 6f6d2929 3b200a20 20202076 bottom)); . v │ │ │ │ + 0x00d03ba0 65633220 6d617844 656c7461 203d206d ec2 maxDelta = m │ │ │ │ + 0x00d03bb0 61782864 656c7461 2e78792c 2064656c ax(delta.xy, del │ │ │ │ + 0x00d03bc0 74612e7a 77293b20 0a202020 20666c6f ta.zw); . flo │ │ │ │ + 0x00d03bd0 6174204c 6c656674 6c656674 203d2064 at Lleftleft = d │ │ │ │ + 0x00d03be0 6f742874 65787475 72652875 5f636f6c ot(texture(u_col │ │ │ │ + 0x00d03bf0 6f725465 782c2076 5f6f6666 73657432 orTex, v_offset2 │ │ │ │ + 0x00d03c00 2e787929 2e726762 2c206b57 65696768 .xy).rgb, kWeigh │ │ │ │ + 0x00d03c10 7473293b 200a2020 2020666c 6f617420 ts); . float │ │ │ │ + 0x00d03c20 4c746f70 746f7020 3d20646f 74287465 Ltoptop = dot(te │ │ │ │ + 0x00d03c30 78747572 6528755f 636f6c6f 72546578 xture(u_colorTex │ │ │ │ + 0x00d03c40 2c20765f 6f666673 6574322e 7a77292e , v_offset2.zw). │ │ │ │ + 0x00d03c50 7267622c 206b5765 69676874 73293b20 rgb, kWeights); │ │ │ │ + 0x00d03c60 0a202020 2064656c 74612e7a 77203d20 . delta.zw = │ │ │ │ + 0x00d03c70 61627328 76656332 284c6c65 66742c20 abs(vec2(Lleft, │ │ │ │ + 0x00d03c80 4c746f70 29202d20 76656332 284c6c65 Ltop) - vec2(Lle │ │ │ │ + 0x00d03c90 66746c65 66742c20 4c746f70 746f7029 ftleft, Ltoptop) │ │ │ │ + 0x00d03ca0 293b200a 20202020 6d617844 656c7461 ); . maxDelta │ │ │ │ + 0x00d03cb0 203d206d 6178286d 61784465 6c74612e = max(maxDelta. │ │ │ │ + 0x00d03cc0 78792c20 64656c74 612e7a77 293b200a xy, delta.zw); . │ │ │ │ + 0x00d03cd0 20202020 666c6f61 74206669 6e616c44 float finalD │ │ │ │ + 0x00d03ce0 656c7461 203d206d 6178286d 61784465 elta = max(maxDe │ │ │ │ + 0x00d03cf0 6c74612e 782c206d 61784465 6c74612e lta.x, maxDelta. │ │ │ │ + 0x00d03d00 79293b20 0a202020 20656467 6573202a y); . edges * │ │ │ │ + 0x00d03d10 3d207374 65702866 696e616c 44656c74 = step(finalDelt │ │ │ │ + 0x00d03d20 612c2053 4d41415f 4c4f4341 4c5f434f a, SMAA_LOCAL_CO │ │ │ │ + 0x00d03d30 4e545241 53545f41 44415054 4154494f NTRAST_ADAPTATIO │ │ │ │ + 0x00d03d40 4e5f4641 43544f52 202a2064 656c7461 N_FACTOR * delta │ │ │ │ + 0x00d03d50 2e787929 3b200a20 20202076 5f467261 .xy); . v_Fra │ │ │ │ + 0x00d03d60 67436f6c 6f72203d 20766563 34286564 gColor = vec4(ed │ │ │ │ + 0x00d03d70 6765732c 20302e30 2c20312e 30293b20 ges, 0.0, 1.0); │ │ │ │ + 0x00d03d80 0a20207d 200a0000 00000000 00000000 . } ........... │ │ │ │ + 0x00d03d90 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d03da0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d03db0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d03dc0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d03dd0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d03de0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d03df0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d03e00 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d03e10 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d03e20 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d03e30 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d03e40 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d03e50 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d03e60 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d03e70 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d03e80 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d03e90 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d03ea0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d03eb0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d03ec0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d03ed0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d03ee0 63332061 5f6e6f72 6d616c3b 200a2020 c3 a_normal; . │ │ │ │ + 0x00d03ef0 696e2076 65633320 615f706f 73697469 in vec3 a_positi │ │ │ │ + 0x00d03f00 6f6e3b20 0a202069 6e207665 63342061 on; . in vec4 a │ │ │ │ + 0x00d03f10 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d03f20 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ + 0x00d03f30 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ + 0x00d03f40 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ + 0x00d03f50 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00d03f60 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d03f70 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d03f80 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d03f90 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00d03fa0 0a202075 6e69666f 726d2076 65633220 . uniform vec2 │ │ │ │ + 0x00d03fb0 755f636f 6e747261 73744761 6d6d613b u_contrastGamma; │ │ │ │ + 0x00d03fc0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d03fd0 7420755f 6f706163 6974793b 200a2020 t u_opacity; . │ │ │ │ + 0x00d03fe0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d03ff0 7a536361 6c653b20 0a202075 6e69666f zScale; . unifo │ │ │ │ + 0x00d04000 726d2066 6c6f6174 20755f69 6e746572 rm float u_inter │ │ │ │ + 0x00d04010 706f6c61 74696f6e 3b200a20 20756e69 polation; . uni │ │ │ │ + 0x00d04020 666f726d 20666c6f 61742075 5f69734f form float u_isO │ │ │ │ + 0x00d04030 75746c69 6e655061 73733b20 0a202063 utlinePass; . c │ │ │ │ + 0x00d04040 6f6e7374 20666c6f 6174206b 53686170 onst float kShap │ │ │ │ + 0x00d04050 65436f6f 72645363 616c6172 203d2031 eCoordScalar = 1 │ │ │ │ + 0x00d04060 3030302e 303b200a 20207665 63342061 000.0; . vec4 a │ │ │ │ + 0x00d04070 70706c79 5069766f 74547261 6e73666f pplyPivotTransfo │ │ │ │ + 0x00d04080 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ + 0x00d04090 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ + 0x00d040a0 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ + 0x00d040b0 65616c5a 29200a20 207b200a 20202020 ealZ) . { . │ │ │ │ + 0x00d040c0 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ + 0x00d040d0 5069766f 74203d20 7069766f 743b200a Pivot = pivot; . │ │ │ │ + 0x00d040e0 20202020 666c6f61 74207720 3d207472 float w = tr │ │ │ │ + 0x00d040f0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d04100 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d04110 65645069 766f742e 78797720 3d202870 edPivot.xyw = (p │ │ │ │ + 0x00d04120 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d04130 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d04140 5069766f 742e7879 2c207069 766f7452 Pivot.xy, pivotR │ │ │ │ + 0x00d04150 65616c5a 2c207729 292e7879 773b200a ealZ, w)).xyw; . │ │ │ │ 0x00d04160 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d04170 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00d04180 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00d04190 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d041a0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00d041b0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00d041c0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d041d0 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d041e0 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d041f0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d04200 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00d04210 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00d04220 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00d04230 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00d04240 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00d04250 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00d04260 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00d04270 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00d04280 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00d04290 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00d042a0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d042b0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00d042c0 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00d042d0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d042e0 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00d042f0 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00d04300 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d04310 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00d04320 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00d04330 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00d04340 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d04350 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00d04360 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00d04370 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00d04380 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00d04390 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00d043a0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00d043b0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00d043c0 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00d043d0 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00d043e0 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00d043f0 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00d04400 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00d04410 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d04420 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00d04430 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00d04440 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d04450 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00d04460 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00d04470 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00d04480 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00d04490 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00d044a0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00d044b0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00d044c0 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00d044d0 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00d044e0 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00d044f0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d04500 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00d04510 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00d04520 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d04530 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00d04540 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00d04550 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d04170 69766f74 2e7a202a 3d207472 616e7366 ivot.z *= transf │ │ │ │ + 0x00d04180 6f726d65 64506976 6f742e77 202f2077 ormedPivot.w / w │ │ │ │ + 0x00d04190 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d041a0 414e200a 20202020 7472616e 73666f72 AN . transfor │ │ │ │ + 0x00d041b0 6d656450 69766f74 2e79203d 202d7472 medPivot.y = -tr │ │ │ │ + 0x00d041c0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d041d0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ + 0x00d041e0 65645069 766f742e 7a203d20 28747261 edPivot.z = (tra │ │ │ │ + 0x00d041f0 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d04200 202b2074 72616e73 666f726d 65645069 + transformedPi │ │ │ │ + 0x00d04210 766f742e 7729202f 20322e30 3b200a20 vot.w) / 2.0; . │ │ │ │ + 0x00d04220 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d04230 75726e20 7472616e 73666f72 6d656450 urn transformedP │ │ │ │ + 0x00d04240 69766f74 3b200a20 207d200a 20207665 ivot; . } . ve │ │ │ │ + 0x00d04250 63342061 70706c79 42696c6c 626f6172 c4 applyBillboar │ │ │ │ + 0x00d04260 64506976 6f745472 616e7366 6f726d28 dPivotTransform( │ │ │ │ + 0x00d04270 76656334 20706976 6f742c20 6d617434 vec4 pivot, mat4 │ │ │ │ + 0x00d04280 20706976 6f745472 616e7366 6f726d2c pivotTransform, │ │ │ │ + 0x00d04290 20666c6f 61742070 69766f74 5265616c float pivotReal │ │ │ │ + 0x00d042a0 5a2c2076 65633220 6f666673 65742920 Z, vec2 offset) │ │ │ │ + 0x00d042b0 0a20207b 200a2020 2020666c 6f617420 . { . float │ │ │ │ + 0x00d042c0 6c6f6769 635a203d 20706976 6f742e7a logicZ = pivot.z │ │ │ │ + 0x00d042d0 202f2070 69766f74 2e773b20 0a202020 / pivot.w; . │ │ │ │ + 0x00d042e0 20766563 34207472 616e7366 6f726d65 vec4 transforme │ │ │ │ + 0x00d042f0 64506976 6f74203d 20706976 6f745472 dPivot = pivotTr │ │ │ │ + 0x00d04300 616e7366 6f726d20 2a207665 63342870 ansform * vec4(p │ │ │ │ + 0x00d04310 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ + 0x00d04320 616c5a2c 20706976 6f742e77 293b200a alZ, pivot.w); . │ │ │ │ + 0x00d04330 20202020 76656334 20736361 6c65203d vec4 scale = │ │ │ │ + 0x00d04340 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ + 0x00d04350 2a207665 63342831 2e302c20 2d312e30 * vec4(1.0, -1.0 │ │ │ │ + 0x00d04360 2c20302e 302c2031 2e30293b 200a2020 , 0.0, 1.0); . │ │ │ │ + 0x00d04370 20207665 63342070 6f736974 696f6e20 vec4 position │ │ │ │ + 0x00d04380 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ + 0x00d04390 65645069 766f742e 7879202f 20747261 edPivot.xy / tra │ │ │ │ + 0x00d043a0 6e73666f 726d6564 5069766f 742e772c nsformedPivot.w, │ │ │ │ + 0x00d043b0 206c6f67 69635a2c 20312e30 29202b20 logicZ, 1.0) + │ │ │ │ + 0x00d043c0 76656334 286f6666 73657420 2f207363 vec4(offset / sc │ │ │ │ + 0x00d043d0 616c652e 77202a20 7363616c 652e782c ale.w * scale.x, │ │ │ │ + 0x00d043e0 20302e30 2c20302e 30293b20 0a202023 0.0, 0.0); . # │ │ │ │ + 0x00d043f0 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d04400 2020706f 73697469 6f6e2e79 203d202d position.y = - │ │ │ │ + 0x00d04410 706f7369 74696f6e 2e793b20 0a202020 position.y; . │ │ │ │ + 0x00d04420 20706f73 6974696f 6e2e7a20 3d202870 position.z = (p │ │ │ │ + 0x00d04430 6f736974 696f6e2e 7a20202b 20706f73 osition.z + pos │ │ │ │ + 0x00d04440 6974696f 6e2e7729 202f2032 2e303b20 ition.w) / 2.0; │ │ │ │ + 0x00d04450 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ + 0x00d04460 65747572 6e20706f 73697469 6f6e3b20 eturn position; │ │ │ │ + 0x00d04470 0a20207d 200a2020 76656332 2063616c . } . vec2 cal │ │ │ │ + 0x00d04480 634c696e 65547261 6e73666f 726d6564 cLineTransformed │ │ │ │ + 0x00d04490 41786973 506f7328 76656332 206f7269 AxisPos(vec2 ori │ │ │ │ + 0x00d044a0 67696e61 6c417869 73506f73 2c207665 ginalAxisPos, ve │ │ │ │ + 0x00d044b0 63322073 68696674 6564506f 732c206d c2 shiftedPos, m │ │ │ │ + 0x00d044c0 61743420 6d6f6465 6c566965 772c2066 at4 modelView, f │ │ │ │ + 0x00d044d0 6c6f6174 2068616c 66576964 74682920 loat halfWidth) │ │ │ │ + 0x00d044e0 0a20207b 200a2020 20207665 63322070 . { . vec2 p │ │ │ │ + 0x00d044f0 203d2028 76656334 28736869 66746564 = (vec4(shifted │ │ │ │ + 0x00d04500 506f732c 20302e30 2c20312e 3029202a Pos, 0.0, 1.0) * │ │ │ │ + 0x00d04510 206d6f64 656c5669 6577292e 78793b20 modelView).xy; │ │ │ │ + 0x00d04520 0a202020 20766563 32206420 3d207020 . vec2 d = p │ │ │ │ + 0x00d04530 2d206f72 6967696e 616c4178 6973506f - originalAxisPo │ │ │ │ + 0x00d04540 733b200a 20202020 69662028 646f7428 s; . if (dot( │ │ │ │ + 0x00d04550 642c2064 2920213d 20302e30 29200a20 d, d) != 0.0) . │ │ │ │ 0x00d04560 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d04570 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d04580 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00d04590 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00d045a0 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ - 0x00d045b0 6974696f 6e2e7879 7a2c2031 29202a20 ition.xyz, 1) * │ │ │ │ - 0x00d045c0 755f6d6f 64656c56 6965773b 200a2020 u_modelView; . │ │ │ │ - 0x00d045d0 20207665 63342073 68696674 6564506f vec4 shiftedPo │ │ │ │ - 0x00d045e0 73203d20 76656334 28615f6e 6f726d61 s = vec4(a_norma │ │ │ │ - 0x00d045f0 6c2c2030 2c203029 202b2070 6f733b20 l, 0, 0) + pos; │ │ │ │ - 0x00d04600 0a202020 20676c5f 506f7369 74696f6e . gl_Position │ │ │ │ - 0x00d04610 203d2061 70706c79 5069766f 74547261 = applyPivotTra │ │ │ │ - 0x00d04620 6e73666f 726d2873 68696674 6564506f nsform(shiftedPo │ │ │ │ - 0x00d04630 73202a20 755f7072 6f6a6563 74696f6e s * u_projection │ │ │ │ - 0x00d04640 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ - 0x00d04650 726d2c20 302e3029 3b200a20 20202076 rm, 0.0); . v │ │ │ │ - 0x00d04660 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ - 0x00d04670 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ - 0x00d04680 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ - 0x00d04690 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d046a0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d046b0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d046c0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d046d0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d046e0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d046f0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d04700 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d04710 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d04720 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d04730 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d04740 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d04750 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d04760 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d04770 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d04780 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d04790 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d047a0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d047b0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d047c0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d047d0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d047e0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d047f0 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ - 0x00d04800 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d04810 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ - 0x00d04820 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ - 0x00d04830 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ - 0x00d04840 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d04850 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d04860 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d04870 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d04880 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00d04890 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00d048a0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00d048b0 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00d048c0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d048d0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d048e0 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00d048f0 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00d04900 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00d04910 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d04920 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d04930 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00d04940 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d04950 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d04960 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00d04970 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d04980 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d04990 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d049a0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d049b0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d049c0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d049d0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00d049e0 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00d049f0 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00d04a00 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d04a10 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00d04a20 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d04a30 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d04a40 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d04a50 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00d04a60 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d04a70 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00d04a80 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00d04a90 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d04aa0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d04ab0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00d04ac0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00d04ad0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d04ae0 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00d04af0 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00d04b00 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d04b10 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d04b20 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d04b30 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d04b40 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00d04b50 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00d04b60 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00d04b70 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00d04b80 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00d04b90 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00d04ba0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00d04bb0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00d04bc0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00d04bd0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00d04be0 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d04bf0 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00d04c00 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00d04c10 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d04c20 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00d04c30 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00d04c40 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d04c50 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00d04c60 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00d04c70 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00d04c80 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d04c90 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00d04ca0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00d04cb0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00d04cc0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00d04cd0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00d04ce0 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00d04cf0 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00d04d00 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00d04d10 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00d04d20 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00d04d30 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00d04d40 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00d04d50 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d04d60 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00d04d70 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00d04d80 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d04d90 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00d04da0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00d04db0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00d04dc0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00d04dd0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00d04de0 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00d04df0 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00d04e00 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00d04e10 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00d04e20 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00d04e30 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d04e40 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00d04e50 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00d04e60 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d04e70 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00d04e80 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00d04e90 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00d04ea0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d04eb0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d04ec0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00d04ed0 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ - 0x00d04ee0 7069766f 74203d20 76656334 28615f70 pivot = vec4(a_p │ │ │ │ - 0x00d04ef0 6f736974 696f6e2e 78797a2c 20312e30 osition.xyz, 1.0 │ │ │ │ - 0x00d04f00 29202a20 755f6d6f 64656c56 6965773b ) * u_modelView; │ │ │ │ - 0x00d04f10 200a2020 20207665 6334206f 66667365 . vec4 offse │ │ │ │ - 0x00d04f20 74203d20 76656334 28615f6e 6f726d61 t = vec4(a_norma │ │ │ │ - 0x00d04f30 6c2c2030 2e302c20 302e3029 202a2075 l, 0.0, 0.0) * u │ │ │ │ - 0x00d04f40 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00d04f50 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d04f60 6170706c 7942696c 6c626f61 72645069 applyBillboardPi │ │ │ │ - 0x00d04f70 766f7454 72616e73 666f726d 28706976 votTransform(piv │ │ │ │ - 0x00d04f80 6f74202a 20755f70 726f6a65 6374696f ot * u_projectio │ │ │ │ - 0x00d04f90 6e2c2075 5f706976 6f745472 616e7366 n, u_pivotTransf │ │ │ │ - 0x00d04fa0 6f726d2c 200a2020 20202020 20202020 orm, . │ │ │ │ - 0x00d04fb0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d04fc0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d04fd0 20202020 20615f70 6f736974 696f6e2e a_position. │ │ │ │ - 0x00d04fe0 77202a20 755f7a53 63616c65 2c206f66 w * u_zScale, of │ │ │ │ - 0x00d04ff0 66736574 2e787929 3b200a20 20202076 fset.xy); . v │ │ │ │ - 0x00d05000 5f636f6c 6f725465 78436f6f 72647320 _colorTexCoords │ │ │ │ - 0x00d05010 3d20615f 636f6c6f 72546578 436f6f72 = a_colorTexCoor │ │ │ │ - 0x00d05020 64733b20 0a20207d 200a0000 00000000 ds; . } ....... │ │ │ │ - 0x00d05030 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d05040 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d05050 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d05060 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d05070 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d05080 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d05090 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d050a0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d050b0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d050c0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d050d0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d050e0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d050f0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d05100 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d05110 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d05120 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d05130 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d05140 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d05150 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d05160 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d05170 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d05180 63322061 5f706f73 6974696f 6e3b200a c2 a_position; . │ │ │ │ - 0x00d05190 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00d051a0 72546578 436f6f72 64733b20 0a20206f rTexCoords; . o │ │ │ │ - 0x00d051b0 75742076 65633220 765f636f 6c6f7254 ut vec2 v_colorT │ │ │ │ - 0x00d051c0 6578436f 6f726473 3b200a20 20756e69 exCoords; . uni │ │ │ │ - 0x00d051d0 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ - 0x00d051e0 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ - 0x00d051f0 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ - 0x00d05200 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ - 0x00d05210 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ - 0x00d05220 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ - 0x00d05230 20766563 3220755f 706f7369 74696f6e vec2 u_position │ │ │ │ - 0x00d05240 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d05250 61742075 5f69734f 75746c69 6e655061 at u_isOutlinePa │ │ │ │ - 0x00d05260 73733b20 0a202075 6e69666f 726d2066 ss; . uniform f │ │ │ │ - 0x00d05270 6c6f6174 20755f6f 70616369 74793b20 loat u_opacity; │ │ │ │ - 0x00d05280 0a202075 6e69666f 726d2066 6c6f6174 . uniform float │ │ │ │ - 0x00d05290 20755f6c 656e6774 683b200a 2020636f u_length; . co │ │ │ │ - 0x00d052a0 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d052b0 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d052c0 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ - 0x00d052d0 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ - 0x00d052e0 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00d052f0 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00d05300 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00d05310 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ - 0x00d05320 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00d05330 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ - 0x00d05340 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ - 0x00d05350 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ - 0x00d05360 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d05370 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ - 0x00d05380 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d05390 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00d053a0 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ - 0x00d053b0 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ - 0x00d053c0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d053d0 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ - 0x00d053e0 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ - 0x00d053f0 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d05400 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ - 0x00d05410 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ - 0x00d05420 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ - 0x00d05430 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d05440 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ - 0x00d05450 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ - 0x00d05460 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ - 0x00d05470 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ - 0x00d05480 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00d05490 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ - 0x00d054a0 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ - 0x00d054b0 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ - 0x00d054c0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d054d0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d054e0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d054f0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d05500 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ - 0x00d05510 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ - 0x00d05520 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ - 0x00d05530 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ - 0x00d05540 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ - 0x00d05550 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ - 0x00d05560 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ - 0x00d05570 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00d05580 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ - 0x00d05590 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ - 0x00d055a0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d055b0 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ - 0x00d055c0 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ - 0x00d055d0 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ - 0x00d055e0 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ - 0x00d055f0 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ - 0x00d05600 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ - 0x00d05610 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ - 0x00d05620 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ - 0x00d05630 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ - 0x00d05640 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ - 0x00d05650 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ - 0x00d05660 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ - 0x00d05670 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ - 0x00d05680 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ - 0x00d05690 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ - 0x00d056a0 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ - 0x00d056b0 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ - 0x00d056c0 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ - 0x00d056d0 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ - 0x00d056e0 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ - 0x00d056f0 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ - 0x00d05700 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ - 0x00d05710 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ - 0x00d05720 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ - 0x00d05730 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ - 0x00d05740 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ - 0x00d05750 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ - 0x00d05760 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ - 0x00d05770 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ - 0x00d05780 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ - 0x00d05790 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d057a0 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ - 0x00d057b0 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ - 0x00d057c0 20202020 72657475 726e206f 72696769 return origi │ │ │ │ - 0x00d057d0 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ - 0x00d057e0 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ - 0x00d057f0 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ - 0x00d05800 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00d05810 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00d05820 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ - 0x00d05830 6e282920 0a20207b 200a2020 2020676c n() . { . gl │ │ │ │ - 0x00d05840 5f506f73 6974696f 6e203d20 76656334 _Position = vec4 │ │ │ │ - 0x00d05850 28615f70 6f736974 696f6e2c 20302c20 (a_position, 0, │ │ │ │ - 0x00d05860 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ - 0x00d05870 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ - 0x00d05880 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d05890 4e200a20 20202067 6c5f506f 73697469 N . gl_Positi │ │ │ │ - 0x00d058a0 6f6e2e79 203d202d 676c5f50 6f736974 on.y = -gl_Posit │ │ │ │ - 0x00d058b0 696f6e2e 793b200a 20202020 676c5f50 ion.y; . gl_P │ │ │ │ - 0x00d058c0 6f736974 696f6e2e 7a203d20 28676c5f osition.z = (gl_ │ │ │ │ - 0x00d058d0 506f7369 74696f6e 2e7a2020 2b20676c Position.z + gl │ │ │ │ - 0x00d058e0 5f506f73 6974696f 6e2e7729 202a2030 _Position.w) * 0 │ │ │ │ - 0x00d058f0 2e353b20 0a202023 656e6469 66200a20 .5; . #endif . │ │ │ │ - 0x00d05900 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00d05910 72647320 3d20615f 636f6c6f 72546578 rds = a_colorTex │ │ │ │ - 0x00d05920 436f6f72 64733b20 0a20207d 200a0000 Coords; . } ... │ │ │ │ - 0x00d05930 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d05940 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d05950 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d05960 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d05970 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d05980 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d05990 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d059a0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d059b0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d059c0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d059d0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d059e0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d059f0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d05a00 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d05a10 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d05a20 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d05a30 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d05a40 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d05a50 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d05a60 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d05a70 2023656e 64696620 0a202023 64656669 #endif . #defi │ │ │ │ - 0x00d05a80 6e652054 494c455f 4241434b 47524f55 ne TILE_BACKGROU │ │ │ │ - 0x00d05a90 4e445f4d 41585f43 4f554e54 20363420 ND_MAX_COUNT 64 │ │ │ │ - 0x00d05aa0 0a20206f 75742076 65633320 765f7465 . out vec3 v_te │ │ │ │ - 0x00d05ab0 78436f6f 7264733b 200a2020 756e6966 xCoords; . unif │ │ │ │ - 0x00d05ac0 6f726d20 76656334 20755f74 696c6543 orm vec4 u_tileC │ │ │ │ - 0x00d05ad0 6f6f7264 734d696e 4d61785b 54494c45 oordsMinMax[TILE │ │ │ │ - 0x00d05ae0 5f424143 4b47524f 554e445f 4d41585f _BACKGROUND_MAX_ │ │ │ │ - 0x00d05af0 434f554e 545d3b20 0a202075 6e69666f COUNT]; . unifo │ │ │ │ - 0x00d05b00 726d2076 65633420 755f7465 78747572 rm vec4 u_textur │ │ │ │ - 0x00d05b10 65526563 744d696e 4d61785b 54494c45 eRectMinMax[TILE │ │ │ │ - 0x00d05b20 5f424143 4b47524f 554e445f 4d41585f _BACKGROUND_MAX_ │ │ │ │ - 0x00d05b30 434f554e 545d3b20 0a202075 6e69666f COUNT]; . unifo │ │ │ │ - 0x00d05b40 726d2069 6e742075 5f746578 74757265 rm int u_texture │ │ │ │ - 0x00d05b50 496e6465 785b5449 4c455f42 41434b47 Index[TILE_BACKG │ │ │ │ - 0x00d05b60 524f554e 445f4d41 585f434f 554e545d ROUND_MAX_COUNT] │ │ │ │ - 0x00d05b70 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ - 0x00d05b80 3420755f 6d6f6465 6c566965 773b200a 4 u_modelView; . │ │ │ │ - 0x00d05b90 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d05ba0 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00d05bb0 756e6966 6f726d20 6d617434 20755f70 uniform mat4 u_p │ │ │ │ - 0x00d05bc0 69766f74 5472616e 73666f72 6d3b200a ivotTransform; . │ │ │ │ - 0x00d05bd0 2020636f 6e737420 666c6f61 74206b53 const float kS │ │ │ │ - 0x00d05be0 68617065 436f6f72 64536361 6c617220 hapeCoordScalar │ │ │ │ - 0x00d05bf0 3d203130 30302e30 3b200a20 20766563 = 1000.0; . vec │ │ │ │ - 0x00d05c00 34206170 706c7950 69766f74 5472616e 4 applyPivotTran │ │ │ │ - 0x00d05c10 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00d05c20 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00d05c30 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00d05c40 6f745265 616c5a29 200a2020 7b200a20 otRealZ) . { . │ │ │ │ - 0x00d05c50 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00d05c60 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00d05c70 3b200a20 20202066 6c6f6174 2077203d ; . float w = │ │ │ │ - 0x00d05c80 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d05c90 742e773b 200a2020 20207472 616e7366 t.w; . transf │ │ │ │ - 0x00d05ca0 6f726d65 64506976 6f742e78 7977203d ormedPivot.xyw = │ │ │ │ - 0x00d05cb0 20287069 766f7454 72616e73 666f726d (pivotTransform │ │ │ │ - 0x00d05cc0 202a2076 65633428 7472616e 73666f72 * vec4(transfor │ │ │ │ - 0x00d05cd0 6d656450 69766f74 2e78792c 20706976 medPivot.xy, piv │ │ │ │ - 0x00d05ce0 6f745265 616c5a2c 20772929 2e787977 otRealZ, w)).xyw │ │ │ │ - 0x00d05cf0 3b200a20 20202074 72616e73 666f726d ; . transform │ │ │ │ - 0x00d05d00 65645069 766f742e 7a202a3d 20747261 edPivot.z *= tra │ │ │ │ - 0x00d05d10 6e73666f 726d6564 5069766f 742e7720 nsformedPivot.w │ │ │ │ - 0x00d05d20 2f20773b 200a2020 23696664 65662056 / w; . #ifdef V │ │ │ │ - 0x00d05d30 554c4b41 4e200a20 20202074 72616e73 ULKAN . trans │ │ │ │ - 0x00d05d40 666f726d 65645069 766f742e 79203d20 formedPivot.y = │ │ │ │ - 0x00d05d50 2d747261 6e73666f 726d6564 5069766f -transformedPivo │ │ │ │ - 0x00d05d60 742e793b 200a2020 20207472 616e7366 t.y; . transf │ │ │ │ - 0x00d05d70 6f726d65 64506976 6f742e7a 203d2028 ormedPivot.z = ( │ │ │ │ - 0x00d05d80 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d05d90 2e7a2020 2b207472 616e7366 6f726d65 .z + transforme │ │ │ │ - 0x00d05da0 64506976 6f742e77 29202f20 322e303b dPivot.w) / 2.0; │ │ │ │ - 0x00d05db0 200a2020 23656e64 6966200a 20202020 . #endif . │ │ │ │ - 0x00d05dc0 72657475 726e2074 72616e73 666f726d return transform │ │ │ │ - 0x00d05dd0 65645069 766f743b 200a2020 7d200a20 edPivot; . } . │ │ │ │ - 0x00d05de0 20766563 34206170 706c7942 696c6c62 vec4 applyBillb │ │ │ │ - 0x00d05df0 6f617264 5069766f 74547261 6e73666f oardPivotTransfo │ │ │ │ - 0x00d05e00 726d2876 65633420 7069766f 742c206d rm(vec4 pivot, m │ │ │ │ - 0x00d05e10 61743420 7069766f 74547261 6e73666f at4 pivotTransfo │ │ │ │ - 0x00d05e20 726d2c20 666c6f61 74207069 766f7452 rm, float pivotR │ │ │ │ - 0x00d05e30 65616c5a 2c207665 6332206f 66667365 ealZ, vec2 offse │ │ │ │ - 0x00d05e40 7429200a 20207b20 0a202020 20666c6f t) . { . flo │ │ │ │ - 0x00d05e50 6174206c 6f676963 5a203d20 7069766f at logicZ = pivo │ │ │ │ - 0x00d05e60 742e7a20 2f207069 766f742e 773b200a t.z / pivot.w; . │ │ │ │ - 0x00d05e70 20202020 76656334 20747261 6e73666f vec4 transfo │ │ │ │ - 0x00d05e80 726d6564 5069766f 74203d20 7069766f rmedPivot = pivo │ │ │ │ - 0x00d05e90 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ - 0x00d05ea0 34287069 766f742e 78792c20 7069766f 4(pivot.xy, pivo │ │ │ │ - 0x00d05eb0 74526561 6c5a2c20 7069766f 742e7729 tRealZ, pivot.w) │ │ │ │ - 0x00d05ec0 3b200a20 20202076 65633420 7363616c ; . vec4 scal │ │ │ │ - 0x00d05ed0 65203d20 7069766f 74547261 6e73666f e = pivotTransfo │ │ │ │ - 0x00d05ee0 726d202a 20766563 3428312e 302c202d rm * vec4(1.0, - │ │ │ │ - 0x00d05ef0 312e302c 20302e30 2c20312e 30293b20 1.0, 0.0, 1.0); │ │ │ │ - 0x00d05f00 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ - 0x00d05f10 6f6e203d 20766563 34287472 616e7366 on = vec4(transf │ │ │ │ - 0x00d05f20 6f726d65 64506976 6f742e78 79202f20 ormedPivot.xy / │ │ │ │ - 0x00d05f30 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d05f40 2e772c20 6c6f6769 635a2c20 312e3029 .w, logicZ, 1.0) │ │ │ │ - 0x00d05f50 202b2076 65633428 6f666673 6574202f + vec4(offset / │ │ │ │ - 0x00d05f60 20736361 6c652e77 202a2073 63616c65 scale.w * scale │ │ │ │ - 0x00d05f70 2e782c20 302e302c 20302e30 293b200a .x, 0.0, 0.0); . │ │ │ │ - 0x00d05f80 20202369 66646566 2056554c 4b414e20 #ifdef VULKAN │ │ │ │ - 0x00d05f90 0a202020 20706f73 6974696f 6e2e7920 . position.y │ │ │ │ - 0x00d05fa0 3d202d70 6f736974 696f6e2e 793b200a = -position.y; . │ │ │ │ - 0x00d05fb0 20202020 706f7369 74696f6e 2e7a203d position.z = │ │ │ │ - 0x00d05fc0 2028706f 73697469 6f6e2e7a 20202b20 (position.z + │ │ │ │ - 0x00d05fd0 706f7369 74696f6e 2e772920 2f20322e position.w) / 2. │ │ │ │ - 0x00d05fe0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ - 0x00d05ff0 20207265 7475726e 20706f73 6974696f return positio │ │ │ │ - 0x00d06000 6e3b200a 20207d20 0a202076 65633220 n; . } . vec2 │ │ │ │ - 0x00d06010 63616c63 4c696e65 5472616e 73666f72 calcLineTransfor │ │ │ │ - 0x00d06020 6d656441 78697350 6f732876 65633220 medAxisPos(vec2 │ │ │ │ - 0x00d06030 6f726967 696e616c 41786973 506f732c originalAxisPos, │ │ │ │ - 0x00d06040 20766563 32207368 69667465 64506f73 vec2 shiftedPos │ │ │ │ - 0x00d06050 2c206d61 7434206d 6f64656c 56696577 , mat4 modelView │ │ │ │ - 0x00d06060 2c20666c 6f617420 68616c66 57696474 , float halfWidt │ │ │ │ - 0x00d06070 6829200a 20207b20 0a202020 20766563 h) . { . vec │ │ │ │ - 0x00d06080 32207020 3d202876 65633428 73686966 2 p = (vec4(shif │ │ │ │ - 0x00d06090 74656450 6f732c20 302e302c 20312e30 tedPos, 0.0, 1.0 │ │ │ │ - 0x00d060a0 29202a20 6d6f6465 6c566965 77292e78 ) * modelView).x │ │ │ │ - 0x00d060b0 793b200a 20202020 76656332 2064203d y; . vec2 d = │ │ │ │ - 0x00d060c0 2070202d 206f7269 67696e61 6c417869 p - originalAxi │ │ │ │ - 0x00d060d0 73506f73 3b200a20 20202069 66202864 sPos; . if (d │ │ │ │ - 0x00d060e0 6f742864 2c206429 20213d20 302e3029 ot(d, d) != 0.0) │ │ │ │ - 0x00d060f0 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00d06100 72696769 6e616c41 78697350 6f73202b riginalAxisPos + │ │ │ │ - 0x00d06110 206e6f72 6d616c69 7a652864 29202a20 normalize(d) * │ │ │ │ - 0x00d06120 68616c66 57696474 683b200a 20202020 halfWidth; . │ │ │ │ - 0x00d06130 656c7365 200a2020 20202020 72657475 else . retu │ │ │ │ - 0x00d06140 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00d06150 6f733b20 0a20207d 200a2020 766f6964 os; . } . void │ │ │ │ - 0x00d06160 206d6169 6e282920 0a20207b 200a2020 main() . { . │ │ │ │ - 0x00d06170 20207665 63322071 75616456 65727465 vec2 quadVerte │ │ │ │ - 0x00d06180 78203d20 76656332 28676c5f 56657274 x = vec2(gl_Vert │ │ │ │ - 0x00d06190 65784944 20262031 2c202867 6c5f5665 exID & 1, (gl_Ve │ │ │ │ - 0x00d061a0 72746578 4944203e 3e203129 20262031 rtexID >> 1) & 1 │ │ │ │ - 0x00d061b0 293b200a 20202020 76656334 2074696c ); . vec4 til │ │ │ │ - 0x00d061c0 65436f6f 7264734d 696e4d61 78203d20 eCoordsMinMax = │ │ │ │ - 0x00d061d0 755f7469 6c65436f 6f726473 4d696e4d u_tileCoordsMinM │ │ │ │ - 0x00d061e0 61785b67 6c5f496e 7374616e 63654944 ax[gl_InstanceID │ │ │ │ - 0x00d061f0 5d3b200a 20202020 76656332 20776f72 ]; . vec2 wor │ │ │ │ - 0x00d06200 6c64506f 73203d20 6d697828 74696c65 ldPos = mix(tile │ │ │ │ - 0x00d06210 436f6f72 64734d69 6e4d6178 2e78792c CoordsMinMax.xy, │ │ │ │ - 0x00d06220 2074696c 65436f6f 7264734d 696e4d61 tileCoordsMinMa │ │ │ │ - 0x00d06230 782e7a77 2c207175 61645665 72746578 x.zw, quadVertex │ │ │ │ - 0x00d06240 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ - 0x00d06250 203d2076 65633428 776f726c 64506f73 = vec4(worldPos │ │ │ │ - 0x00d06260 2c20302e 302c2031 2e302920 2a20755f , 0.0, 1.0) * u_ │ │ │ │ - 0x00d06270 6d6f6465 6c566965 77202a20 755f7072 modelView * u_pr │ │ │ │ - 0x00d06280 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ - 0x00d06290 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00d062a0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d062b0 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ - 0x00d062c0 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ - 0x00d062d0 20202076 65633420 74657874 75726552 vec4 textureR │ │ │ │ - 0x00d062e0 6563744d 696e4d61 78203d20 755f7465 ectMinMax = u_te │ │ │ │ - 0x00d062f0 78747572 65526563 744d696e 4d61785b xtureRectMinMax[ │ │ │ │ - 0x00d06300 676c5f49 6e737461 6e636549 445d3b20 gl_InstanceID]; │ │ │ │ - 0x00d06310 0a202020 20766563 32207465 78555620 . vec2 texUV │ │ │ │ - 0x00d06320 3d206d69 78287465 78747572 65526563 = mix(textureRec │ │ │ │ - 0x00d06330 744d696e 4d61782e 78792c20 74657874 tMinMax.xy, text │ │ │ │ - 0x00d06340 75726552 6563744d 696e4d61 782e7a77 ureRectMinMax.zw │ │ │ │ - 0x00d06350 2c207175 61645665 72746578 293b200a , quadVertex); . │ │ │ │ - 0x00d06360 20202020 765f7465 78436f6f 72647320 v_texCoords │ │ │ │ - 0x00d06370 3d207665 63332874 65785556 2c20666c = vec3(texUV, fl │ │ │ │ - 0x00d06380 6f617428 755f7465 78747572 65496e64 oat(u_textureInd │ │ │ │ - 0x00d06390 65785b67 6c5f496e 7374616e 63654944 ex[gl_InstanceID │ │ │ │ - 0x00d063a0 5d29293b 200a2020 7d200a00 00000000 ])); . } ...... │ │ │ │ - 0x00d063b0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d063c0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d063d0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d063e0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d063f0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d06400 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d06410 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d06420 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d06430 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d06440 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d06450 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d06460 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d06470 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d06480 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d06490 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d064a0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d064b0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d064c0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d064d0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d064e0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d064f0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d06500 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d06510 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d06520 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d06530 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ - 0x00d06540 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ - 0x00d06550 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ - 0x00d06560 6f757420 76656332 20765f6d 61736b54 out vec2 v_maskT │ │ │ │ - 0x00d06570 6578436f 6f72643b 200a2020 6f757420 exCoord; . out │ │ │ │ - 0x00d06580 666c6f61 7420765f 68616c66 4c656e67 float v_halfLeng │ │ │ │ - 0x00d06590 74683b20 0a202075 6e69666f 726d206d th; . uniform m │ │ │ │ - 0x00d065a0 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ - 0x00d065b0 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d065c0 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00d065d0 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d065e0 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ - 0x00d065f0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d06600 20755f74 72616666 69635061 72616d73 u_trafficParams │ │ │ │ - 0x00d06610 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00d06620 3420755f 6f75746c 696e6543 6f6c6f72 4 u_outlineColor │ │ │ │ - 0x00d06630 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ - 0x00d06640 3420755f 6c696768 74417272 6f77436f 4 u_lightArrowCo │ │ │ │ - 0x00d06650 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ - 0x00d06660 76656334 20755f64 61726b41 72726f77 vec4 u_darkArrow │ │ │ │ - 0x00d06670 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ - 0x00d06680 6d20666c 6f617420 755f6f75 746c696e m float u_outlin │ │ │ │ - 0x00d06690 653b200a 2020756e 69666f72 6d20666c e; . uniform fl │ │ │ │ - 0x00d066a0 6f617420 755f6f70 61636974 793b200a oat u_opacity; . │ │ │ │ - 0x00d066b0 2020636f 6e737420 666c6f61 74206b41 const float kA │ │ │ │ - 0x00d066c0 72726f77 5653697a 65203d20 302e3235 rrowVSize = 0.25 │ │ │ │ - 0x00d066d0 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ - 0x00d066e0 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ - 0x00d066f0 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ - 0x00d06700 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ - 0x00d06710 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ - 0x00d06720 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ - 0x00d06730 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ - 0x00d06740 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ - 0x00d06750 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ - 0x00d06760 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ - 0x00d06770 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ - 0x00d06780 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ - 0x00d06790 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ - 0x00d067a0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00d067b0 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ - 0x00d067c0 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ - 0x00d067d0 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ - 0x00d067e0 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ - 0x00d067f0 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ - 0x00d06800 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ - 0x00d06810 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d06820 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ - 0x00d06830 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ - 0x00d06840 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ - 0x00d06850 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ - 0x00d06860 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ - 0x00d06870 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ - 0x00d06880 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ - 0x00d06890 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ - 0x00d068a0 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ - 0x00d068b0 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ - 0x00d068c0 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ - 0x00d068d0 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ - 0x00d068e0 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ - 0x00d068f0 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ - 0x00d06900 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ - 0x00d06910 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ - 0x00d06920 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ - 0x00d06930 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ - 0x00d06940 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ - 0x00d06950 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ - 0x00d06960 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ - 0x00d06970 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ - 0x00d06980 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00d06990 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d069a0 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ - 0x00d069b0 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ - 0x00d069c0 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ - 0x00d069d0 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ - 0x00d069e0 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ - 0x00d069f0 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ - 0x00d06a00 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ - 0x00d06a10 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ - 0x00d06a20 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00d06a30 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ - 0x00d06a40 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ - 0x00d06a50 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ - 0x00d06a60 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ - 0x00d06a70 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ - 0x00d06a80 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ - 0x00d06a90 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ - 0x00d06aa0 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ - 0x00d06ab0 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ - 0x00d06ac0 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ - 0x00d06ad0 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ - 0x00d06ae0 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ - 0x00d06af0 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ - 0x00d06b00 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ - 0x00d06b10 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ - 0x00d06b20 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ - 0x00d06b30 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ - 0x00d06b40 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ - 0x00d06b50 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ - 0x00d06b60 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ - 0x00d06b70 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ - 0x00d06b80 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ - 0x00d06b90 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ - 0x00d06ba0 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ - 0x00d06bb0 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ - 0x00d06bc0 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ - 0x00d06bd0 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ - 0x00d06be0 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ - 0x00d06bf0 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ - 0x00d06c00 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00d06c10 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ - 0x00d06c20 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ - 0x00d06c30 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ - 0x00d06c40 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ - 0x00d06c50 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ - 0x00d06c60 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ - 0x00d06c70 0a202020 20766563 32206e6f 726d616c . vec2 normal │ │ │ │ - 0x00d06c80 203d2061 5f6e6f72 6d616c2e 78793b20 = a_normal.xy; │ │ │ │ - 0x00d06c90 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ - 0x00d06ca0 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ - 0x00d06cb0 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ - 0x00d06cc0 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ - 0x00d06cd0 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ - 0x00d06ce0 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ - 0x00d06cf0 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ - 0x00d06d00 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ - 0x00d06d10 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ - 0x00d06d20 6e6f726d 616c202a 20755f74 72616666 normal * u_traff │ │ │ │ - 0x00d06d30 69635061 72616d73 2e783b20 0a202020 icParams.x; . │ │ │ │ - 0x00d06d40 20202069 66202861 5f6e6f72 6d616c2e if (a_normal. │ │ │ │ - 0x00d06d50 7a203c20 302e3029 200a2020 20202020 z < 0.0) . │ │ │ │ - 0x00d06d60 20206e6f 726d203d 206e6f72 6d616c20 norm = normal │ │ │ │ - 0x00d06d70 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ - 0x00d06d80 732e793b 200a2020 20202020 7472616e s.y; . tran │ │ │ │ - 0x00d06d90 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ - 0x00d06da0 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ - 0x00d06db0 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ - 0x00d06dc0 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ - 0x00d06dd0 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ - 0x00d06de0 6e6f726d 2c200a20 20202020 20202020 norm, . │ │ │ │ - 0x00d06df0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d06e00 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d06e10 20202020 20202020 20202020 20755f6d u_m │ │ │ │ - 0x00d06e20 6f64656c 56696577 2c206c65 6e677468 odelView, length │ │ │ │ - 0x00d06e30 286e6f72 6d29293b 200a2020 20207d20 (norm)); . } │ │ │ │ - 0x00d06e40 0a202020 20666c6f 61742075 4f666673 . float uOffs │ │ │ │ - 0x00d06e50 6574203d 206c656e 67746828 76656334 et = length(vec4 │ │ │ │ - 0x00d06e60 286b5368 61706543 6f6f7264 5363616c (kShapeCoordScal │ │ │ │ - 0x00d06e70 61722c20 302c2030 2c203029 202a2075 ar, 0, 0, 0) * u │ │ │ │ - 0x00d06e80 5f6d6f64 656c5669 65772920 2a20615f _modelView) * a_ │ │ │ │ - 0x00d06e90 6e6f726d 616c2e77 3b200a20 20202076 normal.w; . v │ │ │ │ - 0x00d06ea0 5f636f6c 6f725465 78436f6f 7264203d _colorTexCoord = │ │ │ │ - 0x00d06eb0 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ - 0x00d06ec0 2e78793b 200a2020 2020666c 6f617420 .xy; . float │ │ │ │ - 0x00d06ed0 76203d20 6d697828 615f636f 6c6f7254 v = mix(a_colorT │ │ │ │ - 0x00d06ee0 6578436f 6f72642e 7a2c2061 5f636f6c exCoord.z, a_col │ │ │ │ - 0x00d06ef0 6f725465 78436f6f 72642e7a 202b206b orTexCoord.z + k │ │ │ │ - 0x00d06f00 4172726f 77565369 7a652c20 302e3520 ArrowVSize, 0.5 │ │ │ │ - 0x00d06f10 2a20615f 6e6f726d 616c2e7a 202b2030 * a_normal.z + 0 │ │ │ │ - 0x00d06f20 2e35293b 200a2020 2020765f 6d61736b .5); . v_mask │ │ │ │ - 0x00d06f30 54657843 6f6f7264 203d2076 65633228 TexCoord = vec2( │ │ │ │ - 0x00d06f40 754f6666 73657420 2a20755f 74726166 uOffset * u_traf │ │ │ │ - 0x00d06f50 66696350 6172616d 732e7a2c 20762920 ficParams.z, v) │ │ │ │ - 0x00d06f60 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ - 0x00d06f70 732e773b 200a2020 2020765f 6d61736b s.w; . v_mask │ │ │ │ - 0x00d06f80 54657843 6f6f7264 2e78202a 3d207374 TexCoord.x *= st │ │ │ │ - 0x00d06f90 65702861 5f636f6c 6f725465 78436f6f ep(a_colorTexCoo │ │ │ │ - 0x00d06fa0 72642e77 2c20765f 6d61736b 54657843 rd.w, v_maskTexC │ │ │ │ - 0x00d06fb0 6f6f7264 2e78293b 200a2020 2020765f oord.x); . v_ │ │ │ │ - 0x00d06fc0 68616c66 4c656e67 7468203d 20615f6e halfLength = a_n │ │ │ │ - 0x00d06fd0 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ - 0x00d06fe0 63342070 6f73203d 20766563 34287472 c4 pos = vec4(tr │ │ │ │ - 0x00d06ff0 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ - 0x00d07000 2c20615f 706f7369 74696f6e 2e7a2c20 , a_position.z, │ │ │ │ - 0x00d07010 312e3029 202a2075 5f70726f 6a656374 1.0) * u_project │ │ │ │ - 0x00d07020 696f6e3b 200a2020 2020676c 5f506f73 ion; . gl_Pos │ │ │ │ - 0x00d07030 6974696f 6e203d20 6170706c 79506976 ition = applyPiv │ │ │ │ - 0x00d07040 6f745472 616e7366 6f726d28 706f732c otTransform(pos, │ │ │ │ - 0x00d07050 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ - 0x00d07060 6d2c2030 2e30293b 200a2020 7d200a00 m, 0.0); . } .. │ │ │ │ - 0x00d07070 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d07080 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d07090 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d070a0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d070b0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d070c0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d070d0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d070e0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d070f0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d07100 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d07110 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d07120 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d07130 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d07140 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d07150 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d07160 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d07170 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d07180 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d07190 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d071a0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d071b0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d071c0 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ - 0x00d071d0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d071e0 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ - 0x00d071f0 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ - 0x00d07200 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ - 0x00d07210 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ - 0x00d07220 6f757420 76656333 20765f72 61646975 out vec3 v_radiu │ │ │ │ - 0x00d07230 733b200a 2020756e 69666f72 6d206d61 s; . uniform ma │ │ │ │ - 0x00d07240 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ - 0x00d07250 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00d07260 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00d07270 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d07280 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ - 0x00d07290 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d072a0 755f7472 61666669 63506172 616d733b u_trafficParams; │ │ │ │ - 0x00d072b0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d072c0 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ - 0x00d072d0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d072e0 20755f6c 69676874 4172726f 77436f6c u_lightArrowCol │ │ │ │ - 0x00d072f0 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ - 0x00d07300 65633420 755f6461 726b4172 726f7743 ec4 u_darkArrowC │ │ │ │ - 0x00d07310 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00d07320 20666c6f 61742075 5f6f7574 6c696e65 float u_outline │ │ │ │ - 0x00d07330 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ - 0x00d07340 61742075 5f6f7061 63697479 3b200a20 at u_opacity; . │ │ │ │ - 0x00d07350 20636f6e 73742066 6c6f6174 206b5368 const float kSh │ │ │ │ - 0x00d07360 61706543 6f6f7264 5363616c 6172203d apeCoordScalar = │ │ │ │ - 0x00d07370 20313030 302e303b 200a2020 76656334 1000.0; . vec4 │ │ │ │ - 0x00d07380 20617070 6c795069 766f7454 72616e73 applyPivotTrans │ │ │ │ - 0x00d07390 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ - 0x00d073a0 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ - 0x00d073b0 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ - 0x00d073c0 74526561 6c5a2920 0a20207b 200a2020 tRealZ) . { . │ │ │ │ - 0x00d073d0 20207665 63342074 72616e73 666f726d vec4 transform │ │ │ │ - 0x00d073e0 65645069 766f7420 3d207069 766f743b edPivot = pivot; │ │ │ │ - 0x00d073f0 200a2020 2020666c 6f617420 77203d20 . float w = │ │ │ │ - 0x00d07400 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d07410 2e773b20 0a202020 20747261 6e73666f .w; . transfo │ │ │ │ - 0x00d07420 726d6564 5069766f 742e7879 77203d20 rmedPivot.xyw = │ │ │ │ - 0x00d07430 28706976 6f745472 616e7366 6f726d20 (pivotTransform │ │ │ │ - 0x00d07440 2a207665 63342874 72616e73 666f726d * vec4(transform │ │ │ │ - 0x00d07450 65645069 766f742e 78792c20 7069766f edPivot.xy, pivo │ │ │ │ - 0x00d07460 74526561 6c5a2c20 7729292e 7879773b tRealZ, w)).xyw; │ │ │ │ - 0x00d07470 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d07480 64506976 6f742e7a 202a3d20 7472616e dPivot.z *= tran │ │ │ │ - 0x00d07490 73666f72 6d656450 69766f74 2e77202f sformedPivot.w / │ │ │ │ - 0x00d074a0 20773b20 0a202023 69666465 66205655 w; . #ifdef VU │ │ │ │ - 0x00d074b0 4c4b414e 200a2020 20207472 616e7366 LKAN . transf │ │ │ │ - 0x00d074c0 6f726d65 64506976 6f742e79 203d202d ormedPivot.y = - │ │ │ │ - 0x00d074d0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d074e0 2e793b20 0a202020 20747261 6e73666f .y; . transfo │ │ │ │ - 0x00d074f0 726d6564 5069766f 742e7a20 3d202874 rmedPivot.z = (t │ │ │ │ - 0x00d07500 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d07510 7a20202b 20747261 6e73666f 726d6564 z + transformed │ │ │ │ - 0x00d07520 5069766f 742e7729 202f2032 2e303b20 Pivot.w) / 2.0; │ │ │ │ - 0x00d07530 0a202023 656e6469 66200a20 20202072 . #endif . r │ │ │ │ - 0x00d07540 65747572 6e207472 616e7366 6f726d65 eturn transforme │ │ │ │ - 0x00d07550 64506976 6f743b20 0a20207d 200a2020 dPivot; . } . │ │ │ │ - 0x00d07560 76656334 20617070 6c794269 6c6c626f vec4 applyBillbo │ │ │ │ - 0x00d07570 61726450 69766f74 5472616e 73666f72 ardPivotTransfor │ │ │ │ - 0x00d07580 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00d07590 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00d075a0 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00d075b0 616c5a2c 20766563 32206f66 66736574 alZ, vec2 offset │ │ │ │ - 0x00d075c0 29200a20 207b200a 20202020 666c6f61 ) . { . floa │ │ │ │ - 0x00d075d0 74206c6f 6769635a 203d2070 69766f74 t logicZ = pivot │ │ │ │ - 0x00d075e0 2e7a202f 20706976 6f742e77 3b200a20 .z / pivot.w; . │ │ │ │ - 0x00d075f0 20202076 65633420 7472616e 73666f72 vec4 transfor │ │ │ │ - 0x00d07600 6d656450 69766f74 203d2070 69766f74 medPivot = pivot │ │ │ │ - 0x00d07610 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d07620 28706976 6f742e78 792c2070 69766f74 (pivot.xy, pivot │ │ │ │ - 0x00d07630 5265616c 5a2c2070 69766f74 2e77293b RealZ, pivot.w); │ │ │ │ - 0x00d07640 200a2020 20207665 63342073 63616c65 . vec4 scale │ │ │ │ - 0x00d07650 203d2070 69766f74 5472616e 73666f72 = pivotTransfor │ │ │ │ - 0x00d07660 6d202a20 76656334 28312e30 2c202d31 m * vec4(1.0, -1 │ │ │ │ - 0x00d07670 2e302c20 302e302c 20312e30 293b200a .0, 0.0, 1.0); . │ │ │ │ - 0x00d07680 20202020 76656334 20706f73 6974696f vec4 positio │ │ │ │ - 0x00d07690 6e203d20 76656334 28747261 6e73666f n = vec4(transfo │ │ │ │ - 0x00d076a0 726d6564 5069766f 742e7879 202f2074 rmedPivot.xy / t │ │ │ │ - 0x00d076b0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d076c0 772c206c 6f676963 5a2c2031 2e302920 w, logicZ, 1.0) │ │ │ │ - 0x00d076d0 2b207665 6334286f 66667365 74202f20 + vec4(offset / │ │ │ │ - 0x00d076e0 7363616c 652e7720 2a207363 616c652e scale.w * scale. │ │ │ │ - 0x00d076f0 782c2030 2e302c20 302e3029 3b200a20 x, 0.0, 0.0); . │ │ │ │ - 0x00d07700 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d07710 20202020 706f7369 74696f6e 2e79203d position.y = │ │ │ │ - 0x00d07720 202d706f 73697469 6f6e2e79 3b200a20 -position.y; . │ │ │ │ - 0x00d07730 20202070 6f736974 696f6e2e 7a203d20 position.z = │ │ │ │ - 0x00d07740 28706f73 6974696f 6e2e7a20 202b2070 (position.z + p │ │ │ │ - 0x00d07750 6f736974 696f6e2e 7729202f 20322e30 osition.w) / 2.0 │ │ │ │ - 0x00d07760 3b200a20 2023656e 64696620 0a202020 ; . #endif . │ │ │ │ - 0x00d07770 20726574 75726e20 706f7369 74696f6e return position │ │ │ │ - 0x00d07780 3b200a20 207d200a 20207665 63322063 ; . } . vec2 c │ │ │ │ - 0x00d07790 616c634c 696e6554 72616e73 666f726d alcLineTransform │ │ │ │ - 0x00d077a0 65644178 6973506f 73287665 6332206f edAxisPos(vec2 o │ │ │ │ - 0x00d077b0 72696769 6e616c41 78697350 6f732c20 riginalAxisPos, │ │ │ │ - 0x00d077c0 76656332 20736869 66746564 506f732c vec2 shiftedPos, │ │ │ │ - 0x00d077d0 206d6174 34206d6f 64656c56 6965772c mat4 modelView, │ │ │ │ - 0x00d077e0 20666c6f 61742068 616c6657 69647468 float halfWidth │ │ │ │ - 0x00d077f0 29200a20 207b200a 20202020 76656332 ) . { . vec2 │ │ │ │ - 0x00d07800 2070203d 20287665 63342873 68696674 p = (vec4(shift │ │ │ │ - 0x00d07810 6564506f 732c2030 2e302c20 312e3029 edPos, 0.0, 1.0) │ │ │ │ - 0x00d07820 202a206d 6f64656c 56696577 292e7879 * modelView).xy │ │ │ │ - 0x00d07830 3b200a20 20202076 65633220 64203d20 ; . vec2 d = │ │ │ │ - 0x00d07840 70202d20 6f726967 696e616c 41786973 p - originalAxis │ │ │ │ - 0x00d07850 506f733b 200a2020 20206966 2028646f Pos; . if (do │ │ │ │ - 0x00d07860 7428642c 20642920 213d2030 2e302920 t(d, d) != 0.0) │ │ │ │ - 0x00d07870 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00d07880 6967696e 616c4178 6973506f 73202b20 iginalAxisPos + │ │ │ │ - 0x00d07890 6e6f726d 616c697a 65286429 202a2068 normalize(d) * h │ │ │ │ - 0x00d078a0 616c6657 69647468 3b200a20 20202065 alfWidth; . e │ │ │ │ - 0x00d078b0 6c736520 0a202020 20202072 65747572 lse . retur │ │ │ │ - 0x00d078c0 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ - 0x00d078d0 733b200a 20207d20 0a202076 6f696420 s; . } . void │ │ │ │ - 0x00d078e0 6d61696e 2829200a 20207b20 0a202020 main() . { . │ │ │ │ - 0x00d078f0 20766563 32206e6f 726d616c 203d2061 vec2 normal = a │ │ │ │ - 0x00d07900 5f6e6f72 6d616c2e 78793b20 0a202020 _normal.xy; . │ │ │ │ - 0x00d07910 20766563 32207472 616e7366 6f726d65 vec2 transforme │ │ │ │ - 0x00d07920 64417869 73506f73 203d2028 76656334 dAxisPos = (vec4 │ │ │ │ - 0x00d07930 28615f70 6f736974 696f6e2e 78792c20 (a_position.xy, │ │ │ │ - 0x00d07940 302e302c 20312e30 29202a20 755f6d6f 0.0, 1.0) * u_mo │ │ │ │ - 0x00d07950 64656c56 69657729 2e78793b 200a2020 delView).xy; . │ │ │ │ - 0x00d07960 2020696e 7420696e 64657820 3d20696e int index = in │ │ │ │ - 0x00d07970 7428615f 706f7369 74696f6e 2e77293b t(a_position.w); │ │ │ │ - 0x00d07980 200a2020 2020666c 6f617420 6c656674 . float left │ │ │ │ - 0x00d07990 53697a65 203d2075 5f6c6967 68744172 Size = u_lightAr │ │ │ │ - 0x00d079a0 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ - 0x00d079b0 200a2020 2020666c 6f617420 72696768 . float righ │ │ │ │ - 0x00d079c0 7453697a 65203d20 755f6461 726b4172 tSize = u_darkAr │ │ │ │ - 0x00d079d0 726f7743 6f6c6f72 5b696e64 65785d3b rowColor[index]; │ │ │ │ - 0x00d079e0 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ - 0x00d079f0 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ - 0x00d07a00 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ - 0x00d07a10 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ - 0x00d07a20 6e6f726d 616c202a 20302e35 202a2028 normal * 0.5 * ( │ │ │ │ - 0x00d07a30 72696768 7453697a 65202d20 6c656674 rightSize - left │ │ │ │ - 0x00d07a40 53697a65 293b200a 20202020 20207472 Size); . tr │ │ │ │ - 0x00d07a50 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ - 0x00d07a60 203d2063 616c634c 696e6554 72616e73 = calcLineTrans │ │ │ │ - 0x00d07a70 666f726d 65644178 6973506f 73287472 formedAxisPos(tr │ │ │ │ - 0x00d07a80 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ - 0x00d07a90 2c20615f 706f7369 74696f6e 2e787920 , a_position.xy │ │ │ │ - 0x00d07aa0 2b206e6f 726d2c20 0a202020 20202020 + norm, . │ │ │ │ - 0x00d07ab0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d07ac0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d07ad0 20202020 20202020 20202020 20202075 u │ │ │ │ - 0x00d07ae0 5f6d6f64 656c5669 65772c20 6c656e67 _modelView, leng │ │ │ │ - 0x00d07af0 7468286e 6f726d29 293b200a 20202020 th(norm)); . │ │ │ │ - 0x00d07b00 7d200a20 20202076 5f726164 69757320 } . v_radius │ │ │ │ - 0x00d07b10 3d207665 63332861 5f6e6f72 6d616c2e = vec3(a_normal. │ │ │ │ - 0x00d07b20 7a772c20 312e3029 202a2030 2e35202a zw, 1.0) * 0.5 * │ │ │ │ - 0x00d07b30 20286c65 66745369 7a65202b 20726967 (leftSize + rig │ │ │ │ - 0x00d07b40 68745369 7a65293b 200a2020 20207665 htSize); . ve │ │ │ │ - 0x00d07b50 63322066 696e616c 506f7320 3d207472 c2 finalPos = tr │ │ │ │ - 0x00d07b60 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ - 0x00d07b70 202b2076 5f726164 6975732e 78793b20 + v_radius.xy; │ │ │ │ - 0x00d07b80 0a202020 20765f63 6f6c6f72 54657843 . v_colorTexC │ │ │ │ - 0x00d07b90 6f6f7264 203d2061 5f636f6c 6f725465 oord = a_colorTe │ │ │ │ - 0x00d07ba0 78436f6f 72643b20 0a202020 20766563 xCoord; . vec │ │ │ │ - 0x00d07bb0 3420706f 73203d20 76656334 2866696e 4 pos = vec4(fin │ │ │ │ - 0x00d07bc0 616c506f 732c2061 5f706f73 6974696f alPos, a_positio │ │ │ │ - 0x00d07bd0 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ - 0x00d07be0 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ - 0x00d07bf0 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ - 0x00d07c00 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d07c10 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ - 0x00d07c20 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ - 0x00d07c30 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ - 0x00d07c40 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d07c50 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d07c60 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d07c70 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d07c80 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d07c90 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d07ca0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d07cb0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d07cc0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d07cd0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d07ce0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d07cf0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d07d00 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d07d10 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d07d20 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d07d30 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d07d40 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d07d50 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d07d60 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d07d70 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d07d80 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d07d90 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d07da0 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ - 0x00d07db0 72546578 436f6f72 643b200a 20206f75 rTexCoord; . ou │ │ │ │ - 0x00d07dc0 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ - 0x00d07dd0 78436f6f 72643b20 0a202075 6e69666f xCoord; . unifo │ │ │ │ - 0x00d07de0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ - 0x00d07df0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ - 0x00d07e00 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ - 0x00d07e10 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ - 0x00d07e20 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ - 0x00d07e30 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ - 0x00d07e40 76656334 20755f74 72616666 69635061 vec4 u_trafficPa │ │ │ │ - 0x00d07e50 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ - 0x00d07e60 20766563 3420755f 6f75746c 696e6543 vec4 u_outlineC │ │ │ │ - 0x00d07e70 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ - 0x00d07e80 20766563 3420755f 6c696768 74417272 vec4 u_lightArr │ │ │ │ - 0x00d07e90 6f77436f 6c6f723b 200a2020 756e6966 owColor; . unif │ │ │ │ - 0x00d07ea0 6f726d20 76656334 20755f64 61726b41 orm vec4 u_darkA │ │ │ │ - 0x00d07eb0 72726f77 436f6c6f 723b200a 2020756e rrowColor; . un │ │ │ │ - 0x00d07ec0 69666f72 6d20666c 6f617420 755f6f75 iform float u_ou │ │ │ │ - 0x00d07ed0 746c696e 653b200a 2020756e 69666f72 tline; . unifor │ │ │ │ - 0x00d07ee0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ - 0x00d07ef0 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ - 0x00d07f00 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ - 0x00d07f10 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ - 0x00d07f20 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ - 0x00d07f30 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ - 0x00d07f40 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ - 0x00d07f50 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ - 0x00d07f60 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ - 0x00d07f70 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ - 0x00d07f80 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ - 0x00d07f90 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ - 0x00d07fa0 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ - 0x00d07fb0 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ - 0x00d07fc0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d07fd0 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ - 0x00d07fe0 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ - 0x00d07ff0 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ - 0x00d08000 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ - 0x00d08010 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ - 0x00d08020 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ - 0x00d08030 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d08040 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ - 0x00d08050 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ - 0x00d08060 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d08070 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ - 0x00d08080 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ - 0x00d08090 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ - 0x00d080a0 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ - 0x00d080b0 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ - 0x00d080c0 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ - 0x00d080d0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ - 0x00d080e0 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ - 0x00d080f0 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ - 0x00d08100 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ - 0x00d08110 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00d08120 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ - 0x00d08130 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ - 0x00d08140 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ - 0x00d08150 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ - 0x00d08160 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ - 0x00d08170 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ - 0x00d08180 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ - 0x00d08190 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ - 0x00d081a0 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00d081b0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d081c0 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ - 0x00d081d0 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ - 0x00d081e0 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ - 0x00d081f0 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ - 0x00d08200 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ - 0x00d08210 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ - 0x00d08220 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ - 0x00d08230 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ - 0x00d08240 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ - 0x00d08250 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ - 0x00d08260 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ - 0x00d08270 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ - 0x00d08280 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ - 0x00d08290 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ - 0x00d082a0 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ - 0x00d082b0 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ - 0x00d082c0 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ - 0x00d082d0 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ - 0x00d082e0 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ - 0x00d082f0 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ - 0x00d08300 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ - 0x00d08310 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ - 0x00d08320 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ - 0x00d08330 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ - 0x00d08340 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ - 0x00d08350 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ - 0x00d08360 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ - 0x00d08370 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ - 0x00d08380 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ - 0x00d08390 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ - 0x00d083a0 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ - 0x00d083b0 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ - 0x00d083c0 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ - 0x00d083d0 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ - 0x00d083e0 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ - 0x00d083f0 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ - 0x00d08400 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ - 0x00d08410 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ - 0x00d08420 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ - 0x00d08430 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ - 0x00d08440 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ - 0x00d08450 20202020 656c7365 200a2020 20202020 else . │ │ │ │ - 0x00d08460 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ - 0x00d08470 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ - 0x00d08480 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ - 0x00d08490 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ - 0x00d084a0 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ - 0x00d084b0 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ - 0x00d084c0 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ - 0x00d084d0 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ - 0x00d084e0 3b200a20 20202076 65633420 706f7320 ; . vec4 pos │ │ │ │ - 0x00d084f0 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ - 0x00d08500 65644178 6973506f 732c2061 5f706f73 edAxisPos, a_pos │ │ │ │ - 0x00d08510 6974696f 6e2e7a2c 20312e30 29202a20 ition.z, 1.0) * │ │ │ │ - 0x00d08520 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00d08530 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ - 0x00d08540 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ - 0x00d08550 6f6f7264 3b200a20 20202067 6c5f506f oord; . gl_Po │ │ │ │ - 0x00d08560 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ - 0x00d08570 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ - 0x00d08580 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ - 0x00d08590 726d2c20 302e3029 3b200a20 207d200a rm, 0.0); . } . │ │ │ │ - 0x00d085a0 00000000 00000000 00000000 00000000 ................ │ │ │ │ - 0x00d085b0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d085c0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d085d0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d085e0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d085f0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d08600 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d08610 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d08620 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d08630 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d08640 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d08650 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d08660 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d08670 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d08680 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d08690 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d086a0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d086b0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d086c0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d086d0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d086e0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d086f0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d08700 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d08710 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d08720 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d08730 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00d08740 65633420 765f636f 6c6f723b 200a2020 ec4 v_color; . │ │ │ │ - 0x00d08750 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ - 0x00d08760 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ - 0x00d08770 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ - 0x00d08780 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ - 0x00d08790 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ - 0x00d087a0 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ - 0x00d087b0 666f726d 20766563 3420755f 70617261 form vec4 u_para │ │ │ │ - 0x00d087c0 6d733b20 0a202075 6e69666f 726d2066 ms; . uniform f │ │ │ │ - 0x00d087d0 6c6f6174 20755f6c 696e6548 616c6657 loat u_lineHalfW │ │ │ │ - 0x00d087e0 69647468 3b200a20 20756e69 666f726d idth; . uniform │ │ │ │ - 0x00d087f0 20666c6f 61742075 5f6d6178 52616469 float u_maxRadi │ │ │ │ - 0x00d08800 75733b20 0a202063 6f6e7374 20666c6f us; . const flo │ │ │ │ - 0x00d08810 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ - 0x00d08820 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ - 0x00d08830 20207665 63342061 70706c79 5069766f vec4 applyPivo │ │ │ │ - 0x00d08840 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ - 0x00d08850 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ - 0x00d08860 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ - 0x00d08870 74207069 766f7452 65616c5a 29200a20 t pivotRealZ) . │ │ │ │ - 0x00d08880 207b200a 20202020 76656334 20747261 { . vec4 tra │ │ │ │ - 0x00d08890 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ - 0x00d088a0 7069766f 743b200a 20202020 666c6f61 pivot; . floa │ │ │ │ - 0x00d088b0 74207720 3d207472 616e7366 6f726d65 t w = transforme │ │ │ │ - 0x00d088c0 64506976 6f742e77 3b200a20 20202074 dPivot.w; . t │ │ │ │ - 0x00d088d0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d088e0 78797720 3d202870 69766f74 5472616e xyw = (pivotTran │ │ │ │ - 0x00d088f0 73666f72 6d202a20 76656334 28747261 sform * vec4(tra │ │ │ │ - 0x00d08900 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ - 0x00d08910 2c207069 766f7452 65616c5a 2c207729 , pivotRealZ, w) │ │ │ │ - 0x00d08920 292e7879 773b200a 20202020 7472616e ).xyw; . tran │ │ │ │ - 0x00d08930 73666f72 6d656450 69766f74 2e7a202a sformedPivot.z * │ │ │ │ - 0x00d08940 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ - 0x00d08950 6f742e77 202f2077 3b200a20 20236966 ot.w / w; . #if │ │ │ │ - 0x00d08960 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ - 0x00d08970 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d08980 2e79203d 202d7472 616e7366 6f726d65 .y = -transforme │ │ │ │ - 0x00d08990 64506976 6f742e79 3b200a20 20202074 dPivot.y; . t │ │ │ │ - 0x00d089a0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d089b0 7a203d20 28747261 6e73666f 726d6564 z = (transformed │ │ │ │ - 0x00d089c0 5069766f 742e7a20 202b2074 72616e73 Pivot.z + trans │ │ │ │ - 0x00d089d0 666f726d 65645069 766f742e 7729202f formedPivot.w) / │ │ │ │ - 0x00d089e0 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ - 0x00d089f0 0a202020 20726574 75726e20 7472616e . return tran │ │ │ │ - 0x00d08a00 73666f72 6d656450 69766f74 3b200a20 sformedPivot; . │ │ │ │ - 0x00d08a10 207d200a 20207665 63342061 70706c79 } . vec4 apply │ │ │ │ - 0x00d08a20 42696c6c 626f6172 64506976 6f745472 BillboardPivotTr │ │ │ │ - 0x00d08a30 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ - 0x00d08a40 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ - 0x00d08a50 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ - 0x00d08a60 69766f74 5265616c 5a2c2076 65633220 ivotRealZ, vec2 │ │ │ │ - 0x00d08a70 6f666673 65742920 0a20207b 200a2020 offset) . { . │ │ │ │ - 0x00d08a80 2020666c 6f617420 6c6f6769 635a203d float logicZ = │ │ │ │ - 0x00d08a90 20706976 6f742e7a 202f2070 69766f74 pivot.z / pivot │ │ │ │ - 0x00d08aa0 2e773b20 0a202020 20766563 34207472 .w; . vec4 tr │ │ │ │ - 0x00d08ab0 616e7366 6f726d65 64506976 6f74203d ansformedPivot = │ │ │ │ - 0x00d08ac0 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ - 0x00d08ad0 2a207665 63342870 69766f74 2e78792c * vec4(pivot.xy, │ │ │ │ - 0x00d08ae0 20706976 6f745265 616c5a2c 20706976 pivotRealZ, piv │ │ │ │ - 0x00d08af0 6f742e77 293b200a 20202020 76656334 ot.w); . vec4 │ │ │ │ - 0x00d08b00 20736361 6c65203d 20706976 6f745472 scale = pivotTr │ │ │ │ - 0x00d08b10 616e7366 6f726d20 2a207665 63342831 ansform * vec4(1 │ │ │ │ - 0x00d08b20 2e302c20 2d312e30 2c20302e 302c2031 .0, -1.0, 0.0, 1 │ │ │ │ - 0x00d08b30 2e30293b 200a2020 20207665 63342070 .0); . vec4 p │ │ │ │ - 0x00d08b40 6f736974 696f6e20 3d207665 63342874 osition = vec4(t │ │ │ │ - 0x00d08b50 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d08b60 7879202f 20747261 6e73666f 726d6564 xy / transformed │ │ │ │ - 0x00d08b70 5069766f 742e772c 206c6f67 69635a2c Pivot.w, logicZ, │ │ │ │ - 0x00d08b80 20312e30 29202b20 76656334 286f6666 1.0) + vec4(off │ │ │ │ - 0x00d08b90 73657420 2f207363 616c652e 77202a20 set / scale.w * │ │ │ │ - 0x00d08ba0 7363616c 652e782c 20302e30 2c20302e scale.x, 0.0, 0. │ │ │ │ - 0x00d08bb0 30293b20 0a202023 69666465 66205655 0); . #ifdef VU │ │ │ │ - 0x00d08bc0 4c4b414e 200a2020 2020706f 73697469 LKAN . positi │ │ │ │ - 0x00d08bd0 6f6e2e79 203d202d 706f7369 74696f6e on.y = -position │ │ │ │ - 0x00d08be0 2e793b20 0a202020 20706f73 6974696f .y; . positio │ │ │ │ - 0x00d08bf0 6e2e7a20 3d202870 6f736974 696f6e2e n.z = (position. │ │ │ │ - 0x00d08c00 7a20202b 20706f73 6974696f 6e2e7729 z + position.w) │ │ │ │ - 0x00d08c10 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ - 0x00d08c20 66200a20 20202072 65747572 6e20706f f . return po │ │ │ │ - 0x00d08c30 73697469 6f6e3b20 0a20207d 200a2020 sition; . } . │ │ │ │ - 0x00d08c40 76656332 2063616c 634c696e 65547261 vec2 calcLineTra │ │ │ │ - 0x00d08c50 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ - 0x00d08c60 76656332 206f7269 67696e61 6c417869 vec2 originalAxi │ │ │ │ - 0x00d08c70 73506f73 2c207665 63322073 68696674 sPos, vec2 shift │ │ │ │ - 0x00d08c80 6564506f 732c206d 61743420 6d6f6465 edPos, mat4 mode │ │ │ │ - 0x00d08c90 6c566965 772c2066 6c6f6174 2068616c lView, float hal │ │ │ │ - 0x00d08ca0 66576964 74682920 0a20207b 200a2020 fWidth) . { . │ │ │ │ - 0x00d08cb0 20207665 63322070 203d2028 76656334 vec2 p = (vec4 │ │ │ │ - 0x00d08cc0 28736869 66746564 506f732c 20302e30 (shiftedPos, 0.0 │ │ │ │ - 0x00d08cd0 2c20312e 3029202a 206d6f64 656c5669 , 1.0) * modelVi │ │ │ │ - 0x00d08ce0 6577292e 78793b20 0a202020 20766563 ew).xy; . vec │ │ │ │ - 0x00d08cf0 32206420 3d207020 2d206f72 6967696e 2 d = p - origin │ │ │ │ - 0x00d08d00 616c4178 6973506f 733b200a 20202020 alAxisPos; . │ │ │ │ - 0x00d08d10 69662028 646f7428 642c2064 2920213d if (dot(d, d) != │ │ │ │ - 0x00d08d20 20302e30 29200a20 20202020 20726574 0.0) . ret │ │ │ │ - 0x00d08d30 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ - 0x00d08d40 506f7320 2b206e6f 726d616c 697a6528 Pos + normalize( │ │ │ │ - 0x00d08d50 6429202a 2068616c 66576964 74683b20 d) * halfWidth; │ │ │ │ - 0x00d08d60 0a202020 20656c73 65200a20 20202020 . else . │ │ │ │ - 0x00d08d70 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d08d80 41786973 506f733b 200a2020 7d200a20 AxisPos; . } . │ │ │ │ - 0x00d08d90 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ - 0x00d08da0 7b200a20 20202076 65633220 6e6f726d { . vec2 norm │ │ │ │ - 0x00d08db0 616c203d 20615f6e 6f726d61 6c2e7879 al = a_normal.xy │ │ │ │ - 0x00d08dc0 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ - 0x00d08dd0 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ - 0x00d08de0 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ - 0x00d08df0 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ - 0x00d08e00 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ - 0x00d08e10 793b200a 20202020 69662028 646f7428 y; . if (dot( │ │ │ │ - 0x00d08e20 6e6f726d 616c2c20 6e6f726d 616c2920 normal, normal) │ │ │ │ - 0x00d08e30 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ - 0x00d08e40 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ - 0x00d08e50 3d206e6f 726d616c 202a2075 5f6c696e = normal * u_lin │ │ │ │ - 0x00d08e60 6548616c 66576964 74683b20 0a202020 eHalfWidth; . │ │ │ │ - 0x00d08e70 20202074 72616e73 666f726d 65644178 transformedAx │ │ │ │ - 0x00d08e80 6973506f 73203d20 63616c63 4c696e65 isPos = calcLine │ │ │ │ - 0x00d08e90 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ - 0x00d08ea0 6f732874 72616e73 666f726d 65644178 os(transformedAx │ │ │ │ - 0x00d08eb0 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ - 0x00d08ec0 6e2e7879 202b206e 6f726d2c 200a2020 n.xy + norm, . │ │ │ │ - 0x00d08ed0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d08ee0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d08ef0 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d08f00 20202020 755f6d6f 64656c56 6965772c u_modelView, │ │ │ │ - 0x00d08f10 206c656e 67746828 6e6f726d 29293b20 length(norm)); │ │ │ │ - 0x00d08f20 0a202020 207d200a 20202020 765f636f . } . v_co │ │ │ │ - 0x00d08f30 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ - 0x00d08f40 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ - 0x00d08f50 65633428 7472616e 73666f72 6d656441 ec4(transformedA │ │ │ │ - 0x00d08f60 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ - 0x00d08f70 6f6e2e7a 2c20312e 3029202a 20755f70 on.z, 1.0) * u_p │ │ │ │ - 0x00d08f80 726f6a65 6374696f 6e3b200a 20202020 rojection; . │ │ │ │ - 0x00d08f90 676c5f50 6f736974 696f6e20 3d206170 gl_Position = ap │ │ │ │ - 0x00d08fa0 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ - 0x00d08fb0 6d28706f 732c2075 5f706976 6f745472 m(pos, u_pivotTr │ │ │ │ - 0x00d08fc0 616e7366 6f726d2c 20302e30 293b200a ansform, 0.0); . │ │ │ │ - 0x00d08fd0 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ - 0x00d08fe0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d08ff0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d09000 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d09010 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d09020 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d09030 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d09040 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d09050 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d09060 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d09070 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d09080 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d09090 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d090a0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d090b0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d090c0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d090d0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d090e0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d090f0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d09100 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d09110 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d09120 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d09130 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d09140 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d09150 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d09160 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00d09170 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ - 0x00d09180 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ - 0x00d09190 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ - 0x00d091a0 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ - 0x00d091b0 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ - 0x00d091c0 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ - 0x00d091d0 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ - 0x00d091e0 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ - 0x00d091f0 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ - 0x00d09200 755f7061 72616d73 3b200a20 20756e69 u_params; . uni │ │ │ │ - 0x00d09210 666f726d 20666c6f 61742075 5f6c696e form float u_lin │ │ │ │ - 0x00d09220 6548616c 66576964 74683b20 0a202075 eHalfWidth; . u │ │ │ │ - 0x00d09230 6e69666f 726d2066 6c6f6174 20755f6d niform float u_m │ │ │ │ - 0x00d09240 61785261 64697573 3b200a20 20636f6e axRadius; . con │ │ │ │ - 0x00d09250 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ - 0x00d09260 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ - 0x00d09270 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ - 0x00d09280 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ - 0x00d09290 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ - 0x00d092a0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ - 0x00d092b0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ - 0x00d092c0 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ - 0x00d092d0 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ - 0x00d092e0 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ - 0x00d092f0 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ - 0x00d09300 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ - 0x00d09310 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d09320 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ - 0x00d09330 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d09340 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d09350 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00d09360 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ - 0x00d09370 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ - 0x00d09380 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ - 0x00d09390 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ - 0x00d093a0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ - 0x00d093b0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d093c0 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ - 0x00d093d0 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ - 0x00d093e0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ - 0x00d093f0 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ - 0x00d09400 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ - 0x00d09410 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d09420 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ - 0x00d09430 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d09440 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ - 0x00d09450 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ - 0x00d09460 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ - 0x00d09470 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ - 0x00d09480 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ - 0x00d09490 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ - 0x00d094a0 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ - 0x00d094b0 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ - 0x00d094c0 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ - 0x00d094d0 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ - 0x00d094e0 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ - 0x00d094f0 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00d09500 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ - 0x00d09510 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ - 0x00d09520 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ - 0x00d09530 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ - 0x00d09540 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ - 0x00d09550 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ - 0x00d09560 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ - 0x00d09570 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ - 0x00d09580 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ - 0x00d09590 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ - 0x00d095a0 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ - 0x00d095b0 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ - 0x00d095c0 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ - 0x00d095d0 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ - 0x00d095e0 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ - 0x00d095f0 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ - 0x00d09600 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ - 0x00d09610 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ - 0x00d09620 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ - 0x00d09630 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ - 0x00d09640 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ - 0x00d09650 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ - 0x00d09660 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ - 0x00d09670 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ - 0x00d09680 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ - 0x00d09690 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ - 0x00d096a0 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ - 0x00d096b0 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ - 0x00d096c0 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ - 0x00d096d0 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ - 0x00d096e0 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ - 0x00d096f0 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ - 0x00d09700 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ - 0x00d09710 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ - 0x00d09720 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ - 0x00d09730 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ - 0x00d09740 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ - 0x00d09750 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ - 0x00d09760 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ - 0x00d09770 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ - 0x00d09780 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ - 0x00d09790 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ - 0x00d097a0 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ - 0x00d097b0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ - 0x00d097c0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d097d0 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ - 0x00d097e0 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ - 0x00d097f0 32206e6f 726d616c 203d2061 5f6e6f72 2 normal = a_nor │ │ │ │ - 0x00d09800 6d616c2e 78793b20 0a202020 20766563 mal.xy; . vec │ │ │ │ - 0x00d09810 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ - 0x00d09820 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ - 0x00d09830 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ - 0x00d09840 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ - 0x00d09850 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ - 0x00d09860 2028646f 74286e6f 726d616c 2c206e6f (dot(normal, no │ │ │ │ - 0x00d09870 726d616c 2920213d 20302e30 29200a20 rmal) != 0.0) . │ │ │ │ - 0x00d09880 2020207b 200a2020 20202020 76656332 { . vec2 │ │ │ │ - 0x00d09890 206e6f72 6d203d20 6e6f726d 616c202a norm = normal * │ │ │ │ - 0x00d098a0 20755f6c 696e6548 616c6657 69647468 u_lineHalfWidth │ │ │ │ - 0x00d098b0 3b200a20 20202020 20747261 6e73666f ; . transfo │ │ │ │ - 0x00d098c0 726d6564 41786973 506f7320 3d206361 rmedAxisPos = ca │ │ │ │ - 0x00d098d0 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ - 0x00d098e0 64417869 73506f73 28747261 6e73666f dAxisPos(transfo │ │ │ │ - 0x00d098f0 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ - 0x00d09900 6f736974 696f6e2e 7879202b 206e6f72 osition.xy + nor │ │ │ │ - 0x00d09910 6d2c200a 20202020 20202020 20202020 m, . │ │ │ │ - 0x00d09920 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d09930 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d09940 20202020 20202020 2020755f 6d6f6465 u_mode │ │ │ │ - 0x00d09950 6c566965 772c206c 656e6774 68286e6f lView, length(no │ │ │ │ - 0x00d09960 726d2929 3b200a20 2020207d 200a2020 rm)); . } . │ │ │ │ - 0x00d09970 20207472 616e7366 6f726d65 64417869 transformedAxi │ │ │ │ - 0x00d09980 73506f73 202b3d20 615f6e6f 726d616c sPos += a_normal │ │ │ │ - 0x00d09990 2e7a7720 2a20755f 6c696e65 48616c66 .zw * u_lineHalf │ │ │ │ - 0x00d099a0 57696474 683b200a 20202020 76656334 Width; . vec4 │ │ │ │ - 0x00d099b0 20706f73 203d2076 65633428 7472616e pos = vec4(tran │ │ │ │ - 0x00d099c0 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ - 0x00d099d0 615f706f 73697469 6f6e2e7a 2c20312e a_position.z, 1. │ │ │ │ - 0x00d099e0 3029202a 20755f70 726f6a65 6374696f 0) * u_projectio │ │ │ │ - 0x00d099f0 6e3b200a 20202020 676c5f50 6f736974 n; . gl_Posit │ │ │ │ - 0x00d09a00 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ - 0x00d09a10 5472616e 73666f72 6d28706f 732c2075 Transform(pos, u │ │ │ │ - 0x00d09a20 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ - 0x00d09a30 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ - 0x00d09a40 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ - 0x00d09a50 20202020 765f7261 64697573 203d2076 v_radius = v │ │ │ │ - 0x00d09a60 65633328 615f6e6f 726d616c 2e7a772c ec3(a_normal.zw, │ │ │ │ - 0x00d09a70 20755f6d 61785261 64697573 29202a20 u_maxRadius) * │ │ │ │ - 0x00d09a80 755f6c69 6e654861 6c665769 6474683b u_lineHalfWidth; │ │ │ │ - 0x00d09a90 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ - 0x00d09aa0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d09ab0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d09ac0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d09ad0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d09ae0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d09af0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d09b00 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d09b10 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d09b20 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d09b30 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d09b40 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d09b50 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d09b60 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d09b70 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d09b80 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d09b90 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d09ba0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d09bb0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d09bc0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d09bd0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d09be0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d09bf0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d09c00 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ - 0x00d09c10 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ - 0x00d09c20 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ - 0x00d09c30 65633420 765f6f66 66736574 733b200a ec4 v_offsets; . │ │ │ │ - 0x00d09c40 20206f75 74207665 63342076 5f636f6c out vec4 v_col │ │ │ │ - 0x00d09c50 6f723b20 0a202075 6e69666f 726d206d or; . uniform m │ │ │ │ - 0x00d09c60 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ - 0x00d09c70 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ - 0x00d09c80 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ - 0x00d09c90 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d09ca0 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ - 0x00d09cb0 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ - 0x00d09cc0 20755f70 6172616d 733b200a 2020756e u_params; . un │ │ │ │ - 0x00d09cd0 69666f72 6d20666c 6f617420 755f6c69 iform float u_li │ │ │ │ - 0x00d09ce0 6e654861 6c665769 6474683b 200a2020 neHalfWidth; . │ │ │ │ - 0x00d09cf0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d09d00 6d617852 61646975 733b200a 2020636f maxRadius; . co │ │ │ │ - 0x00d09d10 6e737420 666c6f61 74206b53 68617065 nst float kShape │ │ │ │ - 0x00d09d20 436f6f72 64536361 6c617220 3d203130 CoordScalar = 10 │ │ │ │ - 0x00d09d30 30302e30 3b200a20 20766563 34206170 00.0; . vec4 ap │ │ │ │ - 0x00d09d40 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ - 0x00d09d50 6d287665 63342070 69766f74 2c206d61 m(vec4 pivot, ma │ │ │ │ - 0x00d09d60 74342070 69766f74 5472616e 73666f72 t4 pivotTransfor │ │ │ │ - 0x00d09d70 6d2c2066 6c6f6174 20706976 6f745265 m, float pivotRe │ │ │ │ - 0x00d09d80 616c5a29 200a2020 7b200a20 20202076 alZ) . { . v │ │ │ │ - 0x00d09d90 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ - 0x00d09da0 69766f74 203d2070 69766f74 3b200a20 ivot = pivot; . │ │ │ │ - 0x00d09db0 20202066 6c6f6174 2077203d 20747261 float w = tra │ │ │ │ - 0x00d09dc0 6e73666f 726d6564 5069766f 742e773b nsformedPivot.w; │ │ │ │ - 0x00d09dd0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d09de0 64506976 6f742e78 7977203d 20287069 dPivot.xyw = (pi │ │ │ │ - 0x00d09df0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ - 0x00d09e00 65633428 7472616e 73666f72 6d656450 ec4(transformedP │ │ │ │ - 0x00d09e10 69766f74 2e78792c 20706976 6f745265 ivot.xy, pivotRe │ │ │ │ - 0x00d09e20 616c5a2c 20772929 2e787977 3b200a20 alZ, w)).xyw; . │ │ │ │ - 0x00d09e30 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d09e40 766f742e 7a202a3d 20747261 6e73666f vot.z *= transfo │ │ │ │ - 0x00d09e50 726d6564 5069766f 742e7720 2f20773b rmedPivot.w / w; │ │ │ │ - 0x00d09e60 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ - 0x00d09e70 4e200a20 20202074 72616e73 666f726d N . transform │ │ │ │ - 0x00d09e80 65645069 766f742e 79203d20 2d747261 edPivot.y = -tra │ │ │ │ - 0x00d09e90 6e73666f 726d6564 5069766f 742e793b nsformedPivot.y; │ │ │ │ - 0x00d09ea0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ - 0x00d09eb0 64506976 6f742e7a 203d2028 7472616e dPivot.z = (tran │ │ │ │ - 0x00d09ec0 73666f72 6d656450 69766f74 2e7a2020 sformedPivot.z │ │ │ │ - 0x00d09ed0 2b207472 616e7366 6f726d65 64506976 + transformedPiv │ │ │ │ - 0x00d09ee0 6f742e77 29202f20 322e303b 200a2020 ot.w) / 2.0; . │ │ │ │ - 0x00d09ef0 23656e64 6966200a 20202020 72657475 #endif . retu │ │ │ │ - 0x00d09f00 726e2074 72616e73 666f726d 65645069 rn transformedPi │ │ │ │ - 0x00d09f10 766f743b 200a2020 7d200a20 20766563 vot; . } . vec │ │ │ │ - 0x00d09f20 34206170 706c7942 696c6c62 6f617264 4 applyBillboard │ │ │ │ - 0x00d09f30 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d09f40 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d09f50 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d09f60 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d09f70 2c207665 6332206f 66667365 7429200a , vec2 offset) . │ │ │ │ - 0x00d09f80 20207b20 0a202020 20666c6f 6174206c { . float l │ │ │ │ - 0x00d09f90 6f676963 5a203d20 7069766f 742e7a20 ogicZ = pivot.z │ │ │ │ - 0x00d09fa0 2f207069 766f742e 773b200a 20202020 / pivot.w; . │ │ │ │ - 0x00d09fb0 76656334 20747261 6e73666f 726d6564 vec4 transformed │ │ │ │ - 0x00d09fc0 5069766f 74203d20 7069766f 74547261 Pivot = pivotTra │ │ │ │ - 0x00d09fd0 6e73666f 726d202a 20766563 34287069 nsform * vec4(pi │ │ │ │ - 0x00d09fe0 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ - 0x00d09ff0 6c5a2c20 7069766f 742e7729 3b200a20 lZ, pivot.w); . │ │ │ │ - 0x00d0a000 20202076 65633420 7363616c 65203d20 vec4 scale = │ │ │ │ - 0x00d0a010 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ - 0x00d0a020 20766563 3428312e 302c202d 312e302c vec4(1.0, -1.0, │ │ │ │ - 0x00d0a030 20302e30 2c20312e 30293b20 0a202020 0.0, 1.0); . │ │ │ │ - 0x00d0a040 20766563 3420706f 73697469 6f6e203d vec4 position = │ │ │ │ - 0x00d0a050 20766563 34287472 616e7366 6f726d65 vec4(transforme │ │ │ │ - 0x00d0a060 64506976 6f742e78 79202f20 7472616e dPivot.xy / tran │ │ │ │ - 0x00d0a070 73666f72 6d656450 69766f74 2e772c20 sformedPivot.w, │ │ │ │ - 0x00d0a080 6c6f6769 635a2c20 312e3029 202b2076 logicZ, 1.0) + v │ │ │ │ - 0x00d0a090 65633428 6f666673 6574202f 20736361 ec4(offset / sca │ │ │ │ - 0x00d0a0a0 6c652e77 202a2073 63616c65 2e782c20 le.w * scale.x, │ │ │ │ - 0x00d0a0b0 302e302c 20302e30 293b200a 20202369 0.0, 0.0); . #i │ │ │ │ - 0x00d0a0c0 66646566 2056554c 4b414e20 0a202020 fdef VULKAN . │ │ │ │ - 0x00d0a0d0 20706f73 6974696f 6e2e7920 3d202d70 position.y = -p │ │ │ │ - 0x00d0a0e0 6f736974 696f6e2e 793b200a 20202020 osition.y; . │ │ │ │ - 0x00d0a0f0 706f7369 74696f6e 2e7a203d 2028706f position.z = (po │ │ │ │ - 0x00d0a100 73697469 6f6e2e7a 20202b20 706f7369 sition.z + posi │ │ │ │ - 0x00d0a110 74696f6e 2e772920 2f20322e 303b200a tion.w) / 2.0; . │ │ │ │ - 0x00d0a120 20202365 6e646966 200a2020 20207265 #endif . re │ │ │ │ - 0x00d0a130 7475726e 20706f73 6974696f 6e3b200a turn position; . │ │ │ │ - 0x00d0a140 20207d20 0a202076 65633220 63616c63 } . vec2 calc │ │ │ │ - 0x00d0a150 4c696e65 5472616e 73666f72 6d656441 LineTransformedA │ │ │ │ - 0x00d0a160 78697350 6f732876 65633220 6f726967 xisPos(vec2 orig │ │ │ │ - 0x00d0a170 696e616c 41786973 506f732c 20766563 inalAxisPos, vec │ │ │ │ - 0x00d0a180 32207368 69667465 64506f73 2c206d61 2 shiftedPos, ma │ │ │ │ - 0x00d0a190 7434206d 6f64656c 56696577 2c20666c t4 modelView, fl │ │ │ │ - 0x00d0a1a0 6f617420 68616c66 57696474 6829200a oat halfWidth) . │ │ │ │ - 0x00d0a1b0 20207b20 0a202020 20766563 32207020 { . vec2 p │ │ │ │ - 0x00d0a1c0 3d202876 65633428 73686966 74656450 = (vec4(shiftedP │ │ │ │ - 0x00d0a1d0 6f732c20 302e302c 20312e30 29202a20 os, 0.0, 1.0) * │ │ │ │ - 0x00d0a1e0 6d6f6465 6c566965 77292e78 793b200a modelView).xy; . │ │ │ │ - 0x00d0a1f0 20202020 76656332 2064203d 2070202d vec2 d = p - │ │ │ │ - 0x00d0a200 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ - 0x00d0a210 3b200a20 20202069 66202864 6f742864 ; . if (dot(d │ │ │ │ - 0x00d0a220 2c206429 20213d20 302e3029 200a2020 , d) != 0.0) . │ │ │ │ - 0x00d0a230 20202020 72657475 726e206f 72696769 return origi │ │ │ │ - 0x00d0a240 6e616c41 78697350 6f73202b 206e6f72 nalAxisPos + nor │ │ │ │ - 0x00d0a250 6d616c69 7a652864 29202a20 68616c66 malize(d) * half │ │ │ │ - 0x00d0a260 57696474 683b200a 20202020 656c7365 Width; . else │ │ │ │ - 0x00d0a270 200a2020 20202020 72657475 726e206f . return o │ │ │ │ - 0x00d0a280 72696769 6e616c41 78697350 6f733b20 riginalAxisPos; │ │ │ │ - 0x00d0a290 0a20207d 200a2020 766f6964 206d6169 . } . void mai │ │ │ │ - 0x00d0a2a0 6e282920 0a20207b 200a2020 20207665 n() . { . ve │ │ │ │ - 0x00d0a2b0 63342070 6f73203d 20766563 3428615f c4 pos = vec4(a_ │ │ │ │ - 0x00d0a2c0 706f7369 74696f6e 2e78792c 20302c20 position.xy, 0, │ │ │ │ - 0x00d0a2d0 3129202a 20755f6d 6f64656c 56696577 1) * u_modelView │ │ │ │ - 0x00d0a2e0 3b200a20 20202076 65633220 6e6f726d ; . vec2 norm │ │ │ │ - 0x00d0a2f0 616c203d 20766563 3228615f 6e6f726d al = vec2(a_norm │ │ │ │ - 0x00d0a300 616c2e78 202a2075 5f706172 616d732e al.x * u_params. │ │ │ │ - 0x00d0a310 78202d20 615f6e6f 726d616c 2e79202a x - a_normal.y * │ │ │ │ - 0x00d0a320 20755f70 6172616d 732e792c 200a2020 u_params.y, . │ │ │ │ - 0x00d0a330 20202020 20202020 20202020 20202020 │ │ │ │ - 0x00d0a340 20202020 20615f6e 6f726d61 6c2e7820 a_normal.x │ │ │ │ - 0x00d0a350 2a20755f 70617261 6d732e79 202b2061 * u_params.y + a │ │ │ │ - 0x00d0a360 5f6e6f72 6d616c2e 79202a20 755f7061 _normal.y * u_pa │ │ │ │ - 0x00d0a370 72616d73 2e78293b 200a2020 20207665 rams.x); . ve │ │ │ │ - 0x00d0a380 63322073 68696674 6564506f 73203d20 c2 shiftedPos = │ │ │ │ - 0x00d0a390 6e6f726d 616c202a 20755f70 6172616d normal * u_param │ │ │ │ - 0x00d0a3a0 732e7a20 2b20706f 732e7879 3b200a20 s.z + pos.xy; . │ │ │ │ - 0x00d0a3b0 20202070 6f73203d 20766563 34287368 pos = vec4(sh │ │ │ │ - 0x00d0a3c0 69667465 64506f73 2c20615f 706f7369 iftedPos, a_posi │ │ │ │ - 0x00d0a3d0 74696f6e 2e7a2c20 312e3029 202a2075 tion.z, 1.0) * u │ │ │ │ - 0x00d0a3e0 5f70726f 6a656374 696f6e3b 200a2020 _projection; . │ │ │ │ - 0x00d0a3f0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ - 0x00d0a400 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ - 0x00d0a410 6f726d28 706f732c 20755f70 69766f74 orm(pos, u_pivot │ │ │ │ - 0x00d0a420 5472616e 73666f72 6d2c2030 2e30293b Transform, 0.0); │ │ │ │ - 0x00d0a430 200a2020 20207665 6332206f 66667365 . vec2 offse │ │ │ │ - 0x00d0a440 7473203d 20616273 28615f6e 6f726d61 ts = abs(a_norma │ │ │ │ - 0x00d0a450 6c2e7a77 293b200a 20202020 765f6f66 l.zw); . v_of │ │ │ │ - 0x00d0a460 66736574 73203d20 76656334 28615f6e fsets = vec4(a_n │ │ │ │ - 0x00d0a470 6f726d61 6c2e7a77 2c206f66 66736574 ormal.zw, offset │ │ │ │ - 0x00d0a480 73202d20 312e3029 3b200a20 20202076 s - 1.0); . v │ │ │ │ - 0x00d0a490 5f636f6c 6f72203d 20615f63 6f6c6f72 _color = a_color │ │ │ │ - 0x00d0a4a0 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ - 0x00d0a4b0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d0a4c0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d0a4d0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d0a4e0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d0a4f0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d0a500 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d0a510 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d0a520 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d0a530 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d0a540 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d0a550 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d0a560 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d0a570 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d0a580 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d0a590 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d0a5a0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d0a5b0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d0a5c0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d0a5d0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d0a5e0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d0a5f0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d0a600 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d0a610 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00d0a620 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ - 0x00d0a630 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ - 0x00d0a640 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ - 0x00d0a650 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ - 0x00d0a660 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ - 0x00d0a670 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ - 0x00d0a680 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ - 0x00d0a690 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d0a6a0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d0a6b0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d0a6c0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d0a6d0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00d0a6e0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00d0a6f0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00d0a700 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00d0a710 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d0a720 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d0a730 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00d0a740 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00d0a750 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00d0a760 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d0a770 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d0a780 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00d0a790 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d0a7a0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d0a7b0 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00d0a7c0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d0a7d0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d0a7e0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d0a7f0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d0a800 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d0a810 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d0a820 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00d0a830 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00d0a840 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00d0a850 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d0a860 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00d0a870 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d0a880 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d0a890 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d0a8a0 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00d0a8b0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d0a8c0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00d0a8d0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00d0a8e0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d0a8f0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d0a900 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00d0a910 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00d0a920 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d0a930 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00d0a940 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00d0a950 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d0a960 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d0a970 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d0a980 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d0a990 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00d0a9a0 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00d0a9b0 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00d0a9c0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00d0a9d0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00d0a9e0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00d0a9f0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00d0aa00 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00d0aa10 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00d0aa20 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00d0aa30 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d0aa40 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00d0aa50 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00d0aa60 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d0aa70 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00d0aa80 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00d0aa90 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d0aaa0 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00d0aab0 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00d0aac0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00d0aad0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d0aae0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00d0aaf0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00d0ab00 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00d0ab10 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00d0ab20 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00d0ab30 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00d0ab40 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00d0ab50 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00d0ab60 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00d0ab70 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00d0ab80 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00d0ab90 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00d0aba0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d0abb0 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00d0abc0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00d0abd0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d0abe0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00d0abf0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00d0ac00 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00d0ac10 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00d0ac20 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00d0ac30 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00d0ac40 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00d0ac50 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00d0ac60 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00d0ac70 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00d0ac80 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d0ac90 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00d0aca0 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00d0acb0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d0acc0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00d0acd0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00d0ace0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00d0acf0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d0ad00 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d0ad10 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00d0ad20 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ - 0x00d0ad30 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ - 0x00d0ad40 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ - 0x00d0ad50 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ - 0x00d0ad60 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ - 0x00d0ad70 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ - 0x00d0ad80 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ - 0x00d0ad90 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ - 0x00d0ada0 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ - 0x00d0adb0 203d2076 65633428 615f706f 73697469 = vec4(a_positi │ │ │ │ - 0x00d0adc0 6f6e2c20 312e3029 202a2075 5f6d6f64 on, 1.0) * u_mod │ │ │ │ - 0x00d0add0 656c5669 65773b20 0a202020 20766563 elView; . vec │ │ │ │ - 0x00d0ade0 3420706f 73203d20 76656334 286e6f72 4 pos = vec4(nor │ │ │ │ - 0x00d0adf0 6d616c2c 20302e30 2c20302e 3029202b mal, 0.0, 0.0) + │ │ │ │ - 0x00d0ae00 20703b20 0a202020 20766563 34207072 p; . vec4 pr │ │ │ │ - 0x00d0ae10 6f6a6563 74656450 69766f74 203d2070 ojectedPivot = p │ │ │ │ - 0x00d0ae20 202a2075 5f70726f 6a656374 696f6e3b * u_projection; │ │ │ │ - 0x00d0ae30 200a2020 2020676c 5f506f73 6974696f . gl_Positio │ │ │ │ - 0x00d0ae40 6e203d20 6170706c 79506976 6f745472 n = applyPivotTr │ │ │ │ - 0x00d0ae50 616e7366 6f726d28 706f7320 2a20755f ansform(pos * u_ │ │ │ │ - 0x00d0ae60 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ - 0x00d0ae70 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ - 0x00d0ae80 30293b20 0a202020 20666c6f 6174206e 0); . float n │ │ │ │ - 0x00d0ae90 65775a20 3d207072 6f6a6563 74656450 ewZ = projectedP │ │ │ │ - 0x00d0aea0 69766f74 2e79202f 2070726f 6a656374 ivot.y / project │ │ │ │ - 0x00d0aeb0 65645069 766f742e 77202a20 302e3520 edPivot.w * 0.5 │ │ │ │ - 0x00d0aec0 2b20302e 353b200a 20202020 676c5f50 + 0.5; . gl_P │ │ │ │ - 0x00d0aed0 6f736974 696f6e2e 7a203d20 61627328 osition.z = abs( │ │ │ │ - 0x00d0aee0 615f6e6f 726d616c 416e6441 6e696d61 a_normalAndAnima │ │ │ │ - 0x00d0aef0 74654f72 5a2e7a29 202a206e 65775a20 teOrZ.z) * newZ │ │ │ │ - 0x00d0af00 2b202831 2e30202d 20616273 28615f6e + (1.0 - abs(a_n │ │ │ │ - 0x00d0af10 6f726d61 6c416e64 416e696d 6174654f ormalAndAnimateO │ │ │ │ - 0x00d0af20 725a2e7a 2929202a 20676c5f 506f7369 rZ.z)) * gl_Posi │ │ │ │ - 0x00d0af30 74696f6e 2e7a3b20 0a202020 20765f74 tion.z; . v_t │ │ │ │ - 0x00d0af40 6578436f 6f726473 203d2061 5f746578 exCoords = a_tex │ │ │ │ - 0x00d0af50 436f6f72 64733b20 0a202020 20765f6d Coords; . v_m │ │ │ │ - 0x00d0af60 61736b43 6f6c6f72 203d2061 5f636f6c askColor = a_col │ │ │ │ - 0x00d0af70 6f723b20 0a20207d 200a0000 00000000 or; . } ....... │ │ │ │ - 0x00d0af80 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ - 0x00d0af90 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ - 0x00d0afa0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ - 0x00d0afb0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ - 0x00d0afc0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ - 0x00d0afd0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ - 0x00d0afe0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ - 0x00d0aff0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ - 0x00d0b000 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ - 0x00d0b010 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ - 0x00d0b020 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ - 0x00d0b030 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ - 0x00d0b040 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ - 0x00d0b050 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ - 0x00d0b060 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ - 0x00d0b070 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ - 0x00d0b080 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ - 0x00d0b090 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ - 0x00d0b0a0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ - 0x00d0b0b0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ - 0x00d0b0c0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ - 0x00d0b0d0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ - 0x00d0b0e0 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ - 0x00d0b0f0 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ - 0x00d0b100 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ - 0x00d0b110 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ - 0x00d0b120 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ - 0x00d0b130 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ - 0x00d0b140 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ - 0x00d0b150 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ - 0x00d0b160 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ - 0x00d0b170 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ - 0x00d0b180 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ - 0x00d0b190 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ - 0x00d0b1a0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ - 0x00d0b1b0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ - 0x00d0b1c0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ - 0x00d0b1d0 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ - 0x00d0b1e0 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ - 0x00d0b1f0 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ - 0x00d0b200 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ - 0x00d0b210 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ - 0x00d0b220 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ - 0x00d0b230 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ - 0x00d0b240 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ - 0x00d0b250 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ - 0x00d0b260 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ - 0x00d0b270 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ - 0x00d0b280 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ - 0x00d0b290 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ - 0x00d0b2a0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ - 0x00d0b2b0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ - 0x00d0b2c0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ - 0x00d0b2d0 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ - 0x00d0b2e0 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ - 0x00d0b2f0 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ - 0x00d0b300 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ - 0x00d0b310 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ - 0x00d0b320 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d0b330 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ - 0x00d0b340 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ - 0x00d0b350 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ - 0x00d0b360 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ - 0x00d0b370 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ - 0x00d0b380 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d0b390 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ - 0x00d0b3a0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ - 0x00d0b3b0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ - 0x00d0b3c0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ - 0x00d0b3d0 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ - 0x00d0b3e0 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ - 0x00d0b3f0 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ - 0x00d0b400 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ - 0x00d0b410 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ - 0x00d0b420 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ - 0x00d0b430 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ - 0x00d0b440 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ - 0x00d0b450 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ - 0x00d0b460 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ - 0x00d0b470 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ - 0x00d0b480 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ - 0x00d0b490 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ - 0x00d0b4a0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ - 0x00d0b4b0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ - 0x00d0b4c0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ - 0x00d0b4d0 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ - 0x00d0b4e0 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ - 0x00d0b4f0 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ - 0x00d0b500 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ - 0x00d0b510 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ - 0x00d0b520 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ - 0x00d0b530 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ - 0x00d0b540 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ - 0x00d0b550 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ - 0x00d0b560 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ - 0x00d0b570 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ - 0x00d0b580 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ - 0x00d0b590 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ - 0x00d0b5a0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ - 0x00d0b5b0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ - 0x00d0b5c0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ - 0x00d0b5d0 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ - 0x00d0b5e0 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ - 0x00d0b5f0 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ - 0x00d0b600 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ - 0x00d0b610 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ - 0x00d0b620 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ - 0x00d0b630 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ - 0x00d0b640 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ - 0x00d0b650 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ - 0x00d0b660 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ - 0x00d0b670 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ - 0x00d0b680 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ - 0x00d0b690 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ - 0x00d0b6a0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ - 0x00d0b6b0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ - 0x00d0b6c0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ - 0x00d0b6d0 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ - 0x00d0b6e0 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ - 0x00d0b6f0 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ - 0x00d0b700 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ - 0x00d0b710 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ - 0x00d0b720 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ - 0x00d0b730 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ - 0x00d0b740 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ - 0x00d0b750 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ - 0x00d0b760 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ - 0x00d0b770 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ - 0x00d0b780 20726574 75726e20 6f726967 696e616c return original │ │ │ │ - 0x00d0b790 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ - 0x00d0b7a0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ - 0x00d0b7b0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ - 0x00d0b7c0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ - 0x00d0b7d0 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ - 0x00d0b7e0 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ - 0x00d0b7f0 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ - 0x00d0b800 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ - 0x00d0b810 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ - 0x00d0b820 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ - 0x00d0b830 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ - 0x00d0b840 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ - 0x00d0b850 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ - 0x00d0b860 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ - 0x00d0b870 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ - 0x00d0b880 69766f74 203d2076 65633428 615f706f ivot = vec4(a_po │ │ │ │ - 0x00d0b890 73697469 6f6e2c20 312e3029 202a2075 sition, 1.0) * u │ │ │ │ - 0x00d0b8a0 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ - 0x00d0b8b0 20766563 34206f66 66736574 203d2076 vec4 offset = v │ │ │ │ - 0x00d0b8c0 65633428 6e6f726d 616c2c20 302e302c ec4(normal, 0.0, │ │ │ │ - 0x00d0b8d0 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ - 0x00d0b8e0 74696f6e 3b200a20 20202076 65633420 tion; . vec4 │ │ │ │ - 0x00d0b8f0 70726f6a 65637465 64506976 6f74203d projectedPivot = │ │ │ │ - 0x00d0b900 20706976 6f74202a 20755f70 726f6a65 pivot * u_proje │ │ │ │ - 0x00d0b910 6374696f 6e3b200a 20202020 676c5f50 ction; . gl_P │ │ │ │ - 0x00d0b920 6f736974 696f6e20 3d206170 706c7942 osition = applyB │ │ │ │ - 0x00d0b930 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ - 0x00d0b940 6e73666f 726d2870 726f6a65 63746564 nsform(projected │ │ │ │ - 0x00d0b950 5069766f 742c2075 5f706976 6f745472 Pivot, u_pivotTr │ │ │ │ - 0x00d0b960 616e7366 6f726d2c 20302e30 2c206f66 ansform, 0.0, of │ │ │ │ - 0x00d0b970 66736574 2e787929 3b200a20 20202066 fset.xy); . f │ │ │ │ - 0x00d0b980 6c6f6174 206e6577 5a203d20 70726f6a loat newZ = proj │ │ │ │ - 0x00d0b990 65637465 64506976 6f742e79 202f2070 ectedPivot.y / p │ │ │ │ - 0x00d0b9a0 726f6a65 63746564 5069766f 742e7720 rojectedPivot.w │ │ │ │ - 0x00d0b9b0 2a20302e 35202b20 302e353b 200a2020 * 0.5 + 0.5; . │ │ │ │ - 0x00d0b9c0 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ - 0x00d0b9d0 3d206162 7328615f 6e6f726d 616c416e = abs(a_normalAn │ │ │ │ - 0x00d0b9e0 64416e69 6d617465 4f725a2e 7a29202a dAnimateOrZ.z) * │ │ │ │ - 0x00d0b9f0 206e6577 5a20202b 2028312e 30202d20 newZ + (1.0 - │ │ │ │ - 0x00d0ba00 61627328 615f6e6f 726d616c 416e6441 abs(a_normalAndA │ │ │ │ - 0x00d0ba10 6e696d61 74654f72 5a2e7a29 29202a20 nimateOrZ.z)) * │ │ │ │ - 0x00d0ba20 676c5f50 6f736974 696f6e2e 7a3b200a gl_Position.z; . │ │ │ │ - 0x00d0ba30 20202020 765f7465 78436f6f 72647320 v_texCoords │ │ │ │ - 0x00d0ba40 3d20615f 74657843 6f6f7264 733b200a = a_texCoords; . │ │ │ │ - 0x00d0ba50 20202020 765f6d61 736b436f 6c6f7220 v_maskColor │ │ │ │ - 0x00d0ba60 3d20615f 636f6c6f 723b200a 20207d20 = a_color; . } │ │ │ │ - 0x00d0ba70 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d04570 696e616c 41786973 506f7320 2b206e6f inalAxisPos + no │ │ │ │ + 0x00d04580 726d616c 697a6528 6429202a 2068616c rmalize(d) * hal │ │ │ │ + 0x00d04590 66576964 74683b20 0a202020 20656c73 fWidth; . els │ │ │ │ + 0x00d045a0 65200a20 20202020 20726574 75726e20 e . return │ │ │ │ + 0x00d045b0 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d045c0 200a2020 7d200a20 20766f69 64206d61 . } . void ma │ │ │ │ + 0x00d045d0 696e2829 200a2020 7b200a20 20202076 in() . { . v │ │ │ │ + 0x00d045e0 65633320 72616469 7573203d 20615f6e ec3 radius = a_n │ │ │ │ + 0x00d045f0 6f726d61 6c202a20 615f706f 73697469 ormal * a_positi │ │ │ │ + 0x00d04600 6f6e2e7a 3b200a20 20202076 65633420 on.z; . vec4 │ │ │ │ + 0x00d04610 706f7320 3d207665 63342861 5f706f73 pos = vec4(a_pos │ │ │ │ + 0x00d04620 6974696f 6e2e7879 2c20302c 20312920 ition.xy, 0, 1) │ │ │ │ + 0x00d04630 2a20755f 6d6f6465 6c566965 773b200a * u_modelView; . │ │ │ │ + 0x00d04640 20202020 76656334 20736869 66746564 vec4 shifted │ │ │ │ + 0x00d04650 506f7320 3d207665 63342872 61646975 Pos = vec4(radiu │ │ │ │ + 0x00d04660 732e7879 2c20302c 20302920 2b20706f s.xy, 0, 0) + po │ │ │ │ + 0x00d04670 733b200a 20202020 676c5f50 6f736974 s; . gl_Posit │ │ │ │ + 0x00d04680 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ + 0x00d04690 5472616e 73666f72 6d287368 69667465 Transform(shifte │ │ │ │ + 0x00d046a0 64506f73 202a2075 5f70726f 6a656374 dPos * u_project │ │ │ │ + 0x00d046b0 696f6e2c 20755f70 69766f74 5472616e ion, u_pivotTran │ │ │ │ + 0x00d046c0 73666f72 6d2c2030 2e30293b 200a2020 sform, 0.0); . │ │ │ │ + 0x00d046d0 2020765f 72616469 7573203d 20726164 v_radius = rad │ │ │ │ + 0x00d046e0 6975733b 200a2020 2020765f 636f6c6f ius; . v_colo │ │ │ │ + 0x00d046f0 72203d20 615f636f 6c6f723b 200a2020 r = a_color; . │ │ │ │ + 0x00d04700 7d200a00 00000000 00000000 00000000 } .............. │ │ │ │ + 0x00d04710 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d04720 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d04730 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d04740 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d04750 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d04760 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d04770 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d04780 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d04790 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d047a0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d047b0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d047c0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d047d0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d047e0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d047f0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d04800 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d04810 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d04820 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d04830 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d04840 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d04850 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d04860 63322061 5f706f73 3b200a20 20696e20 c2 a_pos; . in │ │ │ │ + 0x00d04870 76656332 20615f74 636f6f72 643b200a vec2 a_tcoord; . │ │ │ │ + 0x00d04880 20206f75 74207665 63342076 5f636f6f out vec4 v_coo │ │ │ │ + 0x00d04890 7264733b 200a2020 6f757420 76656334 rds; . out vec4 │ │ │ │ + 0x00d048a0 20765f6f 66667365 74303b20 0a20206f v_offset0; . o │ │ │ │ + 0x00d048b0 75742076 65633420 765f6f66 66736574 ut vec4 v_offset │ │ │ │ + 0x00d048c0 313b200a 20206f75 74207665 63342076 1; . out vec4 v │ │ │ │ + 0x00d048d0 5f6f6666 73657432 3b200a20 20756e69 _offset2; . uni │ │ │ │ + 0x00d048e0 666f726d 20766563 3420755f 6672616d form vec4 u_fram │ │ │ │ + 0x00d048f0 65627566 6665724d 65747269 63733b20 ebufferMetrics; │ │ │ │ + 0x00d04900 0a202023 64656669 6e652053 4d41415f . #define SMAA_ │ │ │ │ + 0x00d04910 4d41585f 53454152 43485f53 54455053 MAX_SEARCH_STEPS │ │ │ │ + 0x00d04920 20382e30 200a2020 636f6e73 74207665 8.0 . const ve │ │ │ │ + 0x00d04930 6334206b 4d617853 65617263 68537465 c4 kMaxSearchSte │ │ │ │ + 0x00d04940 7073203d 20766563 34282d32 2e30202a ps = vec4(-2.0 * │ │ │ │ + 0x00d04950 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ + 0x00d04960 5f535445 50532c20 322e3020 2a20534d _STEPS, 2.0 * SM │ │ │ │ + 0x00d04970 41415f4d 41585f53 45415243 485f5354 AA_MAX_SEARCH_ST │ │ │ │ + 0x00d04980 4550532c 200a2020 20202020 20202020 EPS, . │ │ │ │ + 0x00d04990 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d049a0 20202020 20202020 20202d32 2e30202a -2.0 * │ │ │ │ + 0x00d049b0 20534d41 415f4d41 585f5345 41524348 SMAA_MAX_SEARCH │ │ │ │ + 0x00d049c0 5f535445 50532c20 322e3020 202a2053 _STEPS, 2.0 * S │ │ │ │ + 0x00d049d0 4d41415f 4d41585f 53454152 43485f53 MAA_MAX_SEARCH_S │ │ │ │ + 0x00d049e0 54455053 293b200a 2020636f 6e737420 TEPS); . const │ │ │ │ + 0x00d049f0 666c6f61 74206b53 68617065 436f6f72 float kShapeCoor │ │ │ │ + 0x00d04a00 64536361 6c617220 3d203130 30302e30 dScalar = 1000.0 │ │ │ │ + 0x00d04a10 3b200a20 20766563 34206170 706c7950 ; . vec4 applyP │ │ │ │ + 0x00d04a20 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d04a30 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d04a40 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d04a50 6c6f6174 20706976 6f745265 616c5a29 loat pivotRealZ) │ │ │ │ + 0x00d04a60 200a2020 7b200a20 20202076 65633420 . { . vec4 │ │ │ │ + 0x00d04a70 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d04a80 203d2070 69766f74 3b200a20 20202066 = pivot; . f │ │ │ │ + 0x00d04a90 6c6f6174 2077203d 20747261 6e73666f loat w = transfo │ │ │ │ + 0x00d04aa0 726d6564 5069766f 742e773b 200a2020 rmedPivot.w; . │ │ │ │ + 0x00d04ab0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d04ac0 6f742e78 7977203d 20287069 766f7454 ot.xyw = (pivotT │ │ │ │ + 0x00d04ad0 72616e73 666f726d 202a2076 65633428 ransform * vec4( │ │ │ │ + 0x00d04ae0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d04af0 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d04b00 20772929 2e787977 3b200a20 20202074 w)).xyw; . t │ │ │ │ + 0x00d04b10 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d04b20 7a202a3d 20747261 6e73666f 726d6564 z *= transformed │ │ │ │ + 0x00d04b30 5069766f 742e7720 2f20773b 200a2020 Pivot.w / w; . │ │ │ │ + 0x00d04b40 23696664 65662056 554c4b41 4e200a20 #ifdef VULKAN . │ │ │ │ + 0x00d04b50 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d04b60 766f742e 79203d20 2d747261 6e73666f vot.y = -transfo │ │ │ │ + 0x00d04b70 726d6564 5069766f 742e793b 200a2020 rmedPivot.y; . │ │ │ │ + 0x00d04b80 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d04b90 6f742e7a 203d2028 7472616e 73666f72 ot.z = (transfor │ │ │ │ + 0x00d04ba0 6d656450 69766f74 2e7a2020 2b207472 medPivot.z + tr │ │ │ │ + 0x00d04bb0 616e7366 6f726d65 64506976 6f742e77 ansformedPivot.w │ │ │ │ + 0x00d04bc0 29202f20 322e303b 200a2020 23656e64 ) / 2.0; . #end │ │ │ │ + 0x00d04bd0 6966200a 20202020 72657475 726e2074 if . return t │ │ │ │ + 0x00d04be0 72616e73 666f726d 65645069 766f743b ransformedPivot; │ │ │ │ + 0x00d04bf0 200a2020 7d200a20 20766563 34206170 . } . vec4 ap │ │ │ │ + 0x00d04c00 706c7942 696c6c62 6f617264 5069766f plyBillboardPivo │ │ │ │ + 0x00d04c10 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ + 0x00d04c20 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ + 0x00d04c30 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ + 0x00d04c40 74207069 766f7452 65616c5a 2c207665 t pivotRealZ, ve │ │ │ │ + 0x00d04c50 6332206f 66667365 7429200a 20207b20 c2 offset) . { │ │ │ │ + 0x00d04c60 0a202020 20666c6f 6174206c 6f676963 . float logic │ │ │ │ + 0x00d04c70 5a203d20 7069766f 742e7a20 2f207069 Z = pivot.z / pi │ │ │ │ + 0x00d04c80 766f742e 773b200a 20202020 76656334 vot.w; . vec4 │ │ │ │ + 0x00d04c90 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d04ca0 74203d20 7069766f 74547261 6e73666f t = pivotTransfo │ │ │ │ + 0x00d04cb0 726d202a 20766563 34287069 766f742e rm * vec4(pivot. │ │ │ │ + 0x00d04cc0 78792c20 7069766f 74526561 6c5a2c20 xy, pivotRealZ, │ │ │ │ + 0x00d04cd0 7069766f 742e7729 3b200a20 20202076 pivot.w); . v │ │ │ │ + 0x00d04ce0 65633420 7363616c 65203d20 7069766f ec4 scale = pivo │ │ │ │ + 0x00d04cf0 74547261 6e73666f 726d202a 20766563 tTransform * vec │ │ │ │ + 0x00d04d00 3428312e 302c202d 312e302c 20302e30 4(1.0, -1.0, 0.0 │ │ │ │ + 0x00d04d10 2c20312e 30293b20 0a202020 20766563 , 1.0); . vec │ │ │ │ + 0x00d04d20 3420706f 73697469 6f6e203d 20766563 4 position = vec │ │ │ │ + 0x00d04d30 34287472 616e7366 6f726d65 64506976 4(transformedPiv │ │ │ │ + 0x00d04d40 6f742e78 79202f20 7472616e 73666f72 ot.xy / transfor │ │ │ │ + 0x00d04d50 6d656450 69766f74 2e772c20 6c6f6769 medPivot.w, logi │ │ │ │ + 0x00d04d60 635a2c20 312e3029 202b2076 65633428 cZ, 1.0) + vec4( │ │ │ │ + 0x00d04d70 6f666673 6574202f 20736361 6c652e77 offset / scale.w │ │ │ │ + 0x00d04d80 202a2073 63616c65 2e782c20 302e302c * scale.x, 0.0, │ │ │ │ + 0x00d04d90 20302e30 293b200a 20202369 66646566 0.0); . #ifdef │ │ │ │ + 0x00d04da0 2056554c 4b414e20 0a202020 20706f73 VULKAN . pos │ │ │ │ + 0x00d04db0 6974696f 6e2e7920 3d202d70 6f736974 ition.y = -posit │ │ │ │ + 0x00d04dc0 696f6e2e 793b200a 20202020 706f7369 ion.y; . posi │ │ │ │ + 0x00d04dd0 74696f6e 2e7a203d 2028706f 73697469 tion.z = (positi │ │ │ │ + 0x00d04de0 6f6e2e7a 20202b20 706f7369 74696f6e on.z + position │ │ │ │ + 0x00d04df0 2e772920 2f20322e 303b200a 20202365 .w) / 2.0; . #e │ │ │ │ + 0x00d04e00 6e646966 200a2020 20207265 7475726e ndif . return │ │ │ │ + 0x00d04e10 20706f73 6974696f 6e3b200a 20207d20 position; . } │ │ │ │ + 0x00d04e20 0a202076 65633220 63616c63 4c696e65 . vec2 calcLine │ │ │ │ + 0x00d04e30 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ + 0x00d04e40 6f732876 65633220 6f726967 696e616c os(vec2 original │ │ │ │ + 0x00d04e50 41786973 506f732c 20766563 32207368 AxisPos, vec2 sh │ │ │ │ + 0x00d04e60 69667465 64506f73 2c206d61 7434206d iftedPos, mat4 m │ │ │ │ + 0x00d04e70 6f64656c 56696577 2c20666c 6f617420 odelView, float │ │ │ │ + 0x00d04e80 68616c66 57696474 6829200a 20207b20 halfWidth) . { │ │ │ │ + 0x00d04e90 0a202020 20766563 32207020 3d202876 . vec2 p = (v │ │ │ │ + 0x00d04ea0 65633428 73686966 74656450 6f732c20 ec4(shiftedPos, │ │ │ │ + 0x00d04eb0 302e302c 20312e30 29202a20 6d6f6465 0.0, 1.0) * mode │ │ │ │ + 0x00d04ec0 6c566965 77292e78 793b200a 20202020 lView).xy; . │ │ │ │ + 0x00d04ed0 76656332 2064203d 2070202d 206f7269 vec2 d = p - ori │ │ │ │ + 0x00d04ee0 67696e61 6c417869 73506f73 3b200a20 ginalAxisPos; . │ │ │ │ + 0x00d04ef0 20202069 66202864 6f742864 2c206429 if (dot(d, d) │ │ │ │ + 0x00d04f00 20213d20 302e3029 200a2020 20202020 != 0.0) . │ │ │ │ + 0x00d04f10 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d04f20 78697350 6f73202b 206e6f72 6d616c69 xisPos + normali │ │ │ │ + 0x00d04f30 7a652864 29202a20 68616c66 57696474 ze(d) * halfWidt │ │ │ │ + 0x00d04f40 683b200a 20202020 656c7365 200a2020 h; . else . │ │ │ │ + 0x00d04f50 20202020 72657475 726e206f 72696769 return origi │ │ │ │ + 0x00d04f60 6e616c41 78697350 6f733b20 0a20207d nalAxisPos; . } │ │ │ │ + 0x00d04f70 200a2020 766f6964 206d6169 6e282920 . void main() │ │ │ │ + 0x00d04f80 0a20207b 200a2020 2020765f 636f6f72 . { . v_coor │ │ │ │ + 0x00d04f90 6473203d 20766563 3428615f 74636f6f ds = vec4(a_tcoo │ │ │ │ + 0x00d04fa0 72642c20 615f7463 6f6f7264 202a2075 rd, a_tcoord * u │ │ │ │ + 0x00d04fb0 5f667261 6d656275 66666572 4d657472 _framebufferMetr │ │ │ │ + 0x00d04fc0 6963732e 7a77293b 200a2020 2020765f ics.zw); . v_ │ │ │ │ + 0x00d04fd0 6f666673 65743020 3d20755f 6672616d offset0 = u_fram │ │ │ │ + 0x00d04fe0 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00d04ff0 79787920 2a207665 6334282d 302e3235 yxy * vec4(-0.25 │ │ │ │ + 0x00d05000 2c202d30 2e313235 2c20312e 32352c20 , -0.125, 1.25, │ │ │ │ + 0x00d05010 2d302e31 32352920 2b20615f 74636f6f -0.125) + a_tcoo │ │ │ │ + 0x00d05020 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ + 0x00d05030 6f666673 65743120 3d20755f 6672616d offset1 = u_fram │ │ │ │ + 0x00d05040 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00d05050 79787920 2a207665 6334282d 302e3132 yxy * vec4(-0.12 │ │ │ │ + 0x00d05060 352c202d 302e3235 2c202d30 2e313235 5, -0.25, -0.125 │ │ │ │ + 0x00d05070 2c20312e 32352920 2b20615f 74636f6f , 1.25) + a_tcoo │ │ │ │ + 0x00d05080 72642e78 7978793b 200a2020 2020765f rd.xyxy; . v_ │ │ │ │ + 0x00d05090 6f666673 65743220 3d20755f 6672616d offset2 = u_fram │ │ │ │ + 0x00d050a0 65627566 6665724d 65747269 63732e78 ebufferMetrics.x │ │ │ │ + 0x00d050b0 78797920 2a206b4d 61785365 61726368 xyy * kMaxSearch │ │ │ │ + 0x00d050c0 53746570 73202b20 76656334 28765f6f Steps + vec4(v_o │ │ │ │ + 0x00d050d0 66667365 74302e78 7a2c2076 5f6f6666 ffset0.xz, v_off │ │ │ │ + 0x00d050e0 73657431 2e797729 3b200a20 20202067 set1.yw); . g │ │ │ │ + 0x00d050f0 6c5f506f 73697469 6f6e203d 20766563 l_Position = vec │ │ │ │ + 0x00d05100 3428615f 706f732c 20302e30 2c20312e 4(a_pos, 0.0, 1. │ │ │ │ + 0x00d05110 30293b20 0a20207d 200a0000 00000000 0); . } ....... │ │ │ │ + 0x00d05120 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d05130 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d05140 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d05150 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d05160 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d05170 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d05180 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d05190 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d051a0 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d051b0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d051c0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d051d0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d051e0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d051f0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d05200 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d05210 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d05220 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d05230 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d05240 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d05250 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d05260 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d05270 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d05280 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d05290 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d052a0 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d052b0 65633320 765f7261 64697573 3b200a20 ec3 v_radius; . │ │ │ │ + 0x00d052c0 206f7574 20766563 3420765f 636f6c6f out vec4 v_colo │ │ │ │ + 0x00d052d0 723b200a 2020756e 69666f72 6d206d61 r; . uniform ma │ │ │ │ + 0x00d052e0 74342075 5f6d6f64 656c5669 65773b20 t4 u_modelView; │ │ │ │ + 0x00d052f0 0a202075 6e69666f 726d206d 61743420 . uniform mat4 │ │ │ │ + 0x00d05300 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d05310 20756e69 666f726d 206d6174 3420755f uniform mat4 u_ │ │ │ │ + 0x00d05320 7069766f 74547261 6e73666f 726d3b20 pivotTransform; │ │ │ │ + 0x00d05330 0a202075 6e69666f 726d2076 65633420 . uniform vec4 │ │ │ │ + 0x00d05340 755f7061 72616d73 3b200a20 20756e69 u_params; . uni │ │ │ │ + 0x00d05350 666f726d 20666c6f 61742075 5f6c696e form float u_lin │ │ │ │ + 0x00d05360 6548616c 66576964 74683b20 0a202075 eHalfWidth; . u │ │ │ │ + 0x00d05370 6e69666f 726d2066 6c6f6174 20755f6d niform float u_m │ │ │ │ + 0x00d05380 61785261 64697573 3b200a20 20636f6e axRadius; . con │ │ │ │ + 0x00d05390 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d053a0 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d053b0 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ + 0x00d053c0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d053d0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d053e0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d053f0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d05400 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ + 0x00d05410 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d05420 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ + 0x00d05430 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ + 0x00d05440 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ + 0x00d05450 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d05460 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ + 0x00d05470 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d05480 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d05490 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d054a0 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ + 0x00d054b0 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d054c0 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ + 0x00d054d0 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ + 0x00d054e0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d054f0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d05500 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ + 0x00d05510 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ + 0x00d05520 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d05530 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ + 0x00d05540 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ + 0x00d05550 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d05560 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ + 0x00d05570 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d05580 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ + 0x00d05590 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ + 0x00d055a0 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ + 0x00d055b0 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d055c0 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d055d0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d055e0 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ + 0x00d055f0 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ + 0x00d05600 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ + 0x00d05610 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ + 0x00d05620 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ + 0x00d05630 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d05640 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ + 0x00d05650 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ + 0x00d05660 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d05670 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ + 0x00d05680 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ + 0x00d05690 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d056a0 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ + 0x00d056b0 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00d056c0 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ + 0x00d056d0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d056e0 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ + 0x00d056f0 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ + 0x00d05700 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ + 0x00d05710 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ + 0x00d05720 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ + 0x00d05730 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ + 0x00d05740 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00d05750 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ + 0x00d05760 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ + 0x00d05770 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ + 0x00d05780 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ + 0x00d05790 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ + 0x00d057a0 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d057b0 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ + 0x00d057c0 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ + 0x00d057d0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00d057e0 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ + 0x00d057f0 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ + 0x00d05800 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ + 0x00d05810 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ + 0x00d05820 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ + 0x00d05830 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ + 0x00d05840 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ + 0x00d05850 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ + 0x00d05860 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ + 0x00d05870 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ + 0x00d05880 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d05890 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ + 0x00d058a0 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ + 0x00d058b0 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d058c0 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ + 0x00d058d0 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ + 0x00d058e0 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ + 0x00d058f0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d05900 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d05910 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00d05920 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ + 0x00d05930 32206e6f 726d616c 203d2061 5f6e6f72 2 normal = a_nor │ │ │ │ + 0x00d05940 6d616c2e 78793b20 0a202020 20766563 mal.xy; . vec │ │ │ │ + 0x00d05950 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ + 0x00d05960 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ + 0x00d05970 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ + 0x00d05980 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ + 0x00d05990 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ + 0x00d059a0 2028646f 74286e6f 726d616c 2c206e6f (dot(normal, no │ │ │ │ + 0x00d059b0 726d616c 2920213d 20302e30 29200a20 rmal) != 0.0) . │ │ │ │ + 0x00d059c0 2020207b 200a2020 20202020 76656332 { . vec2 │ │ │ │ + 0x00d059d0 206e6f72 6d203d20 6e6f726d 616c202a norm = normal * │ │ │ │ + 0x00d059e0 20755f6c 696e6548 616c6657 69647468 u_lineHalfWidth │ │ │ │ + 0x00d059f0 3b200a20 20202020 20747261 6e73666f ; . transfo │ │ │ │ + 0x00d05a00 726d6564 41786973 506f7320 3d206361 rmedAxisPos = ca │ │ │ │ + 0x00d05a10 6c634c69 6e655472 616e7366 6f726d65 lcLineTransforme │ │ │ │ + 0x00d05a20 64417869 73506f73 28747261 6e73666f dAxisPos(transfo │ │ │ │ + 0x00d05a30 726d6564 41786973 506f732c 20615f70 rmedAxisPos, a_p │ │ │ │ + 0x00d05a40 6f736974 696f6e2e 7879202b 206e6f72 osition.xy + nor │ │ │ │ + 0x00d05a50 6d2c200a 20202020 20202020 20202020 m, . │ │ │ │ + 0x00d05a60 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d05a70 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d05a80 20202020 20202020 2020755f 6d6f6465 u_mode │ │ │ │ + 0x00d05a90 6c566965 772c206c 656e6774 68286e6f lView, length(no │ │ │ │ + 0x00d05aa0 726d2929 3b200a20 2020207d 200a2020 rm)); . } . │ │ │ │ + 0x00d05ab0 20207472 616e7366 6f726d65 64417869 transformedAxi │ │ │ │ + 0x00d05ac0 73506f73 202b3d20 615f6e6f 726d616c sPos += a_normal │ │ │ │ + 0x00d05ad0 2e7a7720 2a20755f 6c696e65 48616c66 .zw * u_lineHalf │ │ │ │ + 0x00d05ae0 57696474 683b200a 20202020 76656334 Width; . vec4 │ │ │ │ + 0x00d05af0 20706f73 203d2076 65633428 7472616e pos = vec4(tran │ │ │ │ + 0x00d05b00 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ + 0x00d05b10 615f706f 73697469 6f6e2e7a 2c20312e a_position.z, 1. │ │ │ │ + 0x00d05b20 3029202a 20755f70 726f6a65 6374696f 0) * u_projectio │ │ │ │ + 0x00d05b30 6e3b200a 20202020 676c5f50 6f736974 n; . gl_Posit │ │ │ │ + 0x00d05b40 696f6e20 3d206170 706c7950 69766f74 ion = applyPivot │ │ │ │ + 0x00d05b50 5472616e 73666f72 6d28706f 732c2075 Transform(pos, u │ │ │ │ + 0x00d05b60 5f706976 6f745472 616e7366 6f726d2c _pivotTransform, │ │ │ │ + 0x00d05b70 20302e30 293b200a 20202020 765f636f 0.0); . v_co │ │ │ │ + 0x00d05b80 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ + 0x00d05b90 20202020 765f7261 64697573 203d2076 v_radius = v │ │ │ │ + 0x00d05ba0 65633328 615f6e6f 726d616c 2e7a772c ec3(a_normal.zw, │ │ │ │ + 0x00d05bb0 20755f6d 61785261 64697573 29202a20 u_maxRadius) * │ │ │ │ + 0x00d05bc0 755f6c69 6e654861 6c665769 6474683b u_lineHalfWidth; │ │ │ │ + 0x00d05bd0 200a2020 7d200a00 00000000 00000000 . } .......... │ │ │ │ + 0x00d05be0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d05bf0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d05c00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d05c10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d05c20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d05c30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d05c40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d05c50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d05c60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d05c70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d05c80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d05c90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d05ca0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d05cb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d05cc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d05cd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d05ce0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d05cf0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d05d00 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d05d10 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d05d20 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d05d30 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ + 0x00d05d40 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ + 0x00d05d50 20206f75 74207665 63332076 5f6e6f72 out vec3 v_nor │ │ │ │ + 0x00d05d60 6d616c3b 200a2020 756e6966 6f726d20 mal; . uniform │ │ │ │ + 0x00d05d70 6d617434 20755f74 72616e73 666f726d mat4 u_transform │ │ │ │ + 0x00d05d80 3b200a20 20756e69 666f726d 206d6174 ; . uniform mat │ │ │ │ + 0x00d05d90 3420755f 6e6f726d 616c5472 616e7366 4 u_normalTransf │ │ │ │ + 0x00d05da0 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d05db0 76656334 20755f63 6f6c6f72 3b200a20 vec4 u_color; . │ │ │ │ + 0x00d05dc0 20756e69 666f726d 20766563 3220755f uniform vec2 u_ │ │ │ │ + 0x00d05dd0 74657843 6f6f7264 466c6970 70696e67 texCoordFlipping │ │ │ │ + 0x00d05de0 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00d05df0 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00d05e00 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00d05e10 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ + 0x00d05e20 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ + 0x00d05e30 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ + 0x00d05e40 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ + 0x00d05e50 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ + 0x00d05e60 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d05e70 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d05e80 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ + 0x00d05e90 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ + 0x00d05ea0 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ + 0x00d05eb0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d05ec0 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ + 0x00d05ed0 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ + 0x00d05ee0 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ + 0x00d05ef0 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ + 0x00d05f00 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ + 0x00d05f10 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ + 0x00d05f20 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d05f30 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ + 0x00d05f40 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ + 0x00d05f50 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d05f60 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ + 0x00d05f70 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ + 0x00d05f80 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d05f90 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ + 0x00d05fa0 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ + 0x00d05fb0 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ + 0x00d05fc0 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00d05fd0 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ + 0x00d05fe0 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ + 0x00d05ff0 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ + 0x00d06000 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00d06010 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d06020 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d06030 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d06040 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ + 0x00d06050 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ + 0x00d06060 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ + 0x00d06070 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ + 0x00d06080 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ + 0x00d06090 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d060a0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d060b0 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ + 0x00d060c0 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ + 0x00d060d0 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ + 0x00d060e0 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ + 0x00d060f0 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ + 0x00d06100 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ + 0x00d06110 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ + 0x00d06120 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ + 0x00d06130 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d06140 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ + 0x00d06150 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ + 0x00d06160 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ + 0x00d06170 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ + 0x00d06180 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ + 0x00d06190 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d061a0 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ + 0x00d061b0 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ + 0x00d061c0 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ + 0x00d061d0 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ + 0x00d061e0 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ + 0x00d061f0 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00d06200 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ + 0x00d06210 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ + 0x00d06220 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ + 0x00d06230 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ + 0x00d06240 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ + 0x00d06250 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ + 0x00d06260 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ + 0x00d06270 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ + 0x00d06280 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ + 0x00d06290 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ + 0x00d062a0 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ + 0x00d062b0 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ + 0x00d062c0 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ + 0x00d062d0 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ + 0x00d062e0 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ + 0x00d062f0 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ + 0x00d06300 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ + 0x00d06310 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d06320 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ + 0x00d06330 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ + 0x00d06340 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ + 0x00d06350 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d06360 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ + 0x00d06370 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00d06380 0a202020 20766563 3420706f 73697469 . vec4 positi │ │ │ │ + 0x00d06390 6f6e203d 20755f74 72616e73 666f726d on = u_transform │ │ │ │ + 0x00d063a0 202a2076 65633428 615f706f 732c2031 * vec4(a_pos, 1 │ │ │ │ + 0x00d063b0 2e30293b 200a2020 2020765f 6e6f726d .0); . v_norm │ │ │ │ + 0x00d063c0 616c203d 206e6f72 6d616c69 7a652828 al = normalize(( │ │ │ │ + 0x00d063d0 755f6e6f 726d616c 5472616e 73666f72 u_normalTransfor │ │ │ │ + 0x00d063e0 6d202a20 76656334 28615f6e 6f726d61 m * vec4(a_norma │ │ │ │ + 0x00d063f0 6c2c2030 2e302929 2e78797a 293b200a l, 0.0)).xyz); . │ │ │ │ + 0x00d06400 20202020 676c5f50 6f736974 696f6e20 gl_Position │ │ │ │ + 0x00d06410 3d20706f 73697469 6f6e3b20 0a202023 = position; . # │ │ │ │ + 0x00d06420 69666465 66205655 4c4b414e 200a2020 ifdef VULKAN . │ │ │ │ + 0x00d06430 2020676c 5f506f73 6974696f 6e2e7920 gl_Position.y │ │ │ │ + 0x00d06440 3d202d67 6c5f506f 73697469 6f6e2e79 = -gl_Position.y │ │ │ │ + 0x00d06450 3b200a20 20202067 6c5f506f 73697469 ; . gl_Positi │ │ │ │ + 0x00d06460 6f6e2e7a 203d2028 676c5f50 6f736974 on.z = (gl_Posit │ │ │ │ + 0x00d06470 696f6e2e 7a202b20 676c5f50 6f736974 ion.z + gl_Posit │ │ │ │ + 0x00d06480 696f6e2e 7729202a 20302e35 3b200a20 ion.w) * 0.5; . │ │ │ │ + 0x00d06490 2023656e 64696620 0a20207d 200a0000 #endif . } ... │ │ │ │ + 0x00d064a0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d064b0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d064c0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d064d0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d064e0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d064f0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d06500 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d06510 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d06520 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d06530 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d06540 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d06550 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d06560 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d06570 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d06580 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d06590 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d065a0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d065b0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d065c0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d065d0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d065e0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d065f0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d06600 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d06610 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d06620 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d06630 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d06640 455f5654 46200a20 206f7574 204c4f57 E_VTF . out LOW │ │ │ │ + 0x00d06650 5f502076 65633420 765f636f 6c6f723b _P vec4 v_color; │ │ │ │ + 0x00d06660 200a2020 23656c73 65200a20 206f7574 . #else . out │ │ │ │ + 0x00d06670 20766563 3220765f 636f6c6f 72546578 vec2 v_colorTex │ │ │ │ + 0x00d06680 436f6f72 64733b20 0a202023 656e6469 Coords; . #endi │ │ │ │ + 0x00d06690 66200a20 206f7574 20766563 3320765f f . out vec3 v_ │ │ │ │ + 0x00d066a0 72616469 75733b20 0a202075 6e69666f radius; . unifo │ │ │ │ + 0x00d066b0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d066c0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d066d0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d066e0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d066f0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d06700 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d06710 76656332 20755f63 6f6e7472 61737447 vec2 u_contrastG │ │ │ │ + 0x00d06720 616d6d61 3b200a20 20756e69 666f726d amma; . uniform │ │ │ │ + 0x00d06730 20666c6f 61742075 5f6f7061 63697479 float u_opacity │ │ │ │ + 0x00d06740 3b200a20 20756e69 666f726d 20666c6f ; . uniform flo │ │ │ │ + 0x00d06750 61742075 5f7a5363 616c653b 200a2020 at u_zScale; . │ │ │ │ + 0x00d06760 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d06770 696e7465 72706f6c 6174696f 6e3b200a interpolation; . │ │ │ │ + 0x00d06780 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d06790 755f6973 4f75746c 696e6550 6173733b u_isOutlinePass; │ │ │ │ + 0x00d067a0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d067b0 455f5654 46200a20 20756e69 666f726d E_VTF . uniform │ │ │ │ + 0x00d067c0 2073616d 706c6572 32442075 5f636f6c sampler2D u_col │ │ │ │ + 0x00d067d0 6f725465 783b200a 20202365 6e646966 orTex; . #endif │ │ │ │ + 0x00d067e0 200a2020 636f6e73 7420666c 6f617420 . const float │ │ │ │ + 0x00d067f0 6b536861 7065436f 6f726453 63616c61 kShapeCoordScala │ │ │ │ + 0x00d06800 72203d20 31303030 2e303b20 0a202076 r = 1000.0; . v │ │ │ │ + 0x00d06810 65633420 6170706c 79506976 6f745472 ec4 applyPivotTr │ │ │ │ + 0x00d06820 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d06830 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d06840 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d06850 69766f74 5265616c 5a29200a 20207b20 ivotRealZ) . { │ │ │ │ + 0x00d06860 0a202020 20766563 34207472 616e7366 . vec4 transf │ │ │ │ + 0x00d06870 6f726d65 64506976 6f74203d 20706976 ormedPivot = piv │ │ │ │ + 0x00d06880 6f743b20 0a202020 20666c6f 61742077 ot; . float w │ │ │ │ + 0x00d06890 203d2074 72616e73 666f726d 65645069 = transformedPi │ │ │ │ + 0x00d068a0 766f742e 773b200a 20202020 7472616e vot.w; . tran │ │ │ │ + 0x00d068b0 73666f72 6d656450 69766f74 2e787977 sformedPivot.xyw │ │ │ │ + 0x00d068c0 203d2028 7069766f 74547261 6e73666f = (pivotTransfo │ │ │ │ + 0x00d068d0 726d202a 20766563 34287472 616e7366 rm * vec4(transf │ │ │ │ + 0x00d068e0 6f726d65 64506976 6f742e78 792c2070 ormedPivot.xy, p │ │ │ │ + 0x00d068f0 69766f74 5265616c 5a2c2077 29292e78 ivotRealZ, w)).x │ │ │ │ + 0x00d06900 79773b20 0a202020 20747261 6e73666f yw; . transfo │ │ │ │ + 0x00d06910 726d6564 5069766f 742e7a20 2a3d2074 rmedPivot.z *= t │ │ │ │ + 0x00d06920 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d06930 77202f20 773b200a 20202369 66646566 w / w; . #ifdef │ │ │ │ + 0x00d06940 2056554c 4b414e20 0a202020 20747261 VULKAN . tra │ │ │ │ + 0x00d06950 6e73666f 726d6564 5069766f 742e7920 nsformedPivot.y │ │ │ │ + 0x00d06960 3d202d74 72616e73 666f726d 65645069 = -transformedPi │ │ │ │ + 0x00d06970 766f742e 793b200a 20202020 7472616e vot.y; . tran │ │ │ │ + 0x00d06980 73666f72 6d656450 69766f74 2e7a203d sformedPivot.z = │ │ │ │ + 0x00d06990 20287472 616e7366 6f726d65 64506976 (transformedPiv │ │ │ │ + 0x00d069a0 6f742e7a 20202b20 7472616e 73666f72 ot.z + transfor │ │ │ │ + 0x00d069b0 6d656450 69766f74 2e772920 2f20322e medPivot.w) / 2. │ │ │ │ + 0x00d069c0 303b200a 20202365 6e646966 200a2020 0; . #endif . │ │ │ │ + 0x00d069d0 20207265 7475726e 20747261 6e73666f return transfo │ │ │ │ + 0x00d069e0 726d6564 5069766f 743b200a 20207d20 rmedPivot; . } │ │ │ │ + 0x00d069f0 0a202076 65633420 6170706c 7942696c . vec4 applyBil │ │ │ │ + 0x00d06a00 6c626f61 72645069 766f7454 72616e73 lboardPivotTrans │ │ │ │ + 0x00d06a10 666f726d 28766563 34207069 766f742c form(vec4 pivot, │ │ │ │ + 0x00d06a20 206d6174 34207069 766f7454 72616e73 mat4 pivotTrans │ │ │ │ + 0x00d06a30 666f726d 2c20666c 6f617420 7069766f form, float pivo │ │ │ │ + 0x00d06a40 74526561 6c5a2c20 76656332 206f6666 tRealZ, vec2 off │ │ │ │ + 0x00d06a50 73657429 200a2020 7b200a20 20202066 set) . { . f │ │ │ │ + 0x00d06a60 6c6f6174 206c6f67 69635a20 3d207069 loat logicZ = pi │ │ │ │ + 0x00d06a70 766f742e 7a202f20 7069766f 742e773b vot.z / pivot.w; │ │ │ │ + 0x00d06a80 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d06a90 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d06aa0 766f7454 72616e73 666f726d 202a2076 votTransform * v │ │ │ │ + 0x00d06ab0 65633428 7069766f 742e7879 2c207069 ec4(pivot.xy, pi │ │ │ │ + 0x00d06ac0 766f7452 65616c5a 2c207069 766f742e votRealZ, pivot. │ │ │ │ + 0x00d06ad0 77293b20 0a202020 20766563 34207363 w); . vec4 sc │ │ │ │ + 0x00d06ae0 616c6520 3d207069 766f7454 72616e73 ale = pivotTrans │ │ │ │ + 0x00d06af0 666f726d 202a2076 65633428 312e302c form * vec4(1.0, │ │ │ │ + 0x00d06b00 202d312e 302c2030 2e302c20 312e3029 -1.0, 0.0, 1.0) │ │ │ │ + 0x00d06b10 3b200a20 20202076 65633420 706f7369 ; . vec4 posi │ │ │ │ + 0x00d06b20 74696f6e 203d2076 65633428 7472616e tion = vec4(tran │ │ │ │ + 0x00d06b30 73666f72 6d656450 69766f74 2e787920 sformedPivot.xy │ │ │ │ + 0x00d06b40 2f207472 616e7366 6f726d65 64506976 / transformedPiv │ │ │ │ + 0x00d06b50 6f742e77 2c206c6f 6769635a 2c20312e ot.w, logicZ, 1. │ │ │ │ + 0x00d06b60 3029202b 20766563 34286f66 66736574 0) + vec4(offset │ │ │ │ + 0x00d06b70 202f2073 63616c65 2e77202a 20736361 / scale.w * sca │ │ │ │ + 0x00d06b80 6c652e78 2c20302e 302c2030 2e30293b le.x, 0.0, 0.0); │ │ │ │ + 0x00d06b90 200a2020 23696664 65662056 554c4b41 . #ifdef VULKA │ │ │ │ + 0x00d06ba0 4e200a20 20202070 6f736974 696f6e2e N . position. │ │ │ │ + 0x00d06bb0 79203d20 2d706f73 6974696f 6e2e793b y = -position.y; │ │ │ │ + 0x00d06bc0 200a2020 2020706f 73697469 6f6e2e7a . position.z │ │ │ │ + 0x00d06bd0 203d2028 706f7369 74696f6e 2e7a2020 = (position.z │ │ │ │ + 0x00d06be0 2b20706f 73697469 6f6e2e77 29202f20 + position.w) / │ │ │ │ + 0x00d06bf0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d06c00 20202020 72657475 726e2070 6f736974 return posit │ │ │ │ + 0x00d06c10 696f6e3b 200a2020 7d200a20 20766563 ion; . } . vec │ │ │ │ + 0x00d06c20 32206361 6c634c69 6e655472 616e7366 2 calcLineTransf │ │ │ │ + 0x00d06c30 6f726d65 64417869 73506f73 28766563 ormedAxisPos(vec │ │ │ │ + 0x00d06c40 32206f72 6967696e 616c4178 6973506f 2 originalAxisPo │ │ │ │ + 0x00d06c50 732c2076 65633220 73686966 74656450 s, vec2 shiftedP │ │ │ │ + 0x00d06c60 6f732c20 6d617434 206d6f64 656c5669 os, mat4 modelVi │ │ │ │ + 0x00d06c70 65772c20 666c6f61 74206861 6c665769 ew, float halfWi │ │ │ │ + 0x00d06c80 64746829 200a2020 7b200a20 20202076 dth) . { . v │ │ │ │ + 0x00d06c90 65633220 70203d20 28766563 34287368 ec2 p = (vec4(sh │ │ │ │ + 0x00d06ca0 69667465 64506f73 2c20302e 302c2031 iftedPos, 0.0, 1 │ │ │ │ + 0x00d06cb0 2e302920 2a206d6f 64656c56 69657729 .0) * modelView) │ │ │ │ + 0x00d06cc0 2e78793b 200a2020 20207665 63322064 .xy; . vec2 d │ │ │ │ + 0x00d06cd0 203d2070 202d206f 72696769 6e616c41 = p - originalA │ │ │ │ + 0x00d06ce0 78697350 6f733b20 0a202020 20696620 xisPos; . if │ │ │ │ + 0x00d06cf0 28646f74 28642c20 64292021 3d20302e (dot(d, d) != 0. │ │ │ │ + 0x00d06d00 3029200a 20202020 20207265 7475726e 0) . return │ │ │ │ + 0x00d06d10 206f7269 67696e61 6c417869 73506f73 originalAxisPos │ │ │ │ + 0x00d06d20 202b206e 6f726d61 6c697a65 28642920 + normalize(d) │ │ │ │ + 0x00d06d30 2a206861 6c665769 6474683b 200a2020 * halfWidth; . │ │ │ │ + 0x00d06d40 2020656c 7365200a 20202020 20207265 else . re │ │ │ │ + 0x00d06d50 7475726e 206f7269 67696e61 6c417869 turn originalAxi │ │ │ │ + 0x00d06d60 73506f73 3b200a20 207d200a 2020766f sPos; . } . vo │ │ │ │ + 0x00d06d70 6964206d 61696e28 29200a20 207b200a id main() . { . │ │ │ │ + 0x00d06d80 20202020 76656334 2070203d 20766563 vec4 p = vec │ │ │ │ + 0x00d06d90 3428615f 706f7369 74696f6e 2c203129 4(a_position, 1) │ │ │ │ + 0x00d06da0 202a2075 5f6d6f64 656c5669 65773b20 * u_modelView; │ │ │ │ + 0x00d06db0 0a202020 20766563 3420706f 73203d20 . vec4 pos = │ │ │ │ + 0x00d06dc0 76656334 28615f6e 6f726d61 6c2e7879 vec4(a_normal.xy │ │ │ │ + 0x00d06dd0 2c20302c 20302920 2b20703b 200a2020 , 0, 0) + p; . │ │ │ │ + 0x00d06de0 2020676c 5f506f73 6974696f 6e203d20 gl_Position = │ │ │ │ + 0x00d06df0 6170706c 79506976 6f745472 616e7366 applyPivotTransf │ │ │ │ + 0x00d06e00 6f726d28 706f7320 2a20755f 70726f6a orm(pos * u_proj │ │ │ │ + 0x00d06e10 65637469 6f6e2c20 755f7069 766f7454 ection, u_pivotT │ │ │ │ + 0x00d06e20 72616e73 666f726d 2c20302e 30293b20 ransform, 0.0); │ │ │ │ + 0x00d06e30 0a202023 69666465 6620454e 41424c45 . #ifdef ENABLE │ │ │ │ + 0x00d06e40 5f565446 200a2020 2020765f 636f6c6f _VTF . v_colo │ │ │ │ + 0x00d06e50 72203d20 74657874 75726528 755f636f r = texture(u_co │ │ │ │ + 0x00d06e60 6c6f7254 65782c20 615f636f 6c6f7254 lorTex, a_colorT │ │ │ │ + 0x00d06e70 6578436f 6f726473 293b200a 20202365 exCoords); . #e │ │ │ │ + 0x00d06e80 6c736520 0a202020 20765f63 6f6c6f72 lse . v_color │ │ │ │ + 0x00d06e90 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ + 0x00d06ea0 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00d06eb0 2023656e 64696620 0a202020 20765f72 #endif . v_r │ │ │ │ + 0x00d06ec0 61646975 73203d20 615f6e6f 726d616c adius = a_normal │ │ │ │ + 0x00d06ed0 3b200a20 207d200a 00000000 00000000 ; . } ......... │ │ │ │ + 0x00d06ee0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d06ef0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d06f00 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d06f10 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d06f20 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d06f30 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d06f40 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d06f50 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d06f60 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d06f70 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d06f80 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d06f90 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d06fa0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d06fb0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d06fc0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d06fd0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d06fe0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d06ff0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d07000 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d07010 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d07020 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d07030 63342061 5f706f73 6974696f 6e3b200a c4 a_position; . │ │ │ │ + 0x00d07040 2020696e 20766563 3220615f 6e6f726d in vec2 a_norm │ │ │ │ + 0x00d07050 616c3b20 0a202069 6e207665 63322061 al; . in vec2 a │ │ │ │ + 0x00d07060 5f636f6c 6f725465 78436f6f 7264733b _colorTexCoords; │ │ │ │ + 0x00d07070 200a2020 6f757420 76656332 20765f63 . out vec2 v_c │ │ │ │ + 0x00d07080 6f6c6f72 54657843 6f6f7264 733b200a olorTexCoords; . │ │ │ │ + 0x00d07090 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d070a0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d070b0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d070c0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d070d0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d070e0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d070f0 6e69666f 726d2076 65633420 755f726f niform vec4 u_ro │ │ │ │ + 0x00d07100 75746550 6172616d 733b200a 2020756e uteParams; . un │ │ │ │ + 0x00d07110 69666f72 6d207665 63342075 5f636f6c iform vec4 u_col │ │ │ │ + 0x00d07120 6f723b20 0a202075 6e69666f 726d2076 or; . uniform v │ │ │ │ + 0x00d07130 65633420 755f6d61 736b436f 6c6f723b ec4 u_maskColor; │ │ │ │ + 0x00d07140 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d07150 20755f6f 75746c69 6e65436f 6c6f723b u_outlineColor; │ │ │ │ + 0x00d07160 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d07170 20755f66 616b6543 6f6c6f72 3b200a20 u_fakeColor; . │ │ │ │ + 0x00d07180 20756e69 666f726d 20766563 3420755f uniform vec4 u_ │ │ │ │ + 0x00d07190 66616b65 4f75746c 696e6543 6f6c6f72 fakeOutlineColor │ │ │ │ + 0x00d071a0 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d071b0 3220755f 66616b65 426f7264 6572733b 2 u_fakeBorders; │ │ │ │ + 0x00d071c0 200a2020 756e6966 6f726d20 76656332 . uniform vec2 │ │ │ │ + 0x00d071d0 20755f70 61747465 726e3b20 0a202075 u_pattern; . u │ │ │ │ + 0x00d071e0 6e69666f 726d2076 65633220 755f616e niform vec2 u_an │ │ │ │ + 0x00d071f0 676c6543 6f735369 6e3b200a 2020756e gleCosSin; . un │ │ │ │ + 0x00d07200 69666f72 6d20666c 6f617420 755f6172 iform float u_ar │ │ │ │ + 0x00d07210 726f7748 616c6657 69647468 3b200a20 rowHalfWidth; . │ │ │ │ + 0x00d07220 20756e69 666f726d 20666c6f 61742075 uniform float u │ │ │ │ + 0x00d07230 5f6f7061 63697479 3b200a20 20636f6e _opacity; . con │ │ │ │ + 0x00d07240 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d07250 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d07260 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ + 0x00d07270 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d07280 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d07290 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d072a0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d072b0 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ + 0x00d072c0 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d072d0 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ + 0x00d072e0 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ + 0x00d072f0 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ + 0x00d07300 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d07310 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ + 0x00d07320 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d07330 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d07340 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d07350 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ + 0x00d07360 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d07370 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ + 0x00d07380 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ + 0x00d07390 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d073a0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d073b0 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ + 0x00d073c0 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ + 0x00d073d0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d073e0 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ + 0x00d073f0 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ + 0x00d07400 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d07410 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ + 0x00d07420 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d07430 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ + 0x00d07440 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ + 0x00d07450 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ + 0x00d07460 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d07470 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d07480 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d07490 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ + 0x00d074a0 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ + 0x00d074b0 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ + 0x00d074c0 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ + 0x00d074d0 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ + 0x00d074e0 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d074f0 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ + 0x00d07500 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ + 0x00d07510 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d07520 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ + 0x00d07530 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ + 0x00d07540 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d07550 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ + 0x00d07560 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00d07570 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ + 0x00d07580 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d07590 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ + 0x00d075a0 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ + 0x00d075b0 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ + 0x00d075c0 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ + 0x00d075d0 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ + 0x00d075e0 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ + 0x00d075f0 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00d07600 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ + 0x00d07610 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ + 0x00d07620 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ + 0x00d07630 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ + 0x00d07640 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ + 0x00d07650 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d07660 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ + 0x00d07670 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ + 0x00d07680 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00d07690 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ + 0x00d076a0 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ + 0x00d076b0 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ + 0x00d076c0 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ + 0x00d076d0 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ + 0x00d076e0 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ + 0x00d076f0 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ + 0x00d07700 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ + 0x00d07710 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ + 0x00d07720 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ + 0x00d07730 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d07740 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ + 0x00d07750 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ + 0x00d07760 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d07770 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ + 0x00d07780 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ + 0x00d07790 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ + 0x00d077a0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d077b0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d077c0 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00d077d0 2829200a 20207b20 0a202020 20766563 () . { . vec │ │ │ │ + 0x00d077e0 32207472 616e7366 6f726d65 64417869 2 transformedAxi │ │ │ │ + 0x00d077f0 73506f73 203d2028 76656334 28615f70 sPos = (vec4(a_p │ │ │ │ + 0x00d07800 6f736974 696f6e2e 78792c20 302e302c osition.xy, 0.0, │ │ │ │ + 0x00d07810 20312e30 29202a20 755f6d6f 64656c56 1.0) * u_modelV │ │ │ │ + 0x00d07820 69657729 2e78793b 200a2020 20206966 iew).xy; . if │ │ │ │ + 0x00d07830 2028646f 7428615f 6e6f726d 616c2c20 (dot(a_normal, │ │ │ │ + 0x00d07840 615f6e6f 726d616c 2920213d 20302e30 a_normal) != 0.0 │ │ │ │ + 0x00d07850 29200a20 2020207b 200a2020 20202020 ) . { . │ │ │ │ + 0x00d07860 76656332 206e6f72 6d203d20 615f6e6f vec2 norm = a_no │ │ │ │ + 0x00d07870 726d616c 202a2075 5f617272 6f774861 rmal * u_arrowHa │ │ │ │ + 0x00d07880 6c665769 6474683b 200a2020 20202020 lfWidth; . │ │ │ │ + 0x00d07890 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ + 0x00d078a0 6f73203d 2063616c 634c696e 65547261 os = calcLineTra │ │ │ │ + 0x00d078b0 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ + 0x00d078c0 7472616e 73666f72 6d656441 78697350 transformedAxisP │ │ │ │ + 0x00d078d0 6f732c20 615f706f 73697469 6f6e2e78 os, a_position.x │ │ │ │ + 0x00d078e0 79202b20 6e6f726d 2c200a20 20202020 y + norm, . │ │ │ │ + 0x00d078f0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d07900 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d07910 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d07920 20755f6d 6f64656c 56696577 2c206c65 u_modelView, le │ │ │ │ + 0x00d07930 6e677468 286e6f72 6d29293b 200a2020 ngth(norm)); . │ │ │ │ + 0x00d07940 20207d20 0a202020 20765f63 6f6c6f72 } . v_color │ │ │ │ + 0x00d07950 54657843 6f6f7264 73203d20 615f636f TexCoords = a_co │ │ │ │ + 0x00d07960 6c6f7254 6578436f 6f726473 3b200a20 lorTexCoords; . │ │ │ │ + 0x00d07970 20202076 65633420 706f7320 3d207665 vec4 pos = ve │ │ │ │ + 0x00d07980 63342874 72616e73 666f726d 65644178 c4(transformedAx │ │ │ │ + 0x00d07990 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ + 0x00d079a0 6e2e7a2c 20312e30 29202a20 755f7072 n.z, 1.0) * u_pr │ │ │ │ + 0x00d079b0 6f6a6563 74696f6e 3b200a20 20202067 ojection; . g │ │ │ │ + 0x00d079c0 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00d079d0 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d079e0 28706f73 2c20755f 7069766f 74547261 (pos, u_pivotTra │ │ │ │ + 0x00d079f0 6e73666f 726d2c20 302e3029 3b200a20 nsform, 0.0); . │ │ │ │ + 0x00d07a00 207d200a 00000000 00000000 00000000 } ............. │ │ │ │ + 0x00d07a10 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d07a20 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d07a30 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d07a40 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d07a50 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d07a60 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d07a70 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d07a80 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d07a90 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d07aa0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d07ab0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d07ac0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d07ad0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d07ae0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d07af0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d07b00 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d07b10 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d07b20 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d07b30 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d07b40 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d07b50 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d07b60 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d07b70 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d07b80 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d07b90 5f636f6c 6f725465 78436f6f 72643b20 _colorTexCoord; │ │ │ │ + 0x00d07ba0 0a20206f 75742076 65633220 765f636f . out vec2 v_co │ │ │ │ + 0x00d07bb0 6c6f7254 6578436f 6f72643b 200a2020 lorTexCoord; . │ │ │ │ + 0x00d07bc0 6f757420 76656332 20765f6d 61736b54 out vec2 v_maskT │ │ │ │ + 0x00d07bd0 6578436f 6f72643b 200a2020 6f757420 exCoord; . out │ │ │ │ + 0x00d07be0 666c6f61 7420765f 68616c66 4c656e67 float v_halfLeng │ │ │ │ + 0x00d07bf0 74683b20 0a202075 6e69666f 726d206d th; . uniform m │ │ │ │ + 0x00d07c00 61743420 755f6d6f 64656c56 6965773b at4 u_modelView; │ │ │ │ + 0x00d07c10 200a2020 756e6966 6f726d20 6d617434 . uniform mat4 │ │ │ │ + 0x00d07c20 20755f70 726f6a65 6374696f 6e3b200a u_projection; . │ │ │ │ + 0x00d07c30 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d07c40 5f706976 6f745472 616e7366 6f726d3b _pivotTransform; │ │ │ │ + 0x00d07c50 200a2020 756e6966 6f726d20 76656334 . uniform vec4 │ │ │ │ + 0x00d07c60 20755f74 72616666 69635061 72616d73 u_trafficParams │ │ │ │ + 0x00d07c70 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d07c80 3420755f 6f75746c 696e6543 6f6c6f72 4 u_outlineColor │ │ │ │ + 0x00d07c90 3b200a20 20756e69 666f726d 20766563 ; . uniform vec │ │ │ │ + 0x00d07ca0 3420755f 6c696768 74417272 6f77436f 4 u_lightArrowCo │ │ │ │ + 0x00d07cb0 6c6f723b 200a2020 756e6966 6f726d20 lor; . uniform │ │ │ │ + 0x00d07cc0 76656334 20755f64 61726b41 72726f77 vec4 u_darkArrow │ │ │ │ + 0x00d07cd0 436f6c6f 723b200a 2020756e 69666f72 Color; . unifor │ │ │ │ + 0x00d07ce0 6d20666c 6f617420 755f6f75 746c696e m float u_outlin │ │ │ │ + 0x00d07cf0 653b200a 2020756e 69666f72 6d20666c e; . uniform fl │ │ │ │ + 0x00d07d00 6f617420 755f6f70 61636974 793b200a oat u_opacity; . │ │ │ │ + 0x00d07d10 2020636f 6e737420 666c6f61 74206b41 const float kA │ │ │ │ + 0x00d07d20 72726f77 5653697a 65203d20 302e3235 rrowVSize = 0.25 │ │ │ │ + 0x00d07d30 3b200a20 20636f6e 73742066 6c6f6174 ; . const float │ │ │ │ + 0x00d07d40 206b5368 61706543 6f6f7264 5363616c kShapeCoordScal │ │ │ │ + 0x00d07d50 6172203d 20313030 302e303b 200a2020 ar = 1000.0; . │ │ │ │ + 0x00d07d60 76656334 20617070 6c795069 766f7454 vec4 applyPivotT │ │ │ │ + 0x00d07d70 72616e73 666f726d 28766563 34207069 ransform(vec4 pi │ │ │ │ + 0x00d07d80 766f742c 206d6174 34207069 766f7454 vot, mat4 pivotT │ │ │ │ + 0x00d07d90 72616e73 666f726d 2c20666c 6f617420 ransform, float │ │ │ │ + 0x00d07da0 7069766f 74526561 6c5a2920 0a20207b pivotRealZ) . { │ │ │ │ + 0x00d07db0 200a2020 20207665 63342074 72616e73 . vec4 trans │ │ │ │ + 0x00d07dc0 666f726d 65645069 766f7420 3d207069 formedPivot = pi │ │ │ │ + 0x00d07dd0 766f743b 200a2020 2020666c 6f617420 vot; . float │ │ │ │ + 0x00d07de0 77203d20 7472616e 73666f72 6d656450 w = transformedP │ │ │ │ + 0x00d07df0 69766f74 2e773b20 0a202020 20747261 ivot.w; . tra │ │ │ │ + 0x00d07e00 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d07e10 77203d20 28706976 6f745472 616e7366 w = (pivotTransf │ │ │ │ + 0x00d07e20 6f726d20 2a207665 63342874 72616e73 orm * vec4(trans │ │ │ │ + 0x00d07e30 666f726d 65645069 766f742e 78792c20 formedPivot.xy, │ │ │ │ + 0x00d07e40 7069766f 74526561 6c5a2c20 7729292e pivotRealZ, w)). │ │ │ │ + 0x00d07e50 7879773b 200a2020 20207472 616e7366 xyw; . transf │ │ │ │ + 0x00d07e60 6f726d65 64506976 6f742e7a 202a3d20 ormedPivot.z *= │ │ │ │ + 0x00d07e70 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d07e80 2e77202f 20773b20 0a202023 69666465 .w / w; . #ifde │ │ │ │ + 0x00d07e90 66205655 4c4b414e 200a2020 20207472 f VULKAN . tr │ │ │ │ + 0x00d07ea0 616e7366 6f726d65 64506976 6f742e79 ansformedPivot.y │ │ │ │ + 0x00d07eb0 203d202d 7472616e 73666f72 6d656450 = -transformedP │ │ │ │ + 0x00d07ec0 69766f74 2e793b20 0a202020 20747261 ivot.y; . tra │ │ │ │ + 0x00d07ed0 6e73666f 726d6564 5069766f 742e7a20 nsformedPivot.z │ │ │ │ + 0x00d07ee0 3d202874 72616e73 666f726d 65645069 = (transformedPi │ │ │ │ + 0x00d07ef0 766f742e 7a20202b 20747261 6e73666f vot.z + transfo │ │ │ │ + 0x00d07f00 726d6564 5069766f 742e7729 202f2032 rmedPivot.w) / 2 │ │ │ │ + 0x00d07f10 2e303b20 0a202023 656e6469 66200a20 .0; . #endif . │ │ │ │ + 0x00d07f20 20202072 65747572 6e207472 616e7366 return transf │ │ │ │ + 0x00d07f30 6f726d65 64506976 6f743b20 0a20207d ormedPivot; . } │ │ │ │ + 0x00d07f40 200a2020 76656334 20617070 6c794269 . vec4 applyBi │ │ │ │ + 0x00d07f50 6c6c626f 61726450 69766f74 5472616e llboardPivotTran │ │ │ │ + 0x00d07f60 73666f72 6d287665 63342070 69766f74 sform(vec4 pivot │ │ │ │ + 0x00d07f70 2c206d61 74342070 69766f74 5472616e , mat4 pivotTran │ │ │ │ + 0x00d07f80 73666f72 6d2c2066 6c6f6174 20706976 sform, float piv │ │ │ │ + 0x00d07f90 6f745265 616c5a2c 20766563 32206f66 otRealZ, vec2 of │ │ │ │ + 0x00d07fa0 66736574 29200a20 207b200a 20202020 fset) . { . │ │ │ │ + 0x00d07fb0 666c6f61 74206c6f 6769635a 203d2070 float logicZ = p │ │ │ │ + 0x00d07fc0 69766f74 2e7a202f 20706976 6f742e77 ivot.z / pivot.w │ │ │ │ + 0x00d07fd0 3b200a20 20202076 65633420 7472616e ; . vec4 tran │ │ │ │ + 0x00d07fe0 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d07ff0 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d08000 76656334 28706976 6f742e78 792c2070 vec4(pivot.xy, p │ │ │ │ + 0x00d08010 69766f74 5265616c 5a2c2070 69766f74 ivotRealZ, pivot │ │ │ │ + 0x00d08020 2e77293b 200a2020 20207665 63342073 .w); . vec4 s │ │ │ │ + 0x00d08030 63616c65 203d2070 69766f74 5472616e cale = pivotTran │ │ │ │ + 0x00d08040 73666f72 6d202a20 76656334 28312e30 sform * vec4(1.0 │ │ │ │ + 0x00d08050 2c202d31 2e302c20 302e302c 20312e30 , -1.0, 0.0, 1.0 │ │ │ │ + 0x00d08060 293b200a 20202020 76656334 20706f73 ); . vec4 pos │ │ │ │ + 0x00d08070 6974696f 6e203d20 76656334 28747261 ition = vec4(tra │ │ │ │ + 0x00d08080 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d08090 202f2074 72616e73 666f726d 65645069 / transformedPi │ │ │ │ + 0x00d080a0 766f742e 772c206c 6f676963 5a2c2031 vot.w, logicZ, 1 │ │ │ │ + 0x00d080b0 2e302920 2b207665 6334286f 66667365 .0) + vec4(offse │ │ │ │ + 0x00d080c0 74202f20 7363616c 652e7720 2a207363 t / scale.w * sc │ │ │ │ + 0x00d080d0 616c652e 782c2030 2e302c20 302e3029 ale.x, 0.0, 0.0) │ │ │ │ + 0x00d080e0 3b200a20 20236966 64656620 56554c4b ; . #ifdef VULK │ │ │ │ + 0x00d080f0 414e200a 20202020 706f7369 74696f6e AN . position │ │ │ │ + 0x00d08100 2e79203d 202d706f 73697469 6f6e2e79 .y = -position.y │ │ │ │ + 0x00d08110 3b200a20 20202070 6f736974 696f6e2e ; . position. │ │ │ │ + 0x00d08120 7a203d20 28706f73 6974696f 6e2e7a20 z = (position.z │ │ │ │ + 0x00d08130 202b2070 6f736974 696f6e2e 7729202f + position.w) / │ │ │ │ + 0x00d08140 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00d08150 0a202020 20726574 75726e20 706f7369 . return posi │ │ │ │ + 0x00d08160 74696f6e 3b200a20 207d200a 20207665 tion; . } . ve │ │ │ │ + 0x00d08170 63322063 616c634c 696e6554 72616e73 c2 calcLineTrans │ │ │ │ + 0x00d08180 666f726d 65644178 6973506f 73287665 formedAxisPos(ve │ │ │ │ + 0x00d08190 6332206f 72696769 6e616c41 78697350 c2 originalAxisP │ │ │ │ + 0x00d081a0 6f732c20 76656332 20736869 66746564 os, vec2 shifted │ │ │ │ + 0x00d081b0 506f732c 206d6174 34206d6f 64656c56 Pos, mat4 modelV │ │ │ │ + 0x00d081c0 6965772c 20666c6f 61742068 616c6657 iew, float halfW │ │ │ │ + 0x00d081d0 69647468 29200a20 207b200a 20202020 idth) . { . │ │ │ │ + 0x00d081e0 76656332 2070203d 20287665 63342873 vec2 p = (vec4(s │ │ │ │ + 0x00d081f0 68696674 6564506f 732c2030 2e302c20 hiftedPos, 0.0, │ │ │ │ + 0x00d08200 312e3029 202a206d 6f64656c 56696577 1.0) * modelView │ │ │ │ + 0x00d08210 292e7879 3b200a20 20202076 65633220 ).xy; . vec2 │ │ │ │ + 0x00d08220 64203d20 70202d20 6f726967 696e616c d = p - original │ │ │ │ + 0x00d08230 41786973 506f733b 200a2020 20206966 AxisPos; . if │ │ │ │ + 0x00d08240 2028646f 7428642c 20642920 213d2030 (dot(d, d) != 0 │ │ │ │ + 0x00d08250 2e302920 0a202020 20202072 65747572 .0) . retur │ │ │ │ + 0x00d08260 6e206f72 6967696e 616c4178 6973506f n originalAxisPo │ │ │ │ + 0x00d08270 73202b20 6e6f726d 616c697a 65286429 s + normalize(d) │ │ │ │ + 0x00d08280 202a2068 616c6657 69647468 3b200a20 * halfWidth; . │ │ │ │ + 0x00d08290 20202065 6c736520 0a202020 20202072 else . r │ │ │ │ + 0x00d082a0 65747572 6e206f72 6967696e 616c4178 eturn originalAx │ │ │ │ + 0x00d082b0 6973506f 733b200a 20207d20 0a202076 isPos; . } . v │ │ │ │ + 0x00d082c0 6f696420 6d61696e 2829200a 20207b20 oid main() . { │ │ │ │ + 0x00d082d0 0a202020 20766563 32206e6f 726d616c . vec2 normal │ │ │ │ + 0x00d082e0 203d2061 5f6e6f72 6d616c2e 78793b20 = a_normal.xy; │ │ │ │ + 0x00d082f0 0a202020 20766563 32207472 616e7366 . vec2 transf │ │ │ │ + 0x00d08300 6f726d65 64417869 73506f73 203d2028 ormedAxisPos = ( │ │ │ │ + 0x00d08310 76656334 28615f70 6f736974 696f6e2e vec4(a_position. │ │ │ │ + 0x00d08320 78792c20 302e302c 20312e30 29202a20 xy, 0.0, 1.0) * │ │ │ │ + 0x00d08330 755f6d6f 64656c56 69657729 2e78793b u_modelView).xy; │ │ │ │ + 0x00d08340 200a2020 20206966 2028646f 74286e6f . if (dot(no │ │ │ │ + 0x00d08350 726d616c 2c206e6f 726d616c 2920213d rmal, normal) != │ │ │ │ + 0x00d08360 20302e30 29200a20 2020207b 200a2020 0.0) . { . │ │ │ │ + 0x00d08370 20202020 76656332 206e6f72 6d203d20 vec2 norm = │ │ │ │ + 0x00d08380 6e6f726d 616c202a 20755f74 72616666 normal * u_traff │ │ │ │ + 0x00d08390 69635061 72616d73 2e783b20 0a202020 icParams.x; . │ │ │ │ + 0x00d083a0 20202069 66202861 5f6e6f72 6d616c2e if (a_normal. │ │ │ │ + 0x00d083b0 7a203c20 302e3029 200a2020 20202020 z < 0.0) . │ │ │ │ + 0x00d083c0 20206e6f 726d203d 206e6f72 6d616c20 norm = normal │ │ │ │ + 0x00d083d0 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ + 0x00d083e0 732e793b 200a2020 20202020 7472616e s.y; . tran │ │ │ │ + 0x00d083f0 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00d08400 2063616c 634c696e 65547261 6e73666f calcLineTransfo │ │ │ │ + 0x00d08410 726d6564 41786973 506f7328 7472616e rmedAxisPos(tran │ │ │ │ + 0x00d08420 73666f72 6d656441 78697350 6f732c20 sformedAxisPos, │ │ │ │ + 0x00d08430 615f706f 73697469 6f6e2e78 79202b20 a_position.xy + │ │ │ │ + 0x00d08440 6e6f726d 2c200a20 20202020 20202020 norm, . │ │ │ │ + 0x00d08450 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d08460 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d08470 20202020 20202020 20202020 20755f6d u_m │ │ │ │ + 0x00d08480 6f64656c 56696577 2c206c65 6e677468 odelView, length │ │ │ │ + 0x00d08490 286e6f72 6d29293b 200a2020 20207d20 (norm)); . } │ │ │ │ + 0x00d084a0 0a202020 20666c6f 61742075 4f666673 . float uOffs │ │ │ │ + 0x00d084b0 6574203d 206c656e 67746828 76656334 et = length(vec4 │ │ │ │ + 0x00d084c0 286b5368 61706543 6f6f7264 5363616c (kShapeCoordScal │ │ │ │ + 0x00d084d0 61722c20 302c2030 2c203029 202a2075 ar, 0, 0, 0) * u │ │ │ │ + 0x00d084e0 5f6d6f64 656c5669 65772920 2a20615f _modelView) * a_ │ │ │ │ + 0x00d084f0 6e6f726d 616c2e77 3b200a20 20202076 normal.w; . v │ │ │ │ + 0x00d08500 5f636f6c 6f725465 78436f6f 7264203d _colorTexCoord = │ │ │ │ + 0x00d08510 20615f63 6f6c6f72 54657843 6f6f7264 a_colorTexCoord │ │ │ │ + 0x00d08520 2e78793b 200a2020 2020666c 6f617420 .xy; . float │ │ │ │ + 0x00d08530 76203d20 6d697828 615f636f 6c6f7254 v = mix(a_colorT │ │ │ │ + 0x00d08540 6578436f 6f72642e 7a2c2061 5f636f6c exCoord.z, a_col │ │ │ │ + 0x00d08550 6f725465 78436f6f 72642e7a 202b206b orTexCoord.z + k │ │ │ │ + 0x00d08560 4172726f 77565369 7a652c20 302e3520 ArrowVSize, 0.5 │ │ │ │ + 0x00d08570 2a20615f 6e6f726d 616c2e7a 202b2030 * a_normal.z + 0 │ │ │ │ + 0x00d08580 2e35293b 200a2020 2020765f 6d61736b .5); . v_mask │ │ │ │ + 0x00d08590 54657843 6f6f7264 203d2076 65633228 TexCoord = vec2( │ │ │ │ + 0x00d085a0 754f6666 73657420 2a20755f 74726166 uOffset * u_traf │ │ │ │ + 0x00d085b0 66696350 6172616d 732e7a2c 20762920 ficParams.z, v) │ │ │ │ + 0x00d085c0 2a20755f 74726166 66696350 6172616d * u_trafficParam │ │ │ │ + 0x00d085d0 732e773b 200a2020 2020765f 6d61736b s.w; . v_mask │ │ │ │ + 0x00d085e0 54657843 6f6f7264 2e78202a 3d207374 TexCoord.x *= st │ │ │ │ + 0x00d085f0 65702861 5f636f6c 6f725465 78436f6f ep(a_colorTexCoo │ │ │ │ + 0x00d08600 72642e77 2c20765f 6d61736b 54657843 rd.w, v_maskTexC │ │ │ │ + 0x00d08610 6f6f7264 2e78293b 200a2020 2020765f oord.x); . v_ │ │ │ │ + 0x00d08620 68616c66 4c656e67 7468203d 20615f6e halfLength = a_n │ │ │ │ + 0x00d08630 6f726d61 6c2e7a3b 200a2020 20207665 ormal.z; . ve │ │ │ │ + 0x00d08640 63342070 6f73203d 20766563 34287472 c4 pos = vec4(tr │ │ │ │ + 0x00d08650 616e7366 6f726d65 64417869 73506f73 ansformedAxisPos │ │ │ │ + 0x00d08660 2c20615f 706f7369 74696f6e 2e7a2c20 , a_position.z, │ │ │ │ + 0x00d08670 312e3029 202a2075 5f70726f 6a656374 1.0) * u_project │ │ │ │ + 0x00d08680 696f6e3b 200a2020 2020676c 5f506f73 ion; . gl_Pos │ │ │ │ + 0x00d08690 6974696f 6e203d20 6170706c 79506976 ition = applyPiv │ │ │ │ + 0x00d086a0 6f745472 616e7366 6f726d28 706f732c otTransform(pos, │ │ │ │ + 0x00d086b0 20755f70 69766f74 5472616e 73666f72 u_pivotTransfor │ │ │ │ + 0x00d086c0 6d2c2030 2e30293b 200a2020 7d200a00 m, 0.0); . } .. │ │ │ │ + 0x00d086d0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d086e0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d086f0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d08700 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d08710 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d08720 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d08730 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d08740 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d08750 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d08760 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d08770 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d08780 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d08790 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d087a0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d087b0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d087c0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d087d0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d087e0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d087f0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d08800 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d08810 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d08820 63332061 5f706f73 3b200a20 20696e20 c3 a_pos; . in │ │ │ │ + 0x00d08830 76656333 20615f6e 6f726d61 6c3b200a vec3 a_normal; . │ │ │ │ + 0x00d08840 2020696e 20766563 3220615f 74657843 in vec2 a_texC │ │ │ │ + 0x00d08850 6f6f7264 733b200a 20206f75 74207665 oords; . out ve │ │ │ │ + 0x00d08860 63332076 5f6e6f72 6d616c3b 200a2020 c3 v_normal; . │ │ │ │ + 0x00d08870 6f757420 76656332 20765f74 6578436f out vec2 v_texCo │ │ │ │ + 0x00d08880 6f726473 3b200a20 20756e69 666f726d ords; . uniform │ │ │ │ + 0x00d08890 206d6174 3420755f 7472616e 73666f72 mat4 u_transfor │ │ │ │ + 0x00d088a0 6d3b200a 2020756e 69666f72 6d206d61 m; . uniform ma │ │ │ │ + 0x00d088b0 74342075 5f6e6f72 6d616c54 72616e73 t4 u_normalTrans │ │ │ │ + 0x00d088c0 666f726d 3b200a20 20756e69 666f726d form; . uniform │ │ │ │ + 0x00d088d0 20766563 3420755f 636f6c6f 723b200a vec4 u_color; . │ │ │ │ + 0x00d088e0 2020756e 69666f72 6d207665 63322075 uniform vec2 u │ │ │ │ + 0x00d088f0 5f746578 436f6f72 64466c69 7070696e _texCoordFlippin │ │ │ │ + 0x00d08900 673b200a 2020636f 6e737420 666c6f61 g; . const floa │ │ │ │ + 0x00d08910 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d08920 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d08930 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00d08940 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d08950 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d08960 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d08970 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00d08980 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00d08990 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d089a0 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00d089b0 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00d089c0 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00d089d0 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d089e0 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00d089f0 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00d08a00 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00d08a10 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00d08a20 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00d08a30 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00d08a40 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d08a50 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00d08a60 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00d08a70 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d08a80 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00d08a90 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00d08aa0 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d08ab0 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00d08ac0 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00d08ad0 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00d08ae0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d08af0 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00d08b00 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00d08b10 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00d08b20 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d08b30 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d08b40 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d08b50 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d08b60 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00d08b70 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00d08b80 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00d08b90 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00d08ba0 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00d08bb0 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d08bc0 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d08bd0 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00d08be0 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00d08bf0 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00d08c00 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00d08c10 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00d08c20 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00d08c30 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00d08c40 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00d08c50 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d08c60 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00d08c70 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00d08c80 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00d08c90 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00d08ca0 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00d08cb0 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00d08cc0 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00d08cd0 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00d08ce0 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00d08cf0 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00d08d00 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00d08d10 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00d08d20 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00d08d30 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00d08d40 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00d08d50 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00d08d60 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00d08d70 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00d08d80 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00d08d90 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00d08da0 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00d08db0 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00d08dc0 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00d08dd0 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00d08de0 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00d08df0 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00d08e00 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00d08e10 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00d08e20 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00d08e30 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d08e40 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00d08e50 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00d08e60 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00d08e70 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d08e80 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00d08e90 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d08ea0 200a2020 20207665 63342070 6f736974 . vec4 posit │ │ │ │ + 0x00d08eb0 696f6e20 3d20755f 7472616e 73666f72 ion = u_transfor │ │ │ │ + 0x00d08ec0 6d202a20 76656334 28615f70 6f732c20 m * vec4(a_pos, │ │ │ │ + 0x00d08ed0 312e3029 3b200a20 20202076 5f6e6f72 1.0); . v_nor │ │ │ │ + 0x00d08ee0 6d616c20 3d206e6f 726d616c 697a6528 mal = normalize( │ │ │ │ + 0x00d08ef0 28755f6e 6f726d61 6c547261 6e73666f (u_normalTransfo │ │ │ │ + 0x00d08f00 726d202a 20766563 3428615f 6e6f726d rm * vec4(a_norm │ │ │ │ + 0x00d08f10 616c2c20 302e3029 292e7879 7a293b20 al, 0.0)).xyz); │ │ │ │ + 0x00d08f20 0a202020 20765f74 6578436f 6f726473 . v_texCoords │ │ │ │ + 0x00d08f30 203d206d 69782861 5f746578 436f6f72 = mix(a_texCoor │ │ │ │ + 0x00d08f40 64732c20 312e3020 2d20615f 74657843 ds, 1.0 - a_texC │ │ │ │ + 0x00d08f50 6f6f7264 732c2075 5f746578 436f6f72 oords, u_texCoor │ │ │ │ + 0x00d08f60 64466c69 7070696e 67293b20 0a202020 dFlipping); . │ │ │ │ + 0x00d08f70 20676c5f 506f7369 74696f6e 203d2070 gl_Position = p │ │ │ │ + 0x00d08f80 6f736974 696f6e3b 200a2020 23696664 osition; . #ifd │ │ │ │ + 0x00d08f90 65662056 554c4b41 4e200a20 20202067 ef VULKAN . g │ │ │ │ + 0x00d08fa0 6c5f506f 73697469 6f6e2e79 203d202d l_Position.y = - │ │ │ │ + 0x00d08fb0 676c5f50 6f736974 696f6e2e 793b200a gl_Position.y; . │ │ │ │ + 0x00d08fc0 20202020 676c5f50 6f736974 696f6e2e gl_Position. │ │ │ │ + 0x00d08fd0 7a203d20 28676c5f 506f7369 74696f6e z = (gl_Position │ │ │ │ + 0x00d08fe0 2e7a202b 20676c5f 506f7369 74696f6e .z + gl_Position │ │ │ │ + 0x00d08ff0 2e772920 2a20302e 353b200a 20202365 .w) * 0.5; . #e │ │ │ │ + 0x00d09000 6e646966 200a2020 7d200a00 00000000 ndif . } ...... │ │ │ │ + 0x00d09010 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d09020 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d09030 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d09040 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d09050 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d09060 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d09070 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d09080 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d09090 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d090a0 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d090b0 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d090c0 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d090d0 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d090e0 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d090f0 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d09100 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d09110 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d09120 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d09130 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d09140 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d09150 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d09160 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d09170 2020696e 20766563 3220615f 636f6c6f in vec2 a_colo │ │ │ │ + 0x00d09180 72546578 436f6f72 643b200a 20206f75 rTexCoord; . ou │ │ │ │ + 0x00d09190 74207665 63322076 5f636f6c 6f725465 t vec2 v_colorTe │ │ │ │ + 0x00d091a0 78436f6f 72643b20 0a202075 6e69666f xCoord; . unifo │ │ │ │ + 0x00d091b0 726d206d 61743420 755f6d6f 64656c56 rm mat4 u_modelV │ │ │ │ + 0x00d091c0 6965773b 200a2020 756e6966 6f726d20 iew; . uniform │ │ │ │ + 0x00d091d0 6d617434 20755f70 726f6a65 6374696f mat4 u_projectio │ │ │ │ + 0x00d091e0 6e3b200a 2020756e 69666f72 6d206d61 n; . uniform ma │ │ │ │ + 0x00d091f0 74342075 5f706976 6f745472 616e7366 t4 u_pivotTransf │ │ │ │ + 0x00d09200 6f726d3b 200a2020 756e6966 6f726d20 orm; . uniform │ │ │ │ + 0x00d09210 76656334 20755f74 72616666 69635061 vec4 u_trafficPa │ │ │ │ + 0x00d09220 72616d73 3b200a20 20756e69 666f726d rams; . uniform │ │ │ │ + 0x00d09230 20766563 3420755f 6f75746c 696e6543 vec4 u_outlineC │ │ │ │ + 0x00d09240 6f6c6f72 3b200a20 20756e69 666f726d olor; . uniform │ │ │ │ + 0x00d09250 20766563 3420755f 6c696768 74417272 vec4 u_lightArr │ │ │ │ + 0x00d09260 6f77436f 6c6f723b 200a2020 756e6966 owColor; . unif │ │ │ │ + 0x00d09270 6f726d20 76656334 20755f64 61726b41 orm vec4 u_darkA │ │ │ │ + 0x00d09280 72726f77 436f6c6f 723b200a 2020756e rrowColor; . un │ │ │ │ + 0x00d09290 69666f72 6d20666c 6f617420 755f6f75 iform float u_ou │ │ │ │ + 0x00d092a0 746c696e 653b200a 2020756e 69666f72 tline; . unifor │ │ │ │ + 0x00d092b0 6d20666c 6f617420 755f6f70 61636974 m float u_opacit │ │ │ │ + 0x00d092c0 793b200a 2020636f 6e737420 666c6f61 y; . const floa │ │ │ │ + 0x00d092d0 74206b53 68617065 436f6f72 64536361 t kShapeCoordSca │ │ │ │ + 0x00d092e0 6c617220 3d203130 30302e30 3b200a20 lar = 1000.0; . │ │ │ │ + 0x00d092f0 20766563 34206170 706c7950 69766f74 vec4 applyPivot │ │ │ │ + 0x00d09300 5472616e 73666f72 6d287665 63342070 Transform(vec4 p │ │ │ │ + 0x00d09310 69766f74 2c206d61 74342070 69766f74 ivot, mat4 pivot │ │ │ │ + 0x00d09320 5472616e 73666f72 6d2c2066 6c6f6174 Transform, float │ │ │ │ + 0x00d09330 20706976 6f745265 616c5a29 200a2020 pivotRealZ) . │ │ │ │ + 0x00d09340 7b200a20 20202076 65633420 7472616e { . vec4 tran │ │ │ │ + 0x00d09350 73666f72 6d656450 69766f74 203d2070 sformedPivot = p │ │ │ │ + 0x00d09360 69766f74 3b200a20 20202066 6c6f6174 ivot; . float │ │ │ │ + 0x00d09370 2077203d 20747261 6e73666f 726d6564 w = transformed │ │ │ │ + 0x00d09380 5069766f 742e773b 200a2020 20207472 Pivot.w; . tr │ │ │ │ + 0x00d09390 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d093a0 7977203d 20287069 766f7454 72616e73 yw = (pivotTrans │ │ │ │ + 0x00d093b0 666f726d 202a2076 65633428 7472616e form * vec4(tran │ │ │ │ + 0x00d093c0 73666f72 6d656450 69766f74 2e78792c sformedPivot.xy, │ │ │ │ + 0x00d093d0 20706976 6f745265 616c5a2c 20772929 pivotRealZ, w)) │ │ │ │ + 0x00d093e0 2e787977 3b200a20 20202074 72616e73 .xyw; . trans │ │ │ │ + 0x00d093f0 666f726d 65645069 766f742e 7a202a3d formedPivot.z *= │ │ │ │ + 0x00d09400 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d09410 742e7720 2f20773b 200a2020 23696664 t.w / w; . #ifd │ │ │ │ + 0x00d09420 65662056 554c4b41 4e200a20 20202074 ef VULKAN . t │ │ │ │ + 0x00d09430 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d09440 79203d20 2d747261 6e73666f 726d6564 y = -transformed │ │ │ │ + 0x00d09450 5069766f 742e793b 200a2020 20207472 Pivot.y; . tr │ │ │ │ + 0x00d09460 616e7366 6f726d65 64506976 6f742e7a ansformedPivot.z │ │ │ │ + 0x00d09470 203d2028 7472616e 73666f72 6d656450 = (transformedP │ │ │ │ + 0x00d09480 69766f74 2e7a2020 2b207472 616e7366 ivot.z + transf │ │ │ │ + 0x00d09490 6f726d65 64506976 6f742e77 29202f20 ormedPivot.w) / │ │ │ │ + 0x00d094a0 322e303b 200a2020 23656e64 6966200a 2.0; . #endif . │ │ │ │ + 0x00d094b0 20202020 72657475 726e2074 72616e73 return trans │ │ │ │ + 0x00d094c0 666f726d 65645069 766f743b 200a2020 formedPivot; . │ │ │ │ + 0x00d094d0 7d200a20 20766563 34206170 706c7942 } . vec4 applyB │ │ │ │ + 0x00d094e0 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d094f0 6e73666f 726d2876 65633420 7069766f nsform(vec4 pivo │ │ │ │ + 0x00d09500 742c206d 61743420 7069766f 74547261 t, mat4 pivotTra │ │ │ │ + 0x00d09510 6e73666f 726d2c20 666c6f61 74207069 nsform, float pi │ │ │ │ + 0x00d09520 766f7452 65616c5a 2c207665 6332206f votRealZ, vec2 o │ │ │ │ + 0x00d09530 66667365 7429200a 20207b20 0a202020 ffset) . { . │ │ │ │ + 0x00d09540 20666c6f 6174206c 6f676963 5a203d20 float logicZ = │ │ │ │ + 0x00d09550 7069766f 742e7a20 2f207069 766f742e pivot.z / pivot. │ │ │ │ + 0x00d09560 773b200a 20202020 76656334 20747261 w; . vec4 tra │ │ │ │ + 0x00d09570 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d09580 7069766f 74547261 6e73666f 726d202a pivotTransform * │ │ │ │ + 0x00d09590 20766563 34287069 766f742e 78792c20 vec4(pivot.xy, │ │ │ │ + 0x00d095a0 7069766f 74526561 6c5a2c20 7069766f pivotRealZ, pivo │ │ │ │ + 0x00d095b0 742e7729 3b200a20 20202076 65633420 t.w); . vec4 │ │ │ │ + 0x00d095c0 7363616c 65203d20 7069766f 74547261 scale = pivotTra │ │ │ │ + 0x00d095d0 6e73666f 726d202a 20766563 3428312e nsform * vec4(1. │ │ │ │ + 0x00d095e0 302c202d 312e302c 20302e30 2c20312e 0, -1.0, 0.0, 1. │ │ │ │ + 0x00d095f0 30293b20 0a202020 20766563 3420706f 0); . vec4 po │ │ │ │ + 0x00d09600 73697469 6f6e203d 20766563 34287472 sition = vec4(tr │ │ │ │ + 0x00d09610 616e7366 6f726d65 64506976 6f742e78 ansformedPivot.x │ │ │ │ + 0x00d09620 79202f20 7472616e 73666f72 6d656450 y / transformedP │ │ │ │ + 0x00d09630 69766f74 2e772c20 6c6f6769 635a2c20 ivot.w, logicZ, │ │ │ │ + 0x00d09640 312e3029 202b2076 65633428 6f666673 1.0) + vec4(offs │ │ │ │ + 0x00d09650 6574202f 20736361 6c652e77 202a2073 et / scale.w * s │ │ │ │ + 0x00d09660 63616c65 2e782c20 302e302c 20302e30 cale.x, 0.0, 0.0 │ │ │ │ + 0x00d09670 293b200a 20202369 66646566 2056554c ); . #ifdef VUL │ │ │ │ + 0x00d09680 4b414e20 0a202020 20706f73 6974696f KAN . positio │ │ │ │ + 0x00d09690 6e2e7920 3d202d70 6f736974 696f6e2e n.y = -position. │ │ │ │ + 0x00d096a0 793b200a 20202020 706f7369 74696f6e y; . position │ │ │ │ + 0x00d096b0 2e7a203d 2028706f 73697469 6f6e2e7a .z = (position.z │ │ │ │ + 0x00d096c0 20202b20 706f7369 74696f6e 2e772920 + position.w) │ │ │ │ + 0x00d096d0 2f20322e 303b200a 20202365 6e646966 / 2.0; . #endif │ │ │ │ + 0x00d096e0 200a2020 20207265 7475726e 20706f73 . return pos │ │ │ │ + 0x00d096f0 6974696f 6e3b200a 20207d20 0a202076 ition; . } . v │ │ │ │ + 0x00d09700 65633220 63616c63 4c696e65 5472616e ec2 calcLineTran │ │ │ │ + 0x00d09710 73666f72 6d656441 78697350 6f732876 sformedAxisPos(v │ │ │ │ + 0x00d09720 65633220 6f726967 696e616c 41786973 ec2 originalAxis │ │ │ │ + 0x00d09730 506f732c 20766563 32207368 69667465 Pos, vec2 shifte │ │ │ │ + 0x00d09740 64506f73 2c206d61 7434206d 6f64656c dPos, mat4 model │ │ │ │ + 0x00d09750 56696577 2c20666c 6f617420 68616c66 View, float half │ │ │ │ + 0x00d09760 57696474 6829200a 20207b20 0a202020 Width) . { . │ │ │ │ + 0x00d09770 20766563 32207020 3d202876 65633428 vec2 p = (vec4( │ │ │ │ + 0x00d09780 73686966 74656450 6f732c20 302e302c shiftedPos, 0.0, │ │ │ │ + 0x00d09790 20312e30 29202a20 6d6f6465 6c566965 1.0) * modelVie │ │ │ │ + 0x00d097a0 77292e78 793b200a 20202020 76656332 w).xy; . vec2 │ │ │ │ + 0x00d097b0 2064203d 2070202d 206f7269 67696e61 d = p - origina │ │ │ │ + 0x00d097c0 6c417869 73506f73 3b200a20 20202069 lAxisPos; . i │ │ │ │ + 0x00d097d0 66202864 6f742864 2c206429 20213d20 f (dot(d, d) != │ │ │ │ + 0x00d097e0 302e3029 200a2020 20202020 72657475 0.0) . retu │ │ │ │ + 0x00d097f0 726e206f 72696769 6e616c41 78697350 rn originalAxisP │ │ │ │ + 0x00d09800 6f73202b 206e6f72 6d616c69 7a652864 os + normalize(d │ │ │ │ + 0x00d09810 29202a20 68616c66 57696474 683b200a ) * halfWidth; . │ │ │ │ + 0x00d09820 20202020 656c7365 200a2020 20202020 else . │ │ │ │ + 0x00d09830 72657475 726e206f 72696769 6e616c41 return originalA │ │ │ │ + 0x00d09840 78697350 6f733b20 0a20207d 200a2020 xisPos; . } . │ │ │ │ + 0x00d09850 766f6964 206d6169 6e282920 0a20207b void main() . { │ │ │ │ + 0x00d09860 200a2020 20207665 63322074 72616e73 . vec2 trans │ │ │ │ + 0x00d09870 666f726d 65644178 6973506f 73203d20 formedAxisPos = │ │ │ │ + 0x00d09880 28766563 3428615f 706f7369 74696f6e (vec4(a_position │ │ │ │ + 0x00d09890 2e78792c 20302e30 2c20312e 3029202a .xy, 0.0, 1.0) * │ │ │ │ + 0x00d098a0 20755f6d 6f64656c 56696577 292e7879 u_modelView).xy │ │ │ │ + 0x00d098b0 3b200a20 20202076 65633420 706f7320 ; . vec4 pos │ │ │ │ + 0x00d098c0 3d207665 63342874 72616e73 666f726d = vec4(transform │ │ │ │ + 0x00d098d0 65644178 6973506f 732c2061 5f706f73 edAxisPos, a_pos │ │ │ │ + 0x00d098e0 6974696f 6e2e7a2c 20312e30 29202a20 ition.z, 1.0) * │ │ │ │ + 0x00d098f0 755f7072 6f6a6563 74696f6e 3b200a20 u_projection; . │ │ │ │ + 0x00d09900 20202076 5f636f6c 6f725465 78436f6f v_colorTexCoo │ │ │ │ + 0x00d09910 7264203d 20615f63 6f6c6f72 54657843 rd = a_colorTexC │ │ │ │ + 0x00d09920 6f6f7264 3b200a20 20202067 6c5f506f oord; . gl_Po │ │ │ │ + 0x00d09930 73697469 6f6e203d 20617070 6c795069 sition = applyPi │ │ │ │ + 0x00d09940 766f7454 72616e73 666f726d 28706f73 votTransform(pos │ │ │ │ + 0x00d09950 2c20755f 7069766f 74547261 6e73666f , u_pivotTransfo │ │ │ │ + 0x00d09960 726d2c20 302e3029 3b200a20 207d200a rm, 0.0); . } . │ │ │ │ + 0x00d09970 00000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d09980 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d09990 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d099a0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d099b0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d099c0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d099d0 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d099e0 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d099f0 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d09a00 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d09a10 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d09a20 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d09a30 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d09a40 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d09a50 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d09a60 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d09a70 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d09a80 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d09a90 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d09aa0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d09ab0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d09ac0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d09ad0 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d09ae0 2020696e 20766563 3420615f 6e6f726d in vec4 a_norm │ │ │ │ + 0x00d09af0 616c3b20 0a202069 6e207665 63342061 al; . in vec4 a │ │ │ │ + 0x00d09b00 5f636f6c 6f723b20 0a20206f 75742076 _color; . out v │ │ │ │ + 0x00d09b10 65633420 765f636f 6c6f723b 200a2020 ec4 v_color; . │ │ │ │ + 0x00d09b20 756e6966 6f726d20 6d617434 20755f6d uniform mat4 u_m │ │ │ │ + 0x00d09b30 6f64656c 56696577 3b200a20 20756e69 odelView; . uni │ │ │ │ + 0x00d09b40 666f726d 206d6174 3420755f 70726f6a form mat4 u_proj │ │ │ │ + 0x00d09b50 65637469 6f6e3b20 0a202075 6e69666f ection; . unifo │ │ │ │ + 0x00d09b60 726d206d 61743420 755f7069 766f7454 rm mat4 u_pivotT │ │ │ │ + 0x00d09b70 72616e73 666f726d 3b200a20 20756e69 ransform; . uni │ │ │ │ + 0x00d09b80 666f726d 20766563 3420755f 70617261 form vec4 u_para │ │ │ │ + 0x00d09b90 6d733b20 0a202075 6e69666f 726d2066 ms; . uniform f │ │ │ │ + 0x00d09ba0 6c6f6174 20755f6c 696e6548 616c6657 loat u_lineHalfW │ │ │ │ + 0x00d09bb0 69647468 3b200a20 20756e69 666f726d idth; . uniform │ │ │ │ + 0x00d09bc0 20666c6f 61742075 5f6d6178 52616469 float u_maxRadi │ │ │ │ + 0x00d09bd0 75733b20 0a202063 6f6e7374 20666c6f us; . const flo │ │ │ │ + 0x00d09be0 6174206b 53686170 65436f6f 72645363 at kShapeCoordSc │ │ │ │ + 0x00d09bf0 616c6172 203d2031 3030302e 303b200a alar = 1000.0; . │ │ │ │ + 0x00d09c00 20207665 63342061 70706c79 5069766f vec4 applyPivo │ │ │ │ + 0x00d09c10 74547261 6e73666f 726d2876 65633420 tTransform(vec4 │ │ │ │ + 0x00d09c20 7069766f 742c206d 61743420 7069766f pivot, mat4 pivo │ │ │ │ + 0x00d09c30 74547261 6e73666f 726d2c20 666c6f61 tTransform, floa │ │ │ │ + 0x00d09c40 74207069 766f7452 65616c5a 29200a20 t pivotRealZ) . │ │ │ │ + 0x00d09c50 207b200a 20202020 76656334 20747261 { . vec4 tra │ │ │ │ + 0x00d09c60 6e73666f 726d6564 5069766f 74203d20 nsformedPivot = │ │ │ │ + 0x00d09c70 7069766f 743b200a 20202020 666c6f61 pivot; . floa │ │ │ │ + 0x00d09c80 74207720 3d207472 616e7366 6f726d65 t w = transforme │ │ │ │ + 0x00d09c90 64506976 6f742e77 3b200a20 20202074 dPivot.w; . t │ │ │ │ + 0x00d09ca0 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d09cb0 78797720 3d202870 69766f74 5472616e xyw = (pivotTran │ │ │ │ + 0x00d09cc0 73666f72 6d202a20 76656334 28747261 sform * vec4(tra │ │ │ │ + 0x00d09cd0 6e73666f 726d6564 5069766f 742e7879 nsformedPivot.xy │ │ │ │ + 0x00d09ce0 2c207069 766f7452 65616c5a 2c207729 , pivotRealZ, w) │ │ │ │ + 0x00d09cf0 292e7879 773b200a 20202020 7472616e ).xyw; . tran │ │ │ │ + 0x00d09d00 73666f72 6d656450 69766f74 2e7a202a sformedPivot.z * │ │ │ │ + 0x00d09d10 3d207472 616e7366 6f726d65 64506976 = transformedPiv │ │ │ │ + 0x00d09d20 6f742e77 202f2077 3b200a20 20236966 ot.w / w; . #if │ │ │ │ + 0x00d09d30 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00d09d40 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d09d50 2e79203d 202d7472 616e7366 6f726d65 .y = -transforme │ │ │ │ + 0x00d09d60 64506976 6f742e79 3b200a20 20202074 dPivot.y; . t │ │ │ │ + 0x00d09d70 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d09d80 7a203d20 28747261 6e73666f 726d6564 z = (transformed │ │ │ │ + 0x00d09d90 5069766f 742e7a20 202b2074 72616e73 Pivot.z + trans │ │ │ │ + 0x00d09da0 666f726d 65645069 766f742e 7729202f formedPivot.w) / │ │ │ │ + 0x00d09db0 20322e30 3b200a20 2023656e 64696620 2.0; . #endif │ │ │ │ + 0x00d09dc0 0a202020 20726574 75726e20 7472616e . return tran │ │ │ │ + 0x00d09dd0 73666f72 6d656450 69766f74 3b200a20 sformedPivot; . │ │ │ │ + 0x00d09de0 207d200a 20207665 63342061 70706c79 } . vec4 apply │ │ │ │ + 0x00d09df0 42696c6c 626f6172 64506976 6f745472 BillboardPivotTr │ │ │ │ + 0x00d09e00 616e7366 6f726d28 76656334 20706976 ansform(vec4 piv │ │ │ │ + 0x00d09e10 6f742c20 6d617434 20706976 6f745472 ot, mat4 pivotTr │ │ │ │ + 0x00d09e20 616e7366 6f726d2c 20666c6f 61742070 ansform, float p │ │ │ │ + 0x00d09e30 69766f74 5265616c 5a2c2076 65633220 ivotRealZ, vec2 │ │ │ │ + 0x00d09e40 6f666673 65742920 0a20207b 200a2020 offset) . { . │ │ │ │ + 0x00d09e50 2020666c 6f617420 6c6f6769 635a203d float logicZ = │ │ │ │ + 0x00d09e60 20706976 6f742e7a 202f2070 69766f74 pivot.z / pivot │ │ │ │ + 0x00d09e70 2e773b20 0a202020 20766563 34207472 .w; . vec4 tr │ │ │ │ + 0x00d09e80 616e7366 6f726d65 64506976 6f74203d ansformedPivot = │ │ │ │ + 0x00d09e90 20706976 6f745472 616e7366 6f726d20 pivotTransform │ │ │ │ + 0x00d09ea0 2a207665 63342870 69766f74 2e78792c * vec4(pivot.xy, │ │ │ │ + 0x00d09eb0 20706976 6f745265 616c5a2c 20706976 pivotRealZ, piv │ │ │ │ + 0x00d09ec0 6f742e77 293b200a 20202020 76656334 ot.w); . vec4 │ │ │ │ + 0x00d09ed0 20736361 6c65203d 20706976 6f745472 scale = pivotTr │ │ │ │ + 0x00d09ee0 616e7366 6f726d20 2a207665 63342831 ansform * vec4(1 │ │ │ │ + 0x00d09ef0 2e302c20 2d312e30 2c20302e 302c2031 .0, -1.0, 0.0, 1 │ │ │ │ + 0x00d09f00 2e30293b 200a2020 20207665 63342070 .0); . vec4 p │ │ │ │ + 0x00d09f10 6f736974 696f6e20 3d207665 63342874 osition = vec4(t │ │ │ │ + 0x00d09f20 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d09f30 7879202f 20747261 6e73666f 726d6564 xy / transformed │ │ │ │ + 0x00d09f40 5069766f 742e772c 206c6f67 69635a2c Pivot.w, logicZ, │ │ │ │ + 0x00d09f50 20312e30 29202b20 76656334 286f6666 1.0) + vec4(off │ │ │ │ + 0x00d09f60 73657420 2f207363 616c652e 77202a20 set / scale.w * │ │ │ │ + 0x00d09f70 7363616c 652e782c 20302e30 2c20302e scale.x, 0.0, 0. │ │ │ │ + 0x00d09f80 30293b20 0a202023 69666465 66205655 0); . #ifdef VU │ │ │ │ + 0x00d09f90 4c4b414e 200a2020 2020706f 73697469 LKAN . positi │ │ │ │ + 0x00d09fa0 6f6e2e79 203d202d 706f7369 74696f6e on.y = -position │ │ │ │ + 0x00d09fb0 2e793b20 0a202020 20706f73 6974696f .y; . positio │ │ │ │ + 0x00d09fc0 6e2e7a20 3d202870 6f736974 696f6e2e n.z = (position. │ │ │ │ + 0x00d09fd0 7a20202b 20706f73 6974696f 6e2e7729 z + position.w) │ │ │ │ + 0x00d09fe0 202f2032 2e303b20 0a202023 656e6469 / 2.0; . #endi │ │ │ │ + 0x00d09ff0 66200a20 20202072 65747572 6e20706f f . return po │ │ │ │ + 0x00d0a000 73697469 6f6e3b20 0a20207d 200a2020 sition; . } . │ │ │ │ + 0x00d0a010 76656332 2063616c 634c696e 65547261 vec2 calcLineTra │ │ │ │ + 0x00d0a020 6e73666f 726d6564 41786973 506f7328 nsformedAxisPos( │ │ │ │ + 0x00d0a030 76656332 206f7269 67696e61 6c417869 vec2 originalAxi │ │ │ │ + 0x00d0a040 73506f73 2c207665 63322073 68696674 sPos, vec2 shift │ │ │ │ + 0x00d0a050 6564506f 732c206d 61743420 6d6f6465 edPos, mat4 mode │ │ │ │ + 0x00d0a060 6c566965 772c2066 6c6f6174 2068616c lView, float hal │ │ │ │ + 0x00d0a070 66576964 74682920 0a20207b 200a2020 fWidth) . { . │ │ │ │ + 0x00d0a080 20207665 63322070 203d2028 76656334 vec2 p = (vec4 │ │ │ │ + 0x00d0a090 28736869 66746564 506f732c 20302e30 (shiftedPos, 0.0 │ │ │ │ + 0x00d0a0a0 2c20312e 3029202a 206d6f64 656c5669 , 1.0) * modelVi │ │ │ │ + 0x00d0a0b0 6577292e 78793b20 0a202020 20766563 ew).xy; . vec │ │ │ │ + 0x00d0a0c0 32206420 3d207020 2d206f72 6967696e 2 d = p - origin │ │ │ │ + 0x00d0a0d0 616c4178 6973506f 733b200a 20202020 alAxisPos; . │ │ │ │ + 0x00d0a0e0 69662028 646f7428 642c2064 2920213d if (dot(d, d) != │ │ │ │ + 0x00d0a0f0 20302e30 29200a20 20202020 20726574 0.0) . ret │ │ │ │ + 0x00d0a100 75726e20 6f726967 696e616c 41786973 urn originalAxis │ │ │ │ + 0x00d0a110 506f7320 2b206e6f 726d616c 697a6528 Pos + normalize( │ │ │ │ + 0x00d0a120 6429202a 2068616c 66576964 74683b20 d) * halfWidth; │ │ │ │ + 0x00d0a130 0a202020 20656c73 65200a20 20202020 . else . │ │ │ │ + 0x00d0a140 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d0a150 41786973 506f733b 200a2020 7d200a20 AxisPos; . } . │ │ │ │ + 0x00d0a160 20766f69 64206d61 696e2829 200a2020 void main() . │ │ │ │ + 0x00d0a170 7b200a20 20202076 65633220 6e6f726d { . vec2 norm │ │ │ │ + 0x00d0a180 616c203d 20615f6e 6f726d61 6c2e7879 al = a_normal.xy │ │ │ │ + 0x00d0a190 3b200a20 20202076 65633220 7472616e ; . vec2 tran │ │ │ │ + 0x00d0a1a0 73666f72 6d656441 78697350 6f73203d sformedAxisPos = │ │ │ │ + 0x00d0a1b0 20287665 63342861 5f706f73 6974696f (vec4(a_positio │ │ │ │ + 0x00d0a1c0 6e2e7879 2c20302e 302c2031 2e302920 n.xy, 0.0, 1.0) │ │ │ │ + 0x00d0a1d0 2a20755f 6d6f6465 6c566965 77292e78 * u_modelView).x │ │ │ │ + 0x00d0a1e0 793b200a 20202020 69662028 646f7428 y; . if (dot( │ │ │ │ + 0x00d0a1f0 6e6f726d 616c2c20 6e6f726d 616c2920 normal, normal) │ │ │ │ + 0x00d0a200 213d2030 2e302920 0a202020 207b200a != 0.0) . { . │ │ │ │ + 0x00d0a210 20202020 20207665 6332206e 6f726d20 vec2 norm │ │ │ │ + 0x00d0a220 3d206e6f 726d616c 202a2075 5f6c696e = normal * u_lin │ │ │ │ + 0x00d0a230 6548616c 66576964 74683b20 0a202020 eHalfWidth; . │ │ │ │ + 0x00d0a240 20202074 72616e73 666f726d 65644178 transformedAx │ │ │ │ + 0x00d0a250 6973506f 73203d20 63616c63 4c696e65 isPos = calcLine │ │ │ │ + 0x00d0a260 5472616e 73666f72 6d656441 78697350 TransformedAxisP │ │ │ │ + 0x00d0a270 6f732874 72616e73 666f726d 65644178 os(transformedAx │ │ │ │ + 0x00d0a280 6973506f 732c2061 5f706f73 6974696f isPos, a_positio │ │ │ │ + 0x00d0a290 6e2e7879 202b206e 6f726d2c 200a2020 n.xy + norm, . │ │ │ │ + 0x00d0a2a0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d0a2b0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d0a2c0 20202020 20202020 20202020 20202020 │ │ │ │ + 0x00d0a2d0 20202020 755f6d6f 64656c56 6965772c u_modelView, │ │ │ │ + 0x00d0a2e0 206c656e 67746828 6e6f726d 29293b20 length(norm)); │ │ │ │ + 0x00d0a2f0 0a202020 207d200a 20202020 765f636f . } . v_co │ │ │ │ + 0x00d0a300 6c6f7220 3d20615f 636f6c6f 723b200a lor = a_color; . │ │ │ │ + 0x00d0a310 20202020 76656334 20706f73 203d2076 vec4 pos = v │ │ │ │ + 0x00d0a320 65633428 7472616e 73666f72 6d656441 ec4(transformedA │ │ │ │ + 0x00d0a330 78697350 6f732c20 615f706f 73697469 xisPos, a_positi │ │ │ │ + 0x00d0a340 6f6e2e7a 2c20312e 3029202a 20755f70 on.z, 1.0) * u_p │ │ │ │ + 0x00d0a350 726f6a65 6374696f 6e3b200a 20202020 rojection; . │ │ │ │ + 0x00d0a360 676c5f50 6f736974 696f6e20 3d206170 gl_Position = ap │ │ │ │ + 0x00d0a370 706c7950 69766f74 5472616e 73666f72 plyPivotTransfor │ │ │ │ + 0x00d0a380 6d28706f 732c2075 5f706976 6f745472 m(pos, u_pivotTr │ │ │ │ + 0x00d0a390 616e7366 6f726d2c 20302e30 293b200a ansform, 0.0); . │ │ │ │ + 0x00d0a3a0 20207d20 0a000000 00000000 00000000 } ............ │ │ │ │ + 0x00d0a3b0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d0a3c0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d0a3d0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d0a3e0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d0a3f0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d0a400 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d0a410 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d0a420 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d0a430 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d0a440 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d0a450 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d0a460 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d0a470 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d0a480 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d0a490 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d0a4a0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d0a4b0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d0a4c0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d0a4d0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d0a4e0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d0a4f0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d0a500 63332061 5f706f73 6974696f 6e3b200a c3 a_position; . │ │ │ │ + 0x00d0a510 2020696e 20766563 3320615f 6e6f726d in vec3 a_norm │ │ │ │ + 0x00d0a520 616c416e 64416e69 6d617465 4f725a3b alAndAnimateOrZ; │ │ │ │ + 0x00d0a530 200a2020 696e2076 65633420 615f7465 . in vec4 a_te │ │ │ │ + 0x00d0a540 78436f6f 7264733b 200a2020 696e2076 xCoords; . in v │ │ │ │ + 0x00d0a550 65633420 615f636f 6c6f723b 200a2020 ec4 a_color; . │ │ │ │ + 0x00d0a560 6f757420 76656334 20765f74 6578436f out vec4 v_texCo │ │ │ │ + 0x00d0a570 6f726473 3b200a20 206f7574 20766563 ords; . out vec │ │ │ │ + 0x00d0a580 3420765f 6d61736b 436f6c6f 723b200a 4 v_maskColor; . │ │ │ │ + 0x00d0a590 2020756e 69666f72 6d206d61 74342075 uniform mat4 u │ │ │ │ + 0x00d0a5a0 5f6d6f64 656c5669 65773b20 0a202075 _modelView; . u │ │ │ │ + 0x00d0a5b0 6e69666f 726d206d 61743420 755f7072 niform mat4 u_pr │ │ │ │ + 0x00d0a5c0 6f6a6563 74696f6e 3b200a20 20756e69 ojection; . uni │ │ │ │ + 0x00d0a5d0 666f726d 206d6174 3420755f 7069766f form mat4 u_pivo │ │ │ │ + 0x00d0a5e0 74547261 6e73666f 726d3b20 0a202075 tTransform; . u │ │ │ │ + 0x00d0a5f0 6e69666f 726d2076 65633220 755f636f niform vec2 u_co │ │ │ │ + 0x00d0a600 6e747261 73744761 6d6d613b 200a2020 ntrastGamma; . │ │ │ │ + 0x00d0a610 756e6966 6f726d20 666c6f61 7420755f uniform float u_ │ │ │ │ + 0x00d0a620 6f706163 6974793b 200a2020 756e6966 opacity; . unif │ │ │ │ + 0x00d0a630 6f726d20 666c6f61 7420755f 7a536361 orm float u_zSca │ │ │ │ + 0x00d0a640 6c653b20 0a202075 6e69666f 726d2066 le; . uniform f │ │ │ │ + 0x00d0a650 6c6f6174 20755f69 6e746572 706f6c61 loat u_interpola │ │ │ │ + 0x00d0a660 74696f6e 3b200a20 20756e69 666f726d tion; . uniform │ │ │ │ + 0x00d0a670 20666c6f 61742075 5f69734f 75746c69 float u_isOutli │ │ │ │ + 0x00d0a680 6e655061 73733b20 0a202063 6f6e7374 nePass; . const │ │ │ │ + 0x00d0a690 20666c6f 6174206b 53686170 65436f6f float kShapeCoo │ │ │ │ + 0x00d0a6a0 72645363 616c6172 203d2031 3030302e rdScalar = 1000. │ │ │ │ + 0x00d0a6b0 303b200a 20207665 63342061 70706c79 0; . vec4 apply │ │ │ │ + 0x00d0a6c0 5069766f 74547261 6e73666f 726d2876 PivotTransform(v │ │ │ │ + 0x00d0a6d0 65633420 7069766f 742c206d 61743420 ec4 pivot, mat4 │ │ │ │ + 0x00d0a6e0 7069766f 74547261 6e73666f 726d2c20 pivotTransform, │ │ │ │ + 0x00d0a6f0 666c6f61 74207069 766f7452 65616c5a float pivotRealZ │ │ │ │ + 0x00d0a700 29200a20 207b200a 20202020 76656334 ) . { . vec4 │ │ │ │ + 0x00d0a710 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d0a720 74203d20 7069766f 743b200a 20202020 t = pivot; . │ │ │ │ + 0x00d0a730 666c6f61 74207720 3d207472 616e7366 float w = transf │ │ │ │ + 0x00d0a740 6f726d65 64506976 6f742e77 3b200a20 ormedPivot.w; . │ │ │ │ + 0x00d0a750 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d0a760 766f742e 78797720 3d202870 69766f74 vot.xyw = (pivot │ │ │ │ + 0x00d0a770 5472616e 73666f72 6d202a20 76656334 Transform * vec4 │ │ │ │ + 0x00d0a780 28747261 6e73666f 726d6564 5069766f (transformedPivo │ │ │ │ + 0x00d0a790 742e7879 2c207069 766f7452 65616c5a t.xy, pivotRealZ │ │ │ │ + 0x00d0a7a0 2c207729 292e7879 773b200a 20202020 , w)).xyw; . │ │ │ │ + 0x00d0a7b0 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d0a7c0 2e7a202a 3d207472 616e7366 6f726d65 .z *= transforme │ │ │ │ + 0x00d0a7d0 64506976 6f742e77 202f2077 3b200a20 dPivot.w / w; . │ │ │ │ + 0x00d0a7e0 20236966 64656620 56554c4b 414e200a #ifdef VULKAN . │ │ │ │ + 0x00d0a7f0 20202020 7472616e 73666f72 6d656450 transformedP │ │ │ │ + 0x00d0a800 69766f74 2e79203d 202d7472 616e7366 ivot.y = -transf │ │ │ │ + 0x00d0a810 6f726d65 64506976 6f742e79 3b200a20 ormedPivot.y; . │ │ │ │ + 0x00d0a820 20202074 72616e73 666f726d 65645069 transformedPi │ │ │ │ + 0x00d0a830 766f742e 7a203d20 28747261 6e73666f vot.z = (transfo │ │ │ │ + 0x00d0a840 726d6564 5069766f 742e7a20 202b2074 rmedPivot.z + t │ │ │ │ + 0x00d0a850 72616e73 666f726d 65645069 766f742e ransformedPivot. │ │ │ │ + 0x00d0a860 7729202f 20322e30 3b200a20 2023656e w) / 2.0; . #en │ │ │ │ + 0x00d0a870 64696620 0a202020 20726574 75726e20 dif . return │ │ │ │ + 0x00d0a880 7472616e 73666f72 6d656450 69766f74 transformedPivot │ │ │ │ + 0x00d0a890 3b200a20 207d200a 20207665 63342061 ; . } . vec4 a │ │ │ │ + 0x00d0a8a0 70706c79 42696c6c 626f6172 64506976 pplyBillboardPiv │ │ │ │ + 0x00d0a8b0 6f745472 616e7366 6f726d28 76656334 otTransform(vec4 │ │ │ │ + 0x00d0a8c0 20706976 6f742c20 6d617434 20706976 pivot, mat4 piv │ │ │ │ + 0x00d0a8d0 6f745472 616e7366 6f726d2c 20666c6f otTransform, flo │ │ │ │ + 0x00d0a8e0 61742070 69766f74 5265616c 5a2c2076 at pivotRealZ, v │ │ │ │ + 0x00d0a8f0 65633220 6f666673 65742920 0a20207b ec2 offset) . { │ │ │ │ + 0x00d0a900 200a2020 2020666c 6f617420 6c6f6769 . float logi │ │ │ │ + 0x00d0a910 635a203d 20706976 6f742e7a 202f2070 cZ = pivot.z / p │ │ │ │ + 0x00d0a920 69766f74 2e773b20 0a202020 20766563 ivot.w; . vec │ │ │ │ + 0x00d0a930 34207472 616e7366 6f726d65 64506976 4 transformedPiv │ │ │ │ + 0x00d0a940 6f74203d 20706976 6f745472 616e7366 ot = pivotTransf │ │ │ │ + 0x00d0a950 6f726d20 2a207665 63342870 69766f74 orm * vec4(pivot │ │ │ │ + 0x00d0a960 2e78792c 20706976 6f745265 616c5a2c .xy, pivotRealZ, │ │ │ │ + 0x00d0a970 20706976 6f742e77 293b200a 20202020 pivot.w); . │ │ │ │ + 0x00d0a980 76656334 20736361 6c65203d 20706976 vec4 scale = piv │ │ │ │ + 0x00d0a990 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d0a9a0 63342831 2e302c20 2d312e30 2c20302e c4(1.0, -1.0, 0. │ │ │ │ + 0x00d0a9b0 302c2031 2e30293b 200a2020 20207665 0, 1.0); . ve │ │ │ │ + 0x00d0a9c0 63342070 6f736974 696f6e20 3d207665 c4 position = ve │ │ │ │ + 0x00d0a9d0 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d0a9e0 766f742e 7879202f 20747261 6e73666f vot.xy / transfo │ │ │ │ + 0x00d0a9f0 726d6564 5069766f 742e772c 206c6f67 rmedPivot.w, log │ │ │ │ + 0x00d0aa00 69635a2c 20312e30 29202b20 76656334 icZ, 1.0) + vec4 │ │ │ │ + 0x00d0aa10 286f6666 73657420 2f207363 616c652e (offset / scale. │ │ │ │ + 0x00d0aa20 77202a20 7363616c 652e782c 20302e30 w * scale.x, 0.0 │ │ │ │ + 0x00d0aa30 2c20302e 30293b20 0a202023 69666465 , 0.0); . #ifde │ │ │ │ + 0x00d0aa40 66205655 4c4b414e 200a2020 2020706f f VULKAN . po │ │ │ │ + 0x00d0aa50 73697469 6f6e2e79 203d202d 706f7369 sition.y = -posi │ │ │ │ + 0x00d0aa60 74696f6e 2e793b20 0a202020 20706f73 tion.y; . pos │ │ │ │ + 0x00d0aa70 6974696f 6e2e7a20 3d202870 6f736974 ition.z = (posit │ │ │ │ + 0x00d0aa80 696f6e2e 7a20202b 20706f73 6974696f ion.z + positio │ │ │ │ + 0x00d0aa90 6e2e7729 202f2032 2e303b20 0a202023 n.w) / 2.0; . # │ │ │ │ + 0x00d0aaa0 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d0aab0 6e20706f 73697469 6f6e3b20 0a20207d n position; . } │ │ │ │ + 0x00d0aac0 200a2020 76656332 2063616c 634c696e . vec2 calcLin │ │ │ │ + 0x00d0aad0 65547261 6e73666f 726d6564 41786973 eTransformedAxis │ │ │ │ + 0x00d0aae0 506f7328 76656332 206f7269 67696e61 Pos(vec2 origina │ │ │ │ + 0x00d0aaf0 6c417869 73506f73 2c207665 63322073 lAxisPos, vec2 s │ │ │ │ + 0x00d0ab00 68696674 6564506f 732c206d 61743420 hiftedPos, mat4 │ │ │ │ + 0x00d0ab10 6d6f6465 6c566965 772c2066 6c6f6174 modelView, float │ │ │ │ + 0x00d0ab20 2068616c 66576964 74682920 0a20207b halfWidth) . { │ │ │ │ + 0x00d0ab30 200a2020 20207665 63322070 203d2028 . vec2 p = ( │ │ │ │ + 0x00d0ab40 76656334 28736869 66746564 506f732c vec4(shiftedPos, │ │ │ │ + 0x00d0ab50 20302e30 2c20312e 3029202a 206d6f64 0.0, 1.0) * mod │ │ │ │ + 0x00d0ab60 656c5669 6577292e 78793b20 0a202020 elView).xy; . │ │ │ │ + 0x00d0ab70 20766563 32206420 3d207020 2d206f72 vec2 d = p - or │ │ │ │ + 0x00d0ab80 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d0ab90 20202020 69662028 646f7428 642c2064 if (dot(d, d │ │ │ │ + 0x00d0aba0 2920213d 20302e30 29200a20 20202020 ) != 0.0) . │ │ │ │ + 0x00d0abb0 20726574 75726e20 6f726967 696e616c return original │ │ │ │ + 0x00d0abc0 41786973 506f7320 2b206e6f 726d616c AxisPos + normal │ │ │ │ + 0x00d0abd0 697a6528 6429202a 2068616c 66576964 ize(d) * halfWid │ │ │ │ + 0x00d0abe0 74683b20 0a202020 20656c73 65200a20 th; . else . │ │ │ │ + 0x00d0abf0 20202020 20726574 75726e20 6f726967 return orig │ │ │ │ + 0x00d0ac00 696e616c 41786973 506f733b 200a2020 inalAxisPos; . │ │ │ │ + 0x00d0ac10 7d200a20 20766f69 64206d61 696e2829 } . void main() │ │ │ │ + 0x00d0ac20 200a2020 7b200a20 20202076 65633220 . { . vec2 │ │ │ │ + 0x00d0ac30 6e6f726d 616c203d 20615f6e 6f726d61 normal = a_norma │ │ │ │ + 0x00d0ac40 6c416e64 416e696d 6174654f 725a2e78 lAndAnimateOrZ.x │ │ │ │ + 0x00d0ac50 793b200a 20202020 69662028 615f6e6f y; . if (a_no │ │ │ │ + 0x00d0ac60 726d616c 416e6441 6e696d61 74654f72 rmalAndAnimateOr │ │ │ │ + 0x00d0ac70 5a2e7a20 3e20302e 3029200a 20202020 Z.z > 0.0) . │ │ │ │ + 0x00d0ac80 20206e6f 726d616c 203d2075 5f696e74 normal = u_int │ │ │ │ + 0x00d0ac90 6572706f 6c617469 6f6e202a 206e6f72 erpolation * nor │ │ │ │ + 0x00d0aca0 6d616c3b 200a2020 20207665 63342070 mal; . vec4 p │ │ │ │ + 0x00d0acb0 69766f74 203d2076 65633428 615f706f ivot = vec4(a_po │ │ │ │ + 0x00d0acc0 73697469 6f6e2c20 312e3029 202a2075 sition, 1.0) * u │ │ │ │ + 0x00d0acd0 5f6d6f64 656c5669 65773b20 0a202020 _modelView; . │ │ │ │ + 0x00d0ace0 20766563 34206f66 66736574 203d2076 vec4 offset = v │ │ │ │ + 0x00d0acf0 65633428 6e6f726d 616c2c20 302e302c ec4(normal, 0.0, │ │ │ │ + 0x00d0ad00 20302e30 29202a20 755f7072 6f6a6563 0.0) * u_projec │ │ │ │ + 0x00d0ad10 74696f6e 3b200a20 20202076 65633420 tion; . vec4 │ │ │ │ + 0x00d0ad20 70726f6a 65637465 64506976 6f74203d projectedPivot = │ │ │ │ + 0x00d0ad30 20706976 6f74202a 20755f70 726f6a65 pivot * u_proje │ │ │ │ + 0x00d0ad40 6374696f 6e3b200a 20202020 676c5f50 ction; . gl_P │ │ │ │ + 0x00d0ad50 6f736974 696f6e20 3d206170 706c7942 osition = applyB │ │ │ │ + 0x00d0ad60 696c6c62 6f617264 5069766f 74547261 illboardPivotTra │ │ │ │ + 0x00d0ad70 6e73666f 726d2870 726f6a65 63746564 nsform(projected │ │ │ │ + 0x00d0ad80 5069766f 742c2075 5f706976 6f745472 Pivot, u_pivotTr │ │ │ │ + 0x00d0ad90 616e7366 6f726d2c 20302e30 2c206f66 ansform, 0.0, of │ │ │ │ + 0x00d0ada0 66736574 2e787929 3b200a20 20202066 fset.xy); . f │ │ │ │ + 0x00d0adb0 6c6f6174 206e6577 5a203d20 70726f6a loat newZ = proj │ │ │ │ + 0x00d0adc0 65637465 64506976 6f742e79 202f2070 ectedPivot.y / p │ │ │ │ + 0x00d0add0 726f6a65 63746564 5069766f 742e7720 rojectedPivot.w │ │ │ │ + 0x00d0ade0 2a20302e 35202b20 302e353b 200a2020 * 0.5 + 0.5; . │ │ │ │ + 0x00d0adf0 2020676c 5f506f73 6974696f 6e2e7a20 gl_Position.z │ │ │ │ + 0x00d0ae00 3d206162 7328615f 6e6f726d 616c416e = abs(a_normalAn │ │ │ │ + 0x00d0ae10 64416e69 6d617465 4f725a2e 7a29202a dAnimateOrZ.z) * │ │ │ │ + 0x00d0ae20 206e6577 5a20202b 2028312e 30202d20 newZ + (1.0 - │ │ │ │ + 0x00d0ae30 61627328 615f6e6f 726d616c 416e6441 abs(a_normalAndA │ │ │ │ + 0x00d0ae40 6e696d61 74654f72 5a2e7a29 29202a20 nimateOrZ.z)) * │ │ │ │ + 0x00d0ae50 676c5f50 6f736974 696f6e2e 7a3b200a gl_Position.z; . │ │ │ │ + 0x00d0ae60 20202020 765f7465 78436f6f 72647320 v_texCoords │ │ │ │ + 0x00d0ae70 3d20615f 74657843 6f6f7264 733b200a = a_texCoords; . │ │ │ │ + 0x00d0ae80 20202020 765f6d61 736b436f 6c6f7220 v_maskColor │ │ │ │ + 0x00d0ae90 3d20615f 636f6c6f 723b200a 20207d20 = a_color; . } │ │ │ │ + 0x00d0aea0 0a000000 00000000 00000000 00000000 ................ │ │ │ │ + 0x00d0aeb0 20202023 69666465 6620474c 5f455320 #ifdef GL_ES │ │ │ │ + 0x00d0aec0 0a202020 20236966 64656620 474c5f46 . #ifdef GL_F │ │ │ │ + 0x00d0aed0 5241474d 454e545f 50524543 4953494f RAGMENT_PRECISIO │ │ │ │ + 0x00d0aee0 4e5f4849 4748200a 20202020 20202364 N_HIGH . #d │ │ │ │ + 0x00d0aef0 6566696e 65204d41 58505245 43206869 efine MAXPREC hi │ │ │ │ + 0x00d0af00 67687020 0a202020 2023656c 7365200a ghp . #else . │ │ │ │ + 0x00d0af10 20202020 20202364 6566696e 65204d41 #define MA │ │ │ │ + 0x00d0af20 58505245 43206d65 6469756d 70200a20 XPREC mediump . │ │ │ │ + 0x00d0af30 20202023 656e6469 66200a20 20202070 #endif . p │ │ │ │ + 0x00d0af40 72656369 73696f6e 204d4158 50524543 recision MAXPREC │ │ │ │ + 0x00d0af50 20666c6f 61743b20 0a202020 20236465 float; . #de │ │ │ │ + 0x00d0af60 66696e65 204c4f57 5f50206c 6f777020 fine LOW_P lowp │ │ │ │ + 0x00d0af70 0a202020 20236465 66696e65 204d4544 . #define MED │ │ │ │ + 0x00d0af80 49554d5f 50206d65 6469756d 70200a20 IUM_P mediump . │ │ │ │ + 0x00d0af90 20202023 64656669 6e652048 4947485f #define HIGH_ │ │ │ │ + 0x00d0afa0 50206869 67687020 0a202023 656c7365 P highp . #else │ │ │ │ + 0x00d0afb0 200a2020 20202364 6566696e 65204c4f . #define LO │ │ │ │ + 0x00d0afc0 575f5020 0a202020 20236465 66696e65 W_P . #define │ │ │ │ + 0x00d0afd0 204d4544 49554d5f 50200a20 20202023 MEDIUM_P . # │ │ │ │ + 0x00d0afe0 64656669 6e652048 4947485f 50200a20 define HIGH_P . │ │ │ │ + 0x00d0aff0 2023656e 64696620 0a202069 6e207665 #endif . in ve │ │ │ │ + 0x00d0b000 63322061 5f636f6c 6f725465 78436f6f c2 a_colorTexCoo │ │ │ │ + 0x00d0b010 72643b20 0a202069 6e207665 63322061 rd; . in vec2 a │ │ │ │ + 0x00d0b020 5f6f7574 6c696e65 436f6c6f 72546578 _outlineColorTex │ │ │ │ + 0x00d0b030 436f6f72 643b200a 2020696e 20766563 Coord; . in vec │ │ │ │ + 0x00d0b040 3220615f 6d61736b 54657843 6f6f7264 2 a_maskTexCoord │ │ │ │ + 0x00d0b050 3b200a20 20696e20 76656334 20615f70 ; . in vec4 a_p │ │ │ │ + 0x00d0b060 6f736974 696f6e3b 200a2020 696e2076 osition; . in v │ │ │ │ + 0x00d0b070 65633220 615f6e6f 726d616c 3b200a20 ec2 a_normal; . │ │ │ │ + 0x00d0b080 20236966 64656620 454e4142 4c455f56 #ifdef ENABLE_V │ │ │ │ + 0x00d0b090 5446200a 20206f75 74204c4f 575f5020 TF . out LOW_P │ │ │ │ + 0x00d0b0a0 76656334 20765f63 6f6c6f72 3b200a20 vec4 v_color; . │ │ │ │ + 0x00d0b0b0 2023656c 7365200a 20206f75 74207665 #else . out ve │ │ │ │ + 0x00d0b0c0 63322076 5f636f6c 6f725465 78436f6f c2 v_colorTexCoo │ │ │ │ + 0x00d0b0d0 72643b20 0a202023 656e6469 66200a20 rd; . #endif . │ │ │ │ + 0x00d0b0e0 206f7574 20766563 3220765f 6d61736b out vec2 v_mask │ │ │ │ + 0x00d0b0f0 54657843 6f6f7264 3b200a20 20756e69 TexCoord; . uni │ │ │ │ + 0x00d0b100 666f726d 206d6174 3420755f 6d6f6465 form mat4 u_mode │ │ │ │ + 0x00d0b110 6c566965 773b200a 2020756e 69666f72 lView; . unifor │ │ │ │ + 0x00d0b120 6d206d61 74342075 5f70726f 6a656374 m mat4 u_project │ │ │ │ + 0x00d0b130 696f6e3b 200a2020 756e6966 6f726d20 ion; . uniform │ │ │ │ + 0x00d0b140 6d617434 20755f70 69766f74 5472616e mat4 u_pivotTran │ │ │ │ + 0x00d0b150 73666f72 6d3b200a 2020756e 69666f72 sform; . unifor │ │ │ │ + 0x00d0b160 6d207665 63322075 5f636f6e 74726173 m vec2 u_contras │ │ │ │ + 0x00d0b170 7447616d 6d613b20 0a202075 6e69666f tGamma; . unifo │ │ │ │ + 0x00d0b180 726d2066 6c6f6174 20755f6f 70616369 rm float u_opaci │ │ │ │ + 0x00d0b190 74793b20 0a202075 6e69666f 726d2066 ty; . uniform f │ │ │ │ + 0x00d0b1a0 6c6f6174 20755f7a 5363616c 653b200a loat u_zScale; . │ │ │ │ + 0x00d0b1b0 2020756e 69666f72 6d20666c 6f617420 uniform float │ │ │ │ + 0x00d0b1c0 755f696e 74657270 6f6c6174 696f6e3b u_interpolation; │ │ │ │ + 0x00d0b1d0 200a2020 756e6966 6f726d20 666c6f61 . uniform floa │ │ │ │ + 0x00d0b1e0 7420755f 69734f75 746c696e 65506173 t u_isOutlinePas │ │ │ │ + 0x00d0b1f0 733b200a 20202369 66646566 20454e41 s; . #ifdef ENA │ │ │ │ + 0x00d0b200 424c455f 56544620 0a202075 6e69666f BLE_VTF . unifo │ │ │ │ + 0x00d0b210 726d2073 616d706c 65723244 20755f63 rm sampler2D u_c │ │ │ │ + 0x00d0b220 6f6c6f72 5465783b 200a2020 23656e64 olorTex; . #end │ │ │ │ + 0x00d0b230 6966200a 2020636f 6e737420 666c6f61 if . const floa │ │ │ │ + 0x00d0b240 74204261 73654465 70746853 68696674 t BaseDepthShift │ │ │ │ + 0x00d0b250 203d202d 31302e30 3b200a20 20636f6e = -10.0; . con │ │ │ │ + 0x00d0b260 73742066 6c6f6174 206b5368 61706543 st float kShapeC │ │ │ │ + 0x00d0b270 6f6f7264 5363616c 6172203d 20313030 oordScalar = 100 │ │ │ │ + 0x00d0b280 302e303b 200a2020 76656334 20617070 0.0; . vec4 app │ │ │ │ + 0x00d0b290 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d0b2a0 28766563 34207069 766f742c 206d6174 (vec4 pivot, mat │ │ │ │ + 0x00d0b2b0 34207069 766f7454 72616e73 666f726d 4 pivotTransform │ │ │ │ + 0x00d0b2c0 2c20666c 6f617420 7069766f 74526561 , float pivotRea │ │ │ │ + 0x00d0b2d0 6c5a2920 0a20207b 200a2020 20207665 lZ) . { . ve │ │ │ │ + 0x00d0b2e0 63342074 72616e73 666f726d 65645069 c4 transformedPi │ │ │ │ + 0x00d0b2f0 766f7420 3d207069 766f743b 200a2020 vot = pivot; . │ │ │ │ + 0x00d0b300 2020666c 6f617420 77203d20 7472616e float w = tran │ │ │ │ + 0x00d0b310 73666f72 6d656450 69766f74 2e773b20 sformedPivot.w; │ │ │ │ + 0x00d0b320 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d0b330 5069766f 742e7879 77203d20 28706976 Pivot.xyw = (piv │ │ │ │ + 0x00d0b340 6f745472 616e7366 6f726d20 2a207665 otTransform * ve │ │ │ │ + 0x00d0b350 63342874 72616e73 666f726d 65645069 c4(transformedPi │ │ │ │ + 0x00d0b360 766f742e 78792c20 7069766f 74526561 vot.xy, pivotRea │ │ │ │ + 0x00d0b370 6c5a2c20 7729292e 7879773b 200a2020 lZ, w)).xyw; . │ │ │ │ + 0x00d0b380 20207472 616e7366 6f726d65 64506976 transformedPiv │ │ │ │ + 0x00d0b390 6f742e7a 202a3d20 7472616e 73666f72 ot.z *= transfor │ │ │ │ + 0x00d0b3a0 6d656450 69766f74 2e77202f 20773b20 medPivot.w / w; │ │ │ │ + 0x00d0b3b0 0a202023 69666465 66205655 4c4b414e . #ifdef VULKAN │ │ │ │ + 0x00d0b3c0 200a2020 20207472 616e7366 6f726d65 . transforme │ │ │ │ + 0x00d0b3d0 64506976 6f742e79 203d202d 7472616e dPivot.y = -tran │ │ │ │ + 0x00d0b3e0 73666f72 6d656450 69766f74 2e793b20 sformedPivot.y; │ │ │ │ + 0x00d0b3f0 0a202020 20747261 6e73666f 726d6564 . transformed │ │ │ │ + 0x00d0b400 5069766f 742e7a20 3d202874 72616e73 Pivot.z = (trans │ │ │ │ + 0x00d0b410 666f726d 65645069 766f742e 7a20202b formedPivot.z + │ │ │ │ + 0x00d0b420 20747261 6e73666f 726d6564 5069766f transformedPivo │ │ │ │ + 0x00d0b430 742e7729 202f2032 2e303b20 0a202023 t.w) / 2.0; . # │ │ │ │ + 0x00d0b440 656e6469 66200a20 20202072 65747572 endif . retur │ │ │ │ + 0x00d0b450 6e207472 616e7366 6f726d65 64506976 n transformedPiv │ │ │ │ + 0x00d0b460 6f743b20 0a20207d 200a2020 76656334 ot; . } . vec4 │ │ │ │ + 0x00d0b470 20617070 6c794269 6c6c626f 61726450 applyBillboardP │ │ │ │ + 0x00d0b480 69766f74 5472616e 73666f72 6d287665 ivotTransform(ve │ │ │ │ + 0x00d0b490 63342070 69766f74 2c206d61 74342070 c4 pivot, mat4 p │ │ │ │ + 0x00d0b4a0 69766f74 5472616e 73666f72 6d2c2066 ivotTransform, f │ │ │ │ + 0x00d0b4b0 6c6f6174 20706976 6f745265 616c5a2c loat pivotRealZ, │ │ │ │ + 0x00d0b4c0 20766563 32206f66 66736574 29200a20 vec2 offset) . │ │ │ │ + 0x00d0b4d0 207b200a 20202020 666c6f61 74206c6f { . float lo │ │ │ │ + 0x00d0b4e0 6769635a 203d2070 69766f74 2e7a202f gicZ = pivot.z / │ │ │ │ + 0x00d0b4f0 20706976 6f742e77 3b200a20 20202076 pivot.w; . v │ │ │ │ + 0x00d0b500 65633420 7472616e 73666f72 6d656450 ec4 transformedP │ │ │ │ + 0x00d0b510 69766f74 203d2070 69766f74 5472616e ivot = pivotTran │ │ │ │ + 0x00d0b520 73666f72 6d202a20 76656334 28706976 sform * vec4(piv │ │ │ │ + 0x00d0b530 6f742e78 792c2070 69766f74 5265616c ot.xy, pivotReal │ │ │ │ + 0x00d0b540 5a2c2070 69766f74 2e77293b 200a2020 Z, pivot.w); . │ │ │ │ + 0x00d0b550 20207665 63342073 63616c65 203d2070 vec4 scale = p │ │ │ │ + 0x00d0b560 69766f74 5472616e 73666f72 6d202a20 ivotTransform * │ │ │ │ + 0x00d0b570 76656334 28312e30 2c202d31 2e302c20 vec4(1.0, -1.0, │ │ │ │ + 0x00d0b580 302e302c 20312e30 293b200a 20202020 0.0, 1.0); . │ │ │ │ + 0x00d0b590 76656334 20706f73 6974696f 6e203d20 vec4 position = │ │ │ │ + 0x00d0b5a0 76656334 28747261 6e73666f 726d6564 vec4(transformed │ │ │ │ + 0x00d0b5b0 5069766f 742e7879 202f2074 72616e73 Pivot.xy / trans │ │ │ │ + 0x00d0b5c0 666f726d 65645069 766f742e 772c206c formedPivot.w, l │ │ │ │ + 0x00d0b5d0 6f676963 5a2c2031 2e302920 2b207665 ogicZ, 1.0) + ve │ │ │ │ + 0x00d0b5e0 6334286f 66667365 74202f20 7363616c c4(offset / scal │ │ │ │ + 0x00d0b5f0 652e7720 2a207363 616c652e 782c2030 e.w * scale.x, 0 │ │ │ │ + 0x00d0b600 2e302c20 302e3029 3b200a20 20236966 .0, 0.0); . #if │ │ │ │ + 0x00d0b610 64656620 56554c4b 414e200a 20202020 def VULKAN . │ │ │ │ + 0x00d0b620 706f7369 74696f6e 2e79203d 202d706f position.y = -po │ │ │ │ + 0x00d0b630 73697469 6f6e2e79 3b200a20 20202070 sition.y; . p │ │ │ │ + 0x00d0b640 6f736974 696f6e2e 7a203d20 28706f73 osition.z = (pos │ │ │ │ + 0x00d0b650 6974696f 6e2e7a20 202b2070 6f736974 ition.z + posit │ │ │ │ + 0x00d0b660 696f6e2e 7729202f 20322e30 3b200a20 ion.w) / 2.0; . │ │ │ │ + 0x00d0b670 2023656e 64696620 0a202020 20726574 #endif . ret │ │ │ │ + 0x00d0b680 75726e20 706f7369 74696f6e 3b200a20 urn position; . │ │ │ │ + 0x00d0b690 207d200a 20207665 63322063 616c634c } . vec2 calcL │ │ │ │ + 0x00d0b6a0 696e6554 72616e73 666f726d 65644178 ineTransformedAx │ │ │ │ + 0x00d0b6b0 6973506f 73287665 6332206f 72696769 isPos(vec2 origi │ │ │ │ + 0x00d0b6c0 6e616c41 78697350 6f732c20 76656332 nalAxisPos, vec2 │ │ │ │ + 0x00d0b6d0 20736869 66746564 506f732c 206d6174 shiftedPos, mat │ │ │ │ + 0x00d0b6e0 34206d6f 64656c56 6965772c 20666c6f 4 modelView, flo │ │ │ │ + 0x00d0b6f0 61742068 616c6657 69647468 29200a20 at halfWidth) . │ │ │ │ + 0x00d0b700 207b200a 20202020 76656332 2070203d { . vec2 p = │ │ │ │ + 0x00d0b710 20287665 63342873 68696674 6564506f (vec4(shiftedPo │ │ │ │ + 0x00d0b720 732c2030 2e302c20 312e3029 202a206d s, 0.0, 1.0) * m │ │ │ │ + 0x00d0b730 6f64656c 56696577 292e7879 3b200a20 odelView).xy; . │ │ │ │ + 0x00d0b740 20202076 65633220 64203d20 70202d20 vec2 d = p - │ │ │ │ + 0x00d0b750 6f726967 696e616c 41786973 506f733b originalAxisPos; │ │ │ │ + 0x00d0b760 200a2020 20206966 2028646f 7428642c . if (dot(d, │ │ │ │ + 0x00d0b770 20642920 213d2030 2e302920 0a202020 d) != 0.0) . │ │ │ │ + 0x00d0b780 20202072 65747572 6e206f72 6967696e return origin │ │ │ │ + 0x00d0b790 616c4178 6973506f 73202b20 6e6f726d alAxisPos + norm │ │ │ │ + 0x00d0b7a0 616c697a 65286429 202a2068 616c6657 alize(d) * halfW │ │ │ │ + 0x00d0b7b0 69647468 3b200a20 20202065 6c736520 idth; . else │ │ │ │ + 0x00d0b7c0 0a202020 20202072 65747572 6e206f72 . return or │ │ │ │ + 0x00d0b7d0 6967696e 616c4178 6973506f 733b200a iginalAxisPos; . │ │ │ │ + 0x00d0b7e0 20207d20 0a202076 6f696420 6d61696e } . void main │ │ │ │ + 0x00d0b7f0 2829200a 20207b20 0a202020 20666c6f () . { . flo │ │ │ │ + 0x00d0b800 61742069 734f7574 6c696e65 203d2073 at isOutline = s │ │ │ │ + 0x00d0b810 74657028 302e352c 20755f69 734f7574 tep(0.5, u_isOut │ │ │ │ + 0x00d0b820 6c696e65 50617373 293b200a 20202020 linePass); . │ │ │ │ + 0x00d0b830 666c6f61 74206e6f 744f7574 6c696e65 float notOutline │ │ │ │ + 0x00d0b840 203d2031 2e30202d 2069734f 75746c69 = 1.0 - isOutli │ │ │ │ + 0x00d0b850 6e653b20 0a202020 20666c6f 61742064 ne; . float d │ │ │ │ + 0x00d0b860 65707468 53686966 74203d20 42617365 epthShift = Base │ │ │ │ + 0x00d0b870 44657074 68536869 6674202a 2069734f DepthShift * isO │ │ │ │ + 0x00d0b880 75746c69 6e653b20 0a202020 20766563 utline; . vec │ │ │ │ + 0x00d0b890 3420706f 73203d20 28766563 3428615f 4 pos = (vec4(a_ │ │ │ │ + 0x00d0b8a0 706f7369 74696f6e 2e78797a 2c203129 position.xyz, 1) │ │ │ │ + 0x00d0b8b0 202b2076 65633428 302e302c 20302e30 + vec4(0.0, 0.0 │ │ │ │ + 0x00d0b8c0 2c206465 70746853 68696674 2c20302e , depthShift, 0. │ │ │ │ + 0x00d0b8d0 30292920 2a20755f 6d6f6465 6c566965 0)) * u_modelVie │ │ │ │ + 0x00d0b8e0 773b200a 20202020 76656334 20736869 w; . vec4 shi │ │ │ │ + 0x00d0b8f0 66746564 506f7320 3d207665 63342861 ftedPos = vec4(a │ │ │ │ + 0x00d0b900 5f6e6f72 6d616c2c 20302e30 2c20302e _normal, 0.0, 0. │ │ │ │ + 0x00d0b910 3029202b 20706f73 3b200a20 20202067 0) + pos; . g │ │ │ │ + 0x00d0b920 6c5f506f 73697469 6f6e203d 20617070 l_Position = app │ │ │ │ + 0x00d0b930 6c795069 766f7454 72616e73 666f726d lyPivotTransform │ │ │ │ + 0x00d0b940 28736869 66746564 506f7320 2a20755f (shiftedPos * u_ │ │ │ │ + 0x00d0b950 70726f6a 65637469 6f6e2c20 755f7069 projection, u_pi │ │ │ │ + 0x00d0b960 766f7454 72616e73 666f726d 2c20302e votTransform, 0. │ │ │ │ + 0x00d0b970 30293b20 0a202020 20766563 3220636f 0); . vec2 co │ │ │ │ + 0x00d0b980 6c6f7254 6578436f 6f726420 3d20615f lorTexCoord = a_ │ │ │ │ + 0x00d0b990 636f6c6f 72546578 436f6f72 64202a20 colorTexCoord * │ │ │ │ + 0x00d0b9a0 6e6f744f 75746c69 6e65202b 20615f6f notOutline + a_o │ │ │ │ + 0x00d0b9b0 75746c69 6e65436f 6c6f7254 6578436f utlineColorTexCo │ │ │ │ + 0x00d0b9c0 6f726420 2a206973 4f75746c 696e653b ord * isOutline; │ │ │ │ + 0x00d0b9d0 200a2020 23696664 65662045 4e41424c . #ifdef ENABL │ │ │ │ + 0x00d0b9e0 455f5654 46200a20 20202076 5f636f6c E_VTF . v_col │ │ │ │ + 0x00d0b9f0 6f72203d 20746578 74757265 28755f63 or = texture(u_c │ │ │ │ + 0x00d0ba00 6f6c6f72 5465782c 20636f6c 6f725465 olorTex, colorTe │ │ │ │ + 0x00d0ba10 78436f6f 7264293b 200a2020 23656c73 xCoord); . #els │ │ │ │ + 0x00d0ba20 65200a20 20202076 5f636f6c 6f725465 e . v_colorTe │ │ │ │ + 0x00d0ba30 78436f6f 7264203d 20636f6c 6f725465 xCoord = colorTe │ │ │ │ + 0x00d0ba40 78436f6f 72643b20 0a202023 656e6469 xCoord; . #endi │ │ │ │ + 0x00d0ba50 66200a20 20202076 5f6d6173 6b546578 f . v_maskTex │ │ │ │ + 0x00d0ba60 436f6f72 64203d20 615f6d61 736b5465 Coord = a_maskTe │ │ │ │ + 0x00d0ba70 78436f6f 72643b20 0a20207d 200a0000 xCoord; . } ... │ │ │ │ 0x00d0ba80 c072ccff ffffffff e072ccff ffffffff .r.......r...... │ │ │ │ 0x00d0ba90 0073ccff ffffffff 2073ccff ffffffff .s...... s...... │ │ │ │ 0x00d0baa0 4073ccff ffffffff 6073ccff ffffffff @s......`s...... │ │ │ │ 0x00d0bab0 8073ccff ffffffff a073ccff ffffffff .s.......s...... │ │ │ │ 0x00d0bac0 c073ccff ffffffff e073ccff ffffffff .s.......s...... │ │ │ │ 0x00d0bad0 0074ccff ffffffff 2074ccff ffffffff .t...... t...... │ │ │ │ 0x00d0bae0 6074ccff ffffffff 8074ccff ffffffff `t.......t...... │ │ │ ├── readelf --wide --decompress --hex-dump=.gnu_debuglink {} │ │ │ │ @@ -1,7 +1,7 @@ │ │ │ │ │ │ │ │ Hex dump of section '.gnu_debuglink': │ │ │ │ - 0x00000000 33336535 38386334 35636165 61613933 33e588c45caeaa93 │ │ │ │ - 0x00000010 63373235 36366636 36653637 39643832 c72566f66e679d82 │ │ │ │ - 0x00000020 38646431 65662e64 65627567 00000000 8dd1ef.debug.... │ │ │ │ - 0x00000030 2dba401c -.@. │ │ │ │ + 0x00000000 36306462 35636364 64616135 66366137 60db5ccddaa5f6a7 │ │ │ │ + 0x00000010 61366330 37353830 66393665 31356138 a6c07580f96e15a8 │ │ │ │ + 0x00000020 62396635 62322e64 65627567 00000000 b9f5b2.debug.... │ │ │ │ + 0x00000030 8be95a27 ..Z'